summaryrefslogtreecommitdiffstats
path: root/tools/update
diff options
context:
space:
mode:
Diffstat (limited to 'tools/update')
-rw-r--r--tools/update/Makefile.in35
-rw-r--r--tools/update/update.in216
-rw-r--r--tools/update/word-replace.in89
3 files changed, 325 insertions, 15 deletions
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 <<NO_MORE_HELP;
+word-replace
+
+ Replace *words* with patterns. Pattern file specifies which patterns
+ to replace on each line. All patterns are wrapped with perl \\b regexp
+ specifiers.
+
+Usage: $0 [-v] -p pattern-file files to replace
+
+ -v -- possibly more verbose
+ -p file -- pattern file
+ -h -- help
+
+ anything else == this help message
+
+Pattern file looks like this:
+
+# Example:
+# ignores all lines with beginning with # or not exactly 2 fields
+_Dorky_Name rtems_dorky_name # comments, and blank lines are cool
+_Dorky_Name2 rtems_dorky_name2 # comments, and blank lines are cool
+NO_MORE_HELP
+ exit 0;
+}
+
+$verbose = $opt_v;
+$pattern_file = $opt_p;
+
+# make standard outputs unbuffered (so the '.'s come out ok)
+$oldfh = select(STDERR); $| = 1; select($oldfh);
+$oldfh = select(STDOUT); $| = 1; select($oldfh);
+
+# pull in the patterns
+open(PATTERNS, "<$pattern_file") ||
+ die "could not open $pattern_file: $!, crapped out at";
+
+foreach (<PATTERNS>)
+{
+ 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 (<INFILE>)
+ {
+ 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;
+}
+