aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2005-01-23 11:20:31 +0000
committerSimon Tatham <anakin@pobox.com>2005-01-23 11:20:31 +0000
commit0ae8782bc6a7ee69b3e7cf079f946e52546882bb (patch)
tree5bf34e7dc5fef5226bf6fd8593cb637864a670a3
parentf80d9c6d49eaf08d65420a3a5b47db5165add724 (diff)
downloadpuzzles-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--Recipe2
-rwxr-xr-xmkfiles.pl39
-rw-r--r--osx-info.plist8
-rw-r--r--osx.icnsbin0 -> 48589 bytes
-rw-r--r--osx.m (renamed from macosx.m)6
5 files changed, 44 insertions, 11 deletions
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 @@
+<?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
new file mode 100644
index 0000000..b4346a0
--- /dev/null
+++ b/osx.icns
Binary files differ
diff --git a/macosx.m b/osx.m
index 52a70ef..2fad086 100644
--- a/macosx.m
+++ b/osx.m
@@ -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];