server/dep/ACE_wrappers/bin/g++dep
cipherCOM 571f510ee4 [11162] Changed ACE lib to same version but with configure script
(based on cipherCOM's repo commit d3d8934)

Signed-off-by: VladimirMangos <vladimir@getmangos.com>
2011-02-14 12:51:16 +03:00

173 lines
4.7 KiB
Bash
Executable file

#! /bin/sh
# $Id: g++dep 80826 2008-03-04 14:51:23Z wotte $
# This utility is a lightly editted version of the freed Berkeley
# script `mkdep'. The current script is intended to work for GNU G++.
# Here is the original BSD header:
# @(#)mkdep.sh 1.7 (Berkeley) 10/13/87
#
if [ $# = 0 ] ; then
echo 'usage: g++dep [-p] [-f makefile] [flags] file ...'
exit 1
fi
DO_ACE_MAKE_DEPEND=0
MAKE=GNUmakefile
STOPNOW=0
REL=""
while [ $STOPNOW -eq 0 ]
do
case $1 in
# -e for compatibility with depgen.pl
-e) shift; shift ;;
# -f allows you to select a makefile name
-f) MAKE=$2
shift; shift ;;
# the -p flag produces "program: program.c" style dependencies
# so .o's don't get produced
-p) SED='s;\.o;;'
shift ;;
# -A implies -r and fixes the .obj line, hate
-A) REL="ACE_ROOT TAO_ROOT "$REL
DO_ACE_MAKE_DEPEND=1
shift ;;
# -r allows the use of relative pathnames...
-r) REL="ACE_ROOT TAO_ROOT "$REL
shift ;;
# -R VARNAME allows you to specify a variable which should be used
# to generate relative paths if it's defined. You can use multiple
# -R options, but be careful if one of the values is a proper
# subset of a subsequent value, because I suspect that sed will
# substitute for the first value properly, but not for the
# second. You might be able to get around this by reordering and
# having the more specific values lead the less specific values.
-R) REL=$2" "$REL
shift; shift;;
*) STOPNOW=1
esac
done
if [ ! -w $MAKE ]; then
echo "g++dep: no writeable file \"$MAKE\""
exit 1
fi
TMP=/tmp/g++dep$$
SCRIPT=${TMP}_script
trap 'rm -f $TMP $SCRIPT; exit 1' 1 2 3 13 15
cp $MAKE ${MAKE}.bak
sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
cat << _EOF_ >> $TMP
# DO NOT DELETE THIS LINE -- g++dep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
_EOF_
# Local files may appear as './foo' change that to 'foo'
echo 's; \./; ;g' >$SCRIPT
# If the -p flag is set we want to change 'foo.o' to simply 'foo'
echo $SED >>$SCRIPT
# Dependencies on local files are better expressed like that, instead
# of using $(TAO_ROOT) or $(ACE_ROOT). This is specially important
# for IDL generated files.
echo "s;`pwd`/;;g" >>$SCRIPT
if [ -z "$TAO_ROOT" ]; then
TAO_ROOT=${ACE_ROOT}/TAO
fi
# This is a long series of commands to change the actual value of
# $ACE_ROOT to '$(ACE_ROOT)', similar changes are done for TAO_ROOT
# and any number of "variables" defined via the -R option.
for varname in $REL; do
varvalue=$(eval echo \$${varname})
echo "s;"$varvalue";$""("$varname");g" >>$SCRIPT
done
if [ $DO_ACE_MAKE_DEPEND -eq 1 ]; then
# Append a series of commands to the sed script that help with the
# ACE build style (.obj subdirectories, plaform indenpendent
# dependencies, etc.)
# To avoid interpolation we build this string in pieces, the idea is
# to generate a rule that will convert
# foo.o:
# into
# .obj/foo.o .shobj/foo.o .obj/foo.so .shobj/foo.so:
#
# will be foo.o foo.
LONG_TARGET="$""(sort "
for i in VDIR VSHDIR; do
for j in OBJEXT SOEXT; do
LONG_TARGET=${LONG_TARGET}"$""("${i}")\1.$""("${j}") "
done
done
LONG_TARGET=${LONG_TARGET}")"
cat >>$SCRIPT <<EOF
#
# Change the actual plaform config.h file to a MAKE macro...
s;${ACE_PLATFORM_CONFIG};\$(ACE_PLATFORM_CONFIG);g
#
# Append a 'x' character to the config-all and config-lite names,
# because we are going to remove all the config-* names..
s/config-all/configx-all/
s/config-lite/configx-lite/
#
# Remove the config-* names
/config-.*\.h/d
#
# Restore configx-all and configx-lite to their original names
s/configx-all/config-all/
s/configx-lite/config-lite/
#
# Remove any absolute dependencies
s; /[-a-zA-Z0-9_./+]*\.h;;g
#
# Remove blanks followed by a backslash
s;[ \\t][ \\t]*\\\\; \\\\;g
#
# g++ generate dependencies for foo.o in the current directory, but we
# we need dependencies for foo.o and foo.so in the .obj and .shobj
# subdirectories. Actually .obj and .shobj are, respectively, the
# expansions of VDIR and VSHDIR, therefore it is better *NOT* to use
# the values of said variables, but generated dependencies that expand
# them.
s;\([-a-zA-Z0-9._+]*\)\.o:;\\${LONG_TARGET}:;
#
# An older implementation of the previous code, but using the actual
# value of VDIR and VSHDIR at time of dependency generation.
#
#s;\([-a-zA-Z0-9._+]*\)\.o:;\\${VDIR}\1.${OBJEXT} ${VDIR}\1.${SOEXT} ${VSHDIR}\1.${OBJEXT} ${VSHDIR}\1.${SOEXT}:;
#
#
EOF
fi
g++ -MM -MG -DACE_LACKS_PRAGMA_ONCE $* |
sed -f $SCRIPT ${ACE_DEPEND_SED_CMD} >>$TMP
/bin/rm -f $SCRIPT
cat << _EOF_ >> $TMP
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
_EOF_
# copy to preserve permissions
cp $TMP $MAKE
rm -f ${MAKE}.bak $TMP
exit 0