On Thursday, 21 November 2013 at 11:18:44 UTC, Andrew Edwards
wrote:
#!/usr/bin/env /bin/bash
Since this script will only be run on Mac OS X there's no point
in using the "env" command. Just hardcode the path to Bash.
##
# Author:: Andrew Edwards
# Version:: Initial created: 2013
# License:: Public Domain
# Create directories to house generated ouput
mkdir -p .work && cd .work
# Fetch source from github
getdmd="git clone -q --progress -bv$(<~/VERSION)
https://github.com/D-Programming-Language";
$getdmd"/dmd.git";
$getdmd"/druntime.git";
$getdmd"/phobos.git";
$getdmd"/tools.git";
# Build DMD, making changes to dmd.conf as necessary
cd dmd;
make -f posix.mak install;
cat ../install/bin/dmd.conf | sed "s/-L--export-dynamic //g" >
../install/bin/dmd.conf2
cat ../install/bin/dmd.conf2 | sed "s/-L-lrt//g" >
../install/bin/dmd.conf
rm ../install/bin/dmd.conf2
Don't patch dmd.conf. Change the makefile to do the right thing
from the beginning.
# Build DRUNTIME
make -C ../druntime -f posix.mak install DMD=../install/bin/dmd
# Build PHOBOS
make -C ../phobos -f posix.mak install DMD=../install/bin/dmd
# Build TOOLS
make -C ../tools -f posix.mak install DMD=../install/bin/dmd
# Move tools to correct location
mv ../tools/generated/osx/default/catdoc ../install/bin
mv ../tools/generated/osx/default/changed ../install/bin
mv ../tools/generated/osx/default/ddemangle ../install/bin
mv ../tools/generated/osx/default/detab ../install/bin
mv ../tools/generated/osx/default/dget ../install/bin
mv ../tools/generated/osx/default/rdmd ../install/bin
mv ../tools/generated/osx/default/tolf ../install/bin
Not all of these tools are currently shipped with DMD. Don't know
if we want to include all of these. We should probably start a
new post about it.
# Generate zip file
ditto ../install ~/.dmg/usr/share/dmd
ditto -jc --keepParent ~/.dmg/usr/share/dmd
~/dmd.$(<~/VERSION).bz2
# Place DMD in path
mkdir -p ~/.dmg/etc/paths.d
cat >~/.dmg/etc/paths.d/dmd <<'EOT'
/usr/share/dmd/bin
/usr/share/dmd/man/man1
EOT
# Generate installer
mkdir -p dmd.$(<~/VERSION)
cat >dmd.$(<~/VERSION)/uninstall.command <<'EOT'
#!/usr/bin/env bash
sudo -p "Please provide your password to uninstall DMD: " rm
-rf /usr/share/dmd
sudo -p "Please provide your password to uninstall DMD: " rm -f
/etc/paths.d/dmd
Don't remove the whole directory like that. Explicitly remove all
files the installer put there and then remove the directory if
it's empty. The user could have placed some own files in that
directory. It happened with the latest Windows installer
resulting in some angry posts.
echo "Uninstallation complete!\n"
EOT
chmod +x dmd.$(<~/VERSION)/uninstall.command
pkgbuild --identifier org.dlang.pkg.app --root ~/.dmg
dmd.$(<~/VERSION)/dmd.$(<~/VERSION).pkg
hdiutil create -ov -srcfolder dmd.$(<~/VERSION)
~/dmd.$(<~/VERSION).dmg
You're not using the dmd2.pmdoc file or corresponding. That will
result in missing readme, licenses and other information.
cd ~ && rm -rf .dmg .work
</end file>
--
/Jacob Carlborg