MacOS X App Octave Shell Script
Jump to navigation
Jump to search
This page is outdated (October 2019). For more recent information, see Octave for macOS.
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.
The scripts name is "octave" and its location in the App bundle is Octave-x.y.z.app/Contents/Resources/bin/octave
. Where x.y.z
refers to the version of the bundled 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 -n "$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:${ROOT}/share/ghostscript/9.05/Resource:${ROOT}/share/ghostscript/9.05/iccprofiles:${ROOT}/lib" if [ -z ${GS_FONTPATH} ]; then GS_FONTPATH="${GS_LIB}:${ROOT}/share/ghostscript/fonts:${ROOT}/share/ghostscript/9.05/Resource/Font:${ROOT}/share/fonts" else GS_FONTPATH="${GS_LIB}:${ROOT}/share/ghostscript/fonts:${ROOT}/share/ghostscript/9.05/Resource/Font:$ROOT/share/fonts:${GS_FONTPATH}" fi # Add /usr/X11/share/fonts to GS_FONTPATH GS_FONTPATH="${GS_FONTPATH}:/usr/X11/share/fonts" GS_OPTIONS="-sGenericResourceDir=\"${ROOT}/share/ghostscript/9.05/Resource/\"" GS_OPTIONS="${GS_OPTIONS} -sFontResourceDir=\"${ROOT}/share/ghostscript/9.05/Resource/Font/\"" GS_OPTIONS="${GS_OPTIONS} -sICCProfilesDir=\"${ROOT}/share/ghostscript/9.05/iccprofiles/\"" # Gnuplot stuff GNUPLOT_HOME="${ROOT}" GNUHELP="${ROOT}/share/gnuplot/4.6/gnuplot.gih" GNUPLOT_DRIVER_DIR="${ROOT}/libexec/gnuplot/4.6" GNUPLOT_FONTPATH="${ROOT}/share/fonts/urw-fonts" # Add /usr/X11/share/fonts to GNUPLOT_FONTPATH GNUPLOT_FONTPATH="${GNUPLOT_FONTPATH}:/usr/X11/share/fonts/TTF" GNUPLOT_FONTPATH="${GNUPLOT_FONTPATH}:/usr/X11/share/fonts/Type1" GNUPLOT_PS_DIR="${ROOT}/share/gnuplot/4.6/PostScript" GNUPLOT_DEFAULT_GDFONT=Helvetica GDFONTPATH="${ROOT}/Resources/share/ghostscript/fonts" 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. export DYLD_FRAMEWORK_PATH 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}" \ GNUPLOT_HOME="${GNUPLOT_HOME}" \ GNUHELP="${GNUHELP}" \ GNUPLOT_DRIVER_DIR="${GNUPLOT_DRIVER_DIR}" \ GNUPLOT_FONTPATH="${GNUPLOT_FONTPATH}" \ GNUPLOT_PS_DIR="${GNUPLOT_PS_DIR}" \ GNUPLOT_DEFAULT_GDFONT="${GNUPLOT_DEFAULT_GDFONT}" \ GDFONTPATH="${GDFONTPATH}" \ "${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