Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

executable file 350 lines (268 sloc) 7.338 kb
#!/bin/sh
# Alternate bootstrap script for Nu, contributed by Andrew Norrie
# Currently this is for Mac OS systems only.
# INSTALLING NU
# =============
#
# This script builds and installs a single architecture Nu framework
# and nush, the nu shell.
#
# A univeral-binary version can then be built if required by running
#
# % rm -fR build/*
# % nuke
# % nuke install
#
here=`dirname "$0"`
BUILD_PATH_ROOT="${here}/build"
BUILD_PATH="${BUILD_PATH_ROOT}"
FRAMEWORK_DESTINATION="/Library/Frameworks/"
INSTALL_PREFIX="/usr/local"
CFLAGS=
MFLAGS=
LDFLAGS=
FRAMEWORK_NAME="Nu"
FRAMEWORK_EXECUTABLE_NAME="${FRAMEWORK_NAME}"
FRAMEWORK_IDENTIFIER="nu.programming.framework"
FRAMEWORK_ICON="nu.icns"
FRAMEWORK_CREATOR_CODE="????"
FRAMEWORK_COPYRIGHT_STRING="Nu. Copyright (c) 2007 Tim Burks, Radtastical Inc."
FRAMEWORK_REVISION_LETTER="A"
FRAMEWORK_INIT="-Wl,-init -Wl,_NuInit"
#
# DETERMINE CURRENT PLATFORM
# --------------------------
#
# - To determine the current platform we test to see if it is Darwin,
# a.k.a Mac OS X, or anything else. The Darwin major version number
# (8 => 10.4, 9 => 10.5) is passed to the C compiler in the DARWIN
# preprocessor symbol.
#
CFLAGS="${CFLAGS} -Wall -g -std=gnu99 -I ${here}/include -I ${here}/include/Nu -I /usr/local/include"
MFLAGS="${MFLAGS} -fobjc-exceptions"
if test `uname -s` = "Darwin"
then
DARWIN=`uname -r | sed '/\..*/s///'`
else
DARWIN=
fi
if test ${DARWIN}
then
if test ${DARWIN} = "9"
then
LEOPARD="-DLEOPARD_OBJC2 -D__OBJC2__"
SDK="/Developer/SDKs/MacOSX10.5.sdk"
else
if test ${DARWIN} = "8"
then
SDK="/Developer/SDKs/MacOSX10.4u.sdk"
else
echo Error: SDK not found or unknown.
exit 1
fi
fi
if test ! -d "${SDK}"
then
echo Error: "SDK expected at '${SDK}' does not exist."
exit 1
fi
CFLAGS="${CFLAGS} -DMACOSX -DDARWIN=${DARWIN} -isysroot ${SDK} ${LEOPARD}"
else
MFLAGS="${MFLAGS} -fconstant-string-class=NSConstantString";
fi
#
# LOCATION OF PREREQUISITES
# -------------------------
#
# - Nu requires PCRE, the Perl-Compatible Regular Expression Library.
# Before building Nu, download and install pcre, enabling UTF-8.
# Look for it at http://www.pcre.org.
#
# On Mac OS X, to build a universal binary with UTF-8 support,
# use the following command:
#
# % env \
# CXXFLAGS="-arch i386 -arch ppc" \
# CFLAGS="-arch i386 -arch ppc" \
# LDFLAGS="-arch i386 -arch ppc" \
# ./configure \
# --disable-dependency-tracking \
# --enable-utf8
#
# When you install PCRE, it's best to put it in /usr/local (the default).
# If you put it anywhere else, you'll have to modify the Nukefile
# used to build Nu.
#
PCRE_PREFIX="/usr/local"
PCRE_LIBRARY_PATH="${PCRE_PREFIX}/lib"
PCRE_INCLUDE_PATH="${PCRE_PREFIX}/include"
for file in "${PCRE_INCLUDE_PATH}/pcre.h" "${PCRE_LIBRARY_PATH}/libpcre.dylib"
do
if test ! -f "${file}"
then
echo Error: "Perl-Compatible-Regualar-Expressions file '${file}' connot be found"
exit 1
fi
done
# - Nu requires libffi.
FFI_LIBRARY_PATH="/usr/lib"
FFI_INCLUDE_PATH="/usr/include"
for file in "${FFI_INCLUDE_PATH}/ffi/ffi.h" "${FFI_LIBRARY_PATH}/libffi.dylib"
do
if test ! -f "${file}"
then
echo Error: "Foreign-Function-Interface file '${file}' connot be found"
exit 1
fi
done
# CFLAGS="${CFLAGS} -I ${FFI_INCLUDE_PATH}"
#
# BUILD, INSTALL AND TEST NU
# --------------------------
#
# - Make the framework structure
#
FRAMEWORK_STUB="${FRAMEWORK_NAME}.framework"
FRAMEWORK_CONTENTS_STUB="${FRAMEWORK_STUB}/Versions/${FRAMEWORK_REVISION_LETTER}"
FRAMEWORK="${BUILD_PATH}/${FRAMEWORK_STUB}"
FRAMEWORK_CONTENTS="${BUILD_PATH}/${FRAMEWORK_CONTENTS_STUB}"
if test ! -d "${FRAMEWORK}/Headers" -o ! -d "${FRAMEWORK}/Resources"
then
mkdir -p "${FRAMEWORK_CONTENTS}/Headers" "${FRAMEWORK_CONTENTS}/Resources" && \
(cd "${FRAMEWORK}/Versions"; \
ln -sf "${FRAMEWORK_REVISION_LETTER}" Current; \
cd ..; \
ln -sf "Versions/Current/Headers" "Versions/Current/Resources" .)
if test ! -d "${FRAMEWORK}/Headers" -o ! -d "${FRAMEWORK}/Resources"
then
echo Error: "Cannot create the framework folders '${FRAMEWORK}'"
exit
fi
fi
#
# - Add additional external libraries and frameworks
#
if test ${DARWIN}
then
for name in "pcre" "edit" "ffi"
do
LDFLAGS="${LDFLAGS} -l${name}"
done
for name in "Cocoa"
do
LDFLAGS="${LDFLAGS} -framework ${name}"
done
else
for name in "pcre" "readline" "ffi" "m"
do
LDFLAGS="${LDFLAGS} -l${name}"
done
fi
#
# - compilation
#
for file in "${here}/objc/"*.m
do
targ=${BUILD_PATH}/`basename "${file}" | sed -e '/\.m$/s//.o/'`
if test "${targ}" -ot "${file}"
then
rm -f "${FRAMEWORK_CONTENTS}/${FRAMEWORK_EXECUTABLE_NAME}"
if ! gcc ${CFLAGS} ${MFLAGS} -c -o "${targ}" "${file}"
then
exit
fi
fi
done
for file in "${here}/objc/"*.c
do
targ=${BUILD_PATH}/`basename "${file}" | sed -e '/\.c$/s//.o/'`
if test "${targ}" -ot "${file}"
then
rm -f "${FRAMEWORK_CONTENTS}/${FRAMEWORK_EXECUTABLE_NAME}"
if ! gcc ${CFLAGS} -c -o "${targ}" "${file}"
then
exit
fi
fi
done
if test ! -f "${FRAMEWORK_CONTENTS}/${FRAMEWORK_EXECUTABLE_NAME}"
then
if gcc \
${CFLAGS} \
${LDFLAGS} \
${FRAMEWORK_INIT} \
-install_name "${FRAMEWORK_CONTENTS_STUB}/${FRAMEWORK_EXECUTABLE_NAME}" \
-dynamiclib \
-o "${FRAMEWORK_CONTENTS}/${FRAMEWORK_EXECUTABLE_NAME}" \
"${BUILD_PATH}/"*.o
then
(cd "${FRAMEWORK}"; ln -sf "Versions/Current/${FRAMEWORK_EXECUTABLE_NAME}" .)
else
exit
fi
fi
for file in "${here}/include/Nu/"*
do
cp "${file}" "${FRAMEWORK}/Headers"
done
for file in "${here}/nu/"*
do
cp "${file}" "${FRAMEWORK}/Resources"
done
for file in "${here}/share/nu/resources/"*
do
cp -PR "${file}" "${FRAMEWORK}/Resources"
done
cat > "${FRAMEWORK}/Resources/info.plist" <<!
<?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>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${FRAMEWORK_EXECUTABLE_NAME}</string>
<key>CFBundleGetInfoString</key>
<string>${FRAMEWORK_COPYRIGHT_STRING}</string>
<key>CFBundleIdentifier</key>
<string>${FRAMEWORK_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${FRAMEWORK_NAME}</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>${FRAMEWORK_CREATOR_CODE}</string>
<key>CFBundleVersion</key>
<string>0.1</string>
<key>NSHumanReadableCopyright</key>
<string>${FRAMEWORK_COPYRIGHT_STRING}</string>
</dict>
</plist>
!
echo Installing Nu framework to ${FRAMEWORK_DESTINATION}
# mv "${FRAMEWORK}" "${FRAMEWORK_DESTINATION}"
if ! gcc \
${CFLAGS} \
${LDFLAGS} \
-framework Nu \
-o "${BUILD_PATH}/nush" \
main/main.m
then
exit
fi
echo Installing Nu tools
for file in "${BUILD_PATH}/nush" "${here}/tools/"*
do
echo `basename ${file}`
sudo cp "${file}" "${INSTALL_PREFIX}/bin"
done
echo Installing Nu shared files and examples
sudo mkdir -p "${INSTALL_PREFIX}/share/nu"
sudo rm -rf "${INSTALL_PREFIX}/share/nu"*
sudo cp -rp "${here}/share/nu" "${INSTALL_PREFIX}/share/nu"
sudo ditto "${here}/examples" "${INSTALL_PREFIX}/share/nu/examples"
echo Testing Nu
#nutest ${here}/test/test_*.nu
nutest test/test_*.nu
Jump to Line
Something went wrong with that request. Please try again.