[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"; }
}