Something went wrong. Try again.
Cider Isn't Darwin Emulation, Really
Something went wrong. Try again.
8.7 kB · 351 lines
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352#!/bin/sh## Copyright (c) 2009-2011 Mark Heily <mark@heily.com>## Permission to use, copy, modify, and distribute this software for any# purpose with or without fee is hereby granted, provided that the above# copyright notice and this permission notice appear in all copies.# # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.#
makeconf_version="$Revision: 10 $"
c_exports="program version target api cflags"
make_exports="program version target api distfile basedir \ prefix bindir sbindir libdir includedir mandir \ cflags ldflags ldadd libdepends \ sources objs deps mans headers extra_dist subdirs \ abi_major abi_minor abi_version \ cc cpp ld ln ar install diff"
required_headers=optional_headers=
pre_configure_hook() { return}
post_configure_hook() { return}
export_to_make() { for id in $* do uc_id=`echo $id | $tr '[:lower:]' '[:upper:]'`; eval "echo \"$uc_id=\"\$$id\"\" >> config.mk" done}
export_to_c() { for id in $* do uc_id=`echo $id | $tr '[:lower:]' '[:upper:]'`; eval "echo \"#define $uc_id \\\"\$$id\\\"\" >> config.h" done}
finalize() { uc_id=`echo \"$1\" | $tr '[:lower:]' '[:upper:]'`; eval "if [ \"\$$1\" = \"\" ] ; then $1=\"$2\" ; fi"}
process_argv() { for arg in $* do if [ "$arg" = "--makeconf-version" ] ; then echo $makeconf_version | sed 's/[^0-9.]//g' exit 0 fi id=`echo "$arg" | sed 's/=.*//; s/^--//;'` val=`echo "$arg" | sed 's/^.*=//'` if [ "$val" = "" ] ; then val=1 ; fi eval "$id=\"$val\"" done}
process_env() { test -n "$CC" && cc="$CC" test -n "$CPP" && cpp="$CPP" test -n "$CPPFLAGS" && cppflags="$CPPFLAGS" test -n "$CFLAGS" && cflags="$CFLAGS" test -n "$LD" && ld="$LD" test -n "$LN" && ld="$LN" test -n "$LDFLAGS" && ldflags="$LDFLAGS" test -n "$AR" && ar="$AR" basedir=`pwd`} check_header() { sym=`echo "have_$1" | sed 's,[./],_,g'` uc_sym=`echo "$sym" | $tr '[:lower:]' '[:upper:]'`; path=$1
printf "checking for $path.. " if [ -f "/usr/include/$path" ] ; then echo "yes" echo "#define $uc_sym 1" >> config.h eval "$sym=yes" return 0 else echo "no" echo "#undef $uc_sym" >> config.h eval "$sym=no" return 1 fi}
# Determine the path to an executable binarycheck_binary() { id=$1 shift
for path in $* do test -f $path if [ $? = 0 ] ; then eval "$id=\"$path\"" return fi done
echo "not found" return}
check_headers() { for header in $* do check_header "$header" done}
check_symbol() { header=$1 symbol=$2
uc_symbol=`echo "HAVE_$symbol" | $tr '[:lower:]' '[:upper:]' | sed 's,[./],_,g'` lc_symbol=`echo "have_$symbol" | $tr '[:upper:]' '[:lower:]' | sed 's,[./],_,g'`
if [ -f "$header" ] ; then path="$header" elif [ -f "/usr/include/$header" ] ; then path="/usr/include/$header" else echo "*** ERROR: Cannot find <$header>" exit 1 fi printf "checking $header for $symbol.. " if [ "`grep $symbol $path`" != "" ] ; then eval "$lc_symbol=yes" echo "#define $uc_symbol 1" >> config.h echo "yes" return 0 else eval "$lc_symbol=no" echo "no" echo "#undef $uc_symbol" >> config.h return 1 fi}
check_install() { printf "checking for a BSD-compatible install.. " if [ "`uname -s`" = "SunOS" ] ; then default_install=/usr/ucb/install else default_install=/usr/bin/install fi finalize install "$default_install" echo "$install"}
check_target() { printf "checking operating system type.. " default_target=`uname -s | $tr '[:upper:]' '[:lower:]'` default_api="posix" case "$default_target" in sunos) default_target="solaris" ;; "gnu/kfreebsd") default_target="freebsd" ;; mingw*) default_target="windows" default_api="windows" ;; esac finalize target "$default_target" finalize api "$default_api" echo "$api"}
check_compiler() { printf "checking for a C compiler.. " check_binary default_cc "$cc" "`which $cc 2>/dev/null`" "/usr/bin/cc" "/usr/bin/gcc" "/usr/sfw/bin/gcc" "`which gcc 2>/dev/null`" finalize cc "$default_cc"# test -x "$cc" || err "Unable to locate a C compiler" echo "$cc"}
check_linker() { printf "checking for a suitable linker.. "
# Workaround for "hidden symbol <foo> is referenced by DSO" linker error # seen when compiling libdispatch. # Appears to be a problem with GCC 4.0 and binutils # default_ld="$cc" ldflags="-o $program.so.$abi_major.$abi_minor $ldflags"
# FIXME: port to solaris if [ "$target" = "linux" ] ; then ldflags="$ldflags -Wl,-export-dynamic -Wl,-soname,$program.so.$abi_major" fi
if [ "$target" = "solaris" ] ; then ldflags="$ldflags" fi
finalize ld "$default_ld" echo "$ld"}
check_archiver() { printf "checking for a suitable archiver.. " if [ "`uname -s`" = "SunOS" -a "`uname -v | grep Nexenta`" = "" ] ; then default_ar="/usr/sfw/bin/gar" else default_ar="/usr/bin/ar" fi finalize ar "$default_ar" echo "$ar"}
err() { echo "*** ERROR *** $*" rm -f config.mk $program.pc config.h exit 1}
check_diff() { # TODO: Support non-GNU diff syntax # TODO: Search for the command printf "checking for a suitable diff(1) command.. " finalize diff "diff -ruN -dEbwBp -x .svn -x .o -x config.h -x config.mk" echo "found"}
subst_vars() { outfile=$1
if [ ! -f "${outfile}.in" ] ; then return fi
echo "Creating $outfile" rm -f $outfile sed -e " s,@@CWD@@,`pwd`,g; s,@@PROGRAM@@,$program,g; s,@@VERSION@@,$version,g; s,@@PREFIX@@,$prefix,g; s,@@LIBDIR@@,$libdir,g; s,@@INCLUDEDIR@@,$includedir,g; s,@@MANDIR@@,$mandir,g; s,@@LIBDEPENDS@@,$libdepends,g; s,@@PKG_SUMMARY@@,$pkg_summary,g; s,@@RPM_DATE@@,`date +'%a %b %d %Y'`,g; s,@@PKG_DESCRIPTION@@,$pkg_description,g; s,@@LICENSE@@,$license,g; s,@@AUTHOR@@,$author,g; " < ${outfile}.in > $outfile chmod 400 $outfile}
######################################################################### MAIN()########################################################################
# Workaround for Solaris "Bad string" issue when LOCALE is undefinedtr="/usr/bin/tr"test -f /usr/xpg4/bin/tr && tr="/usr/xpg4/bin/tr"
. ./config.inc
# Initialize the output files#for output_file in config.mkdo rm -f $output_file echo "# AUTOMATICALLY GENERATED -- DO NOT EDIT" > $output_filedoneif [ "$sources" != "" ] ; then rm -f config.h echo "/* AUTOMATICALLY GENERATED -- DO NOT EDIT */" > config.hfi
process_argv "$*"process_env
check_targetcheck_compilercheck_linkercheck_archivercheck_installcheck_diff
finalize program "$program"finalize version "$version"finalize abi_major "$abi_major"finalize abi_minor "$abi_minor"finalize abi_version "$abi_major.$abi_minor"finalize prefix "/usr/local"finalize bindir "\\\$(PREFIX)/bin"finalize sbindir "\\\$(PREFIX)/sbin"finalize libdir "\\\$(PREFIX)/lib"finalize includedir "\\\$(PREFIX)/include"finalize mandir "\\\$(PREFIX)/share/man"finalize cflags "$cflags"finalize libdepends "$libdepends"finalize ldadd ""finalize ldflags ""finalize deps ""finalize ln "`which ln`"finalize distfile "$program-$version.tar.gz"
pre_configure_hook
for header in $required_headersdo check_header "$header" || err "$header is required, but cannot be found."donecheck_headers $optional_headers
post_configure_hook
objs="`echo \"$sources\" | sed 's/\.c/\.o/g'`"
subst_vars "$program.pc"subst_vars "$program.la"subst_vars "rpm.spec"
if [ "$sources" != "" ] ; then echo "Creating config.h" export_to_c $c_exportsfi
echo "Creating config.mk"export_to_make "$make_exports"