# Returns true if the argument is a known makefile type. Otherwise,
# prints a warning and returns false;
if (grep { $type eq $_ }
- ("vc","vcproj","cygwin","borland","lcc","gtk","mpw","nestedvm","osx","wce")) {
+ ("vc","vcproj","cygwin","borland","lcc","gtk","mpw","nestedvm","osx","wce","gnustep")) {
return 1;
}
warn "$.:unknown makefile type '$type'\n";
"mandir=\$(prefix)/man\n",
"man1dir=\$(mandir)/man1\n",
"\n";
- print &splitline("all:" . join "", map { " $_" } &progrealnames("X:U"));
+ print &splitline("all:" . join "", map { " \$(BINPREFIX)$_" }
+ &progrealnames("X:U"));
print "\n\n";
foreach $p (&prognames("X:U")) {
($prog, $type) = split ",", $p;
$objstr = &objects($p, "X.o", undef, undef);
- print &splitline($prog . ": " . $objstr), "\n";
+ print &splitline("\$(BINPREFIX)" . $prog . ": " . $objstr), "\n";
$libstr = &objects($p, undef, undef, "-lX");
print &splitline("\t\$(CC) -o \$@ $objstr $libstr \$(XLFLAGS) \$(${type}LIBS)", 69),
"\n\n";
print "\n";
print $makefile_extra{'gtk'} || "";
print "\nclean:\n".
- "\trm -f *.o". (join "", map { " $_" } &progrealnames("X:U")) . "\n";
+ "\trm -f *.o". (join "", map { " \$(BINPREFIX)$_" } &progrealnames("X:U")) . "\n";
select STDOUT; close OUT;
}
"\trm -rf *.app\n";
select STDOUT; close OUT;
}
+
+if (defined $makefiles{'gnustep'}) {
+ $mftyp = 'gnustep';
+ $dirpfx = &dirpfx($makefiles{'gnustep'}, "/");
+
+ ##-- GNUstep makefile (use with 'gs_make -f Makefile.gnustep')
+
+ # This is a pretty evil way to do things. In an ideal world, I'd
+ # use the approved GNUstep makefile mechanism which just defines a
+ # variable or two saying what source files go into what binary and
+ # then includes application.make. Unfortunately, that has the
+ # automake-ish limitation that it doesn't let you choose different
+ # command lines for each object, so I can't arrange for all those
+ # files with -DTHIS and -DTHAT to Just Work.
+ #
+ # A simple if ugly fix would be to have mkfiles.pl construct a
+ # directory full of stub C files of the form '#define thing',
+ # '#include "real_source_file"', and then reference those in this
+ # makefile. That would also make it easy to build a proper
+ # automake makefile.
+ open OUT, ">$makefiles{'gnustep'}"; select OUT;
+ print
+ "# Makefile for $project_name under GNUstep.\n".
+ "#\n# This file was created by `mkfiles.pl' from the `Recipe' file.\n".
+ "# DO NOT EDIT THIS FILE DIRECTLY; edit Recipe or mkfiles.pl instead.\n";
+ # gcc command line option is -D not /D
+ ($_ = $help) =~ s/=\/D/=-D/gs;
+ print $_;
+ print
+ "NEEDS_GUI=yes\n".
+ "include \$(GNUSTEP_MAKEFILES)/common.make\n".
+ "include \$(GNUSTEP_MAKEFILES)/rules.make\n".
+ "include \$(GNUSTEP_MAKEFILES)/Instance/rules.make\n".
+ "\n".
+ &splitline("all::" . join "", map { " $_" } &progrealnames("MX:U")) .
+ "\n";
+ print $makefile_extra{'gnustep'} || "";
+ print "\n".
+ ".SUFFIXES: .o .c .m\n".
+ "\n";
+ print "\n\n";
+ foreach $p (&prognames("MX")) {
+ ($prog, $type) = split ",", $p;
+ $icon = &special($p, ".icns");
+ $infoplist = &special($p, "info.plist");
+ print "${prog}.app:\n\tmkdir -p \$\@\n";
+ $targets = "${prog}.app ${prog}.app/$prog";
+ if (defined $icon) {
+ print "${prog}.app/Resources: ${prog}.app\n\tmkdir -p \$\@\n";
+ print "${prog}.app/Resources/${prog}.icns: ${prog}.app/Resources $icon\n\tcp $icon \$\@\n";
+ $targets .= " ${prog}.app/Resources/${prog}.icns";
+ }
+ if (defined $infoplist) {
+ print "${prog}.app/Info.plist: ${prog}.app $infoplist\n\tcp $infoplist \$\@\n";
+ $targets .= " ${prog}.app/Info.plist";
+ }
+ $targets .= " \$(${prog}_extra)";
+ print &splitline("${prog}: $targets", 69) . "\n\n";
+ $libstr = &objects($p, undef, undef, "-lX");
+ $objstr = &objects($p, "X.o", undef, undef);
+ print &splitline("${prog}.app/$prog: " . $objstr), "\n";
+ print &splitline("\t\$(CC) \$(ALL_LDFLAGS) -o \$@ " . $objstr . " \$(ALL_LIB_DIRS) $libstr \$(ALL_LIBS)", 69), "\n\n";
+ }
+ foreach $p (&prognames("U")) {
+ ($prog, $type) = split ",", $p;
+ $libstr = &objects($p, undef, undef, "-lX");
+ $objstr = &objects($p, "X.o", undef, undef);
+ print &splitline("${prog}: " . $objstr), "\n";
+ print &splitline("\t\$(CC) \$(ULDFLAGS) -o \$@ " . $objstr . " $libstr", 69), "\n\n";
+ }
+ foreach $d (&deps("X.o", undef, $dirpfx, "/")) {
+ print &splitline(sprintf("%s: %s", $d->{obj}, join " ", @{$d->{deps}})),
+ "\n";
+ $deflist = join "", map { " -D$_" } @{$d->{defs}};
+ if ($d->{deps}->[0] =~ /\.m$/) {
+ print "\t\$(CC) -DGNUSTEP \$(ALL_OBJCFLAGS) \$(COMPAT) \$(FWHACK) \$(OBJCFLAGS)".
+ " \$(XFLAGS)$deflist -c \$< -o \$\@\n";
+ } else {
+ print "\t\$(CC) \$(ALL_CFLAGS) \$(COMPAT) \$(FWHACK) \$(CFLAGS) \$(XFLAGS)$deflist" .
+ " -c \$< -o \$\@\n";
+ }
+ }
+ print "\nclean::\n".
+ "\trm -f *.o ". (join " ", &progrealnames("U")) . "\n".
+ "\trm -rf *.app\n";
+ select STDOUT; close OUT;
+}