summaryrefslogtreecommitdiff
path: root/Build/source/libs/gd/libgd-src/thumbs.sh
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/gd/libgd-src/thumbs.sh')
-rwxr-xr-xBuild/source/libs/gd/libgd-src/thumbs.sh320
1 files changed, 320 insertions, 0 deletions
diff --git a/Build/source/libs/gd/libgd-src/thumbs.sh b/Build/source/libs/gd/libgd-src/thumbs.sh
new file mode 100755
index 00000000000..f898ef50f74
--- /dev/null
+++ b/Build/source/libs/gd/libgd-src/thumbs.sh
@@ -0,0 +1,320 @@
+#!/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