mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
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:
2
Recipe
2
Recipe
@ -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
|
||||||
|
39
mkfiles.pl
39
mkfiles.pl
@ -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
8
osx-info.plist
Normal 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>
|
@ -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];
|
||||||
|
|
Reference in New Issue
Block a user