alpar@732: #!/bin/bash
alpar@732: #
alpar@732: # This file is a part of LEMON, a generic C++ optimization library.
alpar@732: #
alpar@732: # Copyright (C) 2003-2009
alpar@732: # Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@732: # (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@732: #
alpar@732: # Permission to use, modify and distribute this software is granted
alpar@732: # provided that this copyright notice appears in all copies. For
alpar@732: # precise terms see the accompanying LICENSE file.
alpar@732: #
alpar@732: # This software is provided "AS IS" with no warranty of any kind,
alpar@732: # express or implied, and with no claim as to its suitability for any
alpar@732: # purpose.
alpar@732: 
alpar@732: 
alpar@732: if [ ! -f ~/.lemon-bootstrap ]; then
alpar@732:     echo 'Create ~/.lemon-bootstrap'.
alpar@732:     cat >~/.lemon-bootstrap <<EOF
alpar@732: #
alpar@732: # Default settings for bootstraping the LEMON source code repository
alpar@732: #
alpar@732: EOF
alpar@732: fi
alpar@732: 
alpar@732: source ~/.lemon-bootstrap
alpar@732: if [ -f ../../../.lemon-bootstrap ]; then source ../../../.lemon-bootstrap; fi
alpar@732: if [ -f ../../.lemon-bootstrap ]; then source ../../.lemon-bootstrap; fi
alpar@732: if [ -f ../.lemon-bootstrap ]; then source ../.lemon-bootstrap; fi
alpar@732: if [ -f ./.lemon-bootstrap ]; then source ./.lemon-bootstrap; fi
alpar@732: 
alpar@732: 
alpar@732: function augment_config() { 
alpar@732:     if [ "x${!1}" == "x" ]; then
alpar@732:         eval $1=$2
alpar@732:         echo Add "'$1'" to '~/.lemon-bootstrap'.
alpar@732:         echo >>~/.lemon-bootstrap
alpar@732:         echo $3 >>~/.lemon-bootstrap
alpar@732:         echo $1=$2 >>~/.lemon-bootstrap
alpar@732:     fi
alpar@732: }
alpar@732: 
alpar@732: augment_config LEMON_INSTALL_PREFIX /usr/local \
alpar@732:     "# LEMON installation prefix"
alpar@732: 
alpar@850: augment_config GLPK_PREFIX /usr/local/ \
alpar@850:     "# GLPK installation root prefix"
alpar@850: 
alpar@732: augment_config COIN_OR_PREFIX /usr/local/coin-or \
alpar@732:     "# COIN-OR installation root prefix (used for CLP/CBC)"
alpar@732: 
alpar@747: augment_config SOPLEX_PREFIX /usr/local/soplex \
alpar@747:     "# Soplex build prefix"
alpar@747: 
alpar@732: 
alpar@732: function ask() {
alpar@732: echo -n "$1 [$2]? "
alpar@732: read _an
alpar@732: if [ "x$_an" == "x" ]; then
alpar@732:     ret="$2"
alpar@732: else
alpar@732:     ret=$_an
alpar@732: fi
alpar@732: }
alpar@732: 
alpar@732: function yesorno() {
alpar@732:     ret='rossz'
alpar@732:     while [ "$ret" != "y" -a "$ret" != "n" -a "$ret" != "yes" -a "$ret" != "no" ]; do
alpar@732:         ask "$1" "$2"
alpar@732:     done
alpar@732:     if [ "$ret" != "y" -a "$ret" != "yes" ]; then
alpar@732:         return 1
alpar@732:     else
alpar@732:         return 0
alpar@732:     fi
alpar@732: }
alpar@732: 
alpar@732: if yesorno "External build" "n"
alpar@732: then
alpar@732:     CONFIGURE_PATH=".."
alpar@732: else
alpar@732:     CONFIGURE_PATH="."
alpar@732:     if yesorno "Autoreconf" "y"
alpar@732:     then
alpar@732:         AUTORE=yes
alpar@732:     else
alpar@732:         AUTORE=no
alpar@732:     fi
alpar@732: fi
alpar@732: 
alpar@732: if yesorno "Optimize" "n" 
alpar@732: then
alpar@732:     opt_flags=' -O2'
alpar@732: else
alpar@732:     opt_flags=''
alpar@732: fi
alpar@732: 
alpar@732: if yesorno "Stop on warning" "y" 
alpar@732: then
alpar@732:     werror_flags=' -Werror'
alpar@732: else
alpar@732:     werror_flags=''
alpar@732: fi
alpar@732: 
alpar@732: cxx_flags="CXXFLAGS=-ggdb$opt_flags$werror_flags"
alpar@732: 
alpar@794: if yesorno "Check with valgrind" "n" 
alpar@794: then
alpar@794:     valgrind_flags=' --enable-valgrind'
alpar@794: else
alpar@794:     valgrind_flags=''
alpar@794: fi
alpar@794: 
alpar@850: if [ -f ${GLPK_PREFIX}/include/glpk.h ]; then
alpar@850:     if yesorno "Use GLPK" "y"
alpar@850:     then
alpar@850:         glpk_flag="--with-glpk=$GLPK_PREFIX"
alpar@850:     else
alpar@850:         glpk_flag="--without-glpk"
alpar@850:     fi
alpar@850: else
alpar@850:     glpk_flag="--without-glpk"        
alpar@850: fi
alpar@850: 
alpar@747: if [ -f ${COIN_OR_PREFIX}/include/coin/config_coinutils.h ]; then
alpar@747:     if yesorno "Use COIN-OR (CBC/CLP)" "n"
alpar@747:     then
alpar@747:         coin_flag="--with-coin=$COIN_OR_PREFIX"
alpar@747:     else
alpar@850:         coin_flag="--without-coin"
alpar@747:     fi
alpar@732: else
alpar@850:     coin_flag="--without-coin"        
alpar@732: fi
alpar@732: 
alpar@747: if [ -f ${SOPLEX_PREFIX}/src/soplex.h ]; then
alpar@747:     if yesorno "Use Soplex" "n"
alpar@747:     then
alpar@747:         soplex_flag="--with-soplex=$SOPLEX_PREFIX"
alpar@747:     else
alpar@850:         soplex_flag="--without-soplex"
alpar@747:     fi
alpar@747: else
alpar@850:     soplex_flag="--without-soplex"
alpar@747: fi
alpar@732: 
alpar@732: if [ "x$AUTORE" == "xyes" ]; then
alpar@732:     autoreconf -vif;
alpar@732: fi
alpar@732: ${CONFIGURE_PATH}/configure --prefix=$LEMON_INSTALL_PREFIX \
alpar@794: $valgrind_flags \
alpar@732: "$cxx_flags" \
alpar@850: $glpk_flag \
alpar@732: $coin_flag \
alpar@747: $soplex_flag \
alpar@732: $*