From 11cfb6f7f6326e79b4a930716c340b65d76d0683 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 14 Oct 1998 20:19:30 +0000 Subject: Patch from Ralf Corsepius : 1. Rtems contains some perl scripts that use hard-coded paths to /usr/bin/perl or /usr/local/bin/perl I have already fixed these problems by adding some checks to configure.in. While doing this, I also cleaned up some more autoconf related problems for generating shell scripts. This patch might seem a bit scary to you, but I am quite confident it won't break something (I've been testing it for almost a week now, however it might introduce typos for a limited number configurations I don't have access to - But it shouldn't be a problem for you to test them :-). I expect to get this finished tonight, hence you will very likely have the patch when you get up tomorrow. Changes: * Check for PERL and disable all PERL scripts if perl wasn't found. * Generate all KSHELL-scripts with autoconf instead of make-script * Automatic dependency handling for autoconf generated KSHELL or PERL scripts (make/rtems.cfg) Notes: * this patch contains new files and deletes some other files. * The patch is relative to rtems-4.0.0-beta4 with my previous rtems-rc-981014-1.diff patch applied. Testing: I tested it with sh-rtems and posix under linux. Now all targets which are touched by this patch and which are not used while building for sh-rtems and posix still need to be tested. AFAIS, only the sparc/erc32 BSP should be affected by this criterion. And if you like to, you should also consider testing it on a Cygwin32 and a Solaris host for one arbitrary BSP. --- tools/build/README | 8 -- tools/build/install-if-change.in | 142 +++++++++++++++++++++++++++++++ tools/build/lock-directory.in | 43 ++++++++++ tools/build/rcs-clean.in | 73 ++++++++++++++++ tools/build/scripts/Makefile.in | 16 ++-- tools/build/scripts/README | 8 -- tools/build/scripts/install-if-change.in | 142 +++++++++++++++++++++++++++++++ tools/build/scripts/lock-directory.in | 43 ++++++++++ tools/build/scripts/rcs-clean.in | 73 ++++++++++++++++ tools/build/scripts/unlock-directory.in | 41 +++++++++ tools/build/unlock-directory.in | 41 +++++++++ 11 files changed, 607 insertions(+), 23 deletions(-) create mode 100644 tools/build/install-if-change.in create mode 100644 tools/build/lock-directory.in create mode 100644 tools/build/rcs-clean.in create mode 100644 tools/build/scripts/install-if-change.in create mode 100644 tools/build/scripts/lock-directory.in create mode 100644 tools/build/scripts/rcs-clean.in create mode 100644 tools/build/scripts/unlock-directory.in create mode 100644 tools/build/unlock-directory.in (limited to 'tools/build') diff --git a/tools/build/README b/tools/build/README index 0436fc958d..0738a5830e 100644 --- a/tools/build/README +++ b/tools/build/README @@ -22,11 +22,3 @@ unlock-directory Useful to keep people from accidentally overwriting "released" trees if they get confused about which module they have loaded. - -rtems-glom - glom together all the rtems libraries in order to simplify - the link line used by applications. - Produces rtems.rel. - Not used by the RTEMS src tree at all. - Strictly optional. - diff --git a/tools/build/install-if-change.in b/tools/build/install-if-change.in new file mode 100644 index 0000000000..b2f3cb04bb --- /dev/null +++ b/tools/build/install-if-change.in @@ -0,0 +1,142 @@ +#!@KSH@ -p +# +# Either bash or ksh will be ok for this; requires (( )) arithmetic +# (-p above just says to not parse $ENV file; makes it faster for +# those of us who set $ENV) +# +# install files if they have changed by running 'cmp', then 'install' +# as necessary. +# +# Optionally, can append a suffix before last existing suffix (if any) +# +# NOTE +# We avoid using typical install(1M) programs since they have +# large variability across systems and we also need to support ou +# -V option. +# So we just copy and chmod by hand. +# +# $Id$ +# + +progname=`basename $0` +#progname=${0##*/} # fast basename hack for ksh, bash + +USAGE=\ +"usage: $progname [ -vmV ] file [ file ... ] dest-directory-or-file + -v -- verbose + -V suffix -- suffix to append to targets (before any . suffix) + eg: -V _g would change 'foo' to 'foo_g' and + 'libfoo.a' to 'libfoo_g.a' + -m mode -- mode for new file(s)" + +fatal() { + if [ "$1" ] + then + echo $* >&2 + fi + echo "$USAGE" 1>&2 + exit 1 +} + +# +# process the options +# + +verbose="" +suffix="" +mode="" + +while getopts vm:V: OPT +do + case "$OPT" in + v) + verbose="yes";; + V) + eval suffix=$OPTARG;; + m) + mode="$OPTARG";; + *) + fatal + esac +done + +shiftcount=`expr $OPTIND - 1` +shift $shiftcount + +args=$* + +# +# Separate source file(s) from dest directory or file +# + +files="" +dest="" +for d in $args +do + files="$files $dest" + dest=$d +done + +if [ ! "$files" ] || [ ! "$dest" ] +then + fatal "missing files or invalid destination" +fi + +# +# Process the arguments +# + +targets="" +for f in $files +do + # leaf=`basename $f` + leaf=${f##*/} # fast basename hack for ksh, bash + + target=$dest + if [ -d $dest ] + then + # if we were given a suffix, then add it as appropriate + if [ "$suffix" ] + then + case $f in + *.*) + # leaf=`echo $leaf | + # /bin/sed "s/\([~\.]*\)\.\(.*\)$/\1$suffix.\2/"` + # ksh,bash hack for above sed script + leaf=${leaf%%.*}$suffix.${leaf#*.} + + [ "$verbose" = "yes" ] && + echo "$progname: $f will be installed as $leaf" + ;; + *) + leaf=$leaf$suffix;; + esac + fi + target=$target/$leaf + fi + + [ ! -r $f ] && fatal "can not read $f" + + if cmp -s $f $target + then + [ "$verbose" = "yes" ] && echo "'$f' not newer than '$target'" + else + [ "$verbose" = "yes" ] && echo "rm -f $target" + rm -f $target + echo "cp -p $f $target" + cp -p $f $target || exit 1 + targets="$targets $target" # keep list for chmod below + fi +done + +if [ "$mode" -a "$targets" ] +then + [ "$verbose" = "yes" ] && echo "chmod $mode $targets" + chmod $mode $targets +fi + +exit 0 + +# Local Variables: *** +# mode:ksh *** +# End: *** diff --git a/tools/build/lock-directory.in b/tools/build/lock-directory.in new file mode 100644 index 0000000000..1c205cdec0 --- /dev/null +++ b/tools/build/lock-directory.in @@ -0,0 +1,43 @@ +#!@KSH@ +# +# $Id$ +# +# Make a directory write protected +# Used to write protect the install point after a build +# to prevent inadvertant overwriting. +# + +# is a particular command available on this machine? +# +cmd_avail() +{ + set -- `type $1 2>&1` + if [ "$2" = "not" -a "$3" = "found" ] || [ "$3" = "not" -a "$4" = "found" ] + then + return 1 + else + return 0 + fi +} + +lock_directory() { + l_dir=$1/. # get any symlink out of the way using '.' + if [ -d $l_dir ] + then + find $l_dir -type d -perm -0200 -print | $XARGS chmod -w + fi +} + +# Use gnu xargs if available; faster, more reliable in general +XARGS=xargs +cmd_avail gxargs && XARGS=gxargs + +for dir +do + lock_directory $dir +done + +# Local Variables: *** +# mode:ksh *** +# End: *** + diff --git a/tools/build/rcs-clean.in b/tools/build/rcs-clean.in new file mode 100644 index 0000000000..83fed05128 --- /dev/null +++ b/tools/build/rcs-clean.in @@ -0,0 +1,73 @@ +#!@KSH@ -p +# +# $Id$ +# +# Delete all files from the current directory that can be recreated +# via RCS 'co' commonds +# Used by 'make clobber' +# + +progname=${0##*/} # fast basename hack for ksh, bash + +USAGE=\ +"usage: $progname [ -v ]" + +fatal() { + if [ "$1" ] + then + echo $* >&2 + fi + echo "$USAGE" 1>&2 + exit 1 +} + +# +# process the options +# + +verbose="" + +while getopts v OPT +do + case "$OPT" in + v) + verbose="yes";; + *) + fatal + esac +done + +let $((shiftcount = $OPTIND - 1)) +shift $shiftcount + +args=$* +[ "$args" ] && fatal + +[ -d RCS/. ] || exit 0 + +# there is probably a better way to do this + +rcs_files=`echo RCS/*,v | sed -e 's?RCS/??g' -e's/,v//g'` + +kills="" +for f in $rcs_files +do + # build list of all files in RCS/*,v that are *not* locked + if [ -f $f ] && [ ! -w $f ] && [ -f RCS/$f,v ] + then + locked=`rlog -L -R $f` + [ "$locked" = "" ] && kills="$kills $f" + fi +done + +if [ "$kills" ] +then + [ "$verbose" ] && echo rm -f $kills + rm -f $kills +fi + +exit 0 + +# Local Variables: *** +# mode:ksh *** +# End: *** diff --git a/tools/build/scripts/Makefile.in b/tools/build/scripts/Makefile.in index afcc980db8..753bfafaa5 100644 --- a/tools/build/scripts/Makefile.in +++ b/tools/build/scripts/Makefile.in @@ -14,21 +14,23 @@ PROJECT_ROOT = @PROJECT_ROOT@ include $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg include $(RTEMS_ROOT)/make/leaf.cfg +include $(RTEMS_ROOT)/make/rtems.cfg DESTDIR=$(PROJECT_RELEASE)/build-tools -PGMS=install-if-change rcs-clean lock-directory unlock-directory \ - search-id.sh +BUILD_PGMS=install-if-change rcs-clean lock-directory unlock-directory +PGMS = $(BUILD_PGMS) search-id.sh -INSTALLED=$(PGMS:%=$(DESTDIR)/%) +CLEAN_ADDITIONS += $(BUILD_PGMS) + +INSTALLED_PGMS=$(PGMS:%=$(DESTDIR)/%) all: $(DESTDIR) $(PGMS) install $(DESTDIR): @INSTALL@ $(INSTDIRFLAGS) $@ -install: $(INSTALLED) +$(INSTALLED_PGMS): $(PGMS) + @INSTALL@ $(INSTBINFLAGS) $^ $(DESTDIR) -# Install the program -$(DESTDIR)/%: % - $(make-script) +install: $(DESTDIR) $(INSTALLED_PGMS) diff --git a/tools/build/scripts/README b/tools/build/scripts/README index 0436fc958d..0738a5830e 100644 --- a/tools/build/scripts/README +++ b/tools/build/scripts/README @@ -22,11 +22,3 @@ unlock-directory Useful to keep people from accidentally overwriting "released" trees if they get confused about which module they have loaded. - -rtems-glom - glom together all the rtems libraries in order to simplify - the link line used by applications. - Produces rtems.rel. - Not used by the RTEMS src tree at all. - Strictly optional. - diff --git a/tools/build/scripts/install-if-change.in b/tools/build/scripts/install-if-change.in new file mode 100644 index 0000000000..b2f3cb04bb --- /dev/null +++ b/tools/build/scripts/install-if-change.in @@ -0,0 +1,142 @@ +#!@KSH@ -p +# +# Either bash or ksh will be ok for this; requires (( )) arithmetic +# (-p above just says to not parse $ENV file; makes it faster for +# those of us who set $ENV) +# +# install files if they have changed by running 'cmp', then 'install' +# as necessary. +# +# Optionally, can append a suffix before last existing suffix (if any) +# +# NOTE +# We avoid using typical install(1M) programs since they have +# large variability across systems and we also need to support ou +# -V option. +# So we just copy and chmod by hand. +# +# $Id$ +# + +progname=`basename $0` +#progname=${0##*/} # fast basename hack for ksh, bash + +USAGE=\ +"usage: $progname [ -vmV ] file [ file ... ] dest-directory-or-file + -v -- verbose + -V suffix -- suffix to append to targets (before any . suffix) + eg: -V _g would change 'foo' to 'foo_g' and + 'libfoo.a' to 'libfoo_g.a' + -m mode -- mode for new file(s)" + +fatal() { + if [ "$1" ] + then + echo $* >&2 + fi + echo "$USAGE" 1>&2 + exit 1 +} + +# +# process the options +# + +verbose="" +suffix="" +mode="" + +while getopts vm:V: OPT +do + case "$OPT" in + v) + verbose="yes";; + V) + eval suffix=$OPTARG;; + m) + mode="$OPTARG";; + *) + fatal + esac +done + +shiftcount=`expr $OPTIND - 1` +shift $shiftcount + +args=$* + +# +# Separate source file(s) from dest directory or file +# + +files="" +dest="" +for d in $args +do + files="$files $dest" + dest=$d +done + +if [ ! "$files" ] || [ ! "$dest" ] +then + fatal "missing files or invalid destination" +fi + +# +# Process the arguments +# + +targets="" +for f in $files +do + # leaf=`basename $f` + leaf=${f##*/} # fast basename hack for ksh, bash + + target=$dest + if [ -d $dest ] + then + # if we were given a suffix, then add it as appropriate + if [ "$suffix" ] + then + case $f in + *.*) + # leaf=`echo $leaf | + # /bin/sed "s/\([~\.]*\)\.\(.*\)$/\1$suffix.\2/"` + # ksh,bash hack for above sed script + leaf=${leaf%%.*}$suffix.${leaf#*.} + + [ "$verbose" = "yes" ] && + echo "$progname: $f will be installed as $leaf" + ;; + *) + leaf=$leaf$suffix;; + esac + fi + target=$target/$leaf + fi + + [ ! -r $f ] && fatal "can not read $f" + + if cmp -s $f $target + then + [ "$verbose" = "yes" ] && echo "'$f' not newer than '$target'" + else + [ "$verbose" = "yes" ] && echo "rm -f $target" + rm -f $target + echo "cp -p $f $target" + cp -p $f $target || exit 1 + targets="$targets $target" # keep list for chmod below + fi +done + +if [ "$mode" -a "$targets" ] +then + [ "$verbose" = "yes" ] && echo "chmod $mode $targets" + chmod $mode $targets +fi + +exit 0 + +# Local Variables: *** +# mode:ksh *** +# End: *** diff --git a/tools/build/scripts/lock-directory.in b/tools/build/scripts/lock-directory.in new file mode 100644 index 0000000000..1c205cdec0 --- /dev/null +++ b/tools/build/scripts/lock-directory.in @@ -0,0 +1,43 @@ +#!@KSH@ +# +# $Id$ +# +# Make a directory write protected +# Used to write protect the install point after a build +# to prevent inadvertant overwriting. +# + +# is a particular command available on this machine? +# +cmd_avail() +{ + set -- `type $1 2>&1` + if [ "$2" = "not" -a "$3" = "found" ] || [ "$3" = "not" -a "$4" = "found" ] + then + return 1 + else + return 0 + fi +} + +lock_directory() { + l_dir=$1/. # get any symlink out of the way using '.' + if [ -d $l_dir ] + then + find $l_dir -type d -perm -0200 -print | $XARGS chmod -w + fi +} + +# Use gnu xargs if available; faster, more reliable in general +XARGS=xargs +cmd_avail gxargs && XARGS=gxargs + +for dir +do + lock_directory $dir +done + +# Local Variables: *** +# mode:ksh *** +# End: *** + diff --git a/tools/build/scripts/rcs-clean.in b/tools/build/scripts/rcs-clean.in new file mode 100644 index 0000000000..83fed05128 --- /dev/null +++ b/tools/build/scripts/rcs-clean.in @@ -0,0 +1,73 @@ +#!@KSH@ -p +# +# $Id$ +# +# Delete all files from the current directory that can be recreated +# via RCS 'co' commonds +# Used by 'make clobber' +# + +progname=${0##*/} # fast basename hack for ksh, bash + +USAGE=\ +"usage: $progname [ -v ]" + +fatal() { + if [ "$1" ] + then + echo $* >&2 + fi + echo "$USAGE" 1>&2 + exit 1 +} + +# +# process the options +# + +verbose="" + +while getopts v OPT +do + case "$OPT" in + v) + verbose="yes";; + *) + fatal + esac +done + +let $((shiftcount = $OPTIND - 1)) +shift $shiftcount + +args=$* +[ "$args" ] && fatal + +[ -d RCS/. ] || exit 0 + +# there is probably a better way to do this + +rcs_files=`echo RCS/*,v | sed -e 's?RCS/??g' -e's/,v//g'` + +kills="" +for f in $rcs_files +do + # build list of all files in RCS/*,v that are *not* locked + if [ -f $f ] && [ ! -w $f ] && [ -f RCS/$f,v ] + then + locked=`rlog -L -R $f` + [ "$locked" = "" ] && kills="$kills $f" + fi +done + +if [ "$kills" ] +then + [ "$verbose" ] && echo rm -f $kills + rm -f $kills +fi + +exit 0 + +# Local Variables: *** +# mode:ksh *** +# End: *** diff --git a/tools/build/scripts/unlock-directory.in b/tools/build/scripts/unlock-directory.in new file mode 100644 index 0000000000..c63ceff881 --- /dev/null +++ b/tools/build/scripts/unlock-directory.in @@ -0,0 +1,41 @@ +#!@KSH@ +# +# $Id$ +# +# Unlock a directory processed by lock_directory +# + +# is a particular command available on this machine? +# +cmd_avail() +{ + set -- `type $1 2>&1` + if [ "$2" = "not" -a "$3" = "found" ] || [ "$3" = "not" -a "$4" = "found" ] + then + return 1 + else + return 0 + fi +} + +unlock_directory() { + ul_dir=$1/. # get any symlink out of the way using '.' + if [ -d $ul_dir ] + then + find $ul_dir -type d ! -perm -0222 -print | $XARGS -t chmod +w + fi +} + +# Use gnu xargs if available; faster, more reliable in general +XARGS=xargs +cmd_avail gxargs && XARGS=gxargs + +for dir +do + unlock_directory $dir +done + +# Local Variables: *** +# mode:ksh *** +# End: *** + diff --git a/tools/build/unlock-directory.in b/tools/build/unlock-directory.in new file mode 100644 index 0000000000..c63ceff881 --- /dev/null +++ b/tools/build/unlock-directory.in @@ -0,0 +1,41 @@ +#!@KSH@ +# +# $Id$ +# +# Unlock a directory processed by lock_directory +# + +# is a particular command available on this machine? +# +cmd_avail() +{ + set -- `type $1 2>&1` + if [ "$2" = "not" -a "$3" = "found" ] || [ "$3" = "not" -a "$4" = "found" ] + then + return 1 + else + return 0 + fi +} + +unlock_directory() { + ul_dir=$1/. # get any symlink out of the way using '.' + if [ -d $ul_dir ] + then + find $ul_dir -type d ! -perm -0222 -print | $XARGS -t chmod +w + fi +} + +# Use gnu xargs if available; faster, more reliable in general +XARGS=xargs +cmd_avail gxargs && XARGS=gxargs + +for dir +do + unlock_directory $dir +done + +# Local Variables: *** +# mode:ksh *** +# End: *** + -- cgit v1.2.3