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 ++++++ tools/cpu/generic/Makefile.in | 15 ++- tools/update/Makefile.in | 35 ++--- tools/update/update.in | 216 +++++++++++++++++++++++++++++++ tools/update/word-replace.in | 89 +++++++++++++ 15 files changed, 941 insertions(+), 44 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 create mode 100644 tools/update/update.in create mode 100644 tools/update/word-replace.in (limited to 'tools') 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: *** + diff --git a/tools/cpu/generic/Makefile.in b/tools/cpu/generic/Makefile.in index 4586a43b45..33c2fb81dd 100644 --- a/tools/cpu/generic/Makefile.in +++ b/tools/cpu/generic/Makefile.in @@ -14,20 +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)/bin -PGMS=size_rtems +BUILD_PGMS=size_rtems +PGMS=$(BUILD_PGMS) -INSTALLED=$(PGMS:%=$(DESTDIR)/%) +CLEAN_ADDITIONS += $(BUILD_PGMS) + +INSTALLED_PGMS=$(PGMS:%=$(DESTDIR)/%) all: $(DESTDIR) $(PGMS) install $(DESTDIR): @INSTALL@ $(INSTDIRFLAGS) $@ -install: $(INSTALLED) - -# Install the program -$(DESTDIR)/%: % +$(INSTALLED_PGMS): $(PGMS) @INSTALL@ $(INSTBINFLAGS) $^ $@ + +install: $(DESTDIR) $(INSTALLED_PGMS) diff --git a/tools/update/Makefile.in b/tools/update/Makefile.in index 142bece1f1..45e3e63515 100644 --- a/tools/update/Makefile.in +++ b/tools/update/Makefile.in @@ -1,9 +1,6 @@ # # $Id$ # -# NOTE: of course we can't use any of these tools -# in this Makefile. Most notably: install-if-change -# @SET_MAKE@ srcdir = @srcdir@ @@ -13,26 +10,34 @@ 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)/update-tools -PGMS=update word-replace -MISC_SUPPORT=310_to_320_list +BUILD_PGMS = update +ifneq (@PERL@,) +BUILD_PGMS += word-replace +endif -INSTALL_LIST= $(PGMS) $(MISC_SUPPORT) +PGMS = $(BUILD_PGMS) -INSTALLED=$(INSTALL_LIST:%=$(DESTDIR)/%) +CLEAN_ADDITIONS += $(BUILD_PGMS) + +MISC_SUPPORT=310_to_320_list -all: $(DESTDIR) +INSTALLED_PGMS=$(PGMS:%=$(DESTDIR)/%) +INSTALLED_DATA=$(MISC_SUPPORT:%=$(DESTDIR)/%) + +all: $(PGMS) $(DESTDIR): @INSTALL@ $(INSTDIRFLAGS) $@ -install: $(INSTALLED) +$(INSTALLED_PGMS): $(PGMS) + @INSTALL@ $(INSTBINFLAGS) $^ $(DESTDIR) + +$(INSTALLED_DATA): $(MISC_SUPPORT) + @INSTALL@ $(INSTDATAFLAGS) $^ $(DESTDIR) + +install: $(DESTDIR) $(INSTALLED_PGMS) $(INSTALLED_DATA) -# Install the program -# FIXME: This isn't correct -$(DESTDIR)/%: % - $(make-script) - @INSTALL@ $(INSTBINFLAGS) $(PERL_PGMS) ${DESTDIR} - @INSTALL@ $(INSTDATAFLAGS) $(MISC_SUPPORT) ${DESTDIR} diff --git a/tools/update/update.in b/tools/update/update.in new file mode 100644 index 0000000000..cdcb07655e --- /dev/null +++ b/tools/update/update.in @@ -0,0 +1,216 @@ +#!@KSH@ -p +# +# $Id$ +# +# Either bash or ksh will be ok for this; requires 'test -ot' +# (-p above just says to not parse $ENV file; makes it faster for +# those of us who set $ENV) +# +# Update RTEMS applications for the API changes from 3.1.0 to 3.2.0 +# +# NOTE +# +# This is potentially a very dangerous program. + +# progname=`basename $0` +progname=${0##*/} # fast basename hack for ksh, bash + +USAGE=\ +" +usage: $progname [ -vs ] [ -b base_directory ] [-p file] [-f] [files...] + -v -- verbose + -p -- file with replacement instructions + -s -- skip prompt for backup verification + -f -- do files at end of line + +base_directory is the root directory of the source code to update. It +defaults to the current directory. + +This program updates C, H, and .inl files. +" + +fatal() { + if [ "$1" ] + then + echo >&2 + echo $* >&2 + echo >&2 + fi + echo "$USAGE" 1>&2 + exit 1 +} + +# +# KLUDGE to figure out at runtime how to echo a line without a +# newline. +# +count=`echo "\\c" | wc -c` +if [ ${count} -ne 0 ] ; then + EARG="-n" + EOL="" +else + EARG="" + EOL="\\c" +fi + +# +# Function to make sure they do a backup +# + +WARNING=\ +" + +******************************************************************************* +******************************************************************************* +******************************************************************************* +**** **** +**** WARNING!!! WARNING!!! WARNING!!! **** +**** **** +**** ALL SOURCE CODE SHOULD BE BACKED UP BEFORE RUNNING THIS PROGRAM!! **** +**** **** +**** WARNING!!! WARNING!!! WARNING!!! **** +**** **** +******************************************************************************* +******************************************************************************* +******************************************************************************* + +" + +verify_backup() +{ + echo "$WARNING" + continue="yes" + while [ $continue = "yes" ] + do +echo ${EARG} "Do you wish to update the source tree at this time [y|n]? " ${EOL} + read answer + case $answer in + [yY]*) + continue="no" + ;; + [nN]*) + echo + echo "Exitting at user request" + echo + exit 0 + ;; + esac + done +} + +# +# Default tools to use... +# +# NOTE: The GNU versions of both of these are faster. +# +find_prog=find +xargs_prog=xargs + +# +# process the options +# + +verbose="" +suffix="" +mode="" +base_directory=. +do_files="no" +do_prompt="yes" +replacement_file="${RTEMS_ROOT}/update-tools/310_to_320_list" + +while getopts sfp:b:v OPT +do + case "$OPT" in + v) + verbose="yes";; + s) + do_prompt="no";; + b) + base_directory=${OPTARG};; + p) + replacement_file=${OPTARG};; + f) + do_files="yes";; + *) + fatal + esac +done + +let $((shiftcount = $OPTIND - 1)) +shift $shiftcount + +args=$* + +# +# Make sure they have done a backup +# + +if [ ${do_prompt} = "yes" ] +then + verify_backup +fi + +# +# Validate the base directory +# + +if [ ! -d $base_directory ] +then + fatal "${base_directory} does not exist" +fi + +# +# Validate the replacement file +# + +if [ ! -r $replacement_file ] +then + fatal "${replacement_file} does not exist or is not readable" +fi + + +# +# Verify enough of the RTEMS environment variables are set +# + +if [ ! -d "${RTEMS_ROOT}" ] +then + fatal "RTEMS_ROOT environment variable is not initialized" +fi + +# +# Update the files +# + +generate_list() +{ + if [ ${do_files} = "yes" ] + then + for i in $args + do + echo $i + done + else + ${find_prog} ${base_directory} \( -name "*.[ch]" -o -name "*.inl" \) -print + fi +} + +generate_list | ${xargs_prog} | + while read line + do + ${RTEMS_ROOT}/update-tools/word-replace -p ${replacement_file} ${line} + if [ $? -ne 0 ] + then + exit 1 + fi + for file in ${line} + do + mv ${file}.fixed ${file} + done + done + +exit 0 + +# Local Variables: *** +# mode:ksh *** +# End: *** diff --git a/tools/update/word-replace.in b/tools/update/word-replace.in new file mode 100644 index 0000000000..24c7c3a546 --- /dev/null +++ b/tools/update/word-replace.in @@ -0,0 +1,89 @@ +#!@PERL@ +# +# $Id$ +# + +eval "exec @PERL@ -S $0 $*" + if $running_under_some_shell; + +require 'getopts.pl'; +&Getopts("p:vh"); # help, pattern file, verbose, + +if ($opt_h || ! $opt_p) { + print STDERR <) +{ + chop; + s/#.*//; + next if /^$/; + ($orig, $new, $junk, @rest) = split; + next if ( ! $orig || ! $new || $junk); # <2 or >2 patterns + die "pattern appears 2x: '$orig' in '$pattern_file'--" if defined($patterns{$orig}); + $patterns{$orig} = $new; +} +close PATTERNS; + +# walk thru each line in each file +foreach $file (@ARGV) +{ + print "$file\t"; + + open (INFILE, "<$file") || + die "could not open input file $file: $!"; + + $outfile = $file . ".fixed";; + open (OUTFILE, ">$outfile") || + die "could not open output file $outfile: $!"; + + while () + { + study; # maybe make s/// faster + foreach $key (keys %patterns) + { + if ( s/\b$key\b/$patterns{$key}/ge ) + { + print "."; + } + } + print OUTFILE $_; + } + print "\n"; + close INFILE; + close OUTFILE; +} + -- cgit v1.2.3