#!/bin/sh # Shell script 'configure2' for dyncall/Makefile.generic # Copyright (C) 2011 Daniel Adler BUILD=`uname` HOST="${BUILD}" BLDTOP="$PWD" SRCTOP=`dirname $PWD/$0` PrintUsage() { head -n 3 $0 | grep "^# " cat < --host= -o --os= -a --arch= os := Linux, (Open|Free|Net|DragonFly)BSD, Windows, Darwin, iOS, MacOSX, Sun, Haiku, BeOS arch := x86, x64, arm, ppc, mips or "" EOF exit 2 } ProcessArgs() { while [ 0 -lt $# ]; do X=$1 shift 1 # Shell common: case $X in --help|-h) PrintUsage ;; # GNU Compatibility: --prefix=*) PREFIX=`echo $X | cut -c 10-` addVar PREFIX $PREFIX ;; --host=*) HOST=`echo $X | cut -c 8-` ;; # Generic Compatibility: --os=*) OS=`echo $X | cut -c 6-` ;; --arch=*) ARCH=`echo $X | cut -c 8-` ;; # Concrete Support: --with-iphonesdk=*) IOSSDK_VERSION=`echo $X | cut -c 18-` TARGET_MACH="-arch armv6" ;; --with-macosxsdk=*) MACOSXSDK_VERSION=`echo $X | cut -c 18-` ;; --target-universal) TARGET_UNIVERSAL=1 ;; *=*) ;; esac done } access() { $* } new_makefile() { FILE=$1 echo "# auto-generated by $0" >$FILE } append_makefile() { echo $* >>$FILE } #vars="" addVar() { NAME=$1 shift 1 VALUE=$* append_makefile "$NAME+=$*" # vars="$NAME='$*' $var" } ConfigureByHost() { case ${HOST} in Linux) addVar CFLAGS "-fPIC" addVar LDFLAGS "-lm -ldl" ;; *BSD|DragonFly*) addVar CFLAGS "-fPIC" addVar LDFLAGS "-lm" ;; Minix) addVar CFLAGS "" targets="dyncall dyncallback" ;; Darwin|MacOSX) addVar CFLAGS "-fPIC" addVar TARGET_ARCH "-arch i386 -arch x86_64 -arch ppc" addVar TARGET_MACH "-arch i386 -arch x86_64 -arch ppc" addVar MKLIB "libtool -static -o" ;; IOS|iPhoneOS|iOS) addVar CFLAGS "-fPIC" addVar TARGET_ARCH "-arch armv6" addVar TARGET_MACH "-arch armv6" ;; esac } ConfigureByArch() { case ${ARCH} in x64) addVar CFLAGS "-fPIC" ;; sparc64) addVar CFLAGS "-m64" addVar ASFLAGS "-m64" addVar CXXFLAGS "-m64" addVar CCFLAGS "-m64" ;; esac } DumpVars() { echo '#!/bin/sh' >./make.sh echo "$vars make -f Makefile.generic \$*" >>./make.sh chmod +x ./make.sh echo "# run ./make.sh to build" } make_dir() { access mkdir -p $1 } MakeBuildTree() { FILES=`( cd $SRCTOP ; find . -name "Makefile.generic" )` for FILE in $FILES ; do SRCFILE="$SRCTOP/$FILE" BLDFILE="$BLDTOP/$FILE" SRCDIR=`dirname $SRCFILE` BLDDIR=`dirname $BLDFILE` make_dir "$BLDDIR" new_makefile $BLDDIR/Makefile append_makefile "SRCTOP = $SRCTOP" append_makefile "BLDTOP = $BLDTOP" append_makefile "SRCDIR = $SRCDIR" append_makefile "BLDDIR = $BLDDIR" append_makefile "VPATH = $SRCDIR" append_makefile "include $BLDTOP/Makefile.config" append_makefile "include $SRCDIR/Makefile.generic" done } WriteConfig() { new_makefile $BLDTOP/Makefile.config } ProcessArgs $* MakeBuildTree WriteConfig ConfigureByHost