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]
This commit is contained in:
Simon Tatham
2005-01-23 11:20:31 +00:00
parent f80d9c6d49
commit 0ae8782bc6
5 changed files with 44 additions and 11 deletions

2
Recipe
View File

@ -39,7 +39,7 @@ rect : [G] WINDOWS COMMON rect
pattern : [G] WINDOWS COMMON pattern pattern : [G] WINDOWS COMMON pattern
# Mac OS X unified application containing all the puzzles. # 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 # The `nullgame' source file is a largely blank one, which contains
# all the correct function definitions to compile and link, but # all the correct function definitions to compile and link, but

View File

@ -135,9 +135,7 @@ foreach $i (@prognames) {
$file = "$1.r"; $file = "$1.r";
$depends{$j} = [$file]; $depends{$j} = [$file];
push @scanlist, $file; push @scanlist, $file;
} elsif ($j =~ /\.lib$/) { } elsif ($j !~ /\./) {
# libraries don't have dependencies
} else {
$file = "$j.c"; $file = "$j.c";
$file = "$j.m" unless &findfile($file); $file = "$j.m" unless &findfile($file);
$depends{$j} = [$file]; $depends{$j} = [$file];
@ -259,7 +257,7 @@ sub objects {
} elsif ($i =~ /^(.*)\.lib/) { } elsif ($i =~ /^(.*)\.lib/) {
$y = $1; $y = $1;
($x = $ltmpl) =~ s/X/$y/; ($x = $ltmpl) =~ s/X/$y/;
} else { } elsif ($i !~ /\./) {
($x = $otmpl) =~ s/X/$i/; ($x = $otmpl) =~ s/X/$i/;
} }
push @ret, $x if $x ne ""; push @ret, $x if $x ne "";
@ -267,6 +265,19 @@ sub objects {
return join " ", @ret; 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 { sub splitline {
my ($line, $width, $splitchar) = @_; my ($line, $width, $splitchar) = @_;
my ($result, $len); my ($result, $len);
@ -1133,10 +1144,22 @@ if (defined $makefiles{'osx'}) {
foreach $p (&prognames("MX")) { foreach $p (&prognames("MX")) {
($prog, $type) = split ",", $p; ($prog, $type) = split ",", $p;
$objstr = &objects($p, "X.o", undef, undef); $objstr = &objects($p, "X.o", undef, undef);
print "${prog}: ${prog}.app/Contents/MacOS/$prog\n\n"; $icon = &special($p, ".icns");
print "${prog}.app:\n\tmkdir \$\@\n"; $infoplist = &special($p, "info.plist");
print "${prog}.app/Contents: ${prog}.app\n\tmkdir \$\@\n"; print "${prog}.app:\n\tmkdir -p \$\@\n";
print "${prog}.app/Contents/MacOS: ${prog}.app/Contents\n\tmkdir \$\@\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: ". print &splitline("${prog}.app/Contents/MacOS/$prog: ".
"${prog}.app/Contents/MacOS " . $objstr), "\n"; "${prog}.app/Contents/MacOS " . $objstr), "\n";
$libstr = &objects($p, undef, undef, "-lX"); $libstr = &objects($p, undef, undef, "-lX");

8
osx-info.plist Normal file
View File

@ -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>

BIN
osx.icns Normal file

Binary file not shown.

View File

@ -8,8 +8,6 @@
* - configurability. Will no doubt involve learning all about the * - configurability. Will no doubt involve learning all about the
* dialog control side of Cocoa. * dialog control side of Cocoa.
* *
* - needs an icon.
*
* - not sure what I should be doing about default window * - not sure what I should be doing about default window
* placement. Centring new windows is a bit feeble, but what's * placement. Centring new windows is a bit feeble, but what's
* better? Is there a standard way to tell the OS "here's the * 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; NSMenu *menu;
NSMenuItem *item; NSMenuItem *item;
AppController *controller; AppController *controller;
NSImage *icon;
pool = [[NSAutoreleasePool alloc] init]; pool = [[NSAutoreleasePool alloc] init];
icon = [NSImage imageNamed:@"NSApplicationIcon"];
[NSApplication sharedApplication]; [NSApplication sharedApplication];
[NSApp setApplicationIconImage:icon];
controller = [[[AppController alloc] init] autorelease]; controller = [[[AppController alloc] init] autorelease];