X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/8c6fa3fbaccc22127280bf77a48fab5a3ee0716e..46b0747592074017ff0ea4b33d4a7194235886e5:/stargazer/build diff --git a/stargazer/build b/stargazer/build new file mode 100755 index 00000000..b5e13df6 --- /dev/null +++ b/stargazer/build @@ -0,0 +1,639 @@ +#!/bin/sh + +# $Revision: 1.57 $ +# $Author: faust $ +# $Date: 2010/05/09 12:39:01 $ +###################################################### + +# Installation path prefix + +#PREFIX="" + +# Binaries access bits + +BIN_MODE=0755 + +# Data files access bits + +DATA_MODE=0644 + +# Dir access bits + +DIR_MODE=0755 + +# Binaries and data files owner + +OWNER=root + +OS=unknown +sys=`uname -s` +release=`uname -r` +major=`printf "%s" "$release" | cut -d. -f1` +BUILD_DIR=`pwd` +CONFFILE="../../Makefile.conf" +VAR_DIR="./inst/var/stargazer" +MIN_XMLRPCC_VERSION="1.06.27" +XMLRPC_FEATURES="c++2 abyss-server" + + +if [ "$1" = "debug" ] +then + DEFS="$DEFS -DDEBUG" + MAKEOPTS="$MAKEOPTS -j1" + CFLAGS="$CFLAGS -ggdb3 -W -Wall" + CXXFLAGS="$CXXFLAGS -ggdb3 -W -Wall" + DEBUG="yes" +else + DEFS="$DEFS -DNDEBUG" + DEBUG="no" +fi + +CFLAGS="$CFLAGS -I/usr/local/include" +CXXFLAGS="$CXXFLAGS -I/usr/local/include" +LDFLAGS="$LDFLAGS -L/usr/local/lib" + +if [ "$sys" = "Linux" ] +then + OS=linux + ETC_DIR="./inst/linux/etc/stargazer" + MAKE="make" +fi + +if [ "$sys" = "FreeBSD" ] +then + case $major in + 4) OS=bsd;; + 5) OS=bsd5;; + 6) OS=bsd5;; + 7) OS=bsd7;; + *) OS=bsd7;; + esac + ETC_DIR="./inst/freebsd/etc/stargazer" + MAKE="gmake" +fi + +if [ "$sys" = "Darwin" ] +then + OS=darwin + ETC_DIR="./inst/freebsd/etc/stargazer" + MAKE="gmake" +fi + +if [ "$OS" = "unknown" ] +then + printf "#############################################################################\n" + printf "# Sorry, but stargazer is currently supported by Linux, FreeBSD and Darwin. #\n" + printf "#############################################################################\n" + exit 1 +fi + +printf "#############################################################################\n" +printf " Building STG 2.4 for $sys $release\n" +printf "#############################################################################\n" + +STG_LIBS="logger.lib + crypto.lib + common.lib + scriptexecuter.lib + conffiles.lib + pinger.lib + dotconfpp.lib + smux.lib" + +PLUGINS="authorization/ao + authorization/inetaccess + configuration/sgconfig + other/ping + other/rscript + other/smux + store/files + capture/cap_nf" + +if [ "$OS" = "linux" ] +then + DEFS="$DEFS -DLINUX" + PLUGINS="$PLUGINS + capture/ether_linux" + LIB_THREAD=-lpthread +else + LIBICONV="-liconv" + if [ "$OS" = "bsd" ] + then + DEFS="$DEFS -DFREE_BSD" + LIB_THREAD=-lc_r + else + if [ "$OS" = "bsd7" ] + then + DEFS="$DEFS -DFREE_BSD5" + LIB_THREAD=-lpthread + else + if [ "$OS" == "darwin" ] + then + DEFS="$DEFS -DDARWIN" + LIB_THREAD=-lpthread + else + LIB_THREAD=-lc_r + fi + fi + fi + PLUGINS="$PLUGINS + capture/ether_freebsd + capture/divert_freebsd" +fi + +if [ -z "$CC" ] +then + CC=gcc +fi + +if [ -z "$CXX" ] +then + CXX=g++ +fi + +printf "Checking CC... " +$CC --version > /dev/null 2> /dev/null +if [ $? != 0 ] +then + printf "FAIL!\n" + printf "$CC not found\n" + exit; +fi +printf "found\n" +printf "Checking CXX... " +$CXX --version > /dev/null 2> /dev/null +if [ $? != 0 ] +then + printf "FAIL!\n" + printf "$CXX not found\n" + exit; +fi +printf "found\n" + +printf "Checking endianess... " +printf "int main() { int probe = 0x00000001; return *(char *)&probe; }\n" > build_check.c +$CC $CFLAGS $LDFLAGS build_check.c -o fake +if [ $? != 0 ] +then + printf "FAIL!\n" + printf "Endianess checking failed\n" + exit; +else + ./fake + if [ $? = 1 ] + then + ARCH=le + CXXFLAGS="$CXXFLAGS -DARCH_LE" + CFLAGS="$CFLAGS -DARCH_LE" + printf "Little Endian\n" + else + ARCH=be + CXXFLAGS="$CXXFLAGS -DARCH_BE" + CFLAGS="$CFLAGS -DARCH_BE" + printf "Big Endian\n" + fi +fi +rm -f fake + +printf "Checking for -lexpat... " +printf "#include \nint main() { return 0; }\n" > build_check.c +$CC $CFLAGS $LDFLAGS build_check.c -lexpat -o fake > /dev/null 2> /dev/null +if [ $? != 0 ] +then + CHECK_EXPAT=no + printf "no\n" +else + CHECK_EXPAT=yes + printf "yes\n" +fi +rm -f fake + +printf "Checking for iconv 2nd argument... " +printf "#include \nint main(){ const char** src = 0; iconv(0, src, 0, 0, 0); }\n" > build_check.c +$CC $CFLAGS $LDFLAGS -Werror build_check.c $LIBICONV -o fake > /dev/null 2> /dev/null +if [ $? != 0 ] +then + printf "non-const\n" +else + DEFS="$DEFS -DCONST_ICONV" + printf "const\n" +fi +rm -f fake + +printf "Checking for fb_config... " +FB_VERSION=`fb_config --version 2> /dev/null` +if [ "$?" != "0" ] +then + printf "no\n" + printf "Checking for -lfbclient... " + printf "int main() { return 0; }\n" > build_check.c + $CC $CFLAGS $LDFLAGS build_check.c -lfbclient $LIB_THREAD -o fake > /dev/null 2> /dev/null + if [ $? != 0 ] + then + CHECK_FBCLIENT=no + printf "no\n" + else + FB_CFLAGS="" + FB_LDFLAGS="-lfbclient" + CHECK_FBCLIENT=yes + printf "yes\n" + fi + rm -f fake +else + printf "yes\n" + printf "Checking for fb_config --cflags... " + FB_CFLAGS=`fb_config --cflags` + if [ "$?" != "0" ] + then + CHECK_FBCLIENT=no + printf "no\n" + else + printf "[$FB_CFLAGS]\n" + printf "Checking for fb_config --libs " + FB_LDFLAGS=`fb_config --libs` + if [ "$?" != "0" ] + then + CHECK_FBCLIENT=no + printf "no\n" + else + CHECK_FBCLIENT=yes + printf "[$FB_LDFLAGS]\n" + fi + fi +fi + + +printf "Checking for mysql_config... " +printf "#include \nint main() { return 0; }\n" > build_check.c +MYSQL_VERSION=`mysql_config --version 2> /dev/null` +if [ $? != 0 ] +then + printf "no\n"; + printf "Checking for -lmysqlclient... " + $CC $CFLAGS $LDFLAGS build_check.c -lmysqlclient_r $LIB_THREAD -o fake > /dev/null 2> /dev/null + if [ $? != 0 ] + then + CHECK_MYSQLCLIENT=no + printf "no\n" + else + CHECK_MYSQLCLIENT=yes + MYSQL_CFLAGS="" + MYSQL_LDFLAGS="-lmysqlclient_r" + printf "yes\n" + fi + rm -f fake +else + printf "yes\n" + printf "Checking for mysql_config --cflags... " + MYSQL_CFLAGS=`mysql_config --cflags 2> /dev/null` + if [ $? != 0 ] + then + CHECK_MYSQLCLIENT=no + printf "no\n" + else + printf "[$MYSQL_CFLAGS]\n" + printf "Checking for mysql_config --libs_r... " + MYSQL_LDFLAGS=`mysql_config --libs_r 2> /dev/null` + if [ $? != 0 ] + then + CHECK_MYSQLCLIENT=no + printf "no\n" + else + CHECK_MYSQLCLIENT=yes + printf "[$MYSQL_LDFLAGS]\n" + fi + fi +fi + +printf "Checking for pg_config... " +printf "#include \nint main() { return 0; }\n" > build_check.c +PG_VERSION=`pg_config --version 2> /dev/null` +if [ $? != 0 ] +then + printf "no\n"; + printf "Checking for -lpq... " + $CC $CFLAGS $LDFLAGS build_check.c -lpq $LIB_THREAD -o fake > /dev/null 2> /dev/null + if [ $? != 0 ] + then + CHECK_PQ=no + printf "no\n" + else + CHECK_PQ=yes + printf "yes\n" + fi + rm -f fake +else + printf "yes\n"; + printf "Checking for pg_config --includedir... " + PG_CFLAGS="-I"`pg_config --includedir 2> /dev/null` + if [ $? != 0 ] + then + CHECK_PQ=no + printf "no\n" + else + printf "[$PG_CFLAGS]\n" + printf "Checking for pg_config --libdir... " + PG_LDFLAGS="-L"`pg_config --libdir 2> /dev/null` + if [ $? != 0 ] + then + CHECK_PQ=no + printf "no\n" + else + CHECK_PQ=yes + printf "[$PG_LDFLAGS]\n" + fi + fi +fi + +printf "Checking for xmlrpc-c-config... " +printf "#include \nint main() { return 0; }\n" > build_check.c +XMLRPCC_VERSION=`xmlrpc-c-config $XMLRPC_FEATURES --version 2> /dev/null` +if [ $? != 0 ] +then + printf "no\n"; + printf "Checking for -lxmlrpc... " + $CC $CFLAGS $LDFLAGS build_check.c -lxmlrpc $LIB_THREAD -o fake > /dev/null 2> /dev/null + if [ $? != 0 ] + then + CHECK_XMLRPC=no + printf "no\n" + else + CHECK_XMLRPC=yes + printf "yes\n" + fi + rm -f fake +elif [ "$XMLRPCC_VERSION" \< "$MIN_XMLRPCC_VERSION" ] +then + printf "no (need at least $MIN_XMLRPCC_VERSION, actual $XMLRPCC_VERSION)\n"; + CHECK_XMLRPC=no +else + printf "yes (version $XMLRPCC_VERSION)\n"; + printf "Checking for xmlrpc-c-config --cflags... " + XMLRPC_CFLAGS=`xmlrpc-c-config $XMLRPC_FEATURES --cflags 2> /dev/null` + if [ $? != 0 ] + then + CHECK_XMLRPC=no + printf "no\n" + else + printf "[$XMLRPC_CFLAGS]\n" + printf "Checking for xmlrpc-c-config --libs... " + XMLRPC_LDFLAGS=`xmlrpc-c-config $XMLRPC_FEATURES --libs 2> /dev/null` + if [ $? != 0 ] + then + CHECK_XMLRPC=no + printf "no\n" + else + CHECK_XMLRPC=yes + printf "[$XMLRPC_LDFLAGS]\n" + fi + fi +fi + +printf "Checking for -lpcap... " +printf "#include \nint main() { return 0; }\n" > build_check.c +$CC $CFLAGS $LDFLAGS build_check.c -lpcap -o fake > /dev/null 2> /dev/null +if [ $? != 0 ] +then + CHECK_PCAP=no + printf "no\n" +else + CHECK_PCAP=yes + printf "yes\n" +fi +rm -f fake + +printf "Checking for -lnfnetlink... " +printf "#include \n#include \n#include \nint main() { return 0; }\n" > build_check.c +$CC $CFLAGS $LDFLAGS build_check.c -lnfnetlink -o fake > /dev/null 2> /dev/null +if [ $? != 0 ] +then + CHECK_NFNETLINK=no + printf "no\n" +else + CHECK_NFNETLINK=yes + NETLINK_LDFLAGS="-lnfnetlink" + printf "yes\n" +fi +rm -f fake + +printf "Checking for -lnetfilter_queue... " +printf "#include \n#include \nint main() { return 0; }\n" > build_check.c +$CC $CFLAGS $LDFLAGS build_check.c -lnetfilter_queue -o fake > /dev/null 2> /dev/null +if [ $? != 0 ] +then + CHECK_NFQ=no + printf "no\n" +else + CHECK_NFQ=yes + NFQ_LDFLAGS="-lnetfilter_queue" + printf "yes\n" +fi +rm -f fake + +printf "Checking for -lyajl... " +pkg-config --version > /dev/null 2> /dev/null +if [ "$?" = "0" ] +then + pkg-config --atleast-version=2.0.0 yajl + if [ "$?" != "0" ] + then + CHECK_YAJL=no + printf "no\n" + else + CHECK_YAJL=yes + printf `pkg-config --modversion yajl`"\n" + fi +else + printf "#include \n" > build_check.c + printf "#include \n" >> build_check.c + printf "int main() { printf(\"%%d\", yajl_version()); return 0; }\n" >> build_check.c + $CC $CFLAGS $LDFLAGS build_check.c -lyajl -o fake > /dev/null 2> /dev/null + if [ $? != 0 ] + then + CHECK_YAJL=no + printf "no\n" + else + YAJL_VERSION=`./fake` + if [ $YAJL_VERSION -ge 20000 ] + then + CHECK_YAJL=yes + printf "${YAJL_VERSION}\n" + else + CHECK_YAJL=no + printf "no. Need at least version 2.0.0, existing version is ${YAJL_VERSION}\n" + fi + fi + rm -f fake +fi + +printf "Checking for boost::scoped_ptr... " +printf "#include \nint main() { boost::scoped_ptr test(new int(1)); return 0; }\n" > build_check.cpp +$CXX $CXXFLAGS $LDFLAGS build_check.cpp -o fake # > /dev/null 2> /dev/null +if [ $? != 0 ] +then + CHECK_BOOST_SCOPED_PTR=no + printf "no\n" +else + CHECK_BOOST_SCOPED_PTR=yes + printf "yes\n" +fi +rm -f fake + +if [ "$OS" = "linux" ] +then + printf "Checking for linux/netfilter_ipv4/ip_queue.h... " + printf "#include \n" > build_check.c + printf "#include \n" >> build_check.c + printf "int main() { return 0; }\n" >> build_check.c + $CC $CFLAGS $LDFLAGS build_check.c -o fake > /dev/null 2> /dev/null + if [ $? != 0 ] + then + CHECK_IP_QUEUE_H=no + printf "no\n" + else + CHECK_IP_QUEUE_H=yes + DEFS="$DEFS -DHAS_IP_QUEUE_H" + PLUGINS="$PLUGINS + capture/ipq_linux" + printf "yes\n" + fi + rm -f fake +fi + +rm -f build_check.c +rm -f build_check.cpp + +if [ "$CHECK_EXPAT" != "yes" ] +then + printf -- "-lexpat not found!\n" + exit 1 +fi + +if [ "$CHECK_FBCLIENT" = "yes" ] +then + STG_LIBS="$STG_LIBS + ibpp.lib" + PLUGINS="$PLUGINS + store/firebird" +fi + +if [ "$CHECK_PQ" = "yes" ] +then + PLUGINS="$PLUGINS + store/postgresql" +fi + +if [ "$CHECK_MYSQLCLIENT" = "yes" ] +then + PLUGINS="$PLUGINS + store/mysql" +fi + +if [ "$CHECK_XMLRPC" = "yes" ] +then + PLUGINS="$PLUGINS + configuration/rpcconfig" +fi + +if [ "$CHECK_PCAP" = "yes" ] +then + PLUGINS="$PLUGINS + capture/pcap" +fi + +if [ "$CHECK_NFNETLINK" = "yes" -a "$CHECK_NFQ" = "yes" ] +then + PLUGINS="$PLUGINS + capture/nfqueue" +fi + +if [ "$CHECK_YAJL" = "yes" -a "$CHECK_BOOST_SCOPED_PTR" = "yes" ] +then + PLUGINS="$PLUGINS + other/radius" + STG_LIBS="$STG_LIBS + json.lib" +fi + +printf "OS=$OS\n" > $CONFFILE +printf "STG_TIME=yes\n" >> $CONFFILE +printf "DEBUG=$DEBUG\n" >> $CONFFILE +printf "DIR_BUILD=$BUILD_DIR\n" >> $CONFFILE +printf "DIR_LIB=\$(DIR_BUILD)/../../lib\n" >> $CONFFILE +printf "DIR_LIBSRC=\$(DIR_BUILD)/../../stglibs\n" >> $CONFFILE +printf "DIR_INCLUDE=\$(DIR_BUILD)/../../include\n" >> $CONFFILE +printf "DIR_MOD=\$(DIR_BUILD)/modules\n" >> $CONFFILE +printf "DIR_PLUGINS=\$(DIR_BUILD)/plugins\n" >> $CONFFILE +printf "ARCH=$ARCH\n" >> $CONFFILE +printf "CHECK_EXPAT=$CHECK_EXPAT\n" >> $CONFFILE +printf "CHECK_FBCLIENT=$CHECK_FBCLIENT\n" >> $CONFFILE +if [ "$CHECK_FBCLIENT" = "yes" ] +then + printf "FB_CFLAGS=$FB_CFLAGS\n" >> $CONFFILE + printf "FB_LDFLAGS=$FB_LDFLAGS\n" >> $CONFFILE +fi +printf "CHECK_MYSQLCLIENT=$CHECK_MYSQLCLIENT\n" >> $CONFFILE +if [ "$CHECK_MYSQLCLIENT" = "yes" ] +then + printf "MYSQL_CFLAGS=$MYSQL_CFLAGS\n" >> $CONFFILE + printf "MYSQL_LDFLAGS=$MYSQL_LDFLAGS\n" >> $CONFFILE +fi +printf "CHECK_PQ=$CHECK_PQ\n" >> $CONFFILE +if [ "$CHECK_PQ" = "yes" ] +then + printf "PG_CFLAGS=$PG_CFLAGS\n" >> $CONFFILE + printf "PG_LDFLAGS=$PG_LDFLAGS\n" >> $CONFFILE +fi +printf "CHECK_XMLRPC=$CHECK_XMLRPC\n" >> $CONFFILE +if [ "$CHECK_XMLRPC" = "yes" ] +then + printf "XMLRPC_CFLAGS=$XMLRPC_CFLAGS\n" >> $CONFFILE + printf "XMLRPC_LDFLAGS=$XMLRPC_LDFLAGS\n" >> $CONFFILE +fi +printf "CHECK_PCAP=$CHECK_PCAP\n" >> $CONFFILE +printf "CHECK_NFNETLINK=$CHECK_NFNETLINK\n" >> $CONFFILE +if [ "$CHECK_NFNETLINK" = "yes" ] +then + printf "NETLINK_LDFLAGS=$NETLINK_LDFLAGS\n" >> $CONFFILE +fi +printf "CHECK_NFQ=$CHECK_NFQ\n" >> $CONFFILE +if [ "$CHECK_NFQ" = "yes" ] +then + printf "NFQ_LDFLAGS=$NFQ_LDFLAGS\n" >> $CONFFILE +fi +printf "DEFS=$DEFS\n" >> $CONFFILE +printf "STG_LIBS=" >> $CONFFILE +for lib in $STG_LIBS +do + printf "$lib " >> $CONFFILE +done +printf "\n" >> $CONFFILE +printf "PLUGINS=" >> $CONFFILE +for plugin in $PLUGINS +do + printf "$plugin " >> $CONFFILE +done +printf "\n" >> $CONFFILE +printf "CC=$CC\n" >> $CONFFILE +printf "CXX=$CXX\n" >> $CONFFILE +printf "CXXFLAGS=$CXXFLAGS\n" >> $CONFFILE +printf "CFLAGS=$CFLAGS\n" >> $CONFFILE +printf "LDFLAGS=$LDFLAGS\n" >> $CONFFILE +printf "LIB_THREAD=$LIB_THREAD\n" >> $CONFFILE +printf "LIBICONV=$LIBICONV\n" >> $CONFFILE +printf "PREFIX=$PREFIX\n" >> $CONFFILE +printf "BIN_MODE=$BIN_MODE\n" >> $CONFFILE +printf "DATA_MODE=$DATA_MODE\n" >> $CONFFILE +printf "DIR_MODE=$DIR_MODE\n" >> $CONFFILE +printf "OWNER=$OWNER\n" >> $CONFFILE +printf "VAR_DIR=$VAR_DIR\n" >> $CONFFILE +printf "ETC_DIR=$ETC_DIR\n" >> $CONFFILE + +mkdir -p modules + +if [ "$1" != "debug" ] +then + $MAKE $MAKEOPTS +else + printf "\n\n\nDebug build. Type $MAKE explicitly\n" +fi