From 05e7595f59369ba9da5b1fa92cbf58af4e537ef3 Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Sat, 5 Sep 2009 02:58:45 -0700 Subject: [PATCH] Add code to build a MacOSX application bundle. --- src/etc/make-macosx-app.sh | 93 ++++++++++++++++++++++++++++ src/microcode/configure.ac | 1 + src/microcode/macosx-starter.c | 64 +++++++++++++++++++ src/microcode/makegen/Makefile.in.in | 3 + 4 files changed, 161 insertions(+) create mode 100755 src/etc/make-macosx-app.sh create mode 100644 src/microcode/macosx-starter.c diff --git a/src/etc/make-macosx-app.sh b/src/etc/make-macosx-app.sh new file mode 100755 index 000000000..a83c4f13c --- /dev/null +++ b/src/etc/make-macosx-app.sh @@ -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 < + + + + CFBundleName + mit-scheme + CFBundleDisplayName + MIT/GNU Scheme + CFBundleIdentifier + org.gnu.mit-scheme + CFBundleVersion + ${VERSION_STRING} + CFBundlePackageType + APPL + CFBundleSignature + mgsc + CFBundleExecutable + macosx-starter + + CFBundleShortVersionString + ${VERSION_STRING} + LSMinimumSystemVersion + ${MACOSX_MIN_VERSION} + NSHumanReadableCopyright + Copyright (C) 1986-${YEAR} Massachusetts Institute of Technology + + CFBundleGetInfoString + ${LONG_VERSION_STRING} + CFBundleDevelopmentRegion + English + LSHasLocalizedDisplayName + + + + +EOF diff --git a/src/microcode/configure.ac b/src/microcode/configure.ac index 1747ef2fa..cc7718b5c 100644 --- a/src/microcode/configure.ac +++ b/src/microcode/configure.ac @@ -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 index 000000000..39d457360 --- /dev/null +++ b/src/microcode/macosx-starter.c @@ -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 +#include + +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); +} diff --git a/src/microcode/makegen/Makefile.in.in b/src/microcode/makegen/Makefile.in.in index d60c84271..8e1f0b725 100644 --- a/src/microcode/makegen/Makefile.in.in +++ b/src/microcode/makegen/Makefile.in.in @@ -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 -- 2.25.1