diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-01-23 11:20:31 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-01-23 11:20:31 +0000 |
| commit | 0ae8782bc6a7ee69b3e7cf079f946e52546882bb (patch) | |
| tree | 5bf34e7dc5fef5226bf6fd8593cb637864a670a3 | |
| parent | f80d9c6d49eaf08d65420a3a5b47db5165add724 (diff) | |
| download | puzzles-0ae8782bc6a7ee69b3e7cf079f946e52546882bb.zip puzzles-0ae8782bc6a7ee69b3e7cf079f946e52546882bb.tar.gz puzzles-0ae8782bc6a7ee69b3e7cf079f946e52546882bb.tar.bz2 puzzles-0ae8782bc6a7ee69b3e7cf079f946e52546882bb.tar.xz | |
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.
[originally from svn r5179]
| -rw-r--r-- | Recipe | 2 | ||||
| -rwxr-xr-x | mkfiles.pl | 39 | ||||
| -rw-r--r-- | osx-info.plist | 8 | ||||
| -rw-r--r-- | osx.icns | bin | 0 -> 48589 bytes | |||
| -rw-r--r-- | osx.m (renamed from macosx.m) | 6 |
5 files changed, 44 insertions, 11 deletions
@@ -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 @@ -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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleIconFile</key> + <string>Puzzles.icns</string> +</dict> +</plist> diff --git a/osx.icns b/osx.icns Binary files differnew file mode 100644 index 0000000..b4346a0 --- /dev/null +++ b/osx.icns @@ -8,8 +8,6 @@ * - configurability. Will no doubt involve learning all about the * dialog control side of Cocoa. * - * - needs an icon. - * * - not sure what I should be doing about default window * placement. Centring new windows is a bit feeble, but what's * better? Is there a standard way to tell the OS "here's the @@ -744,9 +742,13 @@ int main(int argc, char **argv) NSMenu *menu; NSMenuItem *item; AppController *controller; + NSImage *icon; pool = [[NSAutoreleasePool alloc] init]; + + icon = [NSImage imageNamed:@"NSApplicationIcon"]; [NSApplication sharedApplication]; + [NSApp setApplicationIconImage:icon]; controller = [[[AppController alloc] init] autorelease]; |