321 lines
7.3 KiB
Bash
Executable File
321 lines
7.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# THe Ultimate Make Bash Script
|
|
# Used to wrap build scripts for easy dep
|
|
# handling and multiplatform support
|
|
|
|
|
|
# Basic usage on *nix:
|
|
# export tbs_arch=x86
|
|
# ./thumbs.sh make
|
|
|
|
|
|
# On Win (msvc 2013):
|
|
# C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall x86_amd64
|
|
# SET tbs_tools=msvc12
|
|
# thumbs make
|
|
|
|
# On Win (mingw32):
|
|
# SET path=C:\mingw32\bin;%path%
|
|
# SET tbs_tools=mingw
|
|
# SET tbs_arch=x86
|
|
# thumbs make
|
|
|
|
|
|
# Global settings are stored in env vars
|
|
# Should be inherited
|
|
|
|
[ $tbs_conf ] || export tbs_conf=Release
|
|
[ $tbs_arch ] || export tbs_arch=x64
|
|
[ $tbs_tools ] || export tbs_tools=gnu
|
|
[ $tbs_static_runtime ] || export tbs_static_runtime=0
|
|
|
|
[ $tbs_gd_png ] || export tbs_gd_png=1
|
|
[ $tbs_gd_jpeg ] || export tbs_gd_jpeg=1
|
|
[ $tbs_gd_freetype ] || export tbs_gd_freetype=1
|
|
[ $tbs_gd_tiff ] || export tbs_gd_tiff=1
|
|
|
|
|
|
# tbsd_* contains dep related settings
|
|
# tbsd_[name]_* contains settings specific to the dep
|
|
# name should match the repo name
|
|
|
|
# deps contains a map of what should be built/used
|
|
# keep the keys in sync ... no assoc arrays on msys :/
|
|
# targ contains a target for each dep (default=empty str)
|
|
# post is executed after each thumbs dep build
|
|
# ^ used for copying/renaming any libs you need - uses eval
|
|
|
|
zname=zlib.lib
|
|
jname=jpeg.lib
|
|
pname=png.lib
|
|
tname=tiff.lib
|
|
fname=freetype.lib
|
|
|
|
if [ $tbs_tools = gnu -o $tbs_tools = mingw ]
|
|
then
|
|
zname=libz.a
|
|
jname=libjpeg.a
|
|
pname=libpng.a
|
|
tname=libtiff.a
|
|
fname=libfreetype.a
|
|
fi
|
|
|
|
deps=()
|
|
targ=()
|
|
post=()
|
|
|
|
[ $tbsd_zlib_repo ] || export tbsd_zlib_repo="https://github.com/imazen/zlib"
|
|
[ $tbsd_libpng_repo ] || export tbsd_libpng_repo="https://github.com/imazen/libpng"
|
|
[ $tbsd_libjpeg_turbo_repo ] || export tbsd_libjpeg_turbo_repo="https://github.com/imazen/libjpeg-turbo libjpeg_turbo"
|
|
[ $tbsd_libtiff_repo ] || export tbsd_libtiff_repo="https://github.com/imazen/libtiff"
|
|
[ $tbsd_freetype_repo ] || export tbsd_freetype_repo="https://github.com/imazen/freetype"
|
|
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then cp="rsync"
|
|
else cp="cp"
|
|
fi
|
|
|
|
deps+=(zlib); targ+=(zlibstatic)
|
|
post+=("$cp -u \$(./thumbs.sh list_slib) ../../deps/$zname")
|
|
|
|
if [ $tbs_gd_png -gt 0 ]; then
|
|
deps+=(libpng); targ+=(png16_static)
|
|
post+=("$cp -u \$(./scripts/thumbs.sh list_slib) ../../deps/$pname")
|
|
fi
|
|
|
|
if [ $tbs_gd_jpeg -gt 0 ]; then
|
|
deps+=(libjpeg_turbo); targ+=(jpeg_static)
|
|
post+=("for lib in \$(./thumbs.sh list_slib); do [ -f \$lib ] && $cp -u \$lib ../../deps/$jname; done")
|
|
fi
|
|
|
|
if [ $tbs_gd_tiff -gt 0 ]; then
|
|
ttarg="libtiff/tiff_static"
|
|
[ $tbs_tools = gnu -o $tbs_tools = mingw ] && ttarg=tiff_static
|
|
deps+=(libtiff); targ+=($ttarg)
|
|
post+=("$cp -u \$(./thumbs.sh list_slib) ../../deps/$tname")
|
|
fi
|
|
|
|
if [ $tbs_gd_freetype -gt 0 ]; then
|
|
deps+=(freetype); targ+=("freetype_static")
|
|
post+=("$cp -u \$(./thumbs.sh list_slib) ../../deps/$fname")
|
|
fi
|
|
|
|
|
|
|
|
# -----------
|
|
# dep processor
|
|
|
|
process_deps()
|
|
{
|
|
mkdir build_deps
|
|
mkdir deps
|
|
cd build_deps
|
|
|
|
for key in "${!deps[@]}"
|
|
do
|
|
dep=${deps[$key]}
|
|
i_dep_repo="tbsd_${dep}_repo"
|
|
i_dep_incdir="tbsd_${dep}_incdir"
|
|
i_dep_libdir="tbsd_${dep}_libdir"
|
|
i_dep_built="tbsd_${dep}_built"
|
|
|
|
[ ${!i_dep_built} ] || export "${i_dep_built}=0"
|
|
|
|
if [ ${!i_dep_built} -eq 0 ]
|
|
then
|
|
git clone ${!i_dep_repo} --depth 1
|
|
cd $dep || exit 1
|
|
|
|
thumbs="./thumbs.sh"
|
|
[ ! -f $thumbs ] && thumbs=$(find . -name thumbs.sh -maxdepth 2)
|
|
|
|
$thumbs make ${targ[$key]} || exit 1
|
|
|
|
# copy any includes and do poststep
|
|
$cp -u -r $($thumbs list_inc) ../../deps
|
|
eval ${post[$key]}
|
|
|
|
# look in both local and parent dep dirs
|
|
export "${i_dep_incdir}=../../deps;deps"
|
|
export "${i_dep_libdir}=../../deps;deps"
|
|
export "${i_dep_built}=1"
|
|
|
|
cd ..
|
|
fi
|
|
done
|
|
|
|
export "${i_dep_incdir}=../../deps/freetype;deps/freetype"
|
|
|
|
cd ..
|
|
}
|
|
|
|
# -----------
|
|
# constructs dep dirs for cmake
|
|
|
|
postproc_deps()
|
|
{
|
|
cm_inc=
|
|
cm_lib=
|
|
|
|
for dep in "${deps[@]}"
|
|
do
|
|
i_dep_incdir="tbsd_${dep}_incdir"
|
|
i_dep_libdir="tbsd_${dep}_libdir"
|
|
|
|
cm_inc="${!i_dep_incdir};$cm_inc"
|
|
cm_lib="${!i_dep_libdir};$cm_lib"
|
|
done
|
|
|
|
cm_args+=(-DCMAKE_LIBRARY_PATH=$cm_lib)
|
|
cm_args+=(-DCMAKE_INCLUDE_PATH=$cm_inc)
|
|
}
|
|
|
|
# -----------
|
|
|
|
if [ $# -lt 1 ]
|
|
then
|
|
echo ""
|
|
echo " Usage : ./thumbs [command]"
|
|
echo ""
|
|
echo " Commands:"
|
|
echo " make - builds everything"
|
|
echo " check - runs tests"
|
|
echo " clean - removes build files"
|
|
echo " list - echo paths to any interesting files"
|
|
echo " space separated; relative"
|
|
echo " list_bin - echo binary paths"
|
|
echo " list_inc - echo lib include files"
|
|
echo " list_slib - echo static lib path"
|
|
echo " list_dlib - echo dynamic lib path"
|
|
echo ""
|
|
exit
|
|
fi
|
|
|
|
# -----------
|
|
|
|
upper()
|
|
{
|
|
echo $1 | tr [:lower:] [:upper:]
|
|
}
|
|
|
|
# Local settings
|
|
|
|
l_inc="./src/gd.h ./src/gd_io.h ./src/gdfx.h"
|
|
l_slib=
|
|
l_dlib=
|
|
l_bin=
|
|
list=
|
|
|
|
make=
|
|
c_flags=
|
|
cm_tools=
|
|
cm_args=(-DCMAKE_BUILD_TYPE=$tbs_conf)
|
|
cm_args+=(-DBUILD_TEST=1)
|
|
cm_args+=(-DENABLE_PNG=$tbs_gd_png)
|
|
cm_args+=(-DENABLE_JPEG=$tbs_gd_jpeg)
|
|
cm_args+=(-DENABLE_FREETYPE=$tbs_gd_freetype)
|
|
cm_args+=(-DENABLE_TIFF=$tbs_gd_tiff)
|
|
|
|
target=
|
|
[ $2 ] && target=$2
|
|
|
|
# -----------
|
|
|
|
case "$tbs_tools" in
|
|
msvc12)
|
|
cm_tools="Visual Studio 12"
|
|
[ "$target" = "" ] && mstrg="GD.sln" || mstrg="$target.vcxproj"
|
|
make="msbuild.exe $mstrg //p:Configuration=$tbs_conf //v:m"
|
|
|
|
l_slib="./build/Bin/$tbs_conf/libgd_static.lib"
|
|
l_dlib="./build/Bin/$tbs_conf/libgd.lib"
|
|
l_bin="./build/Bin/$tbs_conf/libgd.dll"
|
|
list="$l_bin $l_slib $l_dlib $l_inc" ;;
|
|
gnu)
|
|
cm_tools="Unix Makefiles"
|
|
c_flags+=" -fPIC"
|
|
make="make $target"
|
|
l_slib="./build/Bin/libgd.a"
|
|
l_dlib="./build/Bin/libgd.so"
|
|
l_bin="$l_dlib"
|
|
list="$l_slib $l_dlib $l_inc" ;;
|
|
mingw)
|
|
cm_tools="MinGW Makefiles"
|
|
make="mingw32-make $target"
|
|
c_flags+=" -fkeep-inline-functions"
|
|
|
|
# allow sh in path; some old cmake/mingw bug?
|
|
cm_args+=(-DCMAKE_SH=)
|
|
|
|
l_slib="./build/Bin/liblibgd.a"
|
|
l_dlib="./build/Bin/liblibgd.dll.a"
|
|
l_bin="./build/Bin/liblibgd.dll"
|
|
list="$l_bin $l_slib $l_dlib $l_inc" ;;
|
|
|
|
*) echo "Tool config not found for $tbs_tools"
|
|
exit 1 ;;
|
|
esac
|
|
|
|
# -----------
|
|
|
|
case "$tbs_arch" in
|
|
x64)
|
|
[ $tbs_tools = msvc12 ] && cm_tools="$cm_tools Win64"
|
|
[ $tbs_tools = gnu -o $tbs_tools = mingw ] && c_flags+=" -m64" ;;
|
|
x86)
|
|
[ $tbs_tools = gnu -o $tbs_tools = mingw ] && c_flags+=" -m32" ;;
|
|
|
|
*) echo "Arch config not found for $tbs_arch"
|
|
exit 1 ;;
|
|
esac
|
|
|
|
# -----------
|
|
|
|
if [ $tbs_static_runtime -gt 0 ]
|
|
then
|
|
[ $tbs_tools = msvc12 ] && c_flags+=" /MT"
|
|
[ $tbs_tools = gnu ] && cm_args+=(-DCMAKE_SHARED_LINKER_FLAGS="-static-libgcc -static-libstdc++")
|
|
[ $tbs_tools = mingw ] && cm_args+=(-DCMAKE_SHARED_LINKER_FLAGS="-static")
|
|
fi
|
|
|
|
# -----------
|
|
|
|
case "$1" in
|
|
make)
|
|
process_deps
|
|
postproc_deps
|
|
|
|
mkdir build
|
|
cd build
|
|
|
|
cm_args+=(-DCMAKE_C_FLAGS_$(upper $tbs_conf)="$c_flags")
|
|
cm_args+=(-DCMAKE_CXX_FLAGS_$(upper $tbs_conf)="$c_flags")
|
|
|
|
cmake -G "$cm_tools" "${cm_args[@]}" .. || exit 1
|
|
$make || exit 1
|
|
|
|
cd ..
|
|
;;
|
|
|
|
check)
|
|
cd build
|
|
ctest -C $tbs_conf . || exit 1
|
|
cd ..
|
|
;;
|
|
|
|
clean)
|
|
rm -rf deps
|
|
rm -rf build_deps
|
|
rm -rf build
|
|
;;
|
|
|
|
list) echo $list;;
|
|
list_bin) echo $l_bin;;
|
|
list_inc) echo $l_inc;;
|
|
list_slib) echo $l_slib;;
|
|
list_dlib) echo $l_dlib;;
|
|
|
|
*) echo "Unknown command $1"
|
|
exit 1;;
|
|
esac
|