summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2003-03-21 23:52:36 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2003-03-21 23:52:36 (GMT)
commit8806d47aff795338346f24c610382bdcf618c46e (patch)
tree46bb3be26f1dcf85e37b83bbd494b91860662bc5
parent5c83bb0f4a53f65fa70c3bbf5ddbfbe88d01bf25 (diff)
downloadcpython-8806d47aff795338346f24c610382bdcf618c46e.zip
cpython-8806d47aff795338346f24c610382bdcf618c46e.tar.gz
cpython-8806d47aff795338346f24c610382bdcf618c46e.tar.bz2
Tools to build a disk image with a binary installer for MacPython-OSX,
donated by Robin Dunn and the rest of the wxPythonMac crew. These are the versions from cvs.wxwindows.org as of 22-Mar-03, checked in for reference.
-rw-r--r--Mac/OSX/Dist/README.txt3
-rwxr-xr-xMac/OSX/Dist/build129
-rwxr-xr-xMac/OSX/Dist/makedmg95
-rw-r--r--Mac/OSX/Dist/resources/Welcome.txt6
-rwxr-xr-xMac/OSX/Dist/resources/postflight67
5 files changed, 300 insertions, 0 deletions
diff --git a/Mac/OSX/Dist/README.txt b/Mac/OSX/Dist/README.txt
new file mode 100644
index 0000000..89ecd2b
--- /dev/null
+++ b/Mac/OSX/Dist/README.txt
@@ -0,0 +1,3 @@
+This is a set of build scripts and such for MacPython-OSX 2.3 that I
+will use until there are standard distributions from Jack.
+
diff --git a/Mac/OSX/Dist/build b/Mac/OSX/Dist/build
new file mode 100755
index 0000000..f684d43
--- /dev/null
+++ b/Mac/OSX/Dist/build
@@ -0,0 +1,129 @@
+#!/bin/sh -e
+#----------------------------------------------------------------------
+# Build MacPython 2.3 and make an Installer package of it
+
+# TODO: Parameterize the versions, builddirs, etc...
+
+# Script configs
+PYVERSION=2.3a2
+PYVER=2.3
+BUILDNUM=3
+DOCLEANUP=no
+
+PROGDIR="`dirname \"$0\"`"
+TMPDIR=/tmp/_py
+#TMPDIR=/projects/_py
+
+BUILDROOT=$TMPDIR/build
+INSTALLROOT=$TMPDIR/install
+DMGDIR=$TMPDIR/dmg
+RESOURCEDIR=$PROGDIR/resources
+DESTDIR=/projects/wx/wxPython/dist
+PYTHONSRC=/projects/Python-$PYVERSION
+WASTEDIR=/projects/waste
+
+# Setup
+mkdir -p $BUILDROOT
+mkdir -p $INSTALLROOT
+rm -rf $DMGDIR
+mkdir -p $DMGDIR/root
+
+
+# Configure and build Python
+pushd $BUILDROOT
+
+# Check if we should build and install the docs, but only if it
+# doesn't appear to be done already. TODO: fix this path to be version independent
+if [ ! -e "build/temp.darwin-6.3-Power Macintosh-2.3/build-html/build-html idx" ]; then
+ read -p "Build the Python docs? (y/N)? " builddocs
+fi
+
+# If the filesystem is case-sensitive then "python" will be built, but
+# some parts of the install expect "python.exe which is what is built
+# on a case-insensitive filesystem. Make a link just in case it is
+# needed.
+if [ ! -e python.exe ]; then
+ ln -s python python.exe
+fi
+
+# Make a link to the waste dir so that lib can be found. This allows
+# the PythonIDE to be built
+if [ ! -e waste ]; then
+ ln -s $WASTEDIR waste
+fi
+
+$PYTHONSRC/configure --enable-framework=$INSTALLROOT/Library/Frameworks LDFLAGS=-Wl,-x
+make
+make frameworkinstall
+
+if [ "$builddocs" = "y" -o "$builddocs" = "Y" ]; then
+ ./python.exe $PYTHONSRC/Mac/OSX/setupDocs.py build
+ echo ""
+ read -p "When the help indexer is done press Enter..." ans
+ ./python.exe $PYTHONSRC/Mac/OSX/setupDocs.py install \
+ --prefix=$INSTALLROOT/Library/Frameworks/Python.framework/Versions/$PYVER
+fi
+
+popd
+
+
+
+# Make the Installer package:
+# First, remove the unix tools as their paths will be wrong. We'll recreate
+# them in the postinstall.
+rm -r $INSTALLROOT/usr
+
+# Next, remove the .pyc/.pyo files
+python $PROGDIR/../zappycfiles.py $INSTALLROOT/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER
+
+# Make the welcome message
+cat > $RESOURCEDIR/Welcome.txt <<EOF
+Welcome!
+
+This program will install Python $PYVERSION for Mac OS X as a Framework.
+
+Build number: $BUILDNUM
+Build date: `date`
+EOF
+
+
+# fix a bug in the IDLE install
+IDLERES=$INSTALLROOT/Applications/MacPython-2.3/IDLE.app/Contents/Resources
+mv $IDLERES/idlelib/idle $IDLERES
+
+
+# Finally, build the package...
+rm -rf MacPython-OSX.pkg
+python $PROGDIR/../buildpkg.py \
+ --Title=MacPython-OSX \
+ --Version=$PYVERSION-$BUILDNUM \
+ --Description="Python $PYVERSION for Mac OS X, framework based" \
+ --NeedsAuthorization="YES" \
+ --Relocatable="NO" \
+ --InstallOnly="YES" \
+ $INSTALLROOT \
+ $RESOURCEDIR
+
+## --RootVolumeOnly="YES" \
+
+# ...and then make a disk image containing the package.
+mv MacPython-OSX.pkg $DMGDIR/root
+$PROGDIR/../makedmg $DMGDIR/root $DMGDIR MacPython-OSX-$PYVERSION-$BUILDNUM
+
+echo Moving $DMGDIR/MacPython-OSX-$PYVERSION-$BUILDNUM to $DESTDIR
+mv $DMGDIR/MacPython-OSX-$PYVERSION-$BUILDNUM.dmg $DESTDIR
+
+
+# Cleanup build/install dirs
+if [ $DOCLEANUP = yes ]; then
+ echo "Cleaning up..."
+ rm -rf $BUILDROOT
+ rm -rf $INSTALLROOT
+ rm -rf $DMGDIR
+else
+ echo "Cleanup is disabled. You should remove these dirs when done:"
+ echo " $BUILDROOT"
+ echo " $INSTALLROOT"
+ echo " $DMGDIR"
+fi
+
diff --git a/Mac/OSX/Dist/makedmg b/Mac/OSX/Dist/makedmg
new file mode 100755
index 0000000..c89be80
--- /dev/null
+++ b/Mac/OSX/Dist/makedmg
@@ -0,0 +1,95 @@
+#!/usr/bin/perl -w
+#
+# make disk image from folder
+#
+# usage: makedmg src dst name
+#
+# (C)opyright 2002 Frank Vercruesse
+
+
+$hdiUtilExec = "/usr/bin/hdiutil";
+$hdiDrvExec = "/usr/bin/hdid";
+$newfsExec = "/sbin/newfs_hfs";
+$duExec = "/usr/bin/du";
+$dittoExec = "/usr/bin/ditto";
+
+if ( $#ARGV != 2 ) {
+ die "Wrong number of arguments.\nUsage: makedmg src dst name\n";
+}
+
+&make_dmg( $ARGV[0], $ARGV[1], $ARGV[2]);
+
+
+sub make_dmg
+{
+ my $src = $_[0];
+ my $dst = $_[1];
+ my $name = $_[2];
+
+ # check dirs
+ if( not -d $dst && -d $src ) {
+ die "src and dst must be directories\n";
+ }
+
+ # calc disk image size
+ if( not open( MYPIPE, "$duExec -sk \"${src}\" |") ) {
+ die "couldn't open pipe\n";
+ }
+ (my $dmgsize) = split( /\s+/, <MYPIPE>);
+ close( MYPIPE);
+ $dmgsize /= 1024;
+ $dmgsize = int($dmgsize + 4);
+ if( $dmgsize < 5 ) {
+ $dmgsize = 5
+ }
+
+ # create disk image
+ system "cd \"$dst\"; $hdiUtilExec create -megabytes $dmgsize -ov \"_${name}\"";
+ if( $? ) { die "couldn't create disk image\n"; }
+
+ # format disk image
+ if( not open( MYPIPE, "cd \"$dst\"; $hdiDrvExec -nomount \"_${name}.dmg\" |") ) {
+ die "couldn't open pipe\n";
+ }
+ (my $dev) = split( /\t/, <MYPIPE>);
+ $dev =~ s/^(.*\S)\s*$/$1/;
+ my( $part, $raw, $pname);
+ while( <MYPIPE> ) {
+ ($part,$pname) = split /\t/;
+ if( $pname =~ m/^Apple_HFS/ ) {
+ $part =~ s/^\s*(.*\S)\s*$/$1/;
+ $raw = $part;
+ $raw =~ s/^(\/dev\/)(.+)/$1r$2/;
+ last;
+ }
+ }
+ close( MYPIPE);
+ system "cd \"$dst\" ; $newfsExec -v \"$name\" $raw";
+ if( $? ) { system "$hdiUtilExec eject $dev"; die "couldn't format disk image\n"; }
+ system "$hdiUtilExec eject $dev";
+ if( $? ) { die "couldn't eject disk image\n"; }
+
+ # copy files
+ if( not open( MYPIPE, "cd \"$dst\"; $hdiDrvExec \"_${name}.dmg\" |") ) {
+ die "couldn't open pipe\n";
+ }
+ ($dev) = split( /\t/, <MYPIPE>);
+ $dev =~ s/^(.*\S)\s*$/$1/;
+ my $vname;
+ while( <MYPIPE> ) {
+ ($part,$pname,$vname) = split /\t/;
+ if( $pname =~ m/^Apple_HFS/ ) {
+ $vname =~ s/^(.*\S)\s*$/$1/;
+ last;
+ }
+ }
+ close( MYPIPE);
+ system "$dittoExec \"${src}\" \"${vname}\"";
+ if( $? ) { system "$hdiUtilExec eject $dev"; die "couldn't copy files\n"; }
+ system "$hdiUtilExec eject $dev";
+ if( $? ) { die "couldn't eject disk image\n"; }
+
+ # convert disk image
+ system "cd \"$dst\"; $hdiUtilExec convert \"_${name}.dmg\" -format UDCO -o \"${name}\"";
+ if( $? ) { die "couldn't convert disk image\n"; }
+}
diff --git a/Mac/OSX/Dist/resources/Welcome.txt b/Mac/OSX/Dist/resources/Welcome.txt
new file mode 100644
index 0000000..9ecb080
--- /dev/null
+++ b/Mac/OSX/Dist/resources/Welcome.txt
@@ -0,0 +1,6 @@
+Welcome!
+
+This program will install Python 2.3a2 for Mac OS X as a Framework.
+
+Build number: 3
+Build date: Thu Mar 20 18:54:52 PST 2003
diff --git a/Mac/OSX/Dist/resources/postflight b/Mac/OSX/Dist/resources/postflight
new file mode 100755
index 0000000..25c12c1
--- /dev/null
+++ b/Mac/OSX/Dist/resources/postflight
@@ -0,0 +1,67 @@
+#!/bin/sh
+#----------------------------------------------------------------------
+# Create the unix tools and compile the .py files after Python has been
+# installed.
+#----------------------------------------------------------------------
+
+PYVER=2.3
+
+PKG=$1
+DEST=$2
+
+
+# if destination is / then use usr/local/bin, otherwise just bin
+if [ "$DEST" = "/" ]; then
+ TOOLDIR=/usr/local/bin
+ DEST=
+else
+ TOOLDIR=$DEST/bin
+fi
+
+# Make sure the dir exists
+mkdir -p $TOOLDIR
+
+# Make some links to the python executable
+if [ -e $TOOLDIR/python$PYVER ]; then
+ rm $TOOLDIR/python$PYVER
+fi
+ln -fs $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/bin/python $TOOLDIR/python$PYVER
+
+if [ -e $TOOLDIR/python ]; then
+ rm $TOOLDIR/python
+fi
+ln -fs python$PYVER $TOOLDIR/python
+
+
+# make the pythonw script
+cat > $TOOLDIR/pythonw <<EOF
+#!/bin/sh
+exec "$DEST/Library/Frameworks/Python.framework/Versions/$PYVER/Resources/Python.app/Contents/MacOS/python" "\$@"
+EOF
+chmod +x $TOOLDIR/pythonw
+
+
+# Compile the .py files in the Python library to .pyc's and then .pyo's
+$TOOLDIR/python -Wi -tt \
+ $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/compileall.py \
+ -x badsyntax -x site-packages $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER
+
+$TOOLDIR/python -Wi -tt -O \
+ $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/compileall.py \
+ -x badsyntax -x site-packages $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER
+
+
+# Make the site-packages and other dirs writable by the admin.
+for d in $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/site-packages \
+ $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/bin \
+ $DEST/Applications/MacPython-$PYVER; do
+ chgrp -R admin $d
+ chmod -R g+w $d
+done
+
+
+# The link in the app bundles needs updated.
+for app in BuildApplet IDLE PackageManager PythonIDE; do
+ ln -s $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/Resources/Python.app/Contents/MacOS/python \
+ $DEST/Applications/MacPython-$PYVER/$app.app/Contents/MacOS
+done