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/update/Makefile.in | 35 ++++--- tools/update/update.in | 216 +++++++++++++++++++++++++++++++++++++++++++ tools/update/word-replace.in | 89 ++++++++++++++++++ 3 files changed, 325 insertions(+), 15 deletions(-) create mode 100644 tools/update/update.in create mode 100644 tools/update/word-replace.in (limited to 'tools/update') 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