summaryrefslogtreecommitdiffstats
path: root/tools/build
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-10-14 20:19:30 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-10-14 20:19:30 +0000
commit11cfb6f7f6326e79b4a930716c340b65d76d0683 (patch)
tree407c08b76ce570ebc0c5b218aa914a1449808f20 /tools/build
parent946b3cb0cf91da6753b6a6e0f60b91d84fcdf097 (diff)
downloadrtems-11cfb6f7f6326e79b4a930716c340b65d76d0683.tar.bz2
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.
Diffstat (limited to 'tools/build')
-rw-r--r--tools/build/README8
-rw-r--r--tools/build/install-if-change.in142
-rw-r--r--tools/build/lock-directory.in43
-rw-r--r--tools/build/rcs-clean.in73
-rw-r--r--tools/build/scripts/Makefile.in16
-rw-r--r--tools/build/scripts/README8
-rw-r--r--tools/build/scripts/install-if-change.in142
-rw-r--r--tools/build/scripts/lock-directory.in43
-rw-r--r--tools/build/scripts/rcs-clean.in73
-rw-r--r--tools/build/scripts/unlock-directory.in41
-rw-r--r--tools/build/unlock-directory.in41
11 files changed, 607 insertions, 23 deletions
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: ***
+