mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
239 lines
5.6 KiB
239 lines
5.6 KiB
#!/bin/sh |
|
|
|
# ==========================(LICENSE BEGIN)============================ |
|
# |
|
# Copyright (c) 2007-2010 Projet RNRT SAPHIR |
|
# |
|
# Permission is hereby granted, free of charge, to any person obtaining |
|
# a copy of this software and associated documentation files (the |
|
# "Software"), to deal in the Software without restriction, including |
|
# without limitation the rights to use, copy, modify, merge, publish, |
|
# distribute, sublicense, and/or sell copies of the Software, and to |
|
# permit persons to whom the Software is furnished to do so, subject to |
|
# the following conditions: |
|
# |
|
# The above copyright notice and this permission notice shall be included |
|
# in all copies or substantial portions of the Software. |
|
# |
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
|
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
|
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
|
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
# |
|
# ===========================(LICENSE END)============================= |
|
# |
|
# @author Thomas Pornin <[email protected]> |
|
# |
|
# |
|
# This script tries to autodetect the make utility, C compiler and |
|
# library archiver. These parameters can be overridden with command-line |
|
# arguments. |
|
# |
|
|
|
# |
|
# For Solaris, we need to switch to a more POSIX-compliant /bin/sh binary. |
|
# |
|
if [ -z "$SPH_SCRIPT_LOOP" ] ; then |
|
SPH_SCRIPT_LOOP=yes |
|
export SPH_SCRIPT_LOOP |
|
if [ -x /usr/xpg6/bin/sh ] ; then |
|
exec /usr/xpg6/bin/sh "$0" "$@" |
|
fi |
|
if [ -x /usr/xpg4/bin/sh ] ; then |
|
exec /usr/xpg4/bin/sh "$0" "$@" |
|
fi |
|
fi |
|
|
|
# |
|
# Exit on first error. |
|
# |
|
set -e |
|
|
|
# |
|
# Go to the directory hosting the file. |
|
# |
|
cd "$(dirname "$0")" |
|
|
|
# |
|
# Print out usage (on stderr) and exit with an error status. |
|
# |
|
usage() { |
|
cat >&2 <<EOHELP |
|
usage: build.sh [ options ] |
|
options: |
|
-h | --help print this help |
|
-q | --quiet do not print out configuration information |
|
-i | --install also install |
|
-c | --clean do not build; instead, clean directory |
|
--disable-tests do not build unit tests |
|
--disable-runtests build but do not run the tests (for cross-compilation) |
|
--prefix=dir use 'dir' as prefix [/usr/local] |
|
--installdir-bin=dir install executable tools in 'dir' [prefix/bin] |
|
--installdir-lib=dir install compiled static library in 'dir' [prefix/lib] |
|
--installdir-inc=dir install library headers in 'dir' [prefix/include] |
|
--with-make=cmd use 'cmd' as 'make' command |
|
--with-cc=cmd use 'cmd' as C compiler |
|
--with-cflags=flags use 'flags' as C compiler flags |
|
--with-ar=cmd use 'cmd' as library archiver |
|
EOHELP |
|
exit 1 |
|
} |
|
|
|
# |
|
# Print out the argument (on stderr) and exit with an error status. |
|
# |
|
die() { |
|
echo "error: $1" >&2 |
|
exit 1 |
|
} |
|
|
|
# |
|
# Find out an executable by trying the provided possibilities. |
|
# |
|
findexe() { |
|
varname="$1" |
|
shift |
|
while [ "$#" -gt 0 ]; do |
|
exename="${1%% *}" |
|
if type "$exename" > /dev/null 2> /dev/null ; then |
|
eval "$varname='$1'" |
|
return |
|
fi |
|
shift |
|
done |
|
} |
|
|
|
# |
|
# Find an executable to fill a variable, unless already specified. Exit |
|
# if no executable is found. |
|
# |
|
checkexe() { |
|
varname="$1" |
|
shift |
|
if [ '!' -z "$(eval echo \$$varname)" ]; then |
|
return |
|
fi |
|
cmddisplay="$1" |
|
shift |
|
findexe "$varname" "$@" |
|
if [ -z "$(eval echo \$$varname)" ]; then |
|
die "no suitable \"$cmddisplay\" command found" |
|
fi |
|
} |
|
|
|
verbose=yes |
|
install=no |
|
clean=no |
|
buildtests=yes |
|
runtests=yes |
|
prefix=/usr/local |
|
cflags="SPH_UNSET" |
|
|
|
# |
|
# Parse arguments |
|
# |
|
while [ "$#" -gt 0 ]; do |
|
case "$1" in |
|
-h | --help ) |
|
usage ;; |
|
-q | --quiet ) |
|
verbose=no ;; |
|
-c | --clean ) |
|
clean=yes ;; |
|
-i | --install ) |
|
install=yes ;; |
|
--disable-tests ) |
|
buildtests=no |
|
runtests=no ;; |
|
--disable-runtests ) |
|
runtests=no ;; |
|
--prefix=* ) |
|
prefix=${1#*=} ;; |
|
--installdir-bin=* ) |
|
installdirbin=${1#*=} ;; |
|
--installdir-lib=* ) |
|
installdirlib=${1#*=} ;; |
|
--installdir-inc=* ) |
|
installdirinc=${1#*=} ;; |
|
--with-make=* ) |
|
makecmd=${1#*=} ;; |
|
--with-cc=* ) |
|
cccmd=${1#*=} ;; |
|
--with-cflags=* ) |
|
cflags=${1#*=} ;; |
|
--with-ar=* ) |
|
arcmd=${1#*=} ;; |
|
* ) |
|
usage ;; |
|
esac |
|
shift |
|
done |
|
|
|
if [ -z "$installdirbin" ]; then |
|
installdirbin="$prefix/bin" |
|
fi |
|
if [ -z "$installdirlib" ]; then |
|
installdirlib="$prefix/lib" |
|
fi |
|
if [ -z "$installdirinc" ]; then |
|
installdirinc="$prefix/include" |
|
fi |
|
|
|
checkexe makecmd make gmake make /usr/ccs/bin/make |
|
checkexe cccmd cc gcc c99 cc /usr/ccs/bin/cc |
|
checkexe arcmd ar "ar rcs" |
|
|
|
if $cccmd -v 2>&1 | grep "gcc version" > /dev/null ; then |
|
cclass=gcc |
|
fi |
|
|
|
# |
|
# If the machine is Ultrasparc, we somewhat assume that |
|
# |
|
case "$(uname -m)" in |
|
sun4u ) |
|
esac |
|
|
|
case "$cflags" in |
|
SPH_UNSET ) |
|
case "$cclass" in |
|
gcc ) |
|
cflags="-W -Wall -O1 -fomit-frame-pointer" ;; |
|
* ) |
|
cflags="-O" ;; |
|
esac ;; |
|
esac |
|
|
|
if [ "$clean" = "yes" ]; then |
|
mtarget="clean" |
|
else |
|
mtarget="compile" |
|
case "$buildtests" in |
|
yes ) |
|
mtarget="$mtarget build-tests" ;; |
|
esac |
|
case "$runtests" in |
|
yes ) |
|
mtarget="$mtarget run-tests" ;; |
|
esac |
|
fi |
|
if [ "$install" = "yes" ]; then |
|
mtarget="$mtarget install" |
|
fi |
|
|
|
case "$verbose" in |
|
yes ) |
|
echo "==============================================" |
|
uname -a |
|
echo "make: $makecmd" |
|
echo "cc: $cccmd $cflags" |
|
echo "ar: $arcmd" |
|
echo "targets: $mtarget" |
|
echo "==============================================" |
|
;; |
|
esac |
|
|
|
$makecmd CC="$cccmd" CFLAGS="$cflags" AR="$arcmd" INSTALLBIN="$installdirbin" INSTALLLIB="$installdirlib" INSTALLINC="$installdirinc" -f Makefile.unix $mtarget
|
|
|