scripts/bootstrap.sh
author Peter Kovacs <kpeter@inf.elte.hu>
Tue, 15 Mar 2011 19:32:21 +0100
changeset 1047 ddd3c0d3d9bf
parent 841 313d58f9e544
permissions -rwxr-xr-x
Implement the scaling Price Refinement heuristic in CostScaling (#417)
instead of Early Termination.

These two heuristics are similar, but the newer one is faster
and not only makes it possible to skip some epsilon phases, but
it can improve the performance of the other phases, as well.
     1 #!/bin/bash
     2 #
     3 # This file is a part of LEMON, a generic C++ optimization library.
     4 #
     5 # Copyright (C) 2003-2009
     6 # Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     7 # (Egervary Research Group on Combinatorial Optimization, EGRES).
     8 #
     9 # Permission to use, modify and distribute this software is granted
    10 # provided that this copyright notice appears in all copies. For
    11 # precise terms see the accompanying LICENSE file.
    12 #
    13 # This software is provided "AS IS" with no warranty of any kind,
    14 # express or implied, and with no claim as to its suitability for any
    15 # purpose.
    16 
    17 
    18 if [ ! -f ~/.lemon-bootstrap ]; then
    19     echo 'Create ~/.lemon-bootstrap'.
    20     cat >~/.lemon-bootstrap <<EOF
    21 #
    22 # Default settings for bootstraping the LEMON source code repository
    23 #
    24 EOF
    25 fi
    26 
    27 source ~/.lemon-bootstrap
    28 if [ -f ../../../.lemon-bootstrap ]; then source ../../../.lemon-bootstrap; fi
    29 if [ -f ../../.lemon-bootstrap ]; then source ../../.lemon-bootstrap; fi
    30 if [ -f ../.lemon-bootstrap ]; then source ../.lemon-bootstrap; fi
    31 if [ -f ./.lemon-bootstrap ]; then source ./.lemon-bootstrap; fi
    32 
    33 
    34 function augment_config() { 
    35     if [ "x${!1}" == "x" ]; then
    36         eval $1=$2
    37         echo Add "'$1'" to '~/.lemon-bootstrap'.
    38         echo >>~/.lemon-bootstrap
    39         echo $3 >>~/.lemon-bootstrap
    40         echo $1=$2 >>~/.lemon-bootstrap
    41     fi
    42 }
    43 
    44 augment_config LEMON_INSTALL_PREFIX /usr/local \
    45     "# LEMON installation prefix"
    46 
    47 augment_config GLPK_PREFIX /usr/local/ \
    48     "# GLPK installation root prefix"
    49 
    50 augment_config COIN_OR_PREFIX /usr/local/coin-or \
    51     "# COIN-OR installation root prefix (used for CLP/CBC)"
    52 
    53 augment_config SOPLEX_PREFIX /usr/local/soplex \
    54     "# Soplex build prefix"
    55 
    56 
    57 function ask() {
    58 echo -n "$1 [$2]? "
    59 read _an
    60 if [ "x$_an" == "x" ]; then
    61     ret="$2"
    62 else
    63     ret=$_an
    64 fi
    65 }
    66 
    67 function yesorno() {
    68     ret='rossz'
    69     while [ "$ret" != "y" -a "$ret" != "n" -a "$ret" != "yes" -a "$ret" != "no" ]; do
    70         ask "$1" "$2"
    71     done
    72     if [ "$ret" != "y" -a "$ret" != "yes" ]; then
    73         return 1
    74     else
    75         return 0
    76     fi
    77 }
    78 
    79 if yesorno "External build" "n"
    80 then
    81     CONFIGURE_PATH=".."
    82 else
    83     CONFIGURE_PATH="."
    84     if yesorno "Autoreconf" "y"
    85     then
    86         AUTORE=yes
    87     else
    88         AUTORE=no
    89     fi
    90 fi
    91 
    92 if yesorno "Optimize" "n" 
    93 then
    94     opt_flags=' -O2'
    95 else
    96     opt_flags=''
    97 fi
    98 
    99 if yesorno "Stop on warning" "y" 
   100 then
   101     werror_flags=' -Werror'
   102 else
   103     werror_flags=''
   104 fi
   105 
   106 cxx_flags="CXXFLAGS=-ggdb$opt_flags$werror_flags"
   107 
   108 if yesorno "Check with valgrind" "n" 
   109 then
   110     valgrind_flags=' --enable-valgrind'
   111 else
   112     valgrind_flags=''
   113 fi
   114 
   115 if [ -f ${GLPK_PREFIX}/include/glpk.h ]; then
   116     if yesorno "Use GLPK" "y"
   117     then
   118         glpk_flag="--with-glpk=$GLPK_PREFIX"
   119     else
   120         glpk_flag="--without-glpk"
   121     fi
   122 else
   123     glpk_flag="--without-glpk"        
   124 fi
   125 
   126 if [ -f ${COIN_OR_PREFIX}/include/coin/config_coinutils.h ]; then
   127     if yesorno "Use COIN-OR (CBC/CLP)" "n"
   128     then
   129         coin_flag="--with-coin=$COIN_OR_PREFIX"
   130     else
   131         coin_flag="--without-coin"
   132     fi
   133 else
   134     coin_flag="--without-coin"        
   135 fi
   136 
   137 if [ -f ${SOPLEX_PREFIX}/src/soplex.h ]; then
   138     if yesorno "Use Soplex" "n"
   139     then
   140         soplex_flag="--with-soplex=$SOPLEX_PREFIX"
   141     else
   142         soplex_flag="--without-soplex"
   143     fi
   144 else
   145     soplex_flag="--without-soplex"
   146 fi
   147 
   148 if [ "x$AUTORE" == "xyes" ]; then
   149     autoreconf -vif;
   150 fi
   151 ${CONFIGURE_PATH}/configure --prefix=$LEMON_INSTALL_PREFIX \
   152 $valgrind_flags \
   153 "$cxx_flags" \
   154 $glpk_flag \
   155 $coin_flag \
   156 $soplex_flag \
   157 $*