MacOS X App Octave Shell Script

From Octave
Revision as of 17:10, 23 June 2012 by Bpabbott (talk | contribs)
Jump to navigation Jump to search

The script below is intended to be part of a MacOS X App bundle for Octave. This script is called by the App launcher script. The script is responsible for initializing the shell environment and running Octave.

#!/bin/sh
# Copyright (C) 2007-2008, Thomas Treichl and Paul Kienzle
# Copyright (C) 2009-2011, Thomas Treichl
# Copyright (C) 2012, Ben Abbott
# This program 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 3 of the License, or
# (at your option) any later version.
#
# This program 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 this program; If not, see <http://www.gnu.org/licenses/>.

# Checks if Octave is started from a file that is a link or if this
# file has been taken directly to startup the Octave program.

VER="3.7.0+"
if [ -L "$0" ] ; then
 ROOT="$(dirname $(readlink -f "$0"))"
else
 ROOT="$(cd "$(dirname "$0")" 2>/dev/null && pwd)"
fi
ROOT="$(dirname "${ROOT}")"

# Remove MacPorts from the path
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"

# Setting up various path information variables that are needed to
# startup the Octave program.
OCTAVE_HOME="${ROOT}"
PATH="${ROOT}/bin:${PATH}"
if [ -z ${DYLD_FALLBACK_LIBRARY_PATH} ]; then
  DYLD_FALLBACK_LIBRARY_PATH="${ROOT}/lib"
else
  DYLD_FALLBACK_LIBRARY_PATH="${ROOT}/lib:${DYLD_FALLBACK_LIBRARY_PATH}"
fi
DYLD_FALLBACK_LIBRARY_PATH="${ROOT}/lib/octave/$VER:${DYLD_FALLBACK_LIBRARY_PATH}"
DYLD_FALLBACK_LIBRARY_PATH="${ROOT}/lib/gcc44:${DYLD_FALLBACK_LIBRARY_PATH}"
if [ -z ${DYLD_FRAMEWORK_PATH} ]; then
  DYLD_FRAMEWORK_PATH="${ROOT}/Library/Frameworks"
else
  DYLD_FRAMEWORK_PATH="${ROOT}/Library/Frameworks:${DYLD_FRAMEWORK_PATH}"
fi

# Setting up various path information variables that are needed to run
# the "mkoctfile" and "mex" commands from within the Octave program.
INCLUDEDIR="\"${ROOT}/include/Octave-${VER}\""
CFLAGS="-I\"${ROOT}/include/curl\" -I\"${ROOT}/include/readline\" ${CFLAGS}"
FFLAGS="-I\"${ROOT}/include/curl\" -I\"${ROOT}/include/readline\" ${FFLAGS}"
CPPFLAGS="-I\"${ROOT}/include/curl\" -I\"${ROOT}/include/readline\" ${CPPFLAGS}"
CXXFLAGS="-I\"${ROOT}/include/curl\" -I\"${ROOT}/include/readline\" ${CXXFLAGS}"
LDFLAGS="-L\"${ROOT}/lib\" -L\"${ROOT}/lib/octave/$VER\" ${LDFLAGS}"
XTRA_CXXFLAGS=" "

OCT_LINK_OPTS="\"${ROOT}/lib/gcc44/libstdc++.6.dylib\""
OCTLIBDIR="\"${ROOT}/lib/octave/${VER}\""
LIBDIR="\"${ROOT}/lib\""
OCTINCLUDEDIR="\"${ROOT}/include/Octave-${VER}/octave\""
# These default include paths are set by mkoctfile-2.9.12 automatically
# CFLAGS="-I${ROOT}/include -I${ROOT}/include/octave/$VER"

# Fortran stuff. FIXME - spaces in LIBDIR?
FLIBS="-L${LIBDIR} -L${LIBDIR}/gcc44/gcc/x86_64-apple-darwin11/4.4.6 -L${LIBDIR}/gcc44/gcc/x86_64-apple-darwin11/4.4.6/../../.. -lm -lgfortranbegin -lgfortran"

# Setting up other variables that are needed to run the Octave program
# or mkoctfile and to install packages.
DL_LDFLAGS="-bundle -bundle_loader \"${ROOT}/bin/octave-$VER\""
SED="/usr/bin/sed"
CC=`mkoctfile -p CC`
CXX=`mkoctfile -p CXX`
F77=`mkoctfile -p F77`
CC="$(basename $CC)"
CXX="$(basename $CXX)"
F77="$(basename $F77)"
CC=\"${ROOT}/bin/$CC\"
CXX=\"${ROOT}/bin/$CXX\"
F77=\"${ROOT}/bin/$F77\"

# Ghostscript stuff
GS_LIB="${ROOT}/share/ghostscript/9.05/Resource/Init"
GS_LIB="${GS_LIB}:${ROOT}/share/ghostscript/9.05/Resource"
if [ -z ${GS_FONTPATH} ]; then
  GS_FONTPATH="${GS_LIB}:${ROOT}/share/ghostscript/fonts:${ROOT}/share/ghostscript/Resource/Font"
else
  GS_FONTPATH="${GS_LIB}:${ROOT}/share/ghostscript/fonts:${ROOT}/share/ghostscript/Resource/Font:${GS_FONTPATH}"
fi
# Add /usr/X11/share/fonts to GS_FONTPATH ?
GS_OPTIONS="-sGenericResourceDir=\"${ROOT}/share/ghostscript/9.05/Resource/\""
GS_OPTIONS="${GS_OPTIONS} -sFontResourceDir=\"${ROOT}/share/ghostscript/9.05/Resource/Font/\""

# Gnuplot stuff
GNUTERM=aqua
GNUTERMAPP="${ROOT}/Applications/AquaTerm.app"
AQUATERM_PATH="${GNUTERMAPP}"

# If AquaTerm is running, use AppleScript to tell it to quit. This is done to ensure
# the AquaTerm which is running is part of the app bundle.
osascript 2>&1>/dev/null <<EOF
  tell application "System Events" to set ProcessList to get name of every process
  if ProcessList contains "AquaTerm" then
    quit application "AquaTerm" 
    delay 0.5
  end if
EOF
open "${GNUTERMAPP}"

# Invoke Octave, preserving spaces in all the input arguments.
OCTAVE_HOME="${OCTAVE_HOME}" PATH="${PATH}" \
 DYLD_FALLBACK_LIBRARY_PATH="${DYLD_FALLBACK_LIBRARY_PATH}" \
 CC="${CC}" CXX="${CXX}" F77="${F77}" \
 LD_CXX="${CXX}" DL_LD="${CXX}" \
 CFLAGS="${CFLAGS}" CPPFLAGS="${CPPFLAGS}" \
 CXXFLAGS="${CXXFLAGS}" XTRA_CXXFLAGS="${XTRA_CXXFLAGS}" \
 FFLAGS="${FFLAGS}" LDFLAGS="${LDFLAGS}" FLIBS="${FLIBS}" \
 DL_LDFLAGS="${DL_LDFLAGS}" \
 INCLUDEDIR="${INCLUDEDIR}" LIBDIR="${LIBDIR}" \
 OCTINCLUDEDIR="${OCTINCLUDEDIR}" OCTLIBDIR="${OCTLIBDIR}" \
 OCT_LINK_OPTS="${OCT_LINK_OPTS}" \
 SED="$SED" MAGICK_HOME="${ROOT}" \
 FONTCONFIG_PATH="${ROOT}/etc/fonts" \
 GS_FONTPATH="${GS_FONTPATH}" GS_LIB="${GS_LIB}" GS_OPTIONS="${GS_OPTIONS}" \
 DYLD_FRAMEWORK_PATH="${DYLD_FRAMEWORK_PATH}" \
 AQUATERM_PATH="${AQUATERM_PATH}" \
 GNUTERM="${GNUTERM}" \
 GNUTERMAPP="${GNUTERMAPP}" \
 "${ROOT}/bin/octave-$VER" "$@"

# Use AppleScript to kill the icon in the dock.
# FIXME - how to replace "Octave-3.7.0+" with "Octave-$VER"
osascript 2>&1>/dev/null <<EOF
  tell application "Octave-3.7.0+"
    quit
  end tell
EOF