📄 install
字号:
#! /bin/shrm -f build.log{ exists() { [ -x "`which $1`" ] } error() { echo "[`basename $0`] Error:" >&2 echo " $*" >&2 exit 1 } mkdirs() { for DIR in "$@" do [ -d "$WORK/$DIR" ] || { echo "Creating directory \"obj/$DIR\"." mkdir -p "$WORK/$DIR" || exit 1 } done } build_library() { DIR="$1" export DIR MAKEFILES="-f $ROOT/$DIR/Makefile -f $ROOT/build/makeflags" mkdirs lib "$DIR" cd $WORK/$DIR || exit 1 $MAKE $MAKEFILES depend || exit 1 $MAKE $MAKEFILES -f .depend lib || exit 1 } build_binary() { DIR="$1" export DIR MAKEFILES="-f $ROOT/$DIR/Makefile -f $ROOT/build/makeflags" mkdirs bin "$DIR" cd $WORK/$DIR || exit 1 $MAKE $MAKEFILES depend || exit 1 $MAKE $MAKEFILES -f .depend LD_LIST="`echo \`cat $WORK/ld.list\``" bin || exit 1 } cat <<EOFSulima v1.0 Installation Script.Copyright 1998-2000 Patryk Zadarnowski.EOF ROOT=`cd \`dirname $0\`; pwd` ### Set the work directory. WORK="$ROOT/obj" ### Unset variables defined in makefiles so we can use make -e. unset LIBRARY SOURCES MAKELEVEL CC="" CFLAGS="" # C compiler CCC="" CCFLAGS="" # C++ compiler AR="" ARFLAGS="" # archiver/dynamic linker MKDEP="" # cpp -M or similar dependency collector CDEFS="" # additional C/C++ macros CPATH="-I$ROOT/include" # header include path LPATH="-L$ROOT/lib-$ARCH" # library path LIBS="-lm" # additional standard libraries TCL_LIB="" # the tcl8 library EXT="" # library extension ### Process the command-line options. DEBUG=no STATIC=no BUILD=no CLEAN=no INSTALL= for ARG in "$@" do case "$ARG" in -32) CDEFS="$CDEFS -DSIM32";; -64) CDEFS="$CDEFS -DSIM64";; -g) DEBUG=yes;; -O*) CFLAGS="$CFLAGS $ARG" CCFLAGS="$CCFLAGS $ARG";; c=*) CC=`expr "$ARG" : 'c=\\(.*\\)'`;; c++=*) CCC=`expr "$ARG" : 'c++=\\(.*\\)'`;; cc=*) CC=`expr "$ARG" : 'cc=\\(.*\\)'`; CCC=$CC;; mkdep=*) MKDEP=`expr "$ARG" : 'mkdep=\\(.*\\)'`;; make=*) MAKE=`expr "$ARG" : 'make=\\(.*\\)'`;; all) BUILD=yes;; install=*) BUILD=yes INSTALL=`expr "$ARG" : 'install=\\(.*\\)'`;; cleanall) CLEAN=all;; clean) CLEAN=work;; *) error "Invalid argument \"$ARG\".";; esac done [ $BUILD = no -a $CLEAN = no ] && BUILD=yes [ $CLEAN != no -a -z "$INSTALL" ] && BUILD=no # skip pointless building [ $BUILD = yes ] && { if [ $DEBUG = yes ] then CFLAGS="$CFLAGS -g" CCFLAGS="$CCFLAGS -g" else CDEFS="$CDEFS" fi ### Find make. GNU make is seriously broken. Set this to point to a ### working make. for MAKE in /usr/xpg4/bin/make /usr/bin/posix/make /usr/bin/make - do [ $MAKE = - ] && error 'Cannot find a POSIX-compatible make(1).' exists $MAKE && break done MAKE="$MAKE -e" ### Find the C and C++ compilers. for CC in $CC gcc tcc cc - do [ $CC = - ] && error 'Cannot find a known C compiler.' exists $CC && break done for CCC in $CCC g++ tcc - do [ $CCC = - ] && error 'Cannot find a known C++ compiler.' exists $CCC && break done ### Set some additional compiler-specific flags. case $CC in tcc) CFLAGS="$CFLAGS -Xc -Y32bit -Xa";; gcc*) CFLAGS="$CFLAGS -O9 -Wall" MKDEP="$CC -MM";; esac case $CCC in tcc) CCFLAGS="$CCFLAGS -Xc -Y32bit -Yc++ -Xc";; gcc*|g++*) CCFLAGS="$CCFLAGS -O9 -Wall" MKDEP="$CCC -MM";; esac ### Find a dependency generator. for MKDEP in "$MKDEP" 'gcc -MM' 'cpp -M' - do [ "$MKDEP" ] && { [ "$MKDEP" = - ] && error 'Cannot locale a known C preprocessor.' exists $MKDEP && break } done ### Set some file extensions. LIBEXT=.o BINEXT= ### Prepare the linker flags. !!!!! YOU MAY NEED TO CHANGE THAT !!!!! AR="ld" ARFLAGS="-r -o" ### Find <tcl.h>. for TCL_CPATH in /usr/local/include /usr/include \ /usr/include/tcl8* /usr/local/include/tcl8* do [ -r $TCL_CPATH/tcl.h ] && break; done [ -r $TCL_CPATH/tcl.h ] || error 'Cannot find <tcl.h>.' CPATH="$CPATH -I$TCL_CPATH" ### Find libtcl8. for TCL_LIB in /usr/lib/libtcl8*.so /usr/lib/libtcl8*.a /usr/local/lib/libtcl8*.so \ /usr/local/lib/libtcl8*.a do [ -r $TCL_LIB ] && break; done [ -r $TCL_LIB ] || error 'Cannot find libtcl8.' # Display the configuration information. #echo "C compiler: " $CC $CFLAGS $CDEFS echo "Make: " $MAKE echo "C++ compiler: " $CCC $CCFLAGS $CDEFS echo "Mkdep: " $MKDEP $CDEFS echo "Archiver/linker: " $AR $ARFLAGS echo "TCL library: " $TCL_LIB [ "$INSTALL" ] && echo "Target directory:" $INSTALL echo export ROOT WORK CC CFLAGS CCC CCFLAGS AR ARFLAGS MKDEP export CDEFS CPATH LPATH LIBS LIBEXT BINEXT [ -d $WORK ] || { echo "Creating directory \"obj\"." mkdir -p $WORK } ### Compile the module libraries. echo ${TCL_LIB} > "$WORK/ld.list" sed 's/#.*$//' $ROOT/build/module.list | \ while read MODULE DIR GARBAGE do [ -z "$MODULE" ] || { echo "Making module $MODULE in \"$DIR\"." build_library $DIR library || exit 1 echo "$WORK/lib/$MODULE$LIBEXT" >> "$WORK/ld.list" } done || exit 1 ### Finally, compile the main executable. echo "Making \"sulima\"." build_binary sulima || exit 1 } [ -z "$INSTALL" ] || { echo "Installing sulima binary in \"$INSTALL\"." cp "$WORK/bin/sulima" $INSTALL || exit 1 } if [ $CLEAN = all ] then echo "Cleaning up the work directories." rm -rf $ROOT/obj $ROOT/sulima.log* $ROOT/*.core $ROOT/core echo "Cleaning up the source tree." find "$ROOT" -name "*~" -exec rm {} \; elif [ $CLEAN = work ] then echo "Cleaning up the work directory." rm -rf "$WORK" "$ROOT/sulima.log"* fi ### All done. echo 'Done. '}exit 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -