Add code to build a MacOSX application bundle.
authorChris Hanson <org/chris-hanson/cph>
Sat, 5 Sep 2009 09:58:45 +0000 (02:58 -0700)
committerChris Hanson <org/chris-hanson/cph>
Sat, 5 Sep 2009 09:58:45 +0000 (02:58 -0700)
src/etc/make-macosx-app.sh [new file with mode: 0755]
src/microcode/configure.ac
src/microcode/macosx-starter.c [new file with mode: 0644]
src/microcode/makegen/Makefile.in.in

diff --git a/src/etc/make-macosx-app.sh b/src/etc/make-macosx-app.sh
new file mode 100755 (executable)
index 0000000..a83c4f1
--- /dev/null
@@ -0,0 +1,93 @@
+#!/bin/bash
+#
+# Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+#     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+#     2005, 2006, 2007, 2008, 2009 Massachusetts Institute of
+#     Technology
+#
+# This file is part of MIT/GNU Scheme.
+#
+# MIT/GNU Scheme is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# MIT/GNU Scheme is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with MIT/GNU Scheme; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# Utility to build a MacOS X applicaton bundle to run Edwin.
+
+set -e
+
+rm -rf tmp mit-scheme.app
+
+# Build directory structure for bundle.
+mkdir mit-scheme.app
+mkdir mit-scheme.app/Contents
+mkdir mit-scheme.app/Contents/MacOS
+mkdir mit-scheme.app/Contents/Resources
+
+# Install into temporary directory, then move contents into bundle.
+make install DESTDIR=$(pwd)/tmp
+mv tmp/usr/local/bin/mit-scheme-native \
+    mit-scheme.app/Contents/Resources/mit-scheme
+mv tmp/usr/local/lib/mit-scheme/macosx-starter mit-scheme.app/Contents/MacOS/.
+rm -f tmp/usr/local/lib/mit-scheme/runtime.com
+mv tmp/usr/local/lib/mit-scheme/* mit-scheme.app/Contents/Resources/.
+rm -rf tmp
+
+# Generate an appropriate Info.plist file.
+# These values are placeholders; we need to get the right ones.
+VERSION_STRING=$(date +%Y%m%d)
+LONG_VERSION_STRING="snapshot ${VERSION_STRING}"
+MACOSX_MIN_VERSION=10.5
+YEAR=$(date +%Y)
+cat > mit-scheme.app/Contents/Info.plist <<EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist
+          PUBLIC "-//Apple//DTD PLIST 1.0//EN"
+         "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>CFBundleName</key>
+    <string>mit-scheme</string>
+    <key>CFBundleDisplayName</key>
+    <string>MIT/GNU Scheme</string>
+    <key>CFBundleIdentifier</key>
+    <string>org.gnu.mit-scheme</string>
+    <key>CFBundleVersion</key>
+    <string>${VERSION_STRING}</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleSignature</key>
+    <string>mgsc</string>
+    <key>CFBundleExecutable</key>
+    <string>macosx-starter</string>
+
+    <key>CFBundleShortVersionString</key>
+    <string>${VERSION_STRING}</string>
+    <key>LSMinimumSystemVersion</key>
+    <string>${MACOSX_MIN_VERSION}</string>
+    <key>NSHumanReadableCopyright</key>
+    <string>Copyright (C) 1986-${YEAR} Massachusetts Institute of Technology</string>
+
+    <key>CFBundleGetInfoString</key>
+    <string>${LONG_VERSION_STRING}</string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+    <key>LSHasLocalizedDisplayName</key>
+    <false/>
+    <!--
+    <key>CFBundleIconFile</key>
+    <string>appIcon.icns</string>
+    -->
+  </dict>
+</plist>
+EOF
index 1747ef2fa4a0357606392a2594c41e9b0051a554..cc7718b5ce0c263b2714bac6cc7e83674907ba6a 100644 (file)
@@ -389,6 +389,7 @@ darwin*)
     LDFLAGS="${LDFLAGS} ${MACOSX_CFLAGS} -Wl,-syslibroot,${MACOSX_SYSROOT}"
     LDFLAGS="${LDFLAGS} -framework CoreFoundation"
     MODULE_LDFLAGS="${MODULE_LDFLAGS} -bundle -bundle_loader "'${SCHEME_EXE}'
+    AUX_PROGRAMS="${AUX_PROGRAMS} macosx-starter"
     ;;
 netbsd*)
     DO_GCC_TESTS=yes
diff --git a/src/microcode/macosx-starter.c b/src/microcode/macosx-starter.c
new file mode 100644 (file)
index 0000000..39d4573
--- /dev/null
@@ -0,0 +1,64 @@
+/* -*-C-*-
+
+Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+    2006, 2007, 2008, 2009 Massachusetts Institute of Technology
+
+This file is part of MIT/GNU Scheme.
+
+MIT/GNU Scheme is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+MIT/GNU Scheme is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with MIT/GNU Scheme; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
+USA.
+
+*/
+
+/* This is a "starter" program to be placed in a MacOS X application
+   bundle.  It calls the real executable in the "Resources/" directory
+   of the bundle, passing appropriate arguments to it.  */
+
+#include <unistd.h>
+#include <CoreServices/CoreServices.h>
+
+int
+main (int argc, const char ** argv)
+{
+  CFBundleRef bundle;
+  CFURLRef url;
+  UInt8 buffer [4096];
+  char * bp;
+  pid_t pid;
+
+  bundle = (CFBundleGetMainBundle());
+  if (bundle == 0)
+    return (1);
+
+  url = (CFBundleCopyResourceURL (bundle,
+                                 (CFSTR ("mit-scheme")),
+                                 (CFSTR ("")),
+                                 0));
+  if (url == 0)
+    return (2);
+
+  if (!CFURLGetFileSystemRepresentation (url, true, buffer, (sizeof (buffer))))
+    return (3);
+
+  bp = ((char *) buffer);
+  pid = (vfork ());
+  if (pid == 0)
+    {
+      execl (bp, bp, "--edit", ((char *) 0));
+      _exit (1);
+    }
+  return ((pid > 0) ? 0 : 3);
+}
index d60c84271dab16b24d046ff3a6591eab9782122e..8e1f0b725b6e17d2cb50cfccd55df94d65f31032 100644 (file)
@@ -193,6 +193,9 @@ gen-nonce: gen-nonce.o
 extract-liarc-decls: extract-liarc-decls.o
        $(LINK) extract-liarc-decls.o
 
+macosx-starter: macosx-starter.o
+       $(LINK) macosx-starter.o
+
 utabmd.bin: utabmd.scm
        ./utabmd.sh