[Python-checkins] python/dist/src/Mac/OSX/Dist README.txt,NONE,1.1 build,NONE,1.1 makedmg,NONE,1.1

jackjansen@users.sourceforge.net jackjansen@users.sourceforge.net
Fri, 21 Mar 2003 15:52:38 -0800


Update of /cvsroot/python/python/dist/src/Mac/OSX/Dist
In directory sc8-pr-cvs1:/tmp/cvs-serv29757

Added Files:
	README.txt build makedmg 
Log Message:
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.


--- NEW FILE: README.txt ---
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.


--- NEW FILE: build ---
#!/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


--- NEW FILE: makedmg ---
#!/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"; }
}