glest-source/mk/macos/build-zg.sh
andy5995 60e38945fe CMake:correct spelling of "zetaglest"
This also removes the git revision number stamping from cmake, support
for which was removed from the source code months ago.

This is to help prepare to fix #110 but doesn't fix it.
2018-05-09 09:09:36 -05:00

266 lines
10 KiB
Bash
Executable File

#!/bin/sh
# Use this script to build MegaGlest using cmake
# ----------------------------------------------------------------------------
# 2011 Written by Mark Vejvoda <mark_vejvoda@hotmail.com>
# 2015 Rewritten by filux <heross(@@)o2.pl>
# Copyright (c) 2011-2015 under GNU GPL v3.0+
# ----------------------------------------------------------------------------
# Default to English language output so we can understand your bug reports
#
# Modified by Andy Alt for ZetaGlest <https://zetaglest.github.io/>
export LANG=C
SCRIPTDIR="$(cd "$(dirname "$0")"; pwd)"
BUILD_BUNDLE=0
CPU_COUNT=-1
CMAKE_ONLY=0
MAKE_ONLY=0
USE_XCODE=0
GCC_FORCED=0
WANT_STATIC_LIBS="-DWANT_STATIC_LIBS=ON"
FORCE_EMBEDDED_LIBS=0
LUA_FORCED_VERSION=0
COMPILATION_WITHOUT=0
while getopts "c:defhl:mnwxb" option; do
case "${option}" in
c) CPU_COUNT=${OPTARG};;
d) WANT_STATIC_LIBS="-DWANT_STATIC_LIBS=OFF";;
e) FORCE_EMBEDDED_LIBS=1;;
f) GCC_FORCED=1;;
h) echo "Usage: $0 <option>"
echo " where <option> can be: -b, -c x, -d, -e, -f, -m, -n, -h, -l x, -w, -x"
echo " option descriptions:"
echo " -b : Force default configuration designed for bundle/release."
echo " -c x : Force the cpu / cores count to x - example: -c 4"
echo " -d : Force DYNAMIC compile (do not want static libs)"
echo " -e : Force compile with EMBEDDED libraries"
echo " -f : Force using Gcc compiler"
echo " -l x : Force using LUA version x - example: -l 5.3"
echo " -m : Force running CMAKE only to create Make files (do not compile)"
echo " -n : Force running MAKE only to compile (assume CMAKE already built make files)"
echo " -w : Force compilation 'Without using wxWidgets'"
echo " -x : Force usage of Xcode and xcodebuild"
echo " -h : Display this help usage"
exit 0;;
l) LUA_FORCED_VERSION=${OPTARG};;
m) CMAKE_ONLY=1;;
n) MAKE_ONLY=1;;
w) COMPILATION_WITHOUT=1;;
x) USE_XCODE=1;;
b) BUILD_BUNDLE=1
#CPU_COUNT=-1
CMAKE_ONLY=0
MAKE_ONLY=0
USE_XCODE=0
GCC_FORCED=0
WANT_STATIC_LIBS="-DWANT_STATIC_LIBS=ON"
LUA_FORCED_VERSION=0
COMPILATION_WITHOUT=1;;
\?)
echo "Script Invalid option: -$OPTARG" >&2
exit 1;;
esac
done
CLANG_BIN_PATH="$(which clang 2>/dev/null)"
CLANGPP_BIN_PATH="$(which clang++ 2>/dev/null)"
GCC_BIN_PATH="/opt/local/bin/gcc"
GCCPP_BIN_PATH="/opt/local/bin/g++"
CMAKE_BIN_PATH="$(which cmake 2>/dev/null)"
if [ "$CMAKE_BIN_PATH" = "" ]; then CMAKE_BIN_PATH="/opt/local/bin/cmake"; fi
# ^ install latest (not beta) gcc from "mac ports" and then choose it as default gcc version by "port select ..."
# ( ^ same situation is with wxwidgets )
cd ${SCRIPTDIR}
if [ "$BUILD_BUNDLE" -eq "1" ] && [ -d "p7zip" ]; then rm -rf "p7zip"; fi
if [ -e ".p7zip.zip" ] && [ "$(find ./ -name ".p7zip.zip" -mtime +90)" ]; then rm ".p7zip.zip"; rm -rf "p7zip"; fi
if [ ! -e ".p7zip.zip" ]; then
curl -L -o .p7zip.zip https://github.com/MegaGlest/zetaglest-source/releases/download/3.3.0/p7zip.zip 2>/dev/null
# ^sha256: 20ac3b0377054f8196c10e569bd6ec7c6ed06d519fa39e781ee6d27d7887588b
if [ -e ".p7zip.zip" ]; then touch -m ".p7zip.zip"; fi
fi
if [ ! -d "p7zip" ]; then unzip .p7zip.zip >/dev/null; fi
if [ "$BUILD_BUNDLE" -eq "1" ]; then
if [ -e "zetaglest" ] && [ "$(./zetaglest --version >/dev/null; echo "$?")" -eq "0" ]; then
if [ -d "lib" ]; then rm -rf "lib"; fi
mkdir -p "lib"
list_of_libs="$(otool -L zetaglest | grep -v '/System/Library/Frameworks/' | grep -v '/usr/lib/' | awk '{print $1}' | sed '/:$/d')"
for (( i=1; i<=50; i++ )); do
for dyn_lib in $list_of_libs; do
if [ "$(echo "$list_of_checked_libs" | grep "$dyn_lib")" = "" ]; then
list_of_libs2="$(otool -L "$dyn_lib" | grep -v '/System/Library/Frameworks/' | grep -v '/usr/lib/' | awk '{print $1}')"
list_of_libs="$(echo "$list_of_libs
$list_of_libs2" | sed '/:$/d' | sed '/^$/d' | sort -u )"
list_of_checked_libs="$list_of_checked_libs $dyn_lib"
fi
done
done
for dyn_lib in $list_of_libs; do
cp "$dyn_lib" "lib/"
done
if [ "$(find lib -type f -name "libvlc.*")" != "" ]; then
LIBVLC_DIR_CHECK="$( echo "$list_of_checked_libs" | tr ' ' '\n' | grep "libvlc\." | sort -u | head -1 )"
if [ "$LIBVLC_DIR_CHECK" != "" ]; then
LIBVLC_DIR="$(cd "$(dirname "$LIBVLC_DIR_CHECK")"; pwd)"
if [ -d "$LIBVLC_DIR/vlc/plugins" ]; then
mkdir -p "lib/vlc"
cp -f -r "$LIBVLC_DIR/vlc/plugins" "lib/vlc/"
fi
fi
fi
else
echo 'Error: Please run first at least once build-mg.sh script to be ready for prepare directory with dynamic libraries.'
# strange method but required for cpack/.dmg
exit 1
fi
fi
# Google breakpad integration (cross platform memory dumps) - OPTIONAL
# Set this to the root path of your Google breakpad subversion working copy.
# By default, this script looks for a "google-breakpad" sub-directory within
# the directory this script resides in. If this directory is not found, Cmake
# will warn about it later.
# Instead of editing this variable, consider creating a symbolic link:
# ln -s ../../google-breakpad google-breakpad
BREAKPAD_ROOT="$SCRIPTDIR/../../google-breakpad/"
# Build threads
# By default we use all physical CPU cores to build.
NUMCORES="$(sysctl -n hw.ncpu)"
echo "CPU cores detected: $NUMCORES"
if [ "$NUMCORES" = '' ]; then NUMCORES=1; fi
if [ "$CPU_COUNT" != -1 ]; then NUMCORES=$CPU_COUNT; fi
echo "CPU cores to be used: $NUMCORES"
if [ "$BUILD_BUNDLE" -eq "1" ] && [ -d "build" ]; then rm -rf build; fi
if [ $MAKE_ONLY = 0 ]; then mkdir -p build; fi
cd build
if [ $MAKE_ONLY = 0 ] && [ -f 'CMakeCache.txt' ]; then rm -f 'CMakeCache.txt'; fi
distribution="$(sw_vers -productName)"
release="$(sw_vers -productVersion)"
xcode_ver="$(xcodebuild -version | awk '/Xcode/ {print $2}')"
architecture="$(uname -m)"
echo 'We have detected the following system:'
echo " [ $distribution ] [ $release ] [ $architecture ] [ $xcode_ver ]"
case $release in
*) if [ "$WANT_STATIC_LIBS" = "-DWANT_STATIC_LIBS=ON" ]; then
echo 'Turning ON dynamic PNG ...'
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DSTATIC_PNG=OFF -DWANT_USE_VLC=OFF -DWANT_USE_OpenSSL=OFF"
fi;;
esac
case $xcode_ver in
# en.wikipedia.org/wiki/Xcode, Version, OS X SDK(s) <- lowest, but not less than 10.4
2.*|3.*) CMAKE_OSX_DEPLOYMENT_TARGET="10.4";;
4.0*|4.1*|4.2*|4.3*) CMAKE_OSX_DEPLOYMENT_TARGET="10.6";;
4.*) CMAKE_OSX_DEPLOYMENT_TARGET="10.7";;
5.*) CMAKE_OSX_DEPLOYMENT_TARGET="10.8";;
6.0*|6.1*|6.2*) CMAKE_OSX_DEPLOYMENT_TARGET="10.9";;
esac
case $CMAKE_OSX_DEPLOYMENT_TARGET in
10.4*|10.5*) CMAKE_OSX_ARCHITECTURES="ppc;i386";;
10.6*) CMAKE_OSX_ARCHITECTURES="i386;x86_64";;
esac
if [ "$CMAKE_OSX_DEPLOYMENT_TARGET" != "" ]; then
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}"
fi
if [ "$CMAKE_OSX_ARCHITECTURES" != "" ]; then
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}"
fi
if [ "$USE_XCODE" -ne "1" ]; then
if [ "$GCC_FORCED" -ne "1" ]; then
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DCMAKE_C_COMPILER=${CLANG_BIN_PATH} -DCMAKE_CXX_COMPILER=${CLANGPP_BIN_PATH}"
else
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DCMAKE_C_COMPILER=${GCC_BIN_PATH} -DCMAKE_CXX_COMPILER=${GCCPP_BIN_PATH}"
echo "USER WANTS to use Gcc compiler!"
fi
fi
if [ "$LUA_FORCED_VERSION" != "0" ] && [ "$LUA_FORCED_VERSION" != "" ]; then
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DFORCE_LUA_VERSION=$LUA_FORCED_VERSION"
#echo "USER WANTS TO FORCE USE of LUA $LUA_FORCED_VERSION"
fi
if [ "$FORCE_EMBEDDED_LIBS" != "0" ] && [ "$FORCE_EMBEDDED_LIBS" != "" ]; then
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DFORCE_EMBEDDED_LIBS=ON"
fi
if [ "$COMPILATION_WITHOUT" != "0" ] && [ "$COMPILATION_WITHOUT" != "" ]; then
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DBUILD_ZETAGLEST_MAP_EDITOR=OFF -DBUILD_ZETAGLEST_MODEL_VIEWER=OFF"
fi
if [ "$MAKE_ONLY" -eq "0" ]; then
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DWANT_DEV_OUTPATH=ON $WANT_STATIC_LIBS -DBREAKPAD_ROOT=$BREAKPAD_ROOT"
if [ "$BUILD_BUNDLE" -ne "1" ]; then
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=''"
if [ "$GCC_FORCED" -ne "1" ] || [ "$USE_XCODE" -eq "1" ]; then :
#^ Remove this condition when it V will start working on gcc
#EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DBUILD_ZETAGLEST_TESTS=ON"
#^ Uncomment when it will start working on clang
else
rm -f ../zetaglest_tests
fi
rm -f ../MegaGlest*.dmg
else
EXTRA_CMAKE_OPTIONS="${EXTRA_CMAKE_OPTIONS} -DCPACK_GENERATOR=Bundle -DWANT_SINGLE_INSTALL_DIRECTORY=ON"
rm -f ../zetaglest_editor ../zetaglest_g3dviewer ../zetaglest_tests
fi
echo "Calling cmake with EXTRA_CMAKE_OPTIONS = ${EXTRA_CMAKE_OPTIONS}"
if [ "$USE_XCODE" -eq "1" ]; then
$CMAKE_BIN_PATH -GXcode $EXTRA_CMAKE_OPTIONS ../../..
if [ "$?" -ne "0" ]; then echo 'ERROR: CMAKE failed.' >&2; exit 1; fi
else
$CMAKE_BIN_PATH —G"Unix Makefiles" $EXTRA_CMAKE_OPTIONS ../../..
if [ "$?" -ne "0" ]; then echo 'ERROR: CMAKE failed.' >&2; exit 1; fi
fi
fi
if [ "$CMAKE_ONLY" -eq "1" ]; then
echo "==================> You may now call make with $NUMCORES cores... <=================="
else
if [ "$USE_XCODE" -eq "1" ]; then
echo "==================> About to call xcodebuild... <================================="
xcodebuild | egrep "(error|warning):"
if [ "$?" -ne "0" ]; then echo 'ERROR: xcodebuild failed.' >&2; exit 2; fi
else
echo "==================> About to call make with $NUMCORES cores... <=================="
make -j$NUMCORES
if [ "$?" -ne "0" ]; then echo 'ERROR: MAKE failed.' >&2; exit 2; fi
fi
if [ -d "../Debug" ]; then mv -f ../Debug/zetaglest* "$SCRIPTDIR"; rm -rf ../Debug
elif [ -d "../Release" ]; then mv -f ../Release/zetaglest* "$SCRIPTDIR"; rm -rf ../Release; fi
cd ..
if [ "$BUILD_BUNDLE" -ne "1" ]; then
echo ''
echo 'BUILD COMPLETE.'
echo ''
echo '- - - - - - - - - - - - - - - - - - - -'
echo 'Mini test:'
echo '>>> zetaglest --version'
./zetaglest --version | head -3
#echo '>>> zetaglest_editor --help'
#./zetaglest_editor --help | head -3
#echo '>>> zetaglest_g3dviewer --help'
#./zetaglest_g3dviewer --help | head -3
echo 'Dependencies:'
otool -L zetaglest
echo '- - - - - - - - - - - - - - - - - - - -'
echo ''
echo 'To launch MegaGlest from the current directory, use:'
echo ' ./zetaglest'
echo ''
else
ls -lhA zetaglest
echo ''
./zetaglest --version
echo ''
fi
fi