forked from Imagelibrary/rtems
Patch from Ralf Corsepius <corsepiu@faw.uni-ulm.de>:
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.
This commit is contained in:
@@ -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.
|
||||
|
||||
|
||||
142
c/build-tools/install-if-change.in
Normal file
142
c/build-tools/install-if-change.in
Normal file
@@ -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: ***
|
||||
43
c/build-tools/lock-directory.in
Normal file
43
c/build-tools/lock-directory.in
Normal file
@@ -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: ***
|
||||
|
||||
73
c/build-tools/rcs-clean.in
Normal file
73
c/build-tools/rcs-clean.in
Normal file
@@ -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: ***
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
142
c/build-tools/scripts/install-if-change.in
Normal file
142
c/build-tools/scripts/install-if-change.in
Normal file
@@ -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: ***
|
||||
43
c/build-tools/scripts/lock-directory.in
Normal file
43
c/build-tools/scripts/lock-directory.in
Normal file
@@ -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: ***
|
||||
|
||||
73
c/build-tools/scripts/rcs-clean.in
Normal file
73
c/build-tools/scripts/rcs-clean.in
Normal file
@@ -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: ***
|
||||
41
c/build-tools/scripts/unlock-directory.in
Normal file
41
c/build-tools/scripts/unlock-directory.in
Normal file
@@ -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: ***
|
||||
|
||||
41
c/build-tools/unlock-directory.in
Normal file
41
c/build-tools/unlock-directory.in
Normal file
@@ -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: ***
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -10,17 +10,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)/tests
|
||||
|
||||
PGMS=runtest
|
||||
BUILD_PGMS = runtest
|
||||
PGMS = $(BUILD_PGMS)
|
||||
|
||||
INSTALLED=$(PGMS:%=$(DESTDIR)/%)
|
||||
CLEAN_ADDITIONS += $(BUILD_PGMS)
|
||||
|
||||
INSTALLED_PGMS=$(PGMS:%=$(DESTDIR)/%)
|
||||
|
||||
all: $(DESTDIR) $(PGMS) install
|
||||
|
||||
install: $(INSTALLED)
|
||||
$(DESTDIR):
|
||||
@INSTALL@ $(INSTDIRFLAGS) $@
|
||||
|
||||
# Install the program
|
||||
$(DESTDIR)/%: %
|
||||
$(make-script)
|
||||
$(INSTALLED_PGMS): $(PGMS)
|
||||
@INSTALL@ $(INSTBINFLAGS) $^ $(DESTDIR)
|
||||
|
||||
install: $(DESTDIR) $(INSTALLED_PGMS)
|
||||
|
||||
307
c/src/lib/libbsp/sparc/erc32/tools/runtest.in
Normal file
307
c/src/lib/libbsp/sparc/erc32/tools/runtest.in
Normal file
@@ -0,0 +1,307 @@
|
||||
#!@KSH@ -p
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Run rtems tests on the hppa simulator
|
||||
# This program generates a simulator script to run each test
|
||||
# Typically the test is then run, although it can be generated
|
||||
# and left as a file using -s
|
||||
#
|
||||
|
||||
# progname=`basename $0`
|
||||
progname=${0##*/} # fast basename hack for ksh, bash
|
||||
|
||||
USAGE=\
|
||||
"usage: $progname [ -opts ] test [ test ... ]
|
||||
-o options -- specify options to be passed to simulator
|
||||
-v -- verbose
|
||||
-s -- generate script file (as 'test'.ss) and exit
|
||||
-l logdir -- specify log directory (default is 'logdir')
|
||||
|
||||
Specify test as 'test' or 'test.exe'.
|
||||
All multiprocessing tests *must* be specified simply as 'mp01', etc.
|
||||
"
|
||||
|
||||
# export everything
|
||||
set -a
|
||||
|
||||
# log an error to stderr
|
||||
prerr()
|
||||
{
|
||||
echo "$*" >&2
|
||||
}
|
||||
|
||||
fatal() {
|
||||
[ "$1" ] && prerr $*
|
||||
prerr "$USAGE"
|
||||
exit 1
|
||||
}
|
||||
|
||||
warn() {
|
||||
[ "$1" ] && prerr $*
|
||||
}
|
||||
|
||||
# print args, 1 per line
|
||||
ml_echo()
|
||||
{
|
||||
for l
|
||||
do
|
||||
echo "$l"
|
||||
done
|
||||
}
|
||||
|
||||
# run at normal and signalled exit
|
||||
test_exit()
|
||||
{
|
||||
exit_code=$1
|
||||
|
||||
rm -f ${statfile}* ${scriptfile}* ${logfile}.tmp*
|
||||
[ "$sim_pid" ] && kill -9 $sim_pid
|
||||
|
||||
exit $exit_code
|
||||
}
|
||||
|
||||
#
|
||||
# process the options
|
||||
#
|
||||
# defaults for getopt vars
|
||||
#
|
||||
# max_run_time is defaulted to 5 minutes
|
||||
#
|
||||
|
||||
verbose=""
|
||||
extra_options=""
|
||||
script_and_exit=""
|
||||
stdio_setup="yes"
|
||||
run_to_completion="yes"
|
||||
logdir=log
|
||||
update_on_tick="no"
|
||||
max_run_time=$((5 * 60))
|
||||
using_print_buffer="yes"
|
||||
|
||||
while getopts vhr12o:c:sl:t OPT
|
||||
do
|
||||
case "$OPT" in
|
||||
v)
|
||||
verbose="yes";;
|
||||
s)
|
||||
script_and_exit="yes"
|
||||
run_to_completion="no"
|
||||
stdio_setup="no";;
|
||||
l)
|
||||
logdir="$OPTARG";;
|
||||
o)
|
||||
extra_options="$OPTARG";;
|
||||
*)
|
||||
fatal;;
|
||||
esac
|
||||
done
|
||||
|
||||
let $((shiftcount = $OPTIND - 1))
|
||||
shift $shiftcount
|
||||
|
||||
args=$*
|
||||
|
||||
#
|
||||
# Run the tests
|
||||
#
|
||||
|
||||
tests="$args"
|
||||
if [ ! "$tests" ]
|
||||
then
|
||||
set -- `echo *.exe`
|
||||
tests="$*"
|
||||
fi
|
||||
|
||||
[ -d $logdir ] ||
|
||||
mkdir $logdir || fatal "could not create log directory ($logdir)"
|
||||
|
||||
cpus=1
|
||||
|
||||
# where the tmp files go
|
||||
statfile=/tmp/stats$$
|
||||
scriptfile=/tmp/script$$
|
||||
|
||||
trap "test_exit" 1 2 3 13 14 15
|
||||
|
||||
for tfile in $tests
|
||||
do
|
||||
|
||||
tname=`basename $tfile .exe`
|
||||
TEST_TYPE="single"
|
||||
|
||||
case $tname in
|
||||
monitor)
|
||||
if [ $run_to_completion = "yes" ]
|
||||
then
|
||||
warn "Skipping $tname; it is interactive"
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
*-node2*)
|
||||
fatal "MP tests not supported"
|
||||
warn "Skipping $tname; 'runtest' runs both nodes when for *-node1"
|
||||
continue;;
|
||||
*-node1*)
|
||||
fatal "MP tests not supported"
|
||||
warn "Running both nodes associated with $tname"
|
||||
tname=`echo $tname | sed 's/-node.*//'`
|
||||
TEST_TYPE="mp"
|
||||
;;
|
||||
stackchk*|spfatal*|malloctest*|termio*)
|
||||
warn "Skipping $tname; it locks up or takes a VERY long time to run"
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
# Change the title bar to indicate which test we are running
|
||||
# The simulator screen doesn't provide any indication
|
||||
|
||||
logfile=$logdir/$tname
|
||||
infofile=$logfile.info
|
||||
|
||||
rm -f ${statfile}* ${scriptfile}* ${logfile}.tmp*
|
||||
|
||||
date=`date`
|
||||
echo "Starting $tname at $date"
|
||||
|
||||
# Generate a script file to get the work done.
|
||||
# The script file must do the following:
|
||||
#
|
||||
# load the program (programs if MP test)
|
||||
# arrange for capture of output
|
||||
# run the program
|
||||
# produce statistics
|
||||
|
||||
{
|
||||
case $TEST_TYPE in
|
||||
"mp")
|
||||
fatal "MP tests not supported"
|
||||
;;
|
||||
|
||||
# All other tests (single-processor)
|
||||
*)
|
||||
echo "load $tfile"
|
||||
echo "go 0x02000000"
|
||||
echo "perf"
|
||||
echo "quit"
|
||||
;;
|
||||
esac
|
||||
|
||||
} > ${scriptfile}
|
||||
|
||||
if [ "$script_and_exit" = "yes" ]
|
||||
then
|
||||
mv ${scriptfile} $tname.ss
|
||||
warn "script left in $tname.ss"
|
||||
test_exit 0
|
||||
fi
|
||||
|
||||
# Spin off the simulator in the background
|
||||
sparc-rtems-sis $extra_options -c ${scriptfile} >${logfile}.tmp &
|
||||
sim_pid=$!
|
||||
|
||||
# Make sure it won't run forever...
|
||||
{
|
||||
time_run=0
|
||||
while [ $time_run -lt $max_run_time ]
|
||||
do
|
||||
# sleep 10s at a time waiting for job to finish or timer to expire
|
||||
# if job has exited, then we exit, too.
|
||||
sleep 10
|
||||
if kill -0 $sim_pid 2>/dev/null
|
||||
then
|
||||
time_run=$((time_run + 10))
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
|
||||
kill -2 $sim_pid 2>/dev/null
|
||||
{ sleep 5; kill -9 $sim_pid 2>/dev/null; } &
|
||||
} &
|
||||
|
||||
wait $sim_pid
|
||||
status=$?
|
||||
if [ $status -ne 0 ]
|
||||
then
|
||||
ran_too_long="yes"
|
||||
else
|
||||
ran_too_long="no"
|
||||
fi
|
||||
|
||||
sim_pid=""
|
||||
|
||||
# fix up the printf output from the test
|
||||
case $TEST_TYPE in
|
||||
mp)
|
||||
fatal "MP not supported"
|
||||
;;
|
||||
*)
|
||||
output_it=1
|
||||
sed -e '1,12d' \
|
||||
-e 's/
|
||||
//' -e '/^$/d' < ${logfile}.tmp |
|
||||
while read line
|
||||
do
|
||||
if [ $output_it -eq 1 ] ; then
|
||||
if [ "$line" = "sis> perf" ] ; then
|
||||
output_it=0
|
||||
else
|
||||
echo "$line"
|
||||
fi
|
||||
fi
|
||||
done > ${logfile}_1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Create the info files
|
||||
for cpu in $cpus
|
||||
do
|
||||
{
|
||||
echo "$date"
|
||||
echo "Test run on: `uname -n` ( `uname -a` )"
|
||||
|
||||
output_it=0
|
||||
sed -e 's/
|
||||
//' < ${logfile}.tmp |
|
||||
while read line
|
||||
do
|
||||
if [ $output_it -eq 1 ] ; then
|
||||
if [ "$line" = "sis> quit" ] ; then
|
||||
output_it=0
|
||||
else
|
||||
echo "$line"
|
||||
fi
|
||||
else
|
||||
if [ "$line" = "sis> perf" ] ; then
|
||||
output_it=1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
if [ "$ran_too_long" = "yes" ]
|
||||
then
|
||||
echo "Test did NOT finish normally; killed after $max_run_time seconds"
|
||||
fi
|
||||
|
||||
echo
|
||||
date;
|
||||
} > ${infofile}_$cpu
|
||||
done
|
||||
|
||||
rm -f ${logfile}.tmp*
|
||||
|
||||
if [ "$cpus" = "1" ]
|
||||
then
|
||||
mv ${infofile}_1 ${infofile}
|
||||
mv ${logfile}_1 ${logfile}
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
test_exit 0
|
||||
|
||||
# Local Variables: ***
|
||||
# mode:ksh ***
|
||||
@@ -10,22 +10,28 @@ 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)/tests
|
||||
|
||||
# We use the generic difftest
|
||||
PGMS=runtest looptest semdump shmdump
|
||||
BUILD_PGMS=runtest looptest
|
||||
ifneq (@PERL@,)
|
||||
BUILD_PGMS+=semdump shmdump
|
||||
endif
|
||||
|
||||
INSTALLED=$(PGMS:%=$(DESTDIR)/%)
|
||||
PGMS = $(BUILD_PGMS)
|
||||
|
||||
CLEAN_ADDITIONS += $(BUILD_PGMS)
|
||||
|
||||
INSTALLED_PGMS=$(PGMS:%=$(DESTDIR)/%)
|
||||
|
||||
all: $(DESTDIR) $(PGMS) install
|
||||
|
||||
install: $(INSTALLED)
|
||||
$(DESTDIR):
|
||||
@INSTALL@ $(INSTDIRFLAGS) $@
|
||||
|
||||
# Install the program, replacing #!KSHELL with $(KSH)
|
||||
# and first line #!SHELL with $(SHELL)
|
||||
$(DESTDIR)/%: %
|
||||
-$(RM) $@.old
|
||||
-$(MV) $@ $@.old >/dev/null 2>&1
|
||||
$(SED) -e '1,1s?^#!KSHELL?#!$(KSH)?' -e '1,1s?^#!SHELL?#!$(SHELL)?' < $< > $@
|
||||
$(CHMOD) 0555 $@
|
||||
$(INSTALLED_PGMS): $(PGMS)
|
||||
@INSTALL@ $(INSTBINFLAGS) $^ $(DESTDIR)
|
||||
|
||||
install: $(DESTDIR) $(INSTALLED_PGMS)
|
||||
|
||||
93
c/src/lib/libbsp/unix/posix/tools/looptest.in
Normal file
93
c/src/lib/libbsp/unix/posix/tools/looptest.in
Normal file
@@ -0,0 +1,93 @@
|
||||
#!@KSH@ -p
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
# progname=`basename $0`
|
||||
progname=${0##*/} # fast basename hack for ksh, bash
|
||||
|
||||
# must be uppercase hex; dc is feeble minded
|
||||
clicks_per_tick="1"
|
||||
# default is 0x3
|
||||
hexbump=1
|
||||
iterations=10
|
||||
|
||||
USAGE=\
|
||||
"usage: $progname [ -opts ] file [ file ... ]
|
||||
-o options -- specify options to be passed to runtest
|
||||
-c clicks -- specify (hex) value for clicks / tick (default $clicks_per_tick)
|
||||
-n iterations -- num times to loop thru specified tests (default $iterations)
|
||||
-b hexbump -- increment clicks-per-ticks this much each loop (default $hexbump)
|
||||
-v -- verbose"
|
||||
|
||||
# log an error to stderr
|
||||
prerr()
|
||||
{
|
||||
echo "$*" >&2
|
||||
}
|
||||
|
||||
fatal() {
|
||||
[ "$1" ] && prerr $*
|
||||
prerr "$USAGE"
|
||||
exit 1
|
||||
}
|
||||
|
||||
warn() {
|
||||
[ "$1" ] && prerr $*
|
||||
}
|
||||
|
||||
#
|
||||
# process the options
|
||||
#
|
||||
# defaults for getopt vars
|
||||
#
|
||||
|
||||
verbose=""
|
||||
extra_options=""
|
||||
|
||||
while getopts vo:c:n:b: OPT
|
||||
do
|
||||
case "$OPT" in
|
||||
v)
|
||||
verbose="yes";;
|
||||
o)
|
||||
extra_options="$OPTARG";;
|
||||
c)
|
||||
clicks_per_ticks="$OPTARG";;
|
||||
n)
|
||||
iterations="$OPTARG";;
|
||||
b)
|
||||
hexbump="$OPTARG";;
|
||||
*)
|
||||
fatal;;
|
||||
esac
|
||||
done
|
||||
((shiftcount = $OPTIND - 1))
|
||||
shift $shiftcount
|
||||
|
||||
args=$*
|
||||
|
||||
#
|
||||
# Run the tests
|
||||
# After each run, rename 'log' to log.$clicks_per_tick
|
||||
#
|
||||
|
||||
tests="$args"
|
||||
|
||||
while [ $iterations -gt 0 ]
|
||||
do
|
||||
./runtest $extra_options -c $clicks_per_tick $tests
|
||||
rm -rf log.$clicks_per_tick.OLD
|
||||
[ -d log.$clicks_per_tick ] && mv log.$clicks_per_tick log.$clicks_per_tick.OLD
|
||||
mv log log.$clicks_per_tick
|
||||
|
||||
((iterations = $iterations - 1))
|
||||
clicks_per_tick=`echo 16 o 16 i $clicks_per_tick $hexbump + p q | dc`
|
||||
done
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables: ***
|
||||
# mode:ksh ***
|
||||
# End: ***
|
||||
|
||||
255
c/src/lib/libbsp/unix/posix/tools/runtest.in
Normal file
255
c/src/lib/libbsp/unix/posix/tools/runtest.in
Normal file
@@ -0,0 +1,255 @@
|
||||
#!@KSH@ -p
|
||||
#
|
||||
# Run rtems tests on a POSIX-ish UNIX
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
trap "test_exit 1" 1 2 3 13 14 15
|
||||
|
||||
trap "test_exit 1" 1 2 3 13 14 15
|
||||
|
||||
# progname=`basename $0`
|
||||
progname=${0##*/} # fast basename hack for ksh, bash
|
||||
|
||||
USAGE=\
|
||||
"usage: $progname [ -opts ] test [ test ... ]
|
||||
-c clicks -- specify (hex) value for clicks / tick
|
||||
-v -- verbose
|
||||
-l logdir -- specify log directory (default is 'logdir')
|
||||
|
||||
Specify test as 'test' or 'test.exe'.
|
||||
All multiprocessing tests *must* be specified simply as 'mp01', etc.
|
||||
"
|
||||
|
||||
# export everything
|
||||
set -a
|
||||
|
||||
# log an error to stderr
|
||||
prerr()
|
||||
{
|
||||
echo "$*" >&2
|
||||
}
|
||||
|
||||
fatal() {
|
||||
[ "$1" ] && prerr $*
|
||||
prerr "$USAGE"
|
||||
exit 1
|
||||
}
|
||||
|
||||
warn() {
|
||||
[ "$1" ] && prerr $*
|
||||
}
|
||||
|
||||
# print args, 1 per line
|
||||
ml_echo()
|
||||
{
|
||||
for l
|
||||
do
|
||||
echo "$l"
|
||||
done
|
||||
}
|
||||
|
||||
killem()
|
||||
{
|
||||
kill -9 $pid $pid1 $pid2 2> /dev/null
|
||||
}
|
||||
|
||||
|
||||
killem()
|
||||
{
|
||||
kill -9 $pid $pid1 $pid2 2> /dev/null
|
||||
}
|
||||
|
||||
|
||||
test_exit()
|
||||
{
|
||||
exit_code=$1
|
||||
|
||||
killem
|
||||
|
||||
killem
|
||||
|
||||
rm -f ${logfile}.tmp*
|
||||
|
||||
exit $exit_code
|
||||
}
|
||||
|
||||
#
|
||||
# process the options
|
||||
#
|
||||
# defaults for getopt vars
|
||||
#
|
||||
|
||||
verbose=""
|
||||
extra_options=""
|
||||
clicks_per_tick=""
|
||||
logdir=log
|
||||
# how long can we run; rtems tests might run 300 seconds
|
||||
max_run_time=400
|
||||
run_to_completion="yes"
|
||||
|
||||
while getopts vo:c:l: OPT
|
||||
do
|
||||
case "$OPT" in
|
||||
v)
|
||||
verbose="yes";;
|
||||
l)
|
||||
logdir="$OPTARG";;
|
||||
o)
|
||||
extra_options="$OPTARG";;
|
||||
c)
|
||||
clicks_per_tick="$OPTARG";;
|
||||
*)
|
||||
fatal;;
|
||||
esac
|
||||
done
|
||||
|
||||
let $((shiftcount = $OPTIND - 1))
|
||||
shift $shiftcount
|
||||
|
||||
args=$*
|
||||
|
||||
#
|
||||
# Run the tests
|
||||
#
|
||||
|
||||
tests="$args"
|
||||
if [ ! "$tests" ]
|
||||
then
|
||||
set -- `echo *.exe`
|
||||
tests="$*"
|
||||
fi
|
||||
|
||||
[ -d $logdir ] || mkdir $logdir || fatal "could not create log directory ($logdir)"
|
||||
|
||||
for tfile in $tests
|
||||
do
|
||||
|
||||
tname=`echo $tfile | sed -e 's/\.exe$//'`
|
||||
tname=`basename $tname`
|
||||
|
||||
TEST_TYPE="single"
|
||||
|
||||
case $tname in
|
||||
monitor)
|
||||
if [ $run_to_completion = "yes" ]
|
||||
then
|
||||
warn "Skipping $tname; it is interactive"
|
||||
continue
|
||||
fi
|
||||
;;
|
||||
*-node2*)
|
||||
warn "Skipping $tname; 'runtest' runs both nodes when for *-node1"
|
||||
continue;;
|
||||
*-node1*)
|
||||
tname=`echo $tname | sed 's/-node.*//'`
|
||||
warn "Running both nodes associated with $tname"
|
||||
TEST_TYPE="mp"
|
||||
;;
|
||||
stackchk*|spfatal*|malloctest*|termio*)
|
||||
warn "Skipping $tname; it locks up or takes a VERY long time to run"
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ $TEST_TYPE = "mp" ]
|
||||
then
|
||||
logfile1=$logdir/${tname}_1
|
||||
infofile1=$logfile1.info
|
||||
logfile2=$logdir/${tname}_2
|
||||
infofile2=$logfile2.info
|
||||
|
||||
rm -f ${logfile1}
|
||||
rm -f ${logfile2}
|
||||
|
||||
date=`date`
|
||||
echo "Starting $tname at $date"
|
||||
|
||||
./${tname}-node1.exe > $logfile1 2>&1 &
|
||||
pid1=$!
|
||||
./${tname}-node2.exe > $logfile2 2>&1 &
|
||||
pid2=$!
|
||||
|
||||
# Wait for both cpu's to complete, ensuring they don't run forever...
|
||||
time_run=0
|
||||
while [ $time_run -lt $max_run_time ]
|
||||
do
|
||||
# sleep 5s at a time waiting for jobs to finish or timer to expire
|
||||
# if job has exited, then we exit, too.
|
||||
sleep 5
|
||||
kill -0 $pid1 2> /dev/null
|
||||
running1=$?
|
||||
kill -0 $pid2 2> /dev/null
|
||||
running2=$?
|
||||
if [ $running1 -eq 0 ] && [ $running2 -eq 0 ] # both still running
|
||||
then
|
||||
time_run=$((time_run + 5))
|
||||
if [ $time_run -ge $max_run_time ]
|
||||
then
|
||||
echo "$tname ran too long; killing it"
|
||||
ran_too_long="yes"
|
||||
fi
|
||||
else
|
||||
ran_too_long="no"
|
||||
# if one is still running, have to kill them
|
||||
if [ $running1 -ne $running2 ]
|
||||
then
|
||||
sleep 10 # give other node a chance to gracefully die
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# make sure they are gone
|
||||
kill -9 $pid1 2> /dev/null
|
||||
kill -9 $pid2 2> /dev/null
|
||||
fi
|
||||
|
||||
if [ $TEST_TYPE = "single" ]
|
||||
then
|
||||
logfile=$logdir/$tname
|
||||
infofile=$logfile.info
|
||||
|
||||
rm -f ${logfile}
|
||||
|
||||
date=`date`
|
||||
echo "Starting $tname.exe at $date"
|
||||
|
||||
./$tname.exe > $logfile 2>&1 &
|
||||
pid=$!
|
||||
|
||||
# Make sure it won't run forever...
|
||||
time_run=0
|
||||
while [ $time_run -lt $max_run_time ]
|
||||
do
|
||||
# sleep 5s at a time waiting for job to finish or timer to expire
|
||||
# if job has exited, then we exit, too.
|
||||
sleep 5
|
||||
kill -0 $pid 2> /dev/null
|
||||
running=$?
|
||||
if [ $running -eq 0 ]
|
||||
then
|
||||
time_run=$((time_run + 5))
|
||||
if [ $time_run -ge $max_run_time ]
|
||||
then
|
||||
kill -9 $pid 2> /dev/null
|
||||
ran_too_long="yes"
|
||||
fi
|
||||
else
|
||||
ran_too_long="no"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
pid=""
|
||||
|
||||
done
|
||||
|
||||
test_exit 0
|
||||
|
||||
# Local Variables: ***
|
||||
# mode:ksh ***
|
||||
# End: ***
|
||||
|
||||
59
c/src/lib/libbsp/unix/posix/tools/semdump.in
Normal file
59
c/src/lib/libbsp/unix/posix/tools/semdump.in
Normal file
@@ -0,0 +1,59 @@
|
||||
#!@PERL@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
eval "exec @PERL@ -S $0 $*"
|
||||
if $running_under_some_shell;
|
||||
|
||||
# dump semaphore array values tony@divnc.com
|
||||
|
||||
require 'sys/sem.ph';
|
||||
require 'getopts.pl';
|
||||
&Getopts("vhi:k:"); # verbose, help, id, key
|
||||
|
||||
if ($opt_h || ($opt_i && $opt_k))
|
||||
{
|
||||
print STDERR <<NO_MORE_HELP;
|
||||
semdump
|
||||
|
||||
Dump info about specified semaphore.
|
||||
|
||||
Usage: $0 [-v] { -i semid | -k semkey }
|
||||
|
||||
-v -- possibly more verbose
|
||||
-i semid -- semaphore id
|
||||
-k semkey -- semaphore key
|
||||
-h -- help
|
||||
|
||||
anything else == this help message
|
||||
NO_MORE_HELP
|
||||
exit 1;
|
||||
}
|
||||
|
||||
$verbose = $opt_v;
|
||||
$id = $opt_i;
|
||||
$key = $opt_k;
|
||||
|
||||
if ($key)
|
||||
{
|
||||
$key = oct($key) if $key =~ /^0/;
|
||||
die "Could not convert key to id; $!" unless $id = semget($key, 1, 0);
|
||||
}
|
||||
|
||||
# I don't know to find out how many sem's are attached to the id
|
||||
# so just keep reading them until we get an error.
|
||||
|
||||
printf("KEY: 0x%X (%d) ", $key, $key) if $key;
|
||||
print "ID: $id\n";
|
||||
|
||||
semlist:
|
||||
for ($semnum=0; $semnum < 10; $semnum++)
|
||||
{
|
||||
$val = semctl($id, $semnum, &GETVAL, 0);
|
||||
$val || ($val = -1);
|
||||
|
||||
last semlist if ($val == -1);
|
||||
|
||||
printf " %d: %d\n", $semnum, $val;
|
||||
}
|
||||
|
||||
134
c/src/lib/libbsp/unix/posix/tools/shmdump.in
Normal file
134
c/src/lib/libbsp/unix/posix/tools/shmdump.in
Normal file
@@ -0,0 +1,134 @@
|
||||
#!@PERL@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
eval "exec @PERL@ -S $0 $*"
|
||||
if $running_under_some_shell;
|
||||
|
||||
# dump shared memory segment tony@divnc.com
|
||||
|
||||
require 'sys/shm.ph';
|
||||
require 'getopts.pl';
|
||||
&Getopts("vhi:k:f:l:b:w"); # verbose, help, id, key, first, length, word, base
|
||||
|
||||
if ($opt_h || ($opt_i && $opt_k))
|
||||
{
|
||||
print STDERR <<NO_MORE_HELP;
|
||||
shmdump
|
||||
|
||||
Dump contents of specifed shared memory segment.
|
||||
|
||||
Usage: $0 [options]
|
||||
|
||||
-h -- help
|
||||
-v -- possibly more verbose
|
||||
-i shmid -- shm id
|
||||
-k shmkey -- shm key
|
||||
-f first -- start of partial dump
|
||||
-l length -- length of partial dump
|
||||
-w -- dump as 4byte words instead of bytes
|
||||
-b base -- use 'base' as base address for output
|
||||
|
||||
anything else == this help message
|
||||
NO_MORE_HELP
|
||||
exit 1;
|
||||
}
|
||||
|
||||
$verbose = $opt_v;
|
||||
$id = $opt_i;
|
||||
$key = $opt_k;
|
||||
$offset = $opt_f;
|
||||
$print_length = $opt_l;
|
||||
$base = $opt_b;
|
||||
$word_dump = $opt_w;
|
||||
|
||||
if ($key)
|
||||
{
|
||||
# ensure key is an integer
|
||||
$key = oct($key) if $key =~ /^0/;
|
||||
die "Could not convert key to id; $!" unless $id = shmget($key, 1, 0);
|
||||
}
|
||||
|
||||
# ensure integerhood in case of leading '0x'
|
||||
$base = oct($base) if $base =~ /^0/;
|
||||
$offset = oct($offset) if $offset =~ /^0/;
|
||||
$print_length = oct($print_length) if $print_length =~ /^0/;
|
||||
|
||||
if ( ! shmctl($id, &IPC_STAT, $shmid_ds))
|
||||
{
|
||||
die "shmctl(2) for id $id failed -- (I was trying to get size): $!";
|
||||
}
|
||||
|
||||
# Pick the length out.
|
||||
# It is at byte offset 0x30 on hpux9 and probably hpux10
|
||||
# Also get the key if we don't have it already. Don't need it tho...
|
||||
$length = unpack("I", substr($shmid_ds, 0x30, 4));
|
||||
$key = unpack("I", substr($shmid_ds, 0x14, 4)) if ! $key;
|
||||
|
||||
# poke around looking for length and key
|
||||
# print "I guess: length: $length, key: $key\n";
|
||||
# print "****$shmid_ds****\n"; die "";
|
||||
|
||||
# make sure offset and print length make sense
|
||||
$print_length = $length if ! $print_length;
|
||||
if (($offset + $print_length) > $length)
|
||||
{
|
||||
die "offset ($offset) and length ($print_length) go beyond end of segment ($length bytes)";
|
||||
}
|
||||
|
||||
printf("KEY: 0x%X (%d) ", $key, $key) if ($key);
|
||||
printf "ID: $id\n";
|
||||
printf " %d bytes (0x%X), %d words, logical base is 0x%X\n",
|
||||
$length, $length, $length / 4, $base;
|
||||
if ($offset || ($print_length != $length))
|
||||
{
|
||||
printf " printing %X (%d) bytes starting at offset 0x%X (%d)\n",
|
||||
$print_length, $print_length, $offset, $offset;
|
||||
}
|
||||
printf "\n";
|
||||
|
||||
if ( ! shmread($id, $shm_data, $offset, $print_length))
|
||||
{
|
||||
die "could not attach and read from shmid $id: $!";
|
||||
}
|
||||
|
||||
# the dump code below derived from "Real Perl Programs" example "xdump"
|
||||
# from Camel book
|
||||
|
||||
$base += $offset;
|
||||
$offset = 0;
|
||||
for ($len = $print_length; $len >= 16; )
|
||||
{
|
||||
$data = substr($shm_data, $offset, 16);
|
||||
|
||||
@array = unpack('N4', $data);
|
||||
$data =~ tr/\0-\37\177-\377/./;
|
||||
printf "%8.8lX %8.8lX %8.8lX %8.8lX %8.8lX |%s|\n",
|
||||
$base, @array, $data;
|
||||
|
||||
$offset += 16;
|
||||
$base += 16;
|
||||
$len -= 16;
|
||||
}
|
||||
|
||||
# Now finish up the end a byte at a time
|
||||
|
||||
if ($len)
|
||||
{
|
||||
$data = substr($shm_data, $offset, $len);
|
||||
@array = unpack('C*', $data);
|
||||
for (@array)
|
||||
{
|
||||
$_ = sprintf('%2.2X', $_);
|
||||
}
|
||||
|
||||
push(@array, ' ') while $len++ < 16;
|
||||
|
||||
$data =~ tr/\0-\37\177-\377/./;
|
||||
$data =~ s/[^ -~]/./g;
|
||||
|
||||
printf "%8.8lX ", $base;
|
||||
printf "%s%s%s%s %s%s%s%s %s%s%s%s %s%s%s%s |%-16s|\n",
|
||||
@array, $data;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
BUILD_PGMS = update
|
||||
ifneq (@PERL@,)
|
||||
BUILD_PGMS += word-replace
|
||||
endif
|
||||
|
||||
PGMS = $(BUILD_PGMS)
|
||||
|
||||
CLEAN_ADDITIONS += $(BUILD_PGMS)
|
||||
|
||||
MISC_SUPPORT=310_to_320_list
|
||||
|
||||
INSTALL_LIST= $(PGMS) $(MISC_SUPPORT)
|
||||
INSTALLED_PGMS=$(PGMS:%=$(DESTDIR)/%)
|
||||
INSTALLED_DATA=$(MISC_SUPPORT:%=$(DESTDIR)/%)
|
||||
|
||||
INSTALLED=$(INSTALL_LIST:%=$(DESTDIR)/%)
|
||||
|
||||
all: $(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}
|
||||
|
||||
216
c/update-tools/update.in
Normal file
216
c/update-tools/update.in
Normal file
@@ -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: ***
|
||||
89
c/update-tools/word-replace.in
Normal file
89
c/update-tools/word-replace.in
Normal file
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user