#!@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: ***