X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b42b447cf4b272dd326c083af0f8ca64092630e0..b483f5fed274a9152faab05b0ebb4e5f5158c506:/wxPython/distrib/mac/wxPythonOSX/build diff --git a/wxPython/distrib/mac/wxPythonOSX/build b/wxPython/distrib/mac/wxPythonOSX/build index b3221c8100..2f3becd3c7 100755 --- a/wxPython/distrib/mac/wxPythonOSX/build +++ b/wxPython/distrib/mac/wxPythonOSX/build @@ -3,6 +3,8 @@ # Build wxMac and wxPythonOSX from the tarball and then make an # Installer package out of it. +#set -o xtrace + spectemplate=distrib/wxPythonFull.spec.in if [ ! -d wxPython -o ! -e ${spectemplate} ]; then @@ -10,19 +12,31 @@ if [ ! -d wxPython -o ! -e ${spectemplate} ]; then exit 1 fi +if [ "$UID" != "0" ]; then + echo "-------------------------------------------------------" + echo " WARNING: I will be unable to change ownership of files" + echo " unless this script is run as root or via sudo" + echo "-------------------------------------------------------" +fi + #---------------------------------------------------------------------- # Check Parameters function usage { echo "" - echo "Usage: $0 [panther|jaguar] [command flags...]" + echo "Usage: $0 PYVER [command flags...]" echo "" - echo " panther Build for Apple's python in /usr/bin, such as on Panther" - echo " jaguar Build for a python in /usr/local/bin, such as on Jaguar" + echo " PYVER Python version to use to do the build. A" + echo " matching python\$PYVER must be found on the PATH" echo "" echo "optional command flags:" echo " skiptar Don't unpack the tarball" - echo " use_cvs Use the CVS workspace instead of a tarfile" + echo " inplace Don't use the tarball, build from the CVS tree instead" + echo " (The Docs and Demo tarballs are still required for a full build.)" + echo " reswig Regenerate SWIG wrappers" + echo " universal Generate Universal wxWidgets binary (requires Universal Python " + echo " to general Universal wxPython)." + echo " unicode Make a unicode build" echo " skipconfig Don't run configure" echo " skipbuild Don't build wxWidgets or wxPython" echo " skipinstall Don't do the installation step" @@ -32,31 +46,43 @@ function usage { } -if [ $# -lt 1 ]; then - usage +PYVER=$1 +if [ "$PYVER" != "" ] && which python$PYVER && which pythonw$PYVER; then + PYTHON=`which python$PYVER` + PYTHONW=`which pythonw$PYVER` +else + usage; exit 1 fi -KIND=$1 -case $KIND in - panther) PYTHON=/usr/bin/python ;; - jaguar) PYTHON=/usr/local/bin/python ;; - *) usage; exit 1 ;; -esac -PYTHONW=${PYTHON}w shift +skiptar=no +skipconfig=no +skipbuild=no +skipinstall=no +skipdmg=no +skipclean=no +inplace=no +unicode=no +debug=no +reswig=no +universal=no for flag in $*; do case ${flag} in - skiptar) skiptar=1 ;; - use_cvs) skiptar=1; use_cvs=1 ;; - skipconfig) skipconfig=1; skiptar=1 ;; - skipbuild) skipbuild=1; skipconfig=1; skiptar=1 ;; - skipinstall) skipinstall=1 ;; - skipdmg) skipdmg=1 ;; - skipclean) skipclean=1 ;; - + skiptar) skiptar=yes ;; + skipconfig) skipconfig=yes; skiptar=yes ;; + skipbuild) skipbuild=yes; skipconfig=yes; skiptar=yes ;; + skipinstall) skipinstall=yes ;; + skipdmg) skipdmg=yes ;; + skipclean) skipclean=yes ;; + inplace) inplace=yes; skiptar=yes ;; + unicode) unicode=yes ;; + ansi) unicode=no ;; + debug) debug=yes ;; + reswig) reswig=yes ;; + universal) universal=yes ;; *) echo "Unknown flag \"${flag}\"" usage exit 1 @@ -64,29 +90,105 @@ for flag in $*; do done + +OSX_VERSION=`sw_vers -productVersion` +OSX_VERSION=${OSX_VERSION:0:4} + +case $OSX_VERSION in + 10.4) TAG=macosx10.4 ;; + 10.3) TAG=macosx10.3 ;; + 10.2) TAG=macosx10.2 ;; + *) usage; exit 1 ;; +esac + +if [ $universal = yes ]; then + TAG=universal10.4 +fi + + + VERSION=`$PYTHON -c "import setup;print setup.VERSION"` -PYVER=`$PYTHON -c "import sys; print sys.version[:3]"` +SHORTVER=`echo $VERSION | cut -c 1,2,3` PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"` PYLIB=$PYPREFIX/lib/python$PYVER SITEPACKAGES=$PYLIB/site-packages -TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION -TARBALL=$TARBALLDIR/wxPythonSrc-$VERSION.tar.gz +if [ $unicode == yes ]; then + CHARTYPE=unicode + UNICODEOPT=--enable-unicode + PYUNICODEOPT=1 +else + CHARTYPE=ansi + UNICODEOPT=--disable-unicode + PYUNICODEOPT=0 +fi + +if [ $debug == yes ]; then + DEBUG_FLAG=--enable-debug + PYDEBUGOPT=--debug +else + DEBUG_FLAG=--enable-debug_flag + PYDEBUGOPT= +fi + + +# Test if the python we are using is the System installed framework +# or one that was installed by the user. This changes where the +# site-packages (or its alias) is located in the installer tree. +APPLE_PYTHON=no +if [ -e /Library/Python/$PYVER ] && [ `dirname $PYTHON` == "/usr/bin" ]; then + APPLE_PYTHON=yes +fi + + + +if [ -z "$TARBALLDIR" ]; then + # this is a spot on my fileserver where the tarballs go, adjust + # as needed for where you put the wxPython tarball, or set + # TARBALLDIR before invoking this script... + TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION +fi +TARBALL=$TARBALLDIR/wxPython-src-$VERSION.tar.bz2 + +if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.bz2 ]; then + echo "-------------------------------------------------------" + echo " WARNING: Demo tarball not found, will skip building " + echo " the Demo app bundle and etc." + echo " $TARBALLDIR/wxPython-demo-$VERSION.tar.bz2" + echo "-------------------------------------------------------" +fi + +if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.bz2 ]; then + echo "-------------------------------------------------------" + echo " WARNING: Docs tarball not found, will skip building " + echo " the the wxDocsViewer app bundle and etc." + echo " $TARBALLDIR/wxPython-docs-$VERSION.tar.bz2" + echo "-------------------------------------------------------" +fi + + + -PREFIX=/usr/lib/wxPython-$VERSION -BINPREFIX=/usr/bin +PREFIX=/usr/local/lib/wxPython-$CHARTYPE-$VERSION +BINPREFIX=/usr/local/bin +SWIGBIN=/opt/swig/bin/swig WXROOT=`dirname $PWD` PROGDIR="`dirname \"$0\"`" TMPDIR=$PWD/_build_dmg BUILDROOT=$TMPDIR/build -INSTALLROOT=$TMPDIR/install -INSTALLDEVEL=$TMPDIR/install-devel + +INSTALLROOT=$TMPDIR/install-root +INSTALLAPPS=$TMPDIR/install-apps + DMGDIR=$TMPDIR/dmg +DMGROOT=$DMGDIR/root +DMGAPPS=$DMGDIR/apps + RESOURCEDIR=$PROGDIR/resources DESTDIR=$PWD/dist -SRCROOT=$BUILDROOT/wxPythonSrc-$VERSION +SRCROOT=$BUILDROOT/wxPython-src-$VERSION #---------------------------------------------------------------------- @@ -94,12 +196,16 @@ SRCROOT=$BUILDROOT/wxPythonSrc-$VERSION mkdir -p $BUILDROOT mkdir -p $INSTALLROOT -#mkdir -p $INSTALLDEVEL +mkdir -p $INSTALLAPPS + rm -rf $DMGDIR -mkdir -p $DMGDIR/root/Apps -mkdir -p $DMGDIR/root/Docs -mkdir -p $DMGDIR/root/Samples +mkdir -p $DMGROOT +mkdir -p $DMGAPPS/Docs +mkdir -p $DMGAPPS/Samples +if [ ! -d $DESTDIR ]; then + mkdir $DESTDIR +fi pushd $BUILDROOT @@ -107,181 +213,194 @@ pushd $BUILDROOT #---------------------------------------------------------------------- # Unpack the tarball -if [ -z "$skiptar" ]; then +if [ $skiptar != yes ]; then echo Unarchiving tarball... - tar xzf $TARBALL + tar xjf $TARBALL fi -if [ "$use_cvs" = 1 ]; then - # copy the cvs workspace, except for build dirs - - mkdir -p wxPythonSrc-$VERSION +if [ $inplace = no ]; then + # make a build dir and cd to it. + cd wxPython-src-$VERSION + WXDIR=`pwd` + mkdir -p $WXDIR/bld + cd $WXDIR/bld + WXBLD=$WXDIR/bld +else - echo Finding updated files... - if [ -e .last_copy ]; then - FEXPR="-cnewer .last_copy" - fi - MEASURE=$WXROOT// - find $WXROOT $FEXPR -print \ - | grep -v $WXROOT/bld \ - | grep -v wxPython/build \ - | grep -v wxPython/_build \ - | grep -v CVS \ - | grep -v .pyc \ - | cut -b ${#MEASURE}- > filelist - - for x in `cat filelist`; do - if [ -d "$WXROOT/$x" ]; then - mkdir -p "wxPythonSrc-$VERSION/$x" - else - echo $x - cp -p "$WXROOT/$x" "wxPythonSrc-$VERSION/$x" - fi - done - - touch .last_copy + # If building "inplace" then our build dir will be off of the + # WXROOT like normal, adjust the variables to find things that + # way. + WXBLD=$WXROOT/build-$CHARTYPE + mkdir -p $WXBLD + cd $WXBLD + WXDIR=.. + SRCROOT=$WXROOT fi - -cd wxPythonSrc-$VERSION -WXDIR=`pwd` -mkdir -p $WXDIR/bld -cd $WXDIR/bld +echo "Using wx root dir: $WXROOT" +echo "Using build dir: $WXBLD" +echo "Using source tree: $WXDIR" #---------------------------------------------------------------------- +if [ $OSX_VERSION = 10.3 -o $OSX_VERSION = 10.4 ]; then + OTHER_CFG_OPTS=--enable-mediactrl +fi # Configure wxWidgets -if [ -z "$skipconfig" ]; then - ../configure \ +if [ $skipconfig != yes -a $universal != yes ]; then + $WXDIR/configure \ --prefix=$PREFIX \ --with-mac \ - --disable-monolithic \ + --enable-monolithic \ --with-opengl \ - --enable-geometry \ - --enable-optimise \ --enable-sound \ --enable-display \ + --enable-geometry \ + --enable-graphics_ctx \ + $DEBUG_FLAG \ --enable-precomp=no \ - \ - --with-libjpeg=builtin \ - --with-libpng=builtin \ - --with-libtiff=builtin \ - --with-zlib=builtin \ - \ - --enable-debug_flag + --enable-optimise \ + --disable-debugreport \ + --disable-precompiled-headers \ + $UNICODEOPT $OTHER_CFG_OPTS fi # Build wxWidgets and wxPython -if [ -z "$skipbuild" ]; then +if [ $skipbuild != yes ]; then # Make wxWidgets and some contribs - make - make -C contrib/src/gizmos - make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" - make -C contrib/src/stc - make -C contrib/src/xrc - - if [ ! -e $WXDIR/include/wx/gizmos ]; then - # Make some links so the wxPython build can find all the headers it needs - pushd $WXDIR/include/wx - ln -s ../../contrib/include/wx/* . - popd + WXBLD_CONFIG="$WXBLD/wx-config" + if [ $universal = yes ]; then + export WXROOT + export BUILDPREFIX=$PREFIX + export INSTALLDIR=$INSTALLROOT$PREFIX + $WXDIR/distrib/scripts/mac/macbuild wxpython universal $CHARTYPE + else + make $MAKEJOBS + make $MAKEJOBS -C contrib/src/gizmos + make $MAKEJOBS -C contrib/src/stc + fi + + SWIGIT=0 + if [ $reswig = yes ]; then + SWIGIT=1 fi # Build wxPython - cd $WXDIR/wxPython + cd $WXROOT/wxPython $PYTHON setup.py \ + UNICODE=$PYUNICODEOPT \ NO_SCRIPTS=1 \ - WX_CONFIG="$WXDIR/bld/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/bld" \ + EP_ADD_OPTS=1 \ + WX_CONFIG="$WXBLD_CONFIG --inplace" \ + BUILD_BASE=$WXBLD/wxPython \ + SWIG=$SWIGBIN \ + USE_SWIG=$SWIGIT \ build - - - # Build wxrc (XRC resource tool) - cd $WXDIR/bld/contrib/utils/wxrc - make - strip wxrc - fi #---------------------------------------------------------------------- -if [ -z "$skipinstall" ]; then +if [ $skipinstall != yes ]; then # Install wxWidgets - cd $WXDIR/bld - make prefix=$INSTALLROOT$PREFIX install - make -C contrib/src/gizmos prefix=$INSTALLROOT$PREFIX install - make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" prefix=$INSTALLROOT/$PREFIX install - make -C contrib/src/stc prefix=$INSTALLROOT$PREFIX install - make -C contrib/src/xrc prefix=$INSTALLROOT$PREFIX install + cd $WXBLD + if [ $universal != yes ]; then + make prefix=$INSTALLROOT$PREFIX install + make -C contrib/src/gizmos prefix=$INSTALLROOT$PREFIX install + make -C contrib/src/stc prefix=$INSTALLROOT$PREFIX install + fi + # relink wx-config with a relative link + cd $INSTALLROOT$PREFIX/bin + rm wx-config + ln -s ../lib/wx/config/* wx-config # and wxPython - cd $WXDIR/wxPython + cd $WXROOT/wxPython $PYTHON setup.py \ + UNICODE=$PYUNICODEOPT \ NO_SCRIPTS=1 \ - WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \ + EP_ADD_OPTS=1 \ + WX_CONFIG="$INSTALLROOT$PREFIX/bin/wx-config --prefix=$INSTALLROOT$PREFIX" \ + BUILD_BASE=$WXBLD/wxPython \ install \ --root=$INSTALLROOT - # Apple's Python (on Panther) sym-links the site-packages dir to + # Apple's Python Framework (such as what comes with Panther) + # sym-links the site-packages dir in the framework to # /Library/Python/$PYVER so we need to move the files so they are # installed in the physical location, not the virtual one. - if [ "$KIND" = "panther" ]; then + if [ $APPLE_PYTHON == yes ]; then + if [ -e $INSTALLROOT/Library/Python/$PYVER ]; then + rm -r $INSTALLROOT/Library/Python/$PYVER + fi mkdir -p $INSTALLROOT/Library/Python/$PYVER mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library/Python/$PYVER rm -r $INSTALLROOT/System SITEPACKAGES=/Library/Python/$PYVER fi - # install wxPython's tool scripts mkdir -p $INSTALLROOT$BINPREFIX - cd $WXDIR/wxPython/scripts + cd $WXROOT/wxPython/scripts python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX - # Install wxrc - cp $WXDIR/bld/contrib/utils/wxrc/wxrc $INSTALLROOT$BINPREFIX - - - # install the wxPython headers - cd $WXDIR/wxPython - cp -R include $INSTALLROOT$PREFIX - mkdir -p $INSTALLROOT$PREFIX/include/wx/wxPython/i_files - cp src/*.i $INSTALLROOT$PREFIX/include/wx/wxPython/i_files + # Remove the .pyc/.pyo files they just take up space and can be recreated + # during the install. + pushd $WXROOT/wxPython + $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT > /dev/null + popd + # Set premissions for files in $INSTALLROOT + if [ "$UID" = "0" ]; then + chown -R root:admin $INSTALLROOT + chmod -R g+w $INSTALLROOT + fi +fi - # Set premissions for files in $INSTALLROOT - chown -R root:admin $INSTALLROOT - chmod -R g+w $INSTALLROOT +if [ $APPLE_PYTHON == yes ]; then + SITEPACKAGES=/Library/Python/$PYVER fi +PKGDIR=`cat $INSTALLROOT$SITEPACKAGES/wx.pth` popd #---------------------------------------------------------------------- # Make the Installer packages and disk image -if [ -z "$skipdmg" ]; then - - # Remove the .pyc/.pyo files they just take up space and can be recreated - # during the install. - $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT +if [ $skipdmg != yes ]; then + #----------------------------------------------- + # The main runtime installer package # Make the welcome message - case $KIND in - panther) W_MSG="the Panther (OS X 10.3.x) version of" ;; - jaguar) W_MSG="the Jaguar (OS X 10.2.x) version of" ;; + case $OSX_VERSION in + 10.4) W_MSG="the Tiger (OS X 10.4.x Intel) version of" ;; + 10.3) W_MSG="the Panther (OS X 10.3.x) version of" ;; + 10.2) W_MSG="the Jaguar (OS X 10.2.x) version of" ;; esac + + if [ $universal == yes ]; then + W_MSG="the Universal (OS X 10.4.x and above) version of" + fi + + cat > $RESOURCEDIR/Welcome.txt < $RESOURCEDIR/postflight < "$DMGDIR/root/README 1st.txt" < "$DMGROOT/README 1st.txt" < "$DMGAPPS/README 1st.txt" < "$DMGAPPS/Docs/Build ERROR.txt" < "$DMGAPPS/Docs/README 1st.txt" < "$DMGAPPS/Samples/Build ERROR.txt" <