|
Packit Service |
8bf002 |
#!/bin/sh
|
|
Packit Service |
8bf002 |
# script to set MCPP to be called from gcc
|
|
Packit Service |
8bf002 |
# ./set_mcpp.sh $gcc_path $gcc_maj_ver $gcc_min_ver $cpp_call $CC
|
|
Packit Service |
8bf002 |
# $CXX x$CPPFLAGS x$EXEEXT $LN_S $inc_dir $host_system $cpu $target_cc
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
gcc_maj_ver=$2
|
|
Packit Service |
8bf002 |
gcc_min_ver=$3
|
|
Packit Service |
8bf002 |
cpp_call=$4
|
|
Packit Service |
8bf002 |
CC=$5
|
|
Packit Service |
8bf002 |
CXX=$6
|
|
Packit Service |
8bf002 |
CPPFLAGS=`echo $7 | sed 's/^x//'`
|
|
Packit Service |
8bf002 |
LN_S=$9
|
|
Packit Service |
8bf002 |
inc_dir=${10}
|
|
Packit Service |
8bf002 |
host_system=${11}
|
|
Packit Service |
8bf002 |
cpu=${12}
|
|
Packit Service |
8bf002 |
if test $host_system = SYS_MAC; then
|
|
Packit Service |
8bf002 |
target_cc=${13}
|
|
Packit Service |
8bf002 |
target=`echo $target_cc | sed 's/-gcc.*$//'`
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
cpp_name=`echo $cpp_call | sed 's,.*/,,'`
|
|
Packit Service |
8bf002 |
cpp_path=`echo $cpp_call | sed "s,/$cpp_name,,"`
|
|
Packit Service |
8bf002 |
gcc_path=`echo $1 | sed "s,/${CC}\$,,"`
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
# remove ".exe" or such
|
|
Packit Service |
8bf002 |
EXEEXT=`echo $8 | sed 's/^x//'`
|
|
Packit Service |
8bf002 |
if test x$EXEEXT != x; then
|
|
Packit Service |
8bf002 |
cpp_base=`echo $cpp_name | sed "s/${EXEEXT}//"`
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
cpp_base=$cpp_name
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
if test $host_system = SYS_MINGW && test ! -f cc1$EXEEXT; then
|
|
Packit Service |
8bf002 |
## cc1.exe has not yet compiled
|
|
Packit Service |
8bf002 |
echo " first do 'make COMPILER=GNUC mcpp cc1'; then do 'make COMPILER=GNUC install'"
|
|
Packit Service |
8bf002 |
exit 1
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
if test x$cpp_base = xcc1; then
|
|
Packit Service |
8bf002 |
# for GCC V.3.3 and later
|
|
Packit Service |
8bf002 |
no_m64=0
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
no_m64=1
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
gen_headers() {
|
|
Packit Service |
8bf002 |
echo " mkdir -p $hdir"
|
|
Packit Service |
8bf002 |
mkdir -p $hdir
|
|
Packit Service |
8bf002 |
if test ! -f $hdir/gcc$gcc_maj_ver${gcc_min_ver}_predef_std.h; then
|
|
Packit Service |
8bf002 |
echo " generating g*.h header files"
|
|
Packit Service |
8bf002 |
$CC $CPPFLAGS -E -xc $arg -dM /dev/null | sort | \
|
|
Packit Service |
8bf002 |
grep ' *#define *_' \
|
|
Packit Service |
8bf002 |
> $hdir/gcc$gcc_maj_ver${gcc_min_ver}_predef_std.h
|
|
Packit Service |
8bf002 |
$CC $CPPFLAGS -E -xc $arg -dM /dev/null | sort | \
|
|
Packit Service |
8bf002 |
grep -E ' *#define *[A-Za-z]+' \
|
|
Packit Service |
8bf002 |
> $hdir/gcc$gcc_maj_ver${gcc_min_ver}_predef_old.h
|
|
Packit Service |
8bf002 |
$CXX $CPPFLAGS -E -xc++ $arg -dM /dev/null | sort | \
|
|
Packit Service |
8bf002 |
grep ' *#define *_' \
|
|
Packit Service |
8bf002 |
> $hdir/gxx$gcc_maj_ver${gcc_min_ver}_predef_std.h
|
|
Packit Service |
8bf002 |
$CXX $CPPFLAGS -E -xc++ $arg -dM /dev/null | sort | \
|
|
Packit Service |
8bf002 |
grep -E ' *#define *[A-Za-z]+' \
|
|
Packit Service |
8bf002 |
> $hdir/gxx$gcc_maj_ver${gcc_min_ver}_predef_old.h
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
}
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
cwd=`pwd`
|
|
Packit Service |
8bf002 |
echo " cd $inc_dir"
|
|
Packit Service |
8bf002 |
cd $inc_dir
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
if test $cpu = i386 || test $cpu = x86_64; then
|
|
Packit Service |
8bf002 |
cpu32=i386
|
|
Packit Service |
8bf002 |
cpu64=x86_64
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
if test $cpu = ppc || $cpu = ppc64; then
|
|
Packit Service |
8bf002 |
cpu32=ppc
|
|
Packit Service |
8bf002 |
cpu64=ppc64
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
arch_headers() {
|
|
Packit Service |
8bf002 |
for arch in $cpu32 $cpu64
|
|
Packit Service |
8bf002 |
do ## generate headers for 2 architectures
|
|
Packit Service |
8bf002 |
hdir=${idir}-$arch
|
|
Packit Service |
8bf002 |
if test $host_system = SYS_MAC; then
|
|
Packit Service |
8bf002 |
arg="-arch $arch"
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
if test $arch = $cpu; then
|
|
Packit Service |
8bf002 |
arg="$ar"
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
if test $host_system = SYS_MINGW || test $no_m64; then
|
|
Packit Service |
8bf002 |
continue;
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
if test $cpu = $cpu64; then
|
|
Packit Service |
8bf002 |
arg="$ar -m32"
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
arg="$ar -m64"
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
# Test if the architecture is supported.
|
|
Packit Service |
8bf002 |
$CC -E -xc $arg /dev/null > /dev/null
|
|
Packit Service |
8bf002 |
if test $? != 0; then
|
|
Packit Service |
8bf002 |
continue
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
gen_headers
|
|
Packit Service |
8bf002 |
done
|
|
Packit Service |
8bf002 |
}
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
idir=mcpp-gcc
|
|
Packit Service |
8bf002 |
ar=
|
|
Packit Service |
8bf002 |
arch_headers
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
if test $host_system = SYS_CYGWIN; then
|
|
Packit Service |
8bf002 |
## CYGWIN has 'mingw' include directory for '-mno-cygwin' option
|
|
Packit Service |
8bf002 |
idir=mingw/mcpp-gcc
|
|
Packit Service |
8bf002 |
ar="-mno-cygwin"
|
|
Packit Service |
8bf002 |
arch_headers
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
# write shell-script so that call of 'cpp0', 'cc1 -E' or so is replaced to
|
|
Packit Service |
8bf002 |
# call of mcpp
|
|
Packit Service |
8bf002 |
echo " cd $cpp_path"
|
|
Packit Service |
8bf002 |
cd $cpp_path
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
# other than MinGW
|
|
Packit Service |
8bf002 |
if test $host_system != SYS_MINGW; then
|
|
Packit Service |
8bf002 |
echo '#!/bin/sh' > mcpp.sh
|
|
Packit Service |
8bf002 |
# for GCC V.3.3 and later
|
|
Packit Service |
8bf002 |
if test x$cpp_base = xcc1; then
|
|
Packit Service |
8bf002 |
for cpp in cc1 cc1plus
|
|
Packit Service |
8bf002 |
do
|
|
Packit Service |
8bf002 |
if test $cpp = cc1; then
|
|
Packit Service |
8bf002 |
shname=mcpp
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
shname=mcpp_plus
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
if test $cpp = cc1plus; then
|
|
Packit Service |
8bf002 |
echo '#!/bin/sh' > mcpp_plus.sh
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
cat >> $shname.sh <<_EOF
|
|
Packit Service |
8bf002 |
for i in \$@
|
|
Packit Service |
8bf002 |
do
|
|
Packit Service |
8bf002 |
case \$i in
|
|
Packit Service |
8bf002 |
-fpreprocessed|-traditional*)
|
|
Packit Service |
8bf002 |
$cpp_path/${cpp}_gnuc "\$@"
|
|
Packit Service |
8bf002 |
exit ;;
|
|
Packit Service |
8bf002 |
esac
|
|
Packit Service |
8bf002 |
done
|
|
Packit Service |
8bf002 |
_EOF
|
|
Packit Service |
8bf002 |
done
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
# for GCC V.2, V.3 and V.4
|
|
Packit Service |
8bf002 |
mcpp_name=mcpp
|
|
Packit Service |
8bf002 |
if test $host_system = SYS_MAC && test -f ${target}-mcpp; then
|
|
Packit Service |
8bf002 |
mcpp_name=${target}-mcpp ## long name of Mac OS X cross-compiler
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
echo $cpp_path/$mcpp_name '"$@"' >> mcpp.sh
|
|
Packit Service |
8bf002 |
chmod a+x mcpp.sh
|
|
Packit Service |
8bf002 |
if test x$cpp_base = xcc1; then
|
|
Packit Service |
8bf002 |
echo $cpp_path/$mcpp_name -+ '"$@"' >> mcpp_plus.sh
|
|
Packit Service |
8bf002 |
chmod a+x mcpp_plus.sh
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
# backup GCC / cpp or cc1, cc1plus
|
|
Packit Service |
8bf002 |
mcpp_installed=`$cpp_call -v /dev/null 2>&1 | grep "MCPP"`
|
|
Packit Service |
8bf002 |
if test "x$mcpp_installed" = x; then # mcpp has not installed
|
|
Packit Service |
8bf002 |
sym_link=
|
|
Packit Service |
8bf002 |
if test $host_system = SYS_MINGW; then
|
|
Packit Service |
8bf002 |
if test -f cc1_gnuc$EXEEXT; then
|
|
Packit Service |
8bf002 |
sym_link=l ## cc1.exe already moved to cc1_gnuc.exe
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
if test -h $cpp_name; then
|
|
Packit Service |
8bf002 |
sym_link=l
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
if test x$sym_link != xl; then
|
|
Packit Service |
8bf002 |
echo " mv $cpp_name ${cpp_base}_gnuc$EXEEXT"
|
|
Packit Service |
8bf002 |
mv -f $cpp_name ${cpp_base}_gnuc$EXEEXT
|
|
Packit Service |
8bf002 |
if test x$cpp_base = xcc1; then
|
|
Packit Service |
8bf002 |
echo " mv cc1plus$EXEEXT cc1plus_gnuc$EXEEXT"
|
|
Packit Service |
8bf002 |
mv -f cc1plus$EXEEXT cc1plus_gnuc$EXEEXT
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
if test -f $cpp_name; then
|
|
Packit Service |
8bf002 |
rm -f $cpp_name
|
|
Packit Service |
8bf002 |
if test x$cpp_base = xcc1; then
|
|
Packit Service |
8bf002 |
rm -f cc1plus$EXEEXT
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
# make symbolic link of mcpp.sh to 'cpp0' or 'cc1', 'cc1plus'
|
|
Packit Service |
8bf002 |
if test $host_system = SYS_MINGW; then
|
|
Packit Service |
8bf002 |
echo " cp $cwd/cc1$EXEEXT"
|
|
Packit Service |
8bf002 |
cp $cwd/cc1$EXEEXT .
|
|
Packit Service |
8bf002 |
strip cc1$EXEEXT
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
echo " $LN_S mcpp.sh $cpp_name"
|
|
Packit Service |
8bf002 |
$LN_S mcpp.sh $cpp_name
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
if test x$cpp_base = xcc1; then
|
|
Packit Service |
8bf002 |
if test $host_system = SYS_MINGW; then
|
|
Packit Service |
8bf002 |
echo " cp cc1$EXEEXT cc1plus$EXEEXT"
|
|
Packit Service |
8bf002 |
cp cc1$EXEEXT cc1plus$EXEEXT
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
echo " $LN_S mcpp_plus.sh cc1plus$EXEEXT"
|
|
Packit Service |
8bf002 |
$LN_S mcpp_plus.sh cc1plus$EXEEXT
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
if test x$gcc_maj_ver = x2; then
|
|
Packit Service |
8bf002 |
exit 0
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
# for GCC V.3 or V.4 make ${CC}.sh and ${CXX}.sh to add -no-integrated-cpp
|
|
Packit Service |
8bf002 |
# option
|
|
Packit Service |
8bf002 |
echo " cd $gcc_path"
|
|
Packit Service |
8bf002 |
cd $gcc_path
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
if test $host_system = SYS_MAC && test x${target_cc} != x; then
|
|
Packit Service |
8bf002 |
# cross-compiler on Mac OS X
|
|
Packit Service |
8bf002 |
CC_=$target_cc
|
|
Packit Service |
8bf002 |
CXX_=`echo $target_cc | sed 's/gcc/g++/'`
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
CC_=$CC
|
|
Packit Service |
8bf002 |
CXX_=$CXX
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
|
|
Packit Service |
8bf002 |
for cc in $CC_ $CXX_
|
|
Packit Service |
8bf002 |
do
|
|
Packit Service |
8bf002 |
entity=$cc$EXEEXT
|
|
Packit Service |
8bf002 |
if test $host_system != SYS_MINGW; then
|
|
Packit Service |
8bf002 |
ref=$cc$EXEEXT
|
|
Packit Service |
8bf002 |
while ref=`readlink $ref`
|
|
Packit Service |
8bf002 |
do
|
|
Packit Service |
8bf002 |
entity=$ref;
|
|
Packit Service |
8bf002 |
done
|
|
Packit Service |
8bf002 |
if test $entity = $cc.sh; then # gcc.sh already installed
|
|
Packit Service |
8bf002 |
exit 0
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
ccache=`echo $entity | grep ccache`
|
|
Packit Service |
8bf002 |
if test x$ccache != x; then
|
|
Packit Service |
8bf002 |
## CC (CXX) is a symbolic link to ccache
|
|
Packit Service |
8bf002 |
## search the real $cc in $PATH
|
|
Packit Service |
8bf002 |
for path in `echo $PATH | sed 's/:/ /g'`
|
|
Packit Service |
8bf002 |
do
|
|
Packit Service |
8bf002 |
if test -f $path/$cc$EXEEXT && test $gcc_path != $path; then
|
|
Packit Service |
8bf002 |
break;
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
done
|
|
Packit Service |
8bf002 |
gcc_path=$path
|
|
Packit Service |
8bf002 |
echo " cd $gcc_path"
|
|
Packit Service |
8bf002 |
cd $gcc_path
|
|
Packit Service |
8bf002 |
entity=$cc
|
|
Packit Service |
8bf002 |
ref=$cc
|
|
Packit Service |
8bf002 |
while ref=`readlink $ref`
|
|
Packit Service |
8bf002 |
do
|
|
Packit Service |
8bf002 |
entity=$ref;
|
|
Packit Service |
8bf002 |
done
|
|
Packit Service |
8bf002 |
if test $entity = $cc.sh; then
|
|
Packit Service |
8bf002 |
exit 0
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
if test x$EXEEXT != x; then
|
|
Packit Service |
8bf002 |
entity_base=`echo $entity | sed "s/$EXEEXT//"`
|
|
Packit Service |
8bf002 |
else
|
|
Packit Service |
8bf002 |
entity_base=$entity
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
if test $host_system != SYS_MINGW \
|
|
Packit Service |
8bf002 |
|| test ! -f ${entity_base}_proper$EXEEXT; then
|
|
Packit Service |
8bf002 |
echo " mv $entity ${entity_base}_proper$EXEEXT"
|
|
Packit Service |
8bf002 |
mv -f $entity ${entity_base}_proper$EXEEXT
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
if test x"`echo $entity | grep '^/'`" = x; then # not absolute path
|
|
Packit Service |
8bf002 |
prefix_dir=$gcc_path/
|
|
Packit Service |
8bf002 |
else # absolute path
|
|
Packit Service |
8bf002 |
prefix_dir=
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
echo '#! /bin/sh' > $cc.sh
|
|
Packit Service |
8bf002 |
echo $prefix_dir${entity_base}_proper -no-integrated-cpp '"$@"' >> $cc.sh
|
|
Packit Service |
8bf002 |
chmod a+x $cc.sh
|
|
Packit Service |
8bf002 |
echo " $LN_S $cc.sh $cc"
|
|
Packit Service |
8bf002 |
$LN_S -f $cc.sh $cc
|
|
Packit Service |
8bf002 |
if test $cc != $entity; then
|
|
Packit Service |
8bf002 |
$LN_S -f $cc.sh $entity
|
|
Packit Service |
8bf002 |
fi
|
|
Packit Service |
8bf002 |
done
|
|
Packit Service |
8bf002 |
|