#!/usr/bin/perl -w
-# Copyright © 2012 Jamie Zawinski <jwz@jwz.org>
+# Copyright © 2012-2013 Jamie Zawinski <jwz@jwz.org>
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# software for any purpose. It is provided "as is" without express or
# implied warranty.
#
-# Generates a .h file that lists all the function tables we use, because
+# Generates a .c file that lists all the function tables we use, because
# CFBundleGetDataPointerForName doesn't work in "Archive" builds.
# What a crock of shit.
#
use strict;
my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.1 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.2 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
my $verbose = 1;
my $suf = 'xscreensaver_function_table';
- my $body = "extern struct $suf";
+ my $body = ("/* Generated file, do not edit.\n" .
+ " Created: " . localtime() . " by $progname $version.\n" .
+ " */\n" .
+ "\n" .
+ "#import <Foundation/Foundation.h>\n" .
+ "#import <UIKit/UIKit.h>\n" .
+ "\n" .
+ "extern NSDictionary *make_function_table_dict(void);\n" .
+ "\n");
+
+ $body .= "extern struct $suf";
foreach my $s (@names) {
$body .= "\n *${s}_${suf},";
}
$body =~ s/,\s*$/;/s;
- $body .= ("\n\n" .
- "static NSDictionary *make_function_tables_dict(void)\n{\n" .
- " return\n [NSDictionary dictionaryWithObjectsAndKeys:\n");
- foreach my $s (@names) {
- $body .= "\t[NSValue valueWithPointer:&${s}_${suf}], @\"${s}\",\n";
+ sub line($$) {
+ my ($s, $suf) = @_;
+ return "\t[NSValue valueWithPointer:&${s}_${suf}], @\"${s}\",\n";
}
- $body .= ("\tnil];\n" .
- "}\n");
+
+ $body .= ("\n\n" .
+ "NSDictionary *make_function_table_dict(void)\n{\n" .
+ " return\n [NSDictionary dictionaryWithObjectsAndKeys:\n" .
+ "\n" .
+ "#if defined(APPLE2_ONLY)\n" .
+ " " . line('apple2', $suf) .
+ "#elif defined(PHOSPHOR_ONLY)\n" .
+ " " . line('phosphor', $suf) .
+ "#else\n");
+ foreach my $s (@names) { $body .= line($s, $suf); }
+ $body .= ("#endif\n" .
+ "\tnil];\n" .
+ "}\n\n");
my $obody = '';
if (open (my $in, '<', $outfile)) {
close $in;
}
- if ($obody eq $body) {
+ # strip comments/date for diff.
+ my ($body2, $obody2) = ($body, $obody);
+ foreach ($body2, $obody2) { s@/\*.*?\*/@@gs; }
+
+ if ($body2 eq $obody2) {
print STDERR "$progname: $outfile: unchanged\n" if ($verbose > 1);
} else {
my $file_tmp = "$outfile.tmp";
}
sub usage() {
- print STDERR "usage: $progname [--verbose] program.app output.h\n";
+ print STDERR "usage: $progname [--verbose] program.app output.c\n";
exit 1;
}