chiark / gitweb /
Fix OSX build failure from latest XCode update.
authorSimon Tatham <anakin@pobox.com>
Sat, 6 Oct 2018 17:22:42 +0000 (18:22 +0100)
committerSimon Tatham <anakin@pobox.com>
Sat, 6 Oct 2018 17:38:33 +0000 (18:38 +0100)
To begin with, the toolchain no longer lets me build for x86-32 -
apparently MacOS is now 64-bit only.

Also, the linker now gives an error about a missing libgcc_s variant
for -mmacosx-version-min=10.4, and indeed 10.5. So I've bumped the
minimum supported OS version to 10.6.

That in turn required some changes in osx.m itself, because bumping
the min OS version caused some API deprecations to show up. Luckily I
turned out to have left myself a comment some time ago telling me what
I was going to need to do about one of them :-)

mkfiles.pl
osx.m

index 142f7ca25227b89866e9c96afa596122365c11cb..d92bcca11dfaea56a43e76e901b51273b88b4111 100755 (executable)
@@ -1707,7 +1707,8 @@ if (defined $makefiles{'nestedvm'}) {
 if (defined $makefiles{'osx'}) {
     $mftyp = 'osx';
     $dirpfx = &dirpfx($makefiles{'osx'}, "/");
-    @osxarchs = ('i386', 'x86_64');
+    @osxarchs = ('x86_64');
+    my $osxminver = "10.6";
 
     ##-- Mac OS X makefile
     open OUT, ">$makefiles{'osx'}"; select OUT;
@@ -1756,7 +1757,7 @@ if (defined $makefiles{'osx'}) {
       foreach $arch (@osxarchs) {
        $objstr = &objects($p, "X.${arch}.o", undef, undef);
        print &splitline("${prog}.${arch}.bin: " . $objstr), "\n";
-       print &splitline("\t\$(CC) -arch ${arch} -mmacosx-version-min=10.4 \$(LDFLAGS) -o \$@ " .
+       print &splitline("\t\$(CC) -arch ${arch} -mmacosx-version-min=${osxminver} \$(LDFLAGS) -o \$@ " .
                        $objstr . " $libstr", 69), "\n\n";
        $archbins .= " ${prog}.${arch}.bin";
       }
@@ -1771,7 +1772,7 @@ if (defined $makefiles{'osx'}) {
       foreach $arch (@osxarchs) {
        $objstr = &objects($p, "X.${arch}.o", undef, undef);
        print &splitline("${prog}.${arch}: " . $objstr), "\n";
-       print &splitline("\t\$(CC) -arch ${arch} -mmacosx-version-min=10.4 \$(ULDFLAGS) -o \$@ " .
+       print &splitline("\t\$(CC) -arch ${arch} -mmacosx-version-min=${osxminver} \$(ULDFLAGS) -o \$@ " .
                        $objstr . " $libstr", 69), "\n\n";
        $archbins .= " ${prog}.${arch}";
       }
@@ -1784,10 +1785,10 @@ if (defined $makefiles{'osx'}) {
             "\n";
         $deflist = join "", map { " -D$_" } @{$d->{defs}};
         if ($d->{deps}->[0] =~ /\.m$/) {
-         print "\t\$(CC) -arch $arch -mmacosx-version-min=10.4 -x objective-c \$(COMPAT) \$(FWHACK) \$(CFLAGS)".
+         print "\t\$(CC) -arch $arch -mmacosx-version-min=${osxminver} -x objective-c \$(COMPAT) \$(FWHACK) \$(CFLAGS)".
              " \$(XFLAGS)$deflist -c \$< -o \$\@\n";
         } else {
-         print "\t\$(CC) -arch $arch -mmacosx-version-min=10.4 \$(COMPAT) \$(FWHACK) \$(CFLAGS) \$(XFLAGS)$deflist" .
+         print "\t\$(CC) -arch $arch -mmacosx-version-min=${osxminver} \$(COMPAT) \$(FWHACK) \$(CFLAGS) \$(XFLAGS)$deflist" .
              " -c \$< -o \$\@\n";
         }
       }
diff --git a/osx.m b/osx.m
index daa4af1f094c8d6efe18716e35742c05b532a2e1..8c960568865a7eafaddbc13be967fd984cd83749 100644 (file)
--- a/osx.m
+++ b/osx.m
@@ -750,7 +750,7 @@ struct frontend {
     NSSavePanel *sp = [NSSavePanel savePanel];
 
     if ([sp runModal] == NSFileHandlingPanelOKButton) {
-       const char *name = [[sp filename] UTF8String];
+       const char *name = [[sp URL] fileSystemRepresentation];
 
         FILE *fp = fopen(name, "w");
 
@@ -770,25 +770,9 @@ struct frontend {
 
     [op setAllowsMultipleSelection:NO];
 
-    if ([op runModalForTypes:nil] == NSOKButton) {
-        /*
-         * This used to be
-         *
-         *    [[[op filenames] objectAtIndex:0] cString]
-         *
-         * but the plain cString method became deprecated and Xcode 7
-         * started complaining about it. Since OS X 10.9 we can
-         * apparently use the more modern API
-         *
-         *    [[[op URLs] objectAtIndex:0] fileSystemRepresentation]
-         *
-         * but the alternative below still compiles with Xcode 7 and
-         * is a bit more backwards compatible, so I'll try it for the
-         * moment.
-         */
-       const char *name = [[[op filenames] objectAtIndex:0]
-                               cStringUsingEncoding:
-                                   [NSString defaultCStringEncoding]];
+    if ([op runModal] == NSOKButton) {
+       const char *name = [[[op URLs] objectAtIndex:0]
+                               fileSystemRepresentation];
        const char *err;
 
         FILE *fp = fopen(name, "r");