From a96edf8a0e738a28e2a3d9bb40dcf4d88ca649bb Mon Sep 17 00:00:00 2001 From: simon Date: Sun, 23 Jan 2005 11:20:31 +0000 Subject: [PATCH] Added a framework for putting things other than the binary into a Mac OS X application bundle, and provided an icon for Puzzles. Also renamed the OS X source file from macosx.m to osx.m, so that it can sit beside other things such as osx-info.plist and not cause enormously long filenames. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5179 cda61777-01e9-0310-a592-d414129be87e --- Recipe | 2 +- mkfiles.pl | 39 +++++++++++++++++++++++++++++++-------- osx-info.plist | 8 ++++++++ osx.icns | Bin 0 -> 48589 bytes macosx.m => osx.m | 6 ++++-- 5 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 osx-info.plist create mode 100644 osx.icns rename macosx.m => osx.m (99%) diff --git a/Recipe b/Recipe index 99c800b..36143a9 100644 --- a/Recipe +++ b/Recipe @@ -39,7 +39,7 @@ rect : [G] WINDOWS COMMON rect pattern : [G] WINDOWS COMMON pattern # Mac OS X unified application containing all the puzzles. -Puzzles : [MX] macosx COMMON ALL +Puzzles : [MX] osx osx.icns osx-info.plist COMMON ALL # The `nullgame' source file is a largely blank one, which contains # all the correct function definitions to compile and link, but diff --git a/mkfiles.pl b/mkfiles.pl index 382a40b..8af1939 100755 --- a/mkfiles.pl +++ b/mkfiles.pl @@ -135,9 +135,7 @@ foreach $i (@prognames) { $file = "$1.r"; $depends{$j} = [$file]; push @scanlist, $file; - } elsif ($j =~ /\.lib$/) { - # libraries don't have dependencies - } else { + } elsif ($j !~ /\./) { $file = "$j.c"; $file = "$j.m" unless &findfile($file); $depends{$j} = [$file]; @@ -259,7 +257,7 @@ sub objects { } elsif ($i =~ /^(.*)\.lib/) { $y = $1; ($x = $ltmpl) =~ s/X/$y/; - } else { + } elsif ($i !~ /\./) { ($x = $otmpl) =~ s/X/$i/; } push @ret, $x if $x ne ""; @@ -267,6 +265,19 @@ sub objects { return join " ", @ret; } +sub special { + my ($prog, $suffix) = @_; + my @ret; + my ($i, $x, $y); + @ret = (); + foreach $i (@{$programs{$prog}}) { + if (substr($i, (length $i) - (length $suffix)) eq $suffix) { + push @ret, $i; + } + } + return join " ", @ret; +} + sub splitline { my ($line, $width, $splitchar) = @_; my ($result, $len); @@ -1133,10 +1144,22 @@ if (defined $makefiles{'osx'}) { foreach $p (&prognames("MX")) { ($prog, $type) = split ",", $p; $objstr = &objects($p, "X.o", undef, undef); - print "${prog}: ${prog}.app/Contents/MacOS/$prog\n\n"; - print "${prog}.app:\n\tmkdir \$\@\n"; - print "${prog}.app/Contents: ${prog}.app\n\tmkdir \$\@\n"; - print "${prog}.app/Contents/MacOS: ${prog}.app/Contents\n\tmkdir \$\@\n"; + $icon = &special($p, ".icns"); + $infoplist = &special($p, "info.plist"); + print "${prog}.app:\n\tmkdir -p \$\@\n"; + print "${prog}.app/Contents: ${prog}.app\n\tmkdir -p \$\@\n"; + print "${prog}.app/Contents/MacOS: ${prog}.app/Contents\n\tmkdir -p \$\@\n"; + $targets = "${prog}.app/Contents/MacOS/$prog"; + if (defined $icon) { + print "${prog}.app/Contents/Resources: ${prog}.app/Contents\n\tmkdir -p \$\@\n"; + print "${prog}.app/Contents/Resources/${prog}.icns: ${prog}.app/Contents/Resources $icon\n\tcp $icon \$\@\n"; + $targets .= " ${prog}.app/Contents/Resources/${prog}.icns"; + } + if (defined $infoplist) { + print "${prog}.app/Contents/Info.plist: ${prog}.app/Contents/Resources $infoplist\n\tcp $infoplist \$\@\n"; + $targets .= " ${prog}.app/Contents/Info.plist"; + } + print &splitline("${prog}: $targets", 69) . "\n\n"; print &splitline("${prog}.app/Contents/MacOS/$prog: ". "${prog}.app/Contents/MacOS " . $objstr), "\n"; $libstr = &objects($p, undef, undef, "-lX"); diff --git a/osx-info.plist b/osx-info.plist new file mode 100644 index 0000000..54e8af3 --- /dev/null +++ b/osx-info.plist @@ -0,0 +1,8 @@ + + + + + CFBundleIconFile + Puzzles.icns + + diff --git a/osx.icns b/osx.icns new file mode 100644 index 0000000000000000000000000000000000000000..b4346a0da15a60eccd8c7112317afeb24cb5e4e8 GIT binary patch literal 48589 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