From cc669f240b5729840c67f4206dd4cfa8266518e2 Mon Sep 17 00:00:00 2001 From: Kevin Ollivier Date: Sun, 30 Mar 2008 18:30:48 +0000 Subject: [PATCH] Merge build script updates from 2.8 branch. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52924 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- distrib/scripts/mac/lipo-dir.py | 54 ++++++++++++++++ distrib/scripts/mac/mac_options.inc | 2 +- distrib/scripts/mac/macbuild | 14 ++++- distrib/scripts/mac/macbuild-lipo | 95 +++++++++++++---------------- 4 files changed, 110 insertions(+), 55 deletions(-) create mode 100644 distrib/scripts/mac/lipo-dir.py diff --git a/distrib/scripts/mac/lipo-dir.py b/distrib/scripts/mac/lipo-dir.py new file mode 100644 index 0000000000..79678a515b --- /dev/null +++ b/distrib/scripts/mac/lipo-dir.py @@ -0,0 +1,54 @@ +import os, sys, shutil + +outputdir = "." +ppc_basedir = "." +intel_basedir = "." + +def lipo_walker(data, dirname, names): + global outputdir + global ppc_basedir + global intel_basedir + + for name in names: + fullpath = os.path.join(dirname, name) + intel_fullpath = fullpath.replace(ppc_basedir, intel_basedir) + outputfile = fullpath.replace(ppc_basedir, outputdir) + outdir = os.path.dirname(outputfile) + if not os.path.exists(outdir): + os.makedirs(outdir) + + # this call will only succeed if the file is a binary that can + # be lipoed. + if not os.path.islink(fullpath) and os.system("lipo -info %s" % fullpath) == 0: + if os.system("lipo -output %s -create %s %s" % (outputfile, fullpath, intel_fullpath)) == 0: + print "Successfully created %s" % outputfile + else: + if os.path.islink(fullpath): + linkto = os.readlink(fullpath) + + if linkto.startswith(ppc_basedir): + linkto = linkto.replace(ppc_basedir, outputdir) + elif linkto.startswith(intel_basedir): + linkto = linkto.replace(intel_basedir, outputdir) + + os.symlink(linkto, outputfile) + + elif not os.path.isdir(fullpath): + shutil.copy(fullpath, outputfile) + + +if __name__ == "__main__": + if len(sys.argv) < 4: + print "Usage: %s " + print "" + print "Takes a directory containing a Mac ppc application, and a directory" + print "containing a Mac intel application, and merges them into a universal" + print "binary." + sys.exit(1) + + ppc_basedir = sys.argv[1] + intel_basedir = sys.argv[2] + outputdir = sys.argv[3] + + os.path.walk(ppc_basedir, lipo_walker, None) + \ No newline at end of file diff --git a/distrib/scripts/mac/mac_options.inc b/distrib/scripts/mac/mac_options.inc index 20d995d874..3b4666f367 100644 --- a/distrib/scripts/mac/mac_options.inc +++ b/distrib/scripts/mac/mac_options.inc @@ -18,7 +18,7 @@ for i in "$@"; do carbon) PORT="mac" ;; cocoa) PORT="cocoa" ;; static) STATIC=1 ;; - *) + *) usage exit ;; diff --git a/distrib/scripts/mac/macbuild b/distrib/scripts/mac/macbuild index 0f9e0d41c4..ede1414a74 100755 --- a/distrib/scripts/mac/macbuild +++ b/distrib/scripts/mac/macbuild @@ -2,7 +2,8 @@ # you need to change this if you run from outside this dir. if [ "$WXROOT" = "" ]; then - WXROOT=../../.. + scriptDir="$(cd $(dirname $0);pwd)" + WXROOT=$scriptDir/../../.. fi . $WXROOT/distrib/scripts/includes/configure_build.inc @@ -13,11 +14,18 @@ fi # configure-based build scripts, which is why this looks a little empty. if [ "$UNIVERSAL" = "1" ]; then - OTHER_OPTS="--enable-universal_binary " + OTHER_OPTS="$OTHER_OPTS --enable-universal_binary --with-libjpeg=builtin --with-libpng=builtin" fi +mkdir -p builds +cd builds do_build make prefix=$INSTALLDIR install -cd $OLDDIR +if [ "$WXPYTHON" == "1" ]; then + make -C contrib/src/gizmos prefix=$INSTALLDIR install + make -C contrib/src/stc prefix=$INSTALLDIR install +fi + +cd $OLDDIR \ No newline at end of file diff --git a/distrib/scripts/mac/macbuild-lipo b/distrib/scripts/mac/macbuild-lipo index 00e9dd3026..c2a5aa0732 100755 --- a/distrib/scripts/mac/macbuild-lipo +++ b/distrib/scripts/mac/macbuild-lipo @@ -2,60 +2,53 @@ # you need to change this if you run from outside this dir. if [ "$WXROOT" = "" ]; then - WXROOT=../../.. + scriptDir="$(cd $(dirname $0);pwd)" + WXROOT=$scriptDir/../../.. fi . $WXROOT/distrib/scripts/includes/configure_build.inc . $WXROOT/distrib/scripts/mac/mac_options.inc -DIR="bld-ppc" - -export CXX="g++-3.3 -arch ppc" -export CC="gcc-3.3 -arch ppc" -mkdir -p $DIR -cd $DIR -do_build -cd .. - -# Do another build, but with i386 this time -DIR="bld-i386" - -export CXX="g++-4.0 -arch i386" -export CC="gcc-4.0 -arch i386" -mkdir -p $DIR -cd $DIR -do_build -cd .. - -# Copy over everything, then remove files we need to replace with lipo'd versions -mkdir -p bld -cp -R bld-i386/* bld -cp -R bld-i386/.pch bld/.pch -rm bld/lib/*.dylib - -# lipo the files, but make sure not to run it on symbolic links -for item in `cd bld-i386/lib; ls *.dylib` -do - if [ -f bld-i386/lib/$item -a ! -L bld-i386/lib/$item ]; then - lipo -create bld-i386/lib/$item bld-ppc/lib/$item -output bld/lib/$item - else - cp -R bld-i386/lib/$item bld/lib - fi -done - -# make install hacks - the copy operations mess up the timestamps and thus -# cause make to erroneously think that the libraries need rebuilt -touch bld/.pch/wxprec_monodll/wx/*.gch -touch bld/.pch/wxprec_gldll/wx/*.gch -touch bld/*.o -touch bld/lib/* - -# one more hack - inplace wx-config has a hardcoded path in it - we need to -# change that path from bld-i386 to just bld in case someone wants to build things -# in tree. (wxPython does this, for example) -python -c "import os; fname = os.path.abspath('bld/wx-config'); data = open(fname).read(); data = data.replace('bld-i386', 'bld'); open(fname, 'w').write(data)" - -cd bld -make prefix=$INSTALLDIR install - +OTHER_OPTS="$OTHER_OPTS --disable-precomp-headers" + +do_lipo_build(){ + DIR="bld-$1" + + if [ "$1" = "ppc" ]; then + export CXX="g++-3.3 -arch ppc -DMAC_OS_X_VERSION_MAX_ALLOWED=1040" + export CC="gcc-3.3 -arch ppc -DMAC_OS_X_VERSION_MAX_ALLOWED=1040" + export MACOSX_DEPLOYMENT_TARGET=10.3 + else + export CXX="g++-4.0 -arch i386" + export CC="gcc-4.0 -arch i386" + export MACOSX_DEPLOYMENT_TARGET=10.4 + fi + + mkdir -p $DIR + cd $DIR + do_build + + mkdir -p $INSTALLDIR/$1 + + make prefix=$INSTALLDIR/$1 install + + if [ "$WXPYTHON" == "1" ]; then + make -C contrib/src/gizmos prefix=$INSTALLDIR/$1 install + make -C contrib/src/stc prefix=$INSTALLDIR/$1 install + fi + + cd .. +} + +do_lipo_build "ppc" +do_lipo_build "i386" + +python $WXROOT/distrib/scripts/mac/lipo-dir.py $INSTALLDIR/ppc $INSTALLDIR/i386 $INSTALLDIR + +rm -rf $INSTALLDIR/ppc $INSTALLDIR/i386 +python -c "import os; fname = os.path.abspath('$INSTALLDIR/bin/wx-config'); data = open(fname).read(); data = data.replace('ppc/', ''); open(fname, 'w').write(data)" + +if [ $? != 0 ]; then + exit $? +fi -- 2.45.2