#! /bin/sh # # nhc98 script for any architecture # uses byte code back-end # # NHC98BINDIR is where to find driver scripts, # NHC98LIBDIR is where to find executable programs and libraries, # NHC98INCDIR is where to find the hi files for the standard prelude, # MACHINE is used to choose which architecture's binaries and # libraries to use. NHC98BINDIR=${NHC98BINDIR-ScriptDir} NHC98LIBDIR=${NHC98LIBDIR-ExecutableDir} NHC98INCDIR=${NHC98INCDIR-IncludeDir} MACHINE=${MACHINE-"`$NHC98BINDIR/harch`"} if [ ! -d $NHC98LIBDIR/$MACHINE ] then echo "`basename $0` is not installed/configured for $MACHINE." echo " (Tried directory $NHC98LIBDIR)" echo " See your system administrator, or install it yourself from" echo " http://www.haskell.org/nhc98/" exit 1 fi # Fix a broken 'mv' command on Cygwin. mv () { { cp $1 $2 && rm $1; } || echo "Warning: can't move $1 to $2"; } # Fix an absolute Cygwin path to an absolute native Windows path. # (Also copes with options like -I/path etc.) # This routine is only strictly required when the compiler proper # was built with GHC/mingw32. if echo $MACHINE | grep -i CYGWIN >/dev/null then filepath() { case $1 in -?/*) dir=`echo $1 | cut -c3-` dir=`cygpath -w "$dir" | tr '\\\\' '/'` echo `echo $1 | cut-c1-2`$dir ;; /*) cygpath -w "$1" | tr '\\' '/';; *) echo $1;; esac; } else filepath() { echo $1; } fi # If USINGRTS is non-zero then flags to the runtime is enclosed in # +RTS runtimeflags -RTS, # otherwise only a - is inserted after the runtime flags. # (0 = nhc98 compiled with hbc; 1 = nhc98 compiled with nhc98) #USINGRTS= #ENDIAN= # (These flags are now sourced from machine-specific configuration) . $NHC98LIBDIR/$MACHINE/config COMP=${NHC98COMP-"$NHC98LIBDIR/$MACHINE/nhc98comp"} PRAGMA=$NHC98LIBDIR/$MACHINE/hmake-PRAGMA COMPFILES="" COMPFLAGS="-P$NHC98INCDIR/packages/base" RUNFLAGS="" EXTRALIB="" CINCDIRS="" HINCDIRS="" CPPFLAGS=${CPPFLAGS-""} #OBJDIR= #HIDIR= HISUFFIX="hi" OSUFFIX="o" CSUFFIX="hc" MAINROUTINE=$NHC98LIBDIR/$MACHINE/main CC=${CC-gcc}" -m32 -D__NHC__=$VERSIONNUM" CPPHS="$NHC98LIBDIR/$MACHINE/cpphs" if test $USINGRTS -eq 0 ; then CPPHS="$CPPHS -" fi CPPHS="$CPPHS -D__NHC__=$VERSIONNUM" #CPPDEFAULT="${CC} -D__HASKELL__=98 -D__HASKELL_98__ -D__HASKELL98__ -x c -E -traditional" CPPDEFAULT="$CPPHS -D__HASKELL__=98 -D__HASKELL_98__ -D__HASKELL98__" CPPPRE=${CPP-"${CPPDEFAULT}"} CPPAS="${CC} -x c -S" CPPASFLAGS=" -I${NHC98INCDIR}/ " #CPPASFLAGS=" -I- -I${NHC98INCDIR}/ " GREENCARD="$NHC98LIBDIR/$MACHINE/greencard-nhc98" if test $USINGRTS -eq 0 ; then GREENCARD="$GREENCARD -" fi GREENCARDOPTS=${GREENCARDOPTS}" -tnhc98" GRCC="${CC} -I${NHC98INCDIR}/" HSC2HS="$NHC98BINDIR/hsc2hs" # hsc2hs script handles USINGRTS PACKAGES= VFLAG=0 MFLAG=0 TPFLAG=0 KEEPS=0 KEEPC=0 AS="${CC} -c" ASFLAGS="" PROF= TPROF= TRACE= NOLINK=0 PRECPP=0 LD="$CC" LDFLAGS="" LDFILES= LDFIRST="" LDLAST="-lm" HEAP= AOUT=a.out TMP=`filepath ${TEMP-/tmp}` # Define a routine for getting OPTIONS pragmas out of source files. checkPragmas () { if test $VFLAG -eq 1; then LOCAL_OPTS=`grep $1 $2 | $PRAGMA`; if test -n "$LOCAL_OPTS"; then echo 1>&2 "Found additional $1: $LOCAL_OPTS"; echo $LOCAL_OPTS fi; else grep $1 $2 | $PRAGMA; fi; } # Define a function for processing command-line arguments. It will # also be used for dealing with {-# OPTIONS_NHC98 #-} pragmas on # a per-file basis. processArgs () { while test "'$1'" != "''" do case $1 in --version) echo "$0: $INSTALLVER" echo ' [' $INSTALLINFO ']' exit 0;; -o-suffix=*) OSUFFIX=`echo $1 | cut -c11-` ;; -hc-suffix=*) CSUFFIX=`echo $1 | cut -c12-` ;; -hi-suffix=*) HISUFFIX=`echo $1 | cut -c12-` ;; -osuf ) shift; OSUFFIX=$1;; -hcsuf) shift; CSUFFIX=$1;; -hisuf) shift; HISUFFIX=$1;; -p ) PROF=p COMPFLAGS=$COMPFLAGS" --profile" GRCC=$GRCC" -DPROFILE" CPPASFLAGS=$CPPASFLAGS" -DPROFILE" OSUFFIX="p.o" CSUFFIX="p.c" ;; -S ) KEEPS=1;; -C ) KEEPC=1;; -v ) VFLAG=1;; -M ) MFLAG=1;; -cpp ) PRECPP=1;; -c ) NOLINK=1;; -T) TRACE=T COMPFLAGS=$COMPFLAGS" -dbgtrans -hi-suffix=T.hi" LDLAST=$LDLAST$LIBCOMPAT HISUFFIX="T.hi" OSUFFIX="T.o" CSUFFIX="T.c" ;; -t|-z) TPROF=z TPFLAG=1 COMPFLAGS=$COMPFLAGS" -z" GRCC=$GRCC" -DTPROF" CPPASFLAGS=$CPPASFLAGS" -DTPROF " OSUFFIX="z.o" CSUFFIX="z.c" ;; -98|+98)COMPFLAGS=$COMPFLAGS" --nkpat --underscore --nopuns";; # +rts ) USINGRTS=1;; # -rts ) USINGRTS=0;; +RTS ) shift while test "'$1'" != "''" do case $1 in -RTS ) break;; * ) RUNFLAGS=$RUNFLAGS" "$1;; esac shift done;; +CTS ) shift while test "'$1'" != "''" do case $1 in -CTS ) break;; -H* ) HEAP=`echo $1 | cut -c3-` ;; * ) COMPFLAGS=$COMPFLAGS" "$1;; esac shift done;; -o ) shift; AOUT=$1;; -d ) shift; OBJDIR=$1;; -odir ) shift; OBJDIR=$1;; -hidir) shift; HIDIR=$1;; -o-dir=*) OBJDIR=`echo $1 | cut -c8-` ;; -hi-dir=*) HIDIR=`echo $1 | cut -c9-` ;; -bigEnd) ENDIAN="-DHIGH_BYTE_FIRST" ;; -littleEnd) ENDIAN="-DLOW_BYTE_FIRST" ;; -nomain) MAINROUTINE="" ;; -noansiC) CPPAS=${CPPDEFAULT} COMPFLAGS=$COMPFLAGS" -"$1;; # -newlibs) NHC98LIBDIR=$NHC98LIBDIR/libraries # not needed # NHC98INCDIR=$NHC98INCDIR/libraries # not needed # COMPFLAGS=$COMPFLAGS" "$1;; -package) shift; package=$1; PACKAGES=$PACKAGES" $package" if [ -d $NHC98INCDIR/packages/$package ] then COMPFLAGS=$COMPFLAGS" -P$NHC98INCDIR/packages/$package" else echo >&2 "Warning: -package $package interfaces not found." fi ;; -H* ) HEAP=`echo $1 | cut -c3-` ;; -[Ll]*) EXTRALIB=$EXTRALIB" "$1;; -Wl,*) LDFLAGS=$LDFLAGS" "$1;; -i* ) CINCDIRS=$CINCDIRS" -I"`echo $1 | cut -c3-` HINCDIRS=$HINCDIRS" -I"`echo $1 | cut -c3-` ;; -I* ) CINCDIRS=$CINCDIRS" "$1 HINCDIRS=$HINCDIRS" "`filepath $1` ;; # HINCDIRS=$HINCDIRS" "$1 ;; -s ) LDFLAGS=$LDFLAGS" "$1;; -static) LDFLAGS=$LDFLAGS" "$1;; -P* ) GREENCARDOPTS=$GREENCARDOPTS" "`filepath $1` COMPFLAGS=$COMPFLAGS" "`filepath $1`;; # -P* ) GREENCARDOPTS=$GREENCARDOPTS" "$1 # COMPFLAGS=$COMPFLAGS" "$1;; -D* ) CPPFLAGS=$CPPFLAGS" "$1;; -U* ) CPPFLAGS=$CPPFLAGS" "$1;; -* ) COMPFLAGS=$COMPFLAGS" "$1;; *.s ) COMPFILES=$COMPFILES" "$1;; *.hc ) COMPFILES=$COMPFILES" "$1;; *.c ) COMPFILES=$COMPFILES" "$1;; *.hs ) COMPFILES=$COMPFILES" "$1;; *.lhs ) COMPFILES=$COMPFILES" "$1;; *.hsc ) HSCFILES=$HSCFILES" "$1;; *.gc ) GRFILES=$GRFILES" "$1;; * ) LDFILES=$LDFILES" "$1;; esac if test "'$1'" != "''" then shift fi done } # Now actually do the command-line args. processArgs "$@" BASENAME= DIRNAME= UNLIT= TMPCPPPREFILE= ASFILE= TMPASFILE= HIFILE= TMPHIFILE= HSFILE= if test $USINGRTS -ne 0 then RUNFLAGS="+RTS "$RUNFLAGS" -RTS" else RUNFLAGS=$RUNFLAGS" -" fi # Fix OSUFFIX for tprof _and_ tracing if test $TPFLAG -eq 1 then OSUFFIX=$TRACE$TPROF".o" fi # Define a function for deciding where to place object/.hi files. findDir () { dirname=$1 default=$2 if [ -z "$default" ] then echo $dirname else case $dirname in /*) echo $default;; ../*) echo $default;; ./*) echo $default;; *) echo $default/$dirname;; esac fi } # Start processing files here, beginning with GreenCard preprocessor. case $GRFILES in "" ) ;; * ) set $GRFILES GREENCARDOPTS=$GREENCARDOPTS" --c-suffix $CSUFFIX" while test $1 do case $1 in *.gc ) BASENAME=`basename $1 .gc` ;; esac DIRNAME=`dirname $1` objdir=`findDir "$DIRNAME" "$OBJDIR"` GRFILE=$DIRNAME/$BASENAME.gc HSFILE=$DIRNAME/${BASENAME}_.hs GRCFILE=$DIRNAME/${BASENAME}_.$CSUFFIX GROFILE=$objdir/${BASENAME}_.o if test $MFLAG -eq 1 then echo "`basename $GRFILE .gc`: " \ `grep '^import' $GRFILE | awk '{ print $2 }' | awk -F '(' '{ print $1 }'` shift continue fi if test $VFLAG -eq 1 then echo `basename $GREENCARD` $GREENCARDOPTS -P$NHC98INCDIR $GRFILE fi $GREENCARD $GREENCARDOPTS -P$NHC98INCDIR $GRFILE if test $? -ne 0 then echo "`basename $GREENCARD` failed on $GRFILE" exit 1 fi #if test `cat $HSFILE | wc -c` -lt `cat $GRFILE | wc -c` #then # echo `basename $GREENCARD`: Parse error in $GRFILE # exit 1 #fi if test `cat $GRCFILE | wc -l` -eq 1 then if test $VFLAG -eq 1 then echo `basename $GREENCARD` produced empty .$CSUFFIX file fi rm $GRCFILE COMPFILES=$COMPFILES" "${HSFILE}"_" else if test $KEEPC -ne 1 then if test $VFLAG -eq 1 then echo $GRCC $ENDIAN $CPPFLAGS $CINCDIRS -c -x c -o $GROFILE $GRCFILE fi $GRCC $ENDIAN $CPPFLAGS $CINCDIRS -c -x c -o $GROFILE $GRCFILE if test $? -ne 0 then echo C compilation failed on ${BASENAME}_.$CSUFFIX after `basename $GREENCARD` exit 1 fi fi COMPFILES=$COMPFILES" "$GRFILE fi shift done;; esac # Now for the hsc2hs preprocessor. case $HSCFILES in "" ) ;; * ) set $HSCFILES while test $1 do case $1 in *.hsc ) BASENAME=`basename $1 .hsc` ;; esac DIRNAME=`dirname $1` objdir=`findDir "$DIRNAME" "$OBJDIR"` HSCFILE=$DIRNAME/$BASENAME.hsc HSFILE=$DIRNAME/$BASENAME.hs if test $MFLAG -eq 1 then echo "`basename $HSCFILE .hsc`: " \ `grep '^import' $HSCFILE | awk '{ print $2 }' | awk -F '(' '{ print $1 }'` shift continue fi if test $VFLAG -eq 1 then echo `basename $HSC2HS` $CINCDIRS $HSCFILE fi $HSC2HS $CINCDIRS $HSCFILE if test $? -ne 0 then echo "`basename $HSC2HS` failed on $HSCFILE" exit 1 fi COMPFILES=$COMPFILES" "${HSFILE} shift done;; esac HSRC=0 CSRC=0 SSRC=0 GR=0 case $COMPFILES in "" ) ;; * ) set $COMPFILES while test $1 do CSUF=$CSUFFIX case $1 in *.s ) UNLIT=""; HSRC=0; CSRC=0; SSRC=1; GR=0; BASENAME=`basename $1 .s` ;; *.hc ) UNLIT=""; HSRC=0; CSRC=1; SSRC=0; GR=0; BASENAME=`basename $1 .hc` CSUF=hc ;; *.T.c ) UNLIT=""; HSRC=0; CSRC=1; SSRC=0; GR=0; BASENAME=`basename $1 .T.c` CSUF=T.c ;; *.p.c ) UNLIT=""; HSRC=0; CSRC=1; SSRC=0; GR=0; BASENAME=`basename $1 .p.c` CSUF=p.c ;; *.z.c ) UNLIT=""; HSRC=0; CSRC=1; SSRC=0; GR=0; BASENAME=`basename $1 .z.c` CSUF=z.c ;; *.c ) UNLIT=""; HSRC=0; CSRC=1; SSRC=0; GR=0; BASENAME=`basename $1 .c` CSUF=c ;; *.hs_ ) UNLIT=""; HSRC=1; CSRC=0; SSRC=0; GR=0; BASENAME=`basename $1 _.hs_` ;; *.gc ) UNLIT=""; HSRC=1; CSRC=0; SSRC=0; GR=1; BASENAME=`basename $1 .gc` ;; *.hs ) UNLIT=""; HSRC=1; CSRC=0; SSRC=0; GR=0; BASENAME=`basename $1 .hs` ;; *.lhs ) UNLIT="--unlit"; HSRC=1; CSRC=0; SSRC=0; GR=0; BASENAME=`basename $1 .lhs` ;; esac DIRNAME=`dirname $1` objdir=`findDir "$DIRNAME" "$OBJDIR"` hidir=`findDir "$DIRNAME" "$HIDIR"` if test $GR -eq 0 then POSTGRFILE=${DIRNAME}/`basename $1 _` else POSTGRFILE=${DIRNAME}/${BASENAME}_.hs fi HIFILE=$hidir/$BASENAME.$HISUFFIX TMPHIFILE=$TMP/$BASENAME.$$.$HISUFFIX TMPCPPPREFILE=$TMP/$BASENAME.$$.hs if [ "$CSUF" != "$CSUFFIX" -a "$CSUF" != "c" ] then echo "Warning: compiling a .$CSUF file, but expected a .$CSUFFIX file" echo " Ensure compiler options match the intended build type:" echo " ordinary .hc" echo " heap profiling -p .p.c" echo " time profiling -t .z.c" echo " tracing -T .T.c" fi CPPASFILE=$DIRNAME/$BASENAME.$CSUF if test $CSRC -eq 0 then TMPCPPASFILE=$TMP/$BASENAME.$$.$CSUF else TMPCPPASFILE=$CPPASFILE fi ASFILE=$DIRNAME/$BASENAME.s if test $SSRC -eq 0 then TMPASFILE=$TMP/$BASENAME.$$.s else TMPASFILE=$ASFILE fi OFILE=$objdir/$BASENAME.$OSUFFIX if test $NOLINK -eq 1 -a "$AOUT" != "a.out" then OFILE=$AOUT fi if test $GR -eq 0 then TMPOFILE=$OFILE else TMPOFILE=$TMP/$BASENAME.o fi # It's a Haskell file if test $HSRC -ne 0 then # Grab any extra link options now, they will apply globally. EXTRALIB=$EXTRALIB" "`checkPragmas OPTIONS_LINK $POSTGRFILE` fi # Now all of the following section goes into a subshell, because the options # read from {-# OPTIONS_NHC98 #-} only apply to that individual file. ( if test $HSRC -ne 0 then # Grab any per-file options here, just before compiling. processArgs `checkPragmas OPTIONS_COMPILE $POSTGRFILE` \ `checkPragmas OPTIONS_NHC98 $POSTGRFILE` if test $PRECPP -ne 0 then if test $VFLAG -eq 1 then echo $CPPPRE $CPPFLAGS $CINCDIRS $POSTGRFILE \> $TMPCPPPREFILE fi $CPPPRE $CPPFLAGS $CINCDIRS $POSTGRFILE > $TMPCPPPREFILE HSFILE=$TMPCPPPREFILE else HSFILE=$POSTGRFILE fi export HSFILE if test $MFLAG -eq 1 then echo "`basename $HSFILE .hs`: " \ `grep '^import' $HSFILE | awk '{ print $2 }' | awk -F '(' '{ print $1 }'` shift continue fi if test $VFLAG -eq 1 then # echo $COMP $RUNFLAGS $COMPFLAGS $HINCDIRS -I. $UNLIT -P${NHC98INCDIR} `filepath $HSFILE` $POSTGRFILE $TMPHIFILE $TMPCPPASFILE echo $COMP $RUNFLAGS $COMPFLAGS $HINCDIRS -I. $UNLIT -P${NHC98INCDIR} $HSFILE $POSTGRFILE $TMPHIFILE $TMPCPPASFILE fi # $COMP $RUNFLAGS $COMPFLAGS $HINCDIRS $UNLIT -I. -P${NHC98INCDIR} `filepath $HSFILE` $POSTGRFILE $TMPHIFILE $TMPCPPASFILE $COMP $RUNFLAGS $COMPFLAGS $HINCDIRS -I. $UNLIT -P${NHC98INCDIR} $HSFILE $POSTGRFILE $TMPHIFILE $TMPCPPASFILE if test $? -ne 0 then exit 1 fi if test $PRECPP -ne 0 then if test $VFLAG -eq 1 then echo rm $TMPCPPPREFILE fi rm $TMPCPPPREFILE fi if test -r $HIFILE then cmp -s $HIFILE $TMPHIFILE if test $? -eq 0 then if test $VFLAG -eq 1 then echo rm $TMPHIFILE fi rm $TMPHIFILE else if test $VFLAG -eq 1 then echo mv $TMPHIFILE $HIFILE fi mv $TMPHIFILE $HIFILE fi else if test $VFLAG -eq 1 then echo mv $TMPHIFILE $HIFILE fi mv $TMPHIFILE $HIFILE fi fi if test $KEEPC -ne 0 # stop here if -C then if test $HSRC -ne 0 then if test $VFLAG -eq 1 then echo mv $TMPCPPASFILE $CPPASFILE fi mv $TMPCPPASFILE $CPPASFILE fi else # continue with postcpp if test $HSRC -ne 0 -o $CSRC -ne 0 then if test $VFLAG -eq 1 then echo $CPPAS $ENDIAN $CPPASFLAGS $CINCDIRS $TMPCPPASFILE -o $TMPASFILE fi $CPPAS $ENDIAN $CPPASFLAGS $CINCDIRS $TMPCPPASFILE -o - |\ # perl -e 'undef $/; $_ = <>; s/^ \s*\.local\s+startLabel\n \s*.comm\s+startLabel,0,4\n (\s*\.globa?l\s+[^\n]+)\n \s*\.data\n (\s*\.align\s*\d+)\n /"\t.data\n" ."$2\n" ."\t.type startLabel,STT_OBJECT\n" ."\t.size startLabel,0\n" ."startLabel:\n" ."$1\n" ."$2\n"/emx; print;' |\ sed -e '/.p2align 5/s/5/2/' |\ sed -e '/.align 5/s/5/2/' |\ sed -e '/.align 32/s/32/4/' >$TMPASFILE # evil mangler! if test $CSRC -eq 0 then if test $VFLAG -eq 1 then echo rm $TMPCPPASFILE fi rm $TMPCPPASFILE fi fi if test $KEEPS -ne 0 # Stop here if -S then if test $HSRC -ne 0 -o $CSRC -ne 0 then if test $VFLAG -eq 1 then echo mv $TMPASFILE $ASFILE fi mv $TMPASFILE $ASFILE fi else # continue with assembler if test $VFLAG -eq 1 then echo $AS $ASFLAGS -o $TMPOFILE $TMPASFILE fi $AS $ASFLAGS -o $TMPOFILE $TMPASFILE if test $GR -eq 1 then GROFILE=$objdir/${BASENAME}_.o if test $VFLAG -eq 1 then echo $LD -nostdlib -Wl,-r -o $OFILE $TMPOFILE $GROFILE fi $LD -nostdlib -Wl,-r -o $OFILE $TMPOFILE $GROFILE if test $VFLAG -eq 1 then echo rm $TMPOFILE $GROFILE fi rm $TMPOFILE $GROFILE fi LDFILES=$OFILE" "$LDFILES # no longer works here - see below if test $SSRC -eq 0 then if test $VFLAG -eq 1 then echo rm $TMPASFILE fi rm $TMPASFILE fi fi fi ) || exit 1; if test $KEEPC -ne 1 -a $KEEPS -ne 1 then LDFILES=$OFILE" "$LDFILES # patch in from subshell - see above fi shift done;; esac CFG=$PROF$TRACE$TPROF if test "${CFG}" != "" then SUF="."${CFG} else SUF="" fi if test "$TRACE" = "T" then TRACELIB=$NHC98LIBDIR/$MACHINE/libdebug$SUF.a else TRACELIB= fi if test -n "$MAINROUTINE" then MAINROUTINE=$MAINROUTINE$SUF.o fi if test $TPFLAG -eq 0 then if [ -x $NHC98LIBDIR/nhc98-pkg ] then pkgdeporder=`$NHC98LIBDIR/nhc98-pkg $NHC98INCDIR/packages depends $PACKAGES` else pkgdeporder=$PACKAGES fi for package in $pkgdeporder do if [ -r $NHC98LIBDIR/$MACHINE/libHS$package$SUF.a ] then LDLIBS=$LDLIBS" "$NHC98LIBDIR/$MACHINE/libHS$package$SUF.a else echo >&2 "Warning: -package $package library $SUF not found." fi done LDLIBS=$LDLIBS" "$MAINROUTINE" "$NHC98LIBDIR/$MACHINE/mutlib$SUF.o" "$NHC98LIBDIR/$MACHINE/mutator$SUF.o" "$NHC98LIBDIR/$MACHINE/Prelude$SUF.a" "$NHC98LIBDIR/$MACHINE/Runtime$SUF.a" "$NHC98LIBDIR/$MACHINE/Prelude$SUF.a" "$TRACELIB" "$NHC98LIBDIR/$MACHINE/Runtime$SUF.a" "$NHC98LIBDIR/$MACHINE/Prelude$SUF.a" "$NHC98LIBDIR/$MACHINE/Runtime$SUF.a fi #for LIBFLAG in $HINCDIRS #do # LIBDIR=`echo $LIBFLAG | sed 's/-i//'` # if test -r $LIBDIR/$MACHINE/lib$SUF.a # then # LDLIBS=$LIBDIR/$MACHINE/lib$SUF.a" "$LDLIBS # else # if test -r $LIBDIR/lib$SUF.a # then # LDLIBS=$LIBDIR/lib$SUF.a" "$LDLIBS # else # if test -r $NHC98LIBDIR/$MACHINE/$LIBDIR/lib$SUF.a # then # LDLIBS=$NHC98LIBDIR/$MACHINE/$LIBDIR/lib$SUF.a" "$LDLIBS # #else # fi # fi # fi #done if test $TPFLAG -eq 1 then LLPREL=`echo $NHC98LIBDIR/$MACHINE/*$SUF.a` LLPREL=`echo $LLPREL | sed -e "s|$NHC98LIBDIR/$MACHINE/Runtime$SUF.a||"` LLPREL=`echo $LLPREL | sed -e "s|$NHC98LIBDIR/$MACHINE/libdebug$SUF.a||"` LDLIBS=$TMP/tprofusr$$.o" "$NHC98LIBDIR/$MACHINE/tprofprel1$SUF.o LDLIBS=$LDLIBS" "$MAINROUTINE LDLIBS=$LDLIBS" "$NHC98LIBDIR/$MACHINE/mutlib$SUF.o LDLIBS=$LDLIBS" "$NHC98LIBDIR/$MACHINE/mutator$SUF.o LDLIBS=$LDLIBS" "$LLPREL" "$NHC98LIBDIR/$MACHINE/Runtime$SUF.a LDLIBS=$LDLIBS" "$NHC98LIBDIR/$MACHINE/tprofprel2$SUF.o LDLIBS=$LDLIBS" "$TRACELIB LDLIBS=$LDLIBS" "$LLPREL" "$NHC98LIBDIR/$MACHINE/Runtime$SUF.a LDLIBS=$LDLIBS" "$NHC98LIBDIR/$MACHINE/tprofprel3$SUF.o LDLIBS=$LDLIBS" "$LLPREL" "$NHC98LIBDIR/$MACHINE/Runtime$SUF.a fi # Create tprof usr labels tprof () { LDFILES="" TPL="" if test $VFLAG -eq 1 then echo "Generating tprof labels"; fi while test "'$1'" != "''" do TPO=`basename $1 .$OSUFFIX` TPHI=`dirname $1`"/"$TPO.$HISUFFIX if test -e $TPHI then TPLAB=`head -n 1 $TPHI | cut -d' ' -f2 | sed "s/_/_95/g;s/'/_39/g"` TPL=$TPL" "$TPLAB LDFILES=$LDFILES" "$TMP/tpl$TPO.o" "$1 echo "int TMIP_$TPLAB[] = {0};" | cat > $TMP/tpl$TPO.c $CC -x c -c -o $TMP/tpl$TPO.o $TMP/tpl$TPO.c rm -f $TMP/tpl$TPO.c else LDFILES=$LDFILES" "$1 fi if test "'$1'" != "''" then shift fi done ${NHC98BINDIR}/tprofprel 0 $TPL > $TMP/tprofusr$$.c $CC -x c -c -o $TMP/tprofusr$$.o $TMP/tprofusr$$.c rm -f $TMP/tprofusr$$.c } if test $KEEPS -eq 0 -a $KEEPC -eq 0 -a $NOLINK -eq 0 -a $MFLAG -eq 0 then case $LDFILES in "" ) echo "nhc98: error: no source, object or archive file specified"; exit 1;; * ) if test $TPFLAG -eq 1 then tprof $LDFILES fi if test $VFLAG -eq 1 then echo "$NHC98LIBDIR/$MACHINE/nhc98heap $TRACE $HEAP | $CC -x c -c -o $TMP/nhc$$.o -"; fi $NHC98LIBDIR/$MACHINE/nhc98heap $TRACE $HEAP >$TMP/nhc$$.c $CC -x c -c -o $TMP/nhc$$.o $TMP/nhc$$.c if test $VFLAG -eq 1 then echo $LD -o $AOUT $LDFLAGS $LDFIRST $LDFILES $EXTRALIB $LDLIBS $TMP/nhc$$.o $LDLAST; fi $LD -o $AOUT $LDFLAGS $LDFIRST $LDFILES $EXTRALIB $LDLIBS $TMP/nhc$$.o $LDLAST if test $VFLAG -eq 1 then echo rm -f $TMP/nhc$$.o $TMP/nhc$$.c fi rm -f $TMP/nhc$$.o $TMP/nhc$$.c if test $TPFLAG -eq 1 then if test $VFLAG -eq 1 then echo rm -f $TMP/tpl*$$.o $TMP/tprofusr$$.o fi rm -f $TMP/tpl*.o $TMP/tprofusr$$.o fi esac fi