Mercurial > hg > octave-nkf
view mkoctfile.in @ 3791:c1c532a0acb2
[project @ 2001-02-09 15:28:23 by jwe]
author | jwe |
---|---|
date | Fri, 09 Feb 2001 15:28:23 +0000 |
parents | cf69dbe17e59 |
children | 08cd791cd613 |
line wrap: on
line source
#! /bin/sh # # mkoctfile -- create a .oct file suitable for dynamic linking by # Octave. # Exit immediately on any error. set -e # Default values for these variables are filled in when Octave is # compiled. : ${CPPFLAGS=%OCTAVE_CONF_CPPFLAGS%} : ${INCFLAGS=%OCTAVE_CONF_MKOCTFILE_INCFLAGS%} : ${F77=%OCTAVE_CONF_F77%} : ${FFLAGS=%OCTAVE_CONF_FFLAGS%} : ${FPICFLAG=%OCTAVE_CONF_FPICFLAG%} : ${CC=%OCTAVE_CONF_CC%} : ${CFLAGS=%OCTAVE_CONF_CFLAGS%} : ${CPICFLAG=%OCTAVE_CONF_CPICFLAG%} : ${CXX=%OCTAVE_CONF_CXX%} : ${CXXFLAGS=%OCTAVE_CONF_CXXFLAGS%} : ${CXXPICFLAG=%OCTAVE_CONF_CXXPICFLAG%} : ${XTRA_CFLAGS=%OCTAVE_CONF_XTRA_CFLAGS%} : ${XTRA_CXXFLAGS=%OCTAVE_CONF_XTRA_CXXFLAGS%} : ${SH_LD=%OCTAVE_CONF_SH_LD%} : ${SH_LDFLAGS=%OCTAVE_CONF_SH_LDFLAGS%} : ${ALL_FFLAGS="$FFLAGS"} : ${ALL_CFLAGS="$INCFLAGS $XTRA_CFLAGS $CFLAGS"} : ${ALL_CXXFLAGS="$INCFLAGS $XTRA_CXXFLAGS $CXXFLAGS"} # Local variables. usage_msg="usage: mkoctfile [options] file ..." cfiles= ccfiles= f77files= objfiles= octfiles= octfile= incflags= defs= ldflags= dbg=: strip=false link=true if [ $# -eq 0 ]; then echo $usage_msg exit 1; fi while [ $# -gt 0 ]; do file= case "$1" in *.c) file=$1 cfiles="$cfiles $file" ;; *.cc | *.C | *.cpp) file=$1 ccfiles="$ccfiles $file" ;; *.f | *.F) file=$1 f77files="$f77files $file" ;; *.o) file=$1 objfiles="$objfiles $file" ;; -d | --debug | -v | --verbose) dbg=echo ;; -h | -\? | --help) echo $usage_msg cat << EOF Options: -h, -?, --help Print this message. -IDIR Add -IDIR to compile commands. -DDEF Add -DDEF to compile commands. -lLIB Add library LIB to link command. -LDIR Add -LDIR to link command. -c Compile, but do not link. -o FILE, --output FILE Output file name. Default extension is .oct. -p VAR, --print VAR Print configuration variable VAR. Recognized variables are: CPPFLAGS CXX INCFLAGS CXXFLAGS F77 CXXPICFLAG FFLAGS XTRA_CFLAGS FPICFLAG XTRA_CXXFLAGS CC SHLEXT CFLAGS SH_LD CPICFLAG SH_LDFLAGS -s, --strip Strip output file. -v, --verbose Echo commands as they are executed. FILE Compile or link FILE. Recognized file types are: .c C source .cc C++ source .C C++ source .cpp C++ source .f Fortran source .F Fortran source .o object file EOF exit 0 ;; -I*) incflags="$incflags $1" ;; -D*) defs="$defs $1" ;; -[lL]*) ldflags="$ldflags $1" ;; -o | --output) shift if [ $# -gt 0 ]; then octfile=`echo $1 | sed 's,\.[^.]*$,,'`.oct else echo "mkoctfile: output file name missing" fi ;; -p | --print) shift if [ $# -gt 0 ]; then eval echo \${$1} exit 0 else echo "mkprdmod: --print requires argument" exit 1 fi ;; -s | --strip) strip=true ;; -c) link=false ;; *) echo "mkoctfile: unrecognized argument $1" exit 1 ;; esac if [ -n "$file" ]; then if [ -z "$octfile" ]; then octfile=`echo $file | sed 's,\.[^.]*$,,'`.oct fi fi shift done # Compile Fortran, C, and C++ files. Add the name of each object file # that is produced to the overall list of object files. if [ -n "$f77files" ]; then for f in $f77files; do case $f in *.f) b=`echo $f | sed 's,\.f$,,'` ;; *.F) b=`echo $f | sed 's,\.F$,,'` ;; esac o=$b.o objfiles="$objfiles $o" $dbg $F77 -c $FPICFLAG $ALL_FFLAGS $f -o $o eval $F77 -c $FPICFLAG $ALL_FFLAGS $f -o $o done fi if [ -n "$cfiles" ]; then for f in $cfiles; do b=`echo $f | sed 's,\.c$,,'` o=$b.o objfiles="$objfiles $o" $dbg $CC -c $CPPFLAGS $CPICFLAG $ALL_CFLAGS $incflags $defs $f -o $o eval $CC -c $CPPFLAGS $CPICFLAG $ALL_CFLAGS $incflags $defs $f -o $o done fi if [ -n "$ccfiles" ]; then for f in $ccfiles; do case $f in *.cc) b=`echo $f | sed 's,\.cc$,,'` ;; *.C) b=`echo $f | sed 's,\.C$,,'` ;; *.cpp) b=`echo $f | sed 's,\.cpp$,,'` ;; esac o=$b.o objfiles="$objfiles $o" $dbg $CXX -c $CPPFLAGS $CXXPICFLAG $ALL_CXXFLAGS $incflags $defs $f -o $o eval $CXX -c $CPPFLAGS $CXXPICFLAG $ALL_CXXFLAGS $incflags $defs $f -o $o done fi ## Uncomment the following group of lines if you get `Text file busy' ## errors from ld. This may happen if the .oct file is currently ## running while you are trying to recompile it. We try moving first, ## since on some systems (HP-UX, maybe others) it is possible to ## rename running programs but not remove them. ## if [ -f "$octfile" ]; then ## $dbg "mv $octfile $octfile.bak" ## mv $octfile $octfile.bak ## $dbg "rm -f $octfile.bak" ## rm -f $octfile.bak ## fi # Link all the object files. if $link; then $dbg $SH_LD $SH_LDFLAGS -o $octfile $objfiles $ldflags eval $SH_LD $SH_LDFLAGS -o $octfile $objfiles $ldflags # Maybe strip it. if $strip; then $dbg strip $octfile eval strip $octfile fi fi exit 0