Vol-1.5.4/0000755000175000017500000000000013604727433011324 5ustar sudipsudipVol-1.5.4/.travis.yml0000644000175000017500000000154213434065343013433 0ustar sudipsudiplanguage: cpp matrix: include: - os: linux addons: apt: packages: - gfortran - os: osx osx_image: xcode10 env: OSX=10.13 compiler: clang - os: osx osx_image: xcode9.2 env: OSX=10.12 compiler: clang - os: osx osx_image: xcode8 env: OSX=10.11 compiler: clang allow_failures: - os: osx before_script: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; brew install bash gcc; brew link --overwrite gcc; gfortran --version; fi - git clone https://github.com/coin-or/COIN-OR-OptimizationSuite COIN - cd COIN - export PROJECT=`echo $TRAVIS_REPO_SLUG | cut -d "/" -f 2` - bash ./coin.install.sh fetch --no-prompt --main-proj=$PROJECT > /dev/null script: - bash ./coin.install.sh build --no-prompt --main-proj=$PROJECT --verbosity=2 --test Vol-1.5.4/Dependencies0000644000175000017500000000042613434065343013633 0ustar sudipsudipBuildTools https://projects.coin-or.org/svn/BuildTools/stable/0.8 Data/Sample https://projects.coin-or.org/svn/Data/Sample/stable/1.2 CoinUtils https://projects.coin-or.org/svn/CoinUtils/stable/2.11/CoinUtils Osi https://projects.coin-or.org/svn/Osi/stable/0.108/Osi Vol-1.5.4/configure0000755000175000017500000272717013434066267013255 0ustar sudipsudip#! /bin/sh # From configure.ac 0.9. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for Vol 1.5.4. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # # Copyright 2006 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package Coin which is distributed # under the Eclipse Public License. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string=`eval $cmd`) 2>/dev/null && echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='Vol' PACKAGE_TARNAME='vol' PACKAGE_VERSION='1.5.4' PACKAGE_STRING='Vol 1.5.4' PACKAGE_BUGREPORT='coin-vol@lists.coin-or.org' ac_unique_file="configure.ac" ac_default_prefix=`pwd` # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subdirs_all="$ac_subdirs_all Data/Sample" ac_subdirs_all="$ac_subdirs_all CoinUtils" ac_subdirs_all="$ac_subdirs_all Osi" ac_subdirs_all="$ac_subdirs_all Vol" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os CDEFS ADD_CFLAGS DBG_CFLAGS OPT_CFLAGS sol_cc_compiler CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT COIN_CC_IS_CL_TRUE COIN_CC_IS_CL_FALSE MPICC CXXDEFS ADD_CXXFLAGS DBG_CXXFLAGS OPT_CXXFLAGS CXX CXXFLAGS ac_ct_CXX COIN_CXX_IS_CL_TRUE COIN_CXX_IS_CL_FALSE MPICXX ADD_FFLAGS DBG_FFLAGS OPT_FFLAGS F77 ac_ct_F77 FFLAGS MPIF77 EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE host host_cpu host_vendor host_os ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP LIBTOOL ac_c_preproc_warn_flag ac_cxx_preproc_warn_flag RPATH_FLAGS DEPENDENCY_LINKING_TRUE DEPENDENCY_LINKING_FALSE LT_LDFLAGS COIN_SKIP_PROJECTS subdirs coin_have_doxygen coin_have_latex coin_doxy_usedot coin_doxy_tagname coin_doxy_logname COIN_HAS_DOXYGEN_TRUE COIN_HAS_DOXYGEN_FALSE COIN_HAS_LATEX_TRUE COIN_HAS_LATEX_FALSE coin_doxy_tagfiles coin_doxy_excludes LIBEXT VPATH_DISTCLEANFILES ABSBUILDDIR LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CDEFS_set=${CDEFS+set} ac_env_CDEFS_value=$CDEFS ac_cv_env_CDEFS_set=${CDEFS+set} ac_cv_env_CDEFS_value=$CDEFS ac_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_cv_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_cv_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_cv_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_cv_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_cv_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_cv_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_MPICC_set=${MPICC+set} ac_env_MPICC_value=$MPICC ac_cv_env_MPICC_set=${MPICC+set} ac_cv_env_MPICC_value=$MPICC ac_env_CXXDEFS_set=${CXXDEFS+set} ac_env_CXXDEFS_value=$CXXDEFS ac_cv_env_CXXDEFS_set=${CXXDEFS+set} ac_cv_env_CXXDEFS_value=$CXXDEFS ac_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_cv_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_cv_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_cv_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_cv_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_cv_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_cv_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_MPICXX_set=${MPICXX+set} ac_env_MPICXX_value=$MPICXX ac_cv_env_MPICXX_set=${MPICXX+set} ac_cv_env_MPICXX_value=$MPICXX ac_env_ADD_FFLAGS_set=${ADD_FFLAGS+set} ac_env_ADD_FFLAGS_value=$ADD_FFLAGS ac_cv_env_ADD_FFLAGS_set=${ADD_FFLAGS+set} ac_cv_env_ADD_FFLAGS_value=$ADD_FFLAGS ac_env_DBG_FFLAGS_set=${DBG_FFLAGS+set} ac_env_DBG_FFLAGS_value=$DBG_FFLAGS ac_cv_env_DBG_FFLAGS_set=${DBG_FFLAGS+set} ac_cv_env_DBG_FFLAGS_value=$DBG_FFLAGS ac_env_OPT_FFLAGS_set=${OPT_FFLAGS+set} ac_env_OPT_FFLAGS_value=$OPT_FFLAGS ac_cv_env_OPT_FFLAGS_set=${OPT_FFLAGS+set} ac_cv_env_OPT_FFLAGS_value=$OPT_FFLAGS ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS ac_env_MPIF77_set=${MPIF77+set} ac_env_MPIF77_value=$MPIF77 ac_cv_env_MPIF77_set=${MPIF77+set} ac_cv_env_MPIF77_value=$MPIF77 ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_COIN_SKIP_PROJECTS_set=${COIN_SKIP_PROJECTS+set} ac_env_COIN_SKIP_PROJECTS_value=$COIN_SKIP_PROJECTS ac_cv_env_COIN_SKIP_PROJECTS_set=${COIN_SKIP_PROJECTS+set} ac_cv_env_COIN_SKIP_PROJECTS_value=$COIN_SKIP_PROJECTS # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Vol 1.5.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Vol 1.5.4:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug compile all projects with debug options tests (implies --disable-shared) --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. --enable-static[=PKGS] build static libraries [default=no] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-dependency-linking disable linking library dependencies into shared libraries Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-sample-lib linker flags for using project Sample --with-sample-incdir directory with header files for using project Sample --with-sample-datadir directory with data files for using project Sample --with-coinutils-lib linker flags for using project CoinUtils --with-coinutils-incdir directory with header files for using project CoinUtils --with-coinutils-datadir directory with data files for using project CoinUtils --with-osi-lib linker flags for using project Osi --with-osi-incdir directory with header files for using project Osi --with-osi-datadir directory with data files for using project Osi --with-vol-lib linker flags for using project Vol --with-vol-incdir directory with header files for using project Vol --with-vol-datadir directory with data files for using project Vol --with-dot use dot (from graphviz) when creating documentation with doxygen if available; --without-dot to disable Some influential environment variables: CDEFS Additional -D flags to be used when compiling C code. ADD_CFLAGS Additional C compiler options DBG_CFLAGS Debug C compiler options OPT_CFLAGS Optimize C compiler options CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC C MPI Compiler CXXDEFS Additional -D flags to be used when compiling C++ code. ADD_CXXFLAGS Additional C++ compiler options DBG_CXXFLAGS Debug C++ compiler options OPT_CXXFLAGS Optimize C++ compiler options CXX C++ compiler command CXXFLAGS C++ compiler flags MPICXX C++ MPI Compiler ADD_FFLAGS Additional Fortran compiler options DBG_FFLAGS Debug Fortran compiler options OPT_FFLAGS Optimize Fortran compiler options F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags MPIF77 Fortran MPI Compiler CPP C preprocessor CXXCPP C++ preprocessor COIN_SKIP_PROJECTS Set to the subdirectories of projects that should be skipped in the configuration Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Vol configure 1.5.4 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Vol $as_me 1.5.4, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # List one file in the package so that the configure script can test # whether the package is actually there # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. ############################################################################# # Create the libtool script for the subdirectories # ############################################################################# ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Check if user wants to produce debugging code echo "$as_me:$LINENO: checking whether we want to compile in debug mode" >&5 echo $ECHO_N "checking whether we want to compile in debug mode... $ECHO_C" >&6 # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" case "${enableval}" in yes) coin_debug_compile=true if test "${enable_shared+set}" = set; then :; else enable_shared=no fi ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug" >&2;} { (exit 1); exit 1; }; } ;; esac else coin_debug_compile=false fi; # m4_ifvaln([], if test $coin_debug_compile = true; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # m4_ifvaln([], # Get the name of the C compiler and appropriate compiler options # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # For consistency, we set the C compiler to the same value of the C++ # compiler, if the C++ is set, but the C compiler isn't (only for CXX=cl) if test x"$CXX" != x; then case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) if test x"$CC" = x; then CC="$CXX" { echo "$as_me:$LINENO: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&5 echo "$as_me: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&2;} fi ;; esac fi coin_has_cc=yes save_cflags="$CFLAGS" # For *-*-solaris*, promote Studio/Workshop cc compiler to front of list. # Depending on the user's PATH, when Studio/Workshop cc is not present we may # find /usr/ucb/cc, which is almost certainly not a good choice for the C # compiler. In this case, put cc after gcc. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl gcc" else comps="gcc icl cl" fi ;; *-*-solaris*) # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_sol_cc_compiler+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$sol_cc_compiler"; then ac_cv_prog_sol_cc_compiler="$sol_cc_compiler" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_sol_cc_compiler="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_sol_cc_compiler shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set sol_cc_compiler to just the basename; use the full file name. shift ac_cv_prog_sol_cc_compiler="$as_dir/$ac_word${1+' '}$@" fi fi fi fi sol_cc_compiler=$ac_cv_prog_sol_cc_compiler if test -n "$sol_cc_compiler"; then echo "$as_me:$LINENO: result: $sol_cc_compiler" >&5 echo "${ECHO_T}$sol_cc_compiler" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$sol_cc_compiler" = "cc" ; then comps="cc xlc gcc pgcc icc" else comps="xlc gcc pgcc icc cc" fi ;; *-*-darwin*) comps="clang gcc cc" ;; *-linux-gnu*) comps="gcc cc pgcc icc xlc" ;; *-linux-*) comps="xlc gcc cc pgcc icc" ;; *) comps="xlc_r xlc cc gcc pgcc icc" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CC || test "${ac_cv_prog_CC+set}" != set || { ac_cv_prog_CC=; export ac_cv_prog_CC; } # AC_MSG_NOTICE([C compiler candidates: $comps]) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -z "$CC" ; then { { echo "$as_me:$LINENO: error: Failed to find a C compiler!" >&5 echo "$as_me: error: Failed to find a C compiler!" >&2;} { (exit 1); exit 1; }; } fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cc_g" = yes ; then ac_cv_prog_cc_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CFLAGS="$save_cflags" # add automake conditional so we can recognize cl compiler in makefile coin_cc_is_cl=false case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_cc_is_cl=true ;; esac if test $coin_cc_is_cl = true; then COIN_CC_IS_CL_TRUE= COIN_CC_IS_CL_FALSE='#' else COIN_CC_IS_CL_TRUE='#' COIN_CC_IS_CL_FALSE= fi # Check if a project specific CFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CFLAGS+set} if test x$coin_tmp = xset; then eval CFLAGS=\${${COIN_PRJCT}_CFLAGS} fi fi if test x"$CFLAGS" = x; then coin_add_cflags= coin_opt_cflags= coin_dbg_cflags= coin_warn_cflags= if test "$GCC" = "yes"; then case "$CC" in icc* | */icc*) ;; *) coin_opt_cflags="-O3" coin_add_cflags="-pipe" coin_dbg_cflags="-g -O0" coin_warn_cflags="-Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall -Wno-unknown-pragmas -Wno-long-long" esac fi if test -z "$coin_opt_cflags"; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -O2' coin_dbg_cflags='-MDd' else coin_opt_cflags='-MT -O2' coin_dbg_cflags='-MTd' fi coin_add_cflags='-nologo -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -Ox' coin_dbg_cflags='-MDd -debug' else coin_opt_cflags='-MT -Ox' coin_dbg_cflags='-MTd -debug' fi coin_add_cflags='-nologo -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CC" in icc* | */icc*) coin_opt_cflags="-O3 -ip -mp1" coin_add_cflags="" coin_dbg_cflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cflags="-i_dynamic $coin_add_cflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgcc* | */pgcc*) coin_opt_cflags="-fast" coin_add_cflags="-Kieee -pc 64" coin_dbg_cflags="-g" ;; esac ;; *-ibm-*) case "$CC" in xlc* | */xlc* | mpxlc* | */mpxlc*) coin_opt_cflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_cflags="-g" ;; esac ;; *-hp-*) coin_opt_cflags="-O" coin_add_cflags="-Ae" coin_dbg_cflags="-g" ;; *-*-solaris*) coin_opt_cflags="-xO4" coin_dbg_cflags="-g" ;; *-sgi-*) coin_opt_cflags="-O -OPT:Olimit=0" coin_dbg_cflags="-g" ;; esac fi if test "$ac_cv_prog_cc_g" = yes && test -z "$coin_dbg_cflags" ; then coin_dbg_cflags="-g" fi if test -z "$coin_opt_cflags"; then # Try if -O option works if nothing else is set CFLAGS="-O" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cflags" = xyes; then coin_warn_cflags= fi if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$coin_dbg_cflags $coin_add_cflags $coin_warn_cflags" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$coin_opt_cflags $coin_add_cflags -DNDEBUG $coin_warn_cflags" fi DBG_CFLAGS="$DBG_CFLAGS $ADD_CFLAGS $CDEFS" OPT_CFLAGS="$OPT_CFLAGS $ADD_CFLAGS $CDEFS" if test "$coin_debug_compile" = "true"; then CFLAGS="$DBG_CFLAGS" else CFLAGS="$OPT_CFLAGS" fi else CFLAGS="$CFLAGS $ADD_CFLAGS $CDEFS" if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$CFLAGS" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$CFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CFLAGS="$CFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CFLAGS works save_CFLAGS="$CFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&2;} CFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C compiler options are: $CFLAGS" >&5 echo "$as_me: C compiler options are: $CFLAGS" >&6;} if test x"$MPICC" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C compiler $MPICC" >&5 echo "$as_me: Will use MPI C compiler $MPICC" >&6;} CC="$MPICC" fi # Correct the LD variable if we are using the MS or Intel-windows compiler case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Get the name of the C++ compiler and appropriate compiler options #Let's try if that overcomes configuration problem with VC++ 6.0 ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu coin_has_cxx=yes save_cxxflags="$CXXFLAGS" # For *-*-solaris*, promote Studio/Workshop compiler to front of list. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl g++" else comps="g++ icl cl" fi ;; *-*-solaris*) comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; *-darwin*) comps="clang++ g++ c++ CC" ;; *-linux-gnu*) comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;; *) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CXX || test "${ac_cv_prog_CXX+set}" != set || { ac_cv_prog_CXX=; export ac_cv_prog_CXX; } # AC_MSG_NOTICE([C++ compiler candidates: $comps]) ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC $comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu #AC_PROG_CXX sets CXX to g++ if it cannot find a working C++ compiler #thus, we test here whether $CXX is actually working ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking whether C++ compiler $CXX works" >&5 echo $ECHO_N "checking whether C++ compiler $CXX works... $ECHO_C" >&6; cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&5 echo "$as_me: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu coin_cxx_is_cl=false # It seems that we need to cleanup something here for the Windows case "$CXX" in clang* | */clang*) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh mv confdefs.hh confdefs.h coin_cxx_is_cl=true ;; esac # add automake conditional so we can recognize cl compiler in makefile if test $coin_cxx_is_cl = true; then COIN_CXX_IS_CL_TRUE= COIN_CXX_IS_CL_FALSE='#' else COIN_CXX_IS_CL_TRUE='#' COIN_CXX_IS_CL_FALSE= fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cxx_g" = yes ; then ac_cv_prog_cxx_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CXXFLAGS="$save_cxxflags" # Check if a project specific CXXFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CXXFLAGS+set} if test x$coin_tmp = xset; then eval CXXFLAGS=\${${COIN_PRJCT}_CXXFLAGS} fi fi if test x"$CXXFLAGS" = x; then # ToDo decide whether we want -DNDEBUG for optimization coin_add_cxxflags= coin_opt_cxxflags= coin_dbg_cxxflags= coin_warn_cxxflags= if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) ;; *) # ToDo decide about unroll-loops coin_opt_cxxflags="-O3" coin_add_cxxflags="-pipe" coin_dbg_cxxflags="-g -O0" coin_warn_cxxflags="-Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long" esac fi # Note that we do not need to cover GCC in the following tests. if test -z "$coin_opt_cxxflags"; then case $build in *-cygwin* | *-mingw*) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -O2' coin_dbg_cxxflags='-MDd' else coin_opt_cxxflags='-MT -O2' coin_dbg_cxxflags='-MTd' fi coin_add_cxxflags='-nologo -EHsc -GR -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -Ox' coin_dbg_cxxflags='-MDd -debug' else coin_opt_cxxflags='-MT -Ox' coin_dbg_cxxflags='-MTd -debug' fi coin_add_cxxflags='-nologo -EHsc -GR -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CXX" in icpc* | */icpc*) coin_opt_cxxflags="-O3 -ip -mp1" coin_add_cxxflags="" coin_dbg_cxxflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CXXFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cxxflags="-i_dynamic $coin_add_cxxflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgCC* | */pgCC*) coin_opt_cxxflags="-fast" coin_add_cxxflags="-Kieee -pc 64" coin_dbg_cxxflags="-g" ;; esac ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) coin_opt_cxxflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cxxflags="-bmaxdata:0x80000000 -qrtti=dyna -qsuppress=1500-036 -qsuppress=1500-029 -qsourcetype=c++" coin_dbg_cxxflags="-g" ;; esac ;; *-hp-*) case "$CXX" in aCC* | */aCC* ) coin_opt_cxxflags="-O" coin_add_cxxflags="-AA" coin_dbg_cxxflags="-g" ;; esac ;; *-*-solaris*) coin_opt_cxxflags="-O4" coin_dbg_cxxflags="-g" ;; esac fi # Generic flag settings. If these don't work, add a case above. if test "$ac_cv_prog_cxx_g" = yes && test -z "$coin_dbg_cxxflags" ; then coin_dbg_cxxflags="-g" fi if test -z "$coin_opt_cxxflags"; then # Try if -O option works if nothing else is set CXXFLAGS=-O cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cxxflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cxxflags" = xyes; then coin_warn_cxxflags= fi # Do final setup of flags based on values determined above. if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$coin_dbg_cxxflags $coin_add_cxxflags $coin_warn_cxxflags" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$coin_opt_cxxflags $coin_add_cxxflags -DNDEBUG $coin_warn_cxxflags" fi DBG_CXXFLAGS="$DBG_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" OPT_CXXFLAGS="$OPT_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test "$coin_debug_compile" = "true"; then CXXFLAGS="$DBG_CXXFLAGS" else CXXFLAGS="$OPT_CXXFLAGS" fi # Handle the case where CXXFLAGS was set externally. else CXXFLAGS="$CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$CXXFLAGS" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$CXXFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CXXFLAGS="$CXXFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CXXFLAGS works save_CXXFLAGS="$CXXFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&2;} CXXFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C++ compiler options are: $CXXFLAGS" >&5 echo "$as_me: C++ compiler options are: $CXXFLAGS" >&6;} if test x"$MPICXX" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C++ compiler $MPICXX" >&5 echo "$as_me: Will use MPI C++ compiler $MPICXX" >&6;} CXX="$MPICXX" fi # correct the LD variable in a build with MS or Intel-windows compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Get the name of the Fortran compiler and appropriate compiler options case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then coin_f77_comps="ifort fl32 compile_f2c" else coin_f77_comps="gfortran ifort g95 g77 fl32 compile_f2c" fi ;; *-*-solaris*) coin_f77_comps="f95 f90 g95 f77 xlf_r fort77 gfortran g77 pgf90 pgf77 ifort ifc frt af77" ;; *-linux-gnu*) coin_f77_comps="gfortran ifort g95 fort77 f77 g77 pgf90 pgf77 ifc frt af77 xlf_r" ;; *) coin_f77_comps="xlf_r fort77 gfortran ifort g95 f77 g77 pgf90 pgf77 ifc frt af77" ;; esac ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu coin_has_f77=yes save_fflags="$FFLAGS" # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_F77 || test "${ac_cv_prog_F77+set}" != set || { ac_cv_prog_F77=; export ac_cv_prog_F77; } # This is a real belt-and-suspenders approach. AC_COIN_FIND_F77 will use # coin_f77_comps to see if there's a program that matches one of the names. # If there's no such program, F77 = unavailable. If we match the name, # feed AC_PROG_F77 the same search list, just to be sure it's a functioning # compiler. # AC_MSG_NOTICE([Fortran compiler candidates: $coin_f77_comps]) { echo "$as_me:$LINENO: Trying to determine Fortran compiler name" >&5 echo "$as_me: Trying to determine Fortran compiler name" >&6;} if test -n "$ac_tool_prefix"; then for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done test -n "$ac_ct_F77" || ac_ct_F77="unavailable" F77=$ac_ct_F77 fi if test "$F77" != "unavailable" ; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:4125:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu else { echo "$as_me:$LINENO: WARNING: Failed to find a Fortran compiler!" >&5 echo "$as_me: WARNING: Failed to find a Fortran compiler!" >&2;} fi FFLAGS="$save_fflags" # Check if a project specific FFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_FFLAGS+set} if test x$coin_tmp = xset; then eval FFLAGS=\${${COIN_PRJCT}_FFLAGS} fi fi if test "$F77" != "unavailable" && test x"$FFLAGS" = x ; then coin_add_fflags= coin_opt_fflags= coin_dbg_fflags= coin_warn_fflags= if test "$G77" = "yes"; then coin_opt_fflags="-O3" coin_add_fflags="-pipe" coin_dbg_fflags="-g -O0" else case $build in *-cygwin* | *-mingw*) case $F77 in ifort* | */ifort* | IFORT* | */IFORT* ) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_fflags='-MD -O3' coin_dbg_fflags='-MDd -debug' else coin_opt_fflags='-MT -O3' coin_dbg_fflags='-MTd -debug' fi coin_add_fflags='-fpp -nologo' ;; compile_f2c*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_fflags='-MD -O2' coin_dbg_fflags='-MDd' else coin_opt_fflags='-MT -O2' coin_dbg_fflags='-MTd' fi coin_add_fflags='-nologo -wd4996' ;; esac ;; *-linux-*) case $F77 in ifc* | */ifc* | ifort* | */ifort*) coin_opt_fflags="-O3 -ip" coin_add_fflags="-cm -w90 -w95" coin_dbg_fflags="-g -CA -CB -CS" # Check if -i_dynamic is necessary (for new glibc library) FFLAGS= cat >conftest.$ac_ext <<_ACEOF program main write(*,*) 'Hello world' end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_fflags="-i_dynamic $coin_add_fflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgf77* | */pgf77* | pgf90* | */pgf90*) coin_opt_fflags="-fast" coin_add_fflags="-Kieee -pc 64" coin_dbg_fflags="-g" ;; esac ;; *-ibm-*) case "$F77" in xlf* | */xlf* | mpxlf* | */mpxlf* ) coin_opt_fflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_fflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_fflags="-g -C" ;; esac ;; *-hp-*) coin_opt_fflags="+O3" coin_add_fflags="+U77" coin_dbg_fflags="-C -g" ;; *-*-solaris*) coin_opt_fflags="-O4" coin_dbg_fflags="-g" ;; *-sgi-*) coin_opt_fflags="-O5 -OPT:Olimit=0" coin_dbg_fflags="-g" ;; esac fi if test "$ac_cv_prog_f77_g" = yes && test -z "$coin_dbg_fflags" ; then coin_dbg_fflags="-g" fi if test -z "$coin_opt_fflags"; then # Try if -O option works if nothing else is set FFLAGS=-O cat >conftest.$ac_ext <<_ACEOF program main integer i end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_fflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_fflags" = xyes; then coin_warn_fflags= fi if test x${DBG_FFLAGS+set} != xset; then DBG_FFLAGS="$coin_dbg_fflags $coin_add_fflags $coin_warn_fflags" fi if test x${OPT_FFLAGS+set} != xset; then OPT_FFLAGS="$coin_opt_fflags $coin_add_fflags $coin_warn_fflags" fi DBG_FFLAGS="$DBG_FFLAGS $ADD_FFLAGS" OPT_FFLAGS="$OPT_FFLAGS $ADD_FFLAGS" if test "$coin_debug_compile" = "true"; then FFLAGS="$DBG_FFLAGS" else FFLAGS="$OPT_FFLAGS" fi else FFLAGS="$FFLAGS $ADD_FFLAGS" if test x${DBG_FFLAGS+set} != xset; then DBG_FFLAGS="$FFLAGS" fi if test x${OPT_FFLAGS+set} != xset; then OPT_FFLAGS="$FFLAGS" fi fi # Try if FFLAGS works if test "$F77" != "unavailable" ; then cat >conftest.$ac_ext <<_ACEOF program main integer i end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 FFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$FFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags FFLAGS=\"$FFLAGS\" do not work. I will now just try '-O', but you might want to set FFLAGS manually." >&5 echo "$as_me: WARNING: The flags FFLAGS=\"$FFLAGS\" do not work. I will now just try '-O', but you might want to set FFLAGS manually." >&2;} FFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF program main integer i end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 FFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$FFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for FFLAGS does not work. I will continue with empty FFLAGS, but you might want to set FFLAGS manually." >&5 echo "$as_me: WARNING: This value for FFLAGS does not work. I will continue with empty FFLAGS, but you might want to set FFLAGS manually." >&2;} fi fi fi { echo "$as_me:$LINENO: Fortran compiler options are: $FFLAGS" >&5 echo "$as_me: Fortran compiler options are: $FFLAGS" >&6;} if test x"$MPIF77" = x; then :; else { echo "$as_me:$LINENO: Will use MPI Fortran compiler $MPIF77" >&5 echo "$as_me: Will use MPI Fortran compiler $MPIF77" >&6;} F77="$MPIF77" fi # correct the LD variable if we use the intel fortran compiler in windows case $build in *-cygwin* | *-mingw*) case "$F77" in ifort* | */ifort* | IFORT* | */IFORT*) LD=link ;; esac ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Initialize automake and libtool # AC_MSG_NOTICE([Calling INIT_AUTO_TOOLS from CREATE_LIBTOOL.]) { # START coin_disable_shared=no # Test if force_shared has been set if test "x" = xforce_shared; then if test x$enable_shared = xno; then { { echo "$as_me:$LINENO: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&5 echo "$as_me: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&2;} { (exit 1); exit 1; }; } fi enable_shared=yes; else case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CC" in clang* ) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Building of DLLs not supported in this configuration." >&5 echo "$as_me: Building of DLLs not supported in this configuration." >&6;} ;; *gcc*) if test x"$enable_dependency_linking" = xyes; then coin_disable_shared=no else { echo "$as_me:$LINENO: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&5 echo "$as_me: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&2;} fi ;; *) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then { echo "$as_me:$LINENO: WARNING: Shared objects are not supported." >&5 echo "$as_me: WARNING: Shared objects are not supported." >&2;} fi ;; esac fi if test x"$coin_disable_shared" = xyes; then if test x"$enable_shared" = xyes; then : else # we don't disable shared, because it was not selected anyway coin_disable_shared=no fi enable_shared=no fi # By default, we only want the shared objects to be compiled # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=no fi; # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='vol' VERSION='1.5.4' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME echo "$as_me:$LINENO: checking whether we are using the correct autotools" >&5 echo $ECHO_N "checking whether we are using the correct autotools... $ECHO_C" >&6 if test "${ac_cv_use_correct_autotools+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_use_correct_autotools=check fi echo "$as_me:$LINENO: result: $ac_cv_use_correct_autotools" >&5 echo "${ECHO_T}$ac_cv_use_correct_autotools" >&6 if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf # Extract the first word of "autoconf", so it can be a program name with args. set dummy autoconf; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_autoconf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_autoconf"; then ac_cv_prog_have_autoconf="$have_autoconf" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_autoconf="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_autoconf" && ac_cv_prog_have_autoconf="no" fi fi have_autoconf=$ac_cv_prog_have_autoconf if test -n "$have_autoconf"; then echo "$as_me:$LINENO: result: $have_autoconf" >&5 echo "${ECHO_T}$have_autoconf" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_autoconf = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of autoconf" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of autoconf... $ECHO_C" >&6 autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of autoconf as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of autoconf as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location echo "$as_me:$LINENO: checking whether autoconf is coming from the correct location" >&5 echo $ECHO_N "checking whether autoconf is coming from the correct location... $ECHO_C" >&6 autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if we have automake # Extract the first word of "automake", so it can be a program name with args. set dummy automake; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_automake+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_automake"; then ac_cv_prog_have_automake="$have_automake" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_automake="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_automake" && ac_cv_prog_have_automake="no" fi fi have_automake=$ac_cv_prog_have_automake if test -n "$have_automake"; then echo "$as_me:$LINENO: result: $have_automake" >&5 echo "${ECHO_T}$have_automake" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_automake = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of automake" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of automake... $ECHO_C" >&6 automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of automake as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of automake as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable automake is picked up from the correct location echo "$as_me:$LINENO: checking whether automake is coming from the correct location" >&5 echo $ECHO_N "checking whether automake is coming from the correct location... $ECHO_C" >&6 automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` if test -r $want_dir/libtool/ltmain.sh; then have_ltmain=yes : else have_ltmain=no : fi echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of libtool." >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of libtool.... $ECHO_C" >&6 if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of libtool." >&5 echo "$as_me: error: You don't have the correct version of libtool." >&2;} { (exit 1); exit 1; }; } fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: I cannot find the ltmain.sh file." >&5 echo "$as_me: error: I cannot find the ltmain.sh file." >&2;} { (exit 1); exit 1; }; } fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi if test -r $want_dir/aclocal/libtool.m4; then LIBTOOLM4="$want_dir/aclocal/libtool.m4" : else { { echo "$as_me:$LINENO: error: I cannot find the libtool.m4 file." >&5 echo "$as_me: error: I cannot find the libtool.m4 file." >&2;} { (exit 1); exit 1; }; } : fi # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svn"; then ac_cv_prog_have_svn="$have_svn" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svn="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svn" && ac_cv_prog_have_svn="no" fi fi have_svn=$ac_cv_prog_have_svn if test -n "$have_svn"; then echo "$as_me:$LINENO: result: $have_svn" >&5 echo "${ECHO_T}$have_svn" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$have_svn = xyes; then echo "$as_me:$LINENO: checking whether svn understands https" >&5 echo $ECHO_N "checking whether svn understands https... $ECHO_C" >&6 if test "${ac_cv_svn_understands_https+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out fi echo "$as_me:$LINENO: result: $ac_cv_svn_understands_https" >&5 echo "${ECHO_T}$ac_cv_svn_understands_https" >&6 fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else { { echo "$as_me:$LINENO: error: Cannot find the BuildTools directory" >&5 echo "$as_me: error: Cannot find the BuildTools directory" >&2;} { (exit better disable maintainer mode.); exit better disable maintainer mode.; }; } fi fi fi # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` abs_lib_dir=$full_prefix/lib abs_include_dir=$full_prefix/include abs_bin_dir=$full_prefix/bin if test $coin_have_externals = yes && test x$have_svn = xyes; then HAVE_EXTERNALS_TRUE= HAVE_EXTERNALS_FALSE='#' else HAVE_EXTERNALS_TRUE='#' HAVE_EXTERNALS_FALSE= fi # AC_MSG_NOTICE([End automake initialisation.]) LIBTOOL= if test -f ../libtool; then coin_config_dir=.. LIBTOOL='$(SHELL) $(top_builddir)/../libtool' fi if test "x$LIBTOOL" = x; then if test -f ../../libtool; then coin_config_dir=../.. LIBTOOL='$(SHELL) $(top_builddir)/../../libtool' fi fi if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Creating libtool script (calling COIN_PROG_LIBTOOL).]) # Stuff for libtool # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi; # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi; echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done fi SED=$lt_cv_path_SED echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu | dragonfly*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix3*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 6353 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) LD="${LD-ld} -64" ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------- ## ## Report this to coin-vol@lists.coin-or.org ## ## ----------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux*) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8317: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8321: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic='-qnocommon' lt_prog_compiler_wl='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8585: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8589: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works=yes fi else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8689: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8693: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix3*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs=no ;; esac fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which library types will actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e 1s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi if test -z "$LTCFLAGS"; then eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_CXX=yes else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes if test "$GXX" = yes ; then lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_CXX=no ;; esac fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | kfreebsd*-gnu | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_CXX='+b $libdir' ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix3*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: ;; linux*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc*) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC*) # Portland Group C++ compiler archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd='echo' ;; osf3*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ $rm $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. We must also pass each convience library through # to the system linker between allextract/defaultextract. # The C++ compiler will combine linker options so we # cannot just pass the convience library names through # without $wl. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. # So that behaviour is only enabled if SCOABSPATH is set to a # non-empty value in the environment. Most likely only useful for # creating official distributions of packages. # This is a hack until libtool officially supports absolute path # names for shared libraries. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" \ || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $rm -f confest.$objext # PORTME: override above test on systems where it is broken case $host_os in interix3*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; solaris*) case $cc_basename in CC*) # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. postdeps_CXX='-lCstd -lCrun' ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_CXX='-qnocommon' lt_prog_compiler_wl_CXX='-Wl,' ;; esac ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | kfreebsd*-gnu | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc* | ecpc*) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC*) # Portland Group C++ compiler. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13478: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13482: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_CXX=yes fi else lt_prog_compiler_static_works_CXX=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6 if test x"$lt_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13582: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13586: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || \ test -n "$runpath_var_CXX" || \ test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_CXX # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_CXX" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_F77='-qnocommon' lt_prog_compiler_wl_F77='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:15152: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:15156: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_F77=yes fi else lt_prog_compiler_static_works_F77=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6 if test x"$lt_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:15256: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:15260: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_F77=no fi ;; interix3*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_F77='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='' link_all_deplibs_F77=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_F77=no ;; esac fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var_F77" || \ test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no old_archive_cmds_GCJ=$old_archive_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17463: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17467: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_GCJ='-qnocommon' lt_prog_compiler_wl_GCJ='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-fpic' lt_prog_compiler_static_GCJ='-Bstatic' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; solaris*) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_GCJ='-Qoption ld ';; *) lt_prog_compiler_wl_GCJ='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; unicos*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_can_build_shared_GCJ=no ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17731: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17735: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_GCJ=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_GCJ=yes fi else lt_prog_compiler_static_works_GCJ=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6 if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then : else lt_prog_compiler_static_GCJ= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17835: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:17839: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_GCJ=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_GCJ=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_GCJ=no fi ;; interix3*) hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_GCJ=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_GCJ=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_GCJ=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = no; then runpath_var= hardcode_libdir_flag_spec_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_GCJ=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_GCJ=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_GCJ=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ='$convenience' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi[45]*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_GCJ=no hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='' link_all_deplibs_GCJ=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_GCJ=no ;; esac fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; *) hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_GCJ=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_GCJ='${wl}-z,text' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_GCJ='${wl}-z,text' allow_undefined_flag_GCJ='${wl}-z,nodefs' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ pic_flag=$lt_prog_compiler_pic_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ test "X$hardcode_automatic_GCJ" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # No longer needed now that CPPFLAGS is correctly set -- lh, 061214 -- # AC_REQUIRE([AC_COIN_DLFCN_H]) # NEW: If libtool exists in the directory higher up, we use that one # instead of creating a new one # It turns out that the code for AC_PROG_LIBTOOL is somehow AC_REQUIRED # out in front of this macro body. You'll notice that LIBTOOL is already # defined here. We'll have to count on this macro not being called if libtool # already exists, or at least move the libtool fixes outside the conditional. # AC_MSG_NOTICE([Entering coin_prog_libtool, LIBTOOL = "$LIBTOOL".]) # This test is therefore removed. -- lh, 061214 -- # if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Calling PROG_LIBTOOL.]) # AC_MSG_NOTICE([Finished PROG_LIBTOOL.]) { echo "$as_me:$LINENO: Build is \"$build\"." >&5 echo "$as_me: Build is \"$build\"." >&6;} mydos2unix='| dos2unix' case $build in *-mingw*) CYGPATH_W=echo ;; esac case $build in # Here we need to check if -m32 is specified. If so, we need to correct # sys_lib_search_path_spec *-cygwin* | *-mingw*) case "$CXX" in clang* ) # we assume that libtool patches for CLANG are the same as for GNU compiler - correct??? { echo "$as_me:$LINENO: Applying patches to libtool for CLANG compiler" >&5 echo "$as_me: Applying patches to libtool for CLANG compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Applying patches to libtool for cl compiler" >&5 echo "$as_me: Applying patches to libtool for cl compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|fix_srcfile_path=\"\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's%compile_deplibs=\"\$dir/\$old_library \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$old_library | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%compile_deplibs=\"\$dir/\$linklib \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$linklib | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%lib /OUT:%lib -OUT:%' \ -e "s%cygpath -w%$CYGPATH_W%" \ -e 's%$AR x \\$f_ex_an_ar_oldlib%bla=\\$(lib -nologo -list \\$('"$CYGPATH_W \$1"') '"$mydos2unix"' | xargs echo); echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$('"$CYGPATH_W \$1"'); done%' \ -e 's%$AR t "$f_ex_an_ar_oldlib"%lib -nologo -list \$('"$CYGPATH_W \$1"') '"$mydos2unix"'%' \ -e 's%f_ex_an_ar_oldlib="\($?*1*\)"%f_ex_an_ar_oldlib='\`"$CYGPATH_W"' \1`%' \ -e 's%^archive_cmds=.*%archive_cmds="\\$CC -o \\$lib \\$libobjs \\$compiler_flags \\\\\\`echo \\\\\\"\\$deplibs\\\\\\" | \\$SED -e '"\'"'s/ -lc\\$//'"\'"'\\\\\\` -link -dll~linknames="%' \ -e 's%old_archive_cmds="lib -OUT:\\$oldlib\\$oldobjs\\$old_deplibs"%old_archive_cmds="if test -r \\$oldlib; then bla=\\"\\$oldlib\\"; else bla=; fi; lib -OUT:\\$oldlib \\\\\\$bla\\$oldobjs\\$old_deplibs"%' \ libtool > conftest.bla ;; *) { echo "$as_me:$LINENO: Applying patches to libtool for GNU compiler" >&5 echo "$as_me: Applying patches to libtool for GNU compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla ;; esac mv conftest.bla libtool chmod 755 libtool ;; *x86_64-*) if test "$GCC" = yes && (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm32' >& /dev/null); then { echo "$as_me:$LINENO: Applying patches to libtool for 32bit compilation" >&5 echo "$as_me: Applying patches to libtool for 32bit compilation" >&6;} sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="/lib /usr/lib"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi ;; *-solaris*) if test "$GCC" = yes && \ (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm64' >/dev/null 2>&1) ; then hdwisa=`isainfo | sed -e 's/\([^ ]*\) .*$/\1/'` if `$EGREP 'sys_lib_search_path_spec=' libtool | $EGREP -v $hdwisa >/dev/null 2>&1` ; then { echo "$as_me:$LINENO: Applying patches to libtool for 64-bit GCC compilation" >&5 echo "$as_me: Applying patches to libtool for 64-bit GCC compilation" >&6;} fixlibtmp=`$CC -m64 -print-search-dirs | $EGREP '^libraries:'` fixlibtmp=`echo $fixlibtmp | sed -e 's/libraries: =//' -e 's/:/ /g'` if `echo "$fixlibtmp" | $EGREP -v $hdwisa >/dev/null 2>&1` ; then # AC_MSG_NOTICE(Compensating for broken gcc) for lib in $fixlibtmp ; do if test -d "${lib}${hdwisa}" ; then syslibpath64="$syslibpath64 ${lib}${hdwisa}/" fi done syslibpath64="${syslibpath64} ${fixlibtmp}" else syslibpath64="$fixlibtmp" fi sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="'"$syslibpath64"'"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi # AC_MSG_NOTICE(Result is ) # $EGREP 'sys_lib_search_path_spec=' libtool fi ;; # Cygwin. Ah, cygwin. Too big and ugly to inline; see the macro. *-darwin*) { echo "$as_me:$LINENO: Applying patches to libtool for Darwin" >&5 echo "$as_me: Applying patches to libtool for Darwin" >&6;} sed -e 's/verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"/verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"/' \ -e 's/ -dynamiclib / -dynamiclib -single_module /g' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac # This fi matches the commented `if test "x$LIBTOOL" = x;' up at the head of # the macro. -- lh, 061214 -- # fi # AC_MSG_NOTICE([End libtool initialisation.]) # AC_MSG_NOTICE([Finished COIN_PROG_LIBTOOL.]) # set RPATH_FLAGS to the compiler link flags required to hardcode location # of the shared objects RPATH_FLAGS= if test $enable_shared = yes; then case $build in *-linux-*) if test "$GXX" = "yes"; then RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -Wl,--rpath -Wl,$dir" done fi ;; *-darwin*) RPATH_FLAGS=nothing ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) RPATH_FLAGS=nothing ;; esac ;; *-hp-*) RPATH_FLAGS=nothing ;; *-mingw32) RPATH_FLAGS=nothing ;; *-*-solaris*) RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -R$dir" done esac if test "$RPATH_FLAGS" = ""; then { echo "$as_me:$LINENO: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&5 echo "$as_me: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&2;} fi if test "$RPATH_FLAGS" = "nothing"; then RPATH_FLAGS= fi fi else { echo "$as_me:$LINENO: Using libtool script in directory $coin_config_dir" >&5 echo "$as_me: Using libtool script in directory $coin_config_dir" >&6;} # get all missing information from the config.log file # output variables and defines as_save_IFS=$IFS IFS=' ' for oneline in `cat $coin_config_dir/config.status`; do case "$oneline" in # First some automake conditionals s,@am__fastdep* | s,@AR@* | s,@CPP@* | s,@CPPFLAGS@* | s,@CXXCPP@* | \ s,@RANLIB@* | s,@STRIP@* | s,@ac_ct_AR@* | s,@ac_ct_RANLIB@* | \ s,@ac_ct_STRIP@* | s,@host* | s,@LN_S@* | s,@RPATH_FLAGS@* | \ s,@ac_c_preproc_warn_flag@* | s,@ac_cxx_preproc_warn_flag@* ) command=`echo $oneline | sed -e 's/^s,@//' -e 's/@,/="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; s,@DEFS@* ) command=`echo $oneline | sed -e 's/^s,@DEFS@,/defsline="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; esac done IFS=$as_save_IFS # And some defines (assuming here that the packages base dir # doesn't have a config.h file for word in $defsline; do # echo word $word case $word in -DHAVE_[A-Z_]*_H=1 | -DSTDC_HEADERS=1 ) i=`echo $word | sed -e 's/-D/#define /' -e 's/=/ /'` # echo dd $i echo $i >>confdefs.h ;; esac done fi # AC_MSG_NOTICE([End of INIT_AUTO_TOOLS.]) # Check whether --enable-dependency-linking or --disable-dependency-linking was given. if test "${enable_dependency_linking+set}" = set; then enableval="$enable_dependency_linking" dependency_linking="$enableval" else dependency_linking=auto fi; if test "$dependency_linking" = auto; then # On Cygwin and AIX, building DLLs doesn't work dependency_linking=no if test x"$coin_disable_shared" = xno; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) dependency_linking=yes ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) dependency_linking=no ;; *gcc*) dependency_linking=yes ;; *) dependency_linking=yes ;; esac ;; *) dependency_linking=yes ;; esac fi fi if test "$dependency_linking" = yes ; then LT_LDFLAGS="-no-undefined" else LT_LDFLAGS= fi if test "$dependency_linking" = yes; then DEPENDENCY_LINKING_TRUE= DEPENDENCY_LINKING_FALSE='#' else DEPENDENCY_LINKING_TRUE='#' DEPENDENCY_LINKING_FALSE= fi # Check if we want to set the library version echo "$as_me:$LINENO: checking if library version is set" >&5 echo $ECHO_N "checking if library version is set... $ECHO_C" >&6 if test x"$coin_libversion" != x; then LT_LDFLAGS="$LT_LDFLAGS -version-info $coin_libversion" echo "$as_me:$LINENO: result: $coin_libversion" >&5 echo "${ECHO_T}$coin_libversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi #END } # AC_MSG_NOTICE([Finished INIT_AUTO_TOOLS from CREATE_LIBTOOL.]) ############################################################################# # Check which subprojects are there # ############################################################################# echo "$as_me:$LINENO: checking whether source of project Sample is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project Sample is available and should be compiled... $ECHO_C" >&6 coin_has_sample=notGiven coin_reason= # check if user wants to skip project in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Sample"; then coin_has_sample="no" coin_reason="Sample has been specified in COIN_SKIP_PROJECTS" fi if test $dir = "Data/Sample"; then coin_has_sample="no" coin_reason="Data/Sample has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_sample" != no; then # Check whether --with-m4_tolower(Sample) or --without-m4_tolower(Sample) was given. if test "${with_sample+set}" = set; then withval="$with_sample" if test "$withval" = no ; then coin_has_sample="no" coin_reason="--without-sample has been specified" fi fi; fi if test "$coin_has_sample" != no; then # Check whether --with-m4_tolower(Sample)-lib or --without-m4_tolower(Sample)-lib was given. if test "${with_sample_lib+set}" = set; then withval="$with_sample_lib" if test "$withval" = no ; then coin_has_sample="no" coin_reason="--without-sample-lib has been specified" else coin_has_sample="no" coin_reason="--with-sample-lib has been specified" fi fi; fi if test "$coin_has_sample" != no; then # Check whether --with-m4_tolower(Sample)-incdir or --without-m4_tolower(Sample)-incdir was given. if test "${with_sample_incdir+set}" = set; then withval="$with_sample_incdir" if test "$withval" = no ; then coin_has_sample="no" coin_reason="--without-sample-incdir has been specified" else coin_has_sample="no" coin_reason="--with-sample-incdir has been specified" fi fi; fi if test "$coin_has_sample" != no; then # Check whether --with-m4_tolower(Sample)-datadir or --without-m4_tolower(Sample)-datadir was given. if test "${with_sample_datadir+set}" = set; then withval="$with_sample_datadir" if test "$withval" = no ; then coin_has_sample="no" coin_reason="--without-sample-datadir has been specified" else coin_has_sample="no" coin_reason="--with-sample-datadir has been specified" fi fi; fi # check if project is available in present directory if test "$coin_has_sample" = notGiven; then coin_has_sample=no if test -d $srcdir/Data/Sample; then coin_reason="source in Data/Sample" # If a third argument is given, then we have to check if one one the files given in that third argument is present. # If none of the files in the third argument is available, then we consider the project directory as non-existing. # However, if no third argument is given, then this means that there should be no check, and existence of the directory is sufficient. coin_has_sample="yes" fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_sample" >&5 echo "${ECHO_T}$coin_has_sample" >&6 else echo "$as_me:$LINENO: result: $coin_has_sample, $coin_reason" >&5 echo "${ECHO_T}$coin_has_sample, $coin_reason" >&6 fi if test "$coin_has_sample" = yes ; then if test -r $srcdir/Data/Sample/configure; then coin_subdirs="$coin_subdirs Data/Sample" subdirs="$subdirs Data/Sample" fi fi echo "$as_me:$LINENO: checking whether source of project CoinUtils is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project CoinUtils is available and should be compiled... $ECHO_C" >&6 coin_has_coinutils=notGiven coin_reason= # check if user wants to skip project in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "CoinUtils"; then coin_has_coinutils="no" coin_reason="CoinUtils has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_coinutils" != no; then # Check whether --with-m4_tolower(CoinUtils) or --without-m4_tolower(CoinUtils) was given. if test "${with_coinutils+set}" = set; then withval="$with_coinutils" if test "$withval" = no ; then coin_has_coinutils="no" coin_reason="--without-coinutils has been specified" fi fi; fi if test "$coin_has_coinutils" != no; then # Check whether --with-m4_tolower(CoinUtils)-lib or --without-m4_tolower(CoinUtils)-lib was given. if test "${with_coinutils_lib+set}" = set; then withval="$with_coinutils_lib" if test "$withval" = no ; then coin_has_coinutils="no" coin_reason="--without-coinutils-lib has been specified" else coin_has_coinutils="no" coin_reason="--with-coinutils-lib has been specified" fi fi; fi if test "$coin_has_coinutils" != no; then # Check whether --with-m4_tolower(CoinUtils)-incdir or --without-m4_tolower(CoinUtils)-incdir was given. if test "${with_coinutils_incdir+set}" = set; then withval="$with_coinutils_incdir" if test "$withval" = no ; then coin_has_coinutils="no" coin_reason="--without-coinutils-incdir has been specified" else coin_has_coinutils="no" coin_reason="--with-coinutils-incdir has been specified" fi fi; fi if test "$coin_has_coinutils" != no; then # Check whether --with-m4_tolower(CoinUtils)-datadir or --without-m4_tolower(CoinUtils)-datadir was given. if test "${with_coinutils_datadir+set}" = set; then withval="$with_coinutils_datadir" if test "$withval" = no ; then coin_has_coinutils="no" coin_reason="--without-coinutils-datadir has been specified" else coin_has_coinutils="no" coin_reason="--with-coinutils-datadir has been specified" fi fi; fi # check if project is available in present directory if test "$coin_has_coinutils" = notGiven; then coin_has_coinutils=no if test -d $srcdir/CoinUtils; then coin_reason="source in CoinUtils" # If a third argument is given, then we have to check if one one the files given in that third argument is present. # If none of the files in the third argument is available, then we consider the project directory as non-existing. # However, if no third argument is given, then this means that there should be no check, and existence of the directory is sufficient. coin_has_coinutils="yes" fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_coinutils" >&5 echo "${ECHO_T}$coin_has_coinutils" >&6 else echo "$as_me:$LINENO: result: $coin_has_coinutils, $coin_reason" >&5 echo "${ECHO_T}$coin_has_coinutils, $coin_reason" >&6 fi if test "$coin_has_coinutils" = yes ; then if test -r $srcdir/CoinUtils/configure; then coin_subdirs="$coin_subdirs CoinUtils" subdirs="$subdirs CoinUtils" fi fi echo "$as_me:$LINENO: checking whether source of project Osi is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project Osi is available and should be compiled... $ECHO_C" >&6 coin_has_osi=notGiven coin_reason= # check if user wants to skip project in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Osi"; then coin_has_osi="no" coin_reason="Osi has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_osi" != no; then # Check whether --with-m4_tolower(Osi) or --without-m4_tolower(Osi) was given. if test "${with_osi+set}" = set; then withval="$with_osi" if test "$withval" = no ; then coin_has_osi="no" coin_reason="--without-osi has been specified" fi fi; fi if test "$coin_has_osi" != no; then # Check whether --with-m4_tolower(Osi)-lib or --without-m4_tolower(Osi)-lib was given. if test "${with_osi_lib+set}" = set; then withval="$with_osi_lib" if test "$withval" = no ; then coin_has_osi="no" coin_reason="--without-osi-lib has been specified" else coin_has_osi="no" coin_reason="--with-osi-lib has been specified" fi fi; fi if test "$coin_has_osi" != no; then # Check whether --with-m4_tolower(Osi)-incdir or --without-m4_tolower(Osi)-incdir was given. if test "${with_osi_incdir+set}" = set; then withval="$with_osi_incdir" if test "$withval" = no ; then coin_has_osi="no" coin_reason="--without-osi-incdir has been specified" else coin_has_osi="no" coin_reason="--with-osi-incdir has been specified" fi fi; fi if test "$coin_has_osi" != no; then # Check whether --with-m4_tolower(Osi)-datadir or --without-m4_tolower(Osi)-datadir was given. if test "${with_osi_datadir+set}" = set; then withval="$with_osi_datadir" if test "$withval" = no ; then coin_has_osi="no" coin_reason="--without-osi-datadir has been specified" else coin_has_osi="no" coin_reason="--with-osi-datadir has been specified" fi fi; fi # check if project is available in present directory if test "$coin_has_osi" = notGiven; then coin_has_osi=no if test -d $srcdir/Osi; then coin_reason="source in Osi" # If a third argument is given, then we have to check if one one the files given in that third argument is present. # If none of the files in the third argument is available, then we consider the project directory as non-existing. # However, if no third argument is given, then this means that there should be no check, and existence of the directory is sufficient. coin_has_osi="yes" fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_osi" >&5 echo "${ECHO_T}$coin_has_osi" >&6 else echo "$as_me:$LINENO: result: $coin_has_osi, $coin_reason" >&5 echo "${ECHO_T}$coin_has_osi, $coin_reason" >&6 fi if test "$coin_has_osi" = yes ; then if test -r $srcdir/Osi/configure; then coin_subdirs="$coin_subdirs Osi" subdirs="$subdirs Osi" fi fi echo "$as_me:$LINENO: checking whether source of project Vol is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project Vol is available and should be compiled... $ECHO_C" >&6 coin_has_vol=notGiven coin_reason= # check if user wants to skip project in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Vol"; then coin_has_vol="no" coin_reason="Vol has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_vol" != no; then # Check whether --with-m4_tolower(Vol) or --without-m4_tolower(Vol) was given. if test "${with_vol+set}" = set; then withval="$with_vol" if test "$withval" = no ; then coin_has_vol="no" coin_reason="--without-vol has been specified" fi fi; fi if test "$coin_has_vol" != no; then # Check whether --with-m4_tolower(Vol)-lib or --without-m4_tolower(Vol)-lib was given. if test "${with_vol_lib+set}" = set; then withval="$with_vol_lib" if test "$withval" = no ; then coin_has_vol="no" coin_reason="--without-vol-lib has been specified" else coin_has_vol="no" coin_reason="--with-vol-lib has been specified" fi fi; fi if test "$coin_has_vol" != no; then # Check whether --with-m4_tolower(Vol)-incdir or --without-m4_tolower(Vol)-incdir was given. if test "${with_vol_incdir+set}" = set; then withval="$with_vol_incdir" if test "$withval" = no ; then coin_has_vol="no" coin_reason="--without-vol-incdir has been specified" else coin_has_vol="no" coin_reason="--with-vol-incdir has been specified" fi fi; fi if test "$coin_has_vol" != no; then # Check whether --with-m4_tolower(Vol)-datadir or --without-m4_tolower(Vol)-datadir was given. if test "${with_vol_datadir+set}" = set; then withval="$with_vol_datadir" if test "$withval" = no ; then coin_has_vol="no" coin_reason="--without-vol-datadir has been specified" else coin_has_vol="no" coin_reason="--with-vol-datadir has been specified" fi fi; fi # check if project is available in present directory if test "$coin_has_vol" = notGiven; then coin_has_vol=no if test -d $srcdir/Vol; then coin_reason="source in Vol" # If a third argument is given, then we have to check if one one the files given in that third argument is present. # If none of the files in the third argument is available, then we consider the project directory as non-existing. # However, if no third argument is given, then this means that there should be no check, and existence of the directory is sufficient. coin_has_vol="yes" fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_vol" >&5 echo "${ECHO_T}$coin_has_vol" >&6 else echo "$as_me:$LINENO: result: $coin_has_vol, $coin_reason" >&5 echo "${ECHO_T}$coin_has_vol, $coin_reason" >&6 fi if test "$coin_has_vol" = yes ; then if test -r $srcdir/Vol/configure; then coin_subdirs="$coin_subdirs Vol" subdirs="$subdirs Vol" fi fi { echo "$as_me:$LINENO: configuring doxygen documentation options" >&5 echo "$as_me: configuring doxygen documentation options" >&6;} # Check to see if doxygen is available. # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_doxygen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_doxygen"; then ac_cv_prog_coin_have_doxygen="$coin_have_doxygen" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_doxygen="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_doxygen" && ac_cv_prog_coin_have_doxygen="no" fi fi coin_have_doxygen=$ac_cv_prog_coin_have_doxygen if test -n "$coin_have_doxygen"; then echo "$as_me:$LINENO: result: $coin_have_doxygen" >&5 echo "${ECHO_T}$coin_have_doxygen" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_latex+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_latex"; then ac_cv_prog_coin_have_latex="$coin_have_latex" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_latex="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_latex" && ac_cv_prog_coin_have_latex="no" fi fi coin_have_latex=$ac_cv_prog_coin_have_latex if test -n "$coin_have_latex"; then echo "$as_me:$LINENO: result: $coin_have_latex" >&5 echo "${ECHO_T}$coin_have_latex" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Look for the dot tool from the graphviz package, unless the user has # disabled it. # Check whether --with-dot or --without-dot was given. if test "${with_dot+set}" = set; then withval="$with_dot" else withval=yes fi; if test x"$withval" = xno ; then coin_doxy_usedot=NO echo "$as_me:$LINENO: checking for dot " >&5 echo $ECHO_N "checking for dot ... $ECHO_C" >&6 echo "$as_me:$LINENO: result: disabled" >&5 echo "${ECHO_T}disabled" >&6 else # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_doxy_usedot+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_doxy_usedot"; then ac_cv_prog_coin_doxy_usedot="$coin_doxy_usedot" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_doxy_usedot="YES" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_doxy_usedot" && ac_cv_prog_coin_doxy_usedot="NO" fi fi coin_doxy_usedot=$ac_cv_prog_coin_doxy_usedot if test -n "$coin_doxy_usedot"; then echo "$as_me:$LINENO: result: $coin_doxy_usedot" >&5 echo "${ECHO_T}$coin_doxy_usedot" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi # Generate a tag file name and a log file name coin_doxy_tagname=doxydoc/${PACKAGE}_doxy.tag coin_doxy_logname=doxydoc/${PACKAGE}_doxy.log if test $coin_have_doxygen = yes; then COIN_HAS_DOXYGEN_TRUE= COIN_HAS_DOXYGEN_FALSE='#' else COIN_HAS_DOXYGEN_TRUE='#' COIN_HAS_DOXYGEN_FALSE= fi if test $coin_have_latex = yes; then COIN_HAS_LATEX_TRUE= COIN_HAS_LATEX_FALSE='#' else COIN_HAS_LATEX_TRUE='#' COIN_HAS_LATEX_FALSE= fi # Process the list of project names and massage them into possible doxygen # doc'n directories. Prefer 1) classic external, source processed using # a project-specific doxygen.conf, we use the tag file; 2) classic # external, source processed using package doxygen.conf; 3) installed # doxydoc. Alternatives 1) and 2) are only possible if the directory will be # configured, which we can't know unless this is the package base configure, # since coin_subdirs is only set there. Hence it's sufficient to check for # membership. If we use a tag file from a classic external, exclude the # source from doxygen processing when doxygen runs in the base directory. coin_doxy_tagfiles= coin_doxy_excludes= tmp="CoinUtils Osi" for proj in $tmp ; do lc_proj=`echo $proj | tr [A-Z] [a-z]` echo "$as_me:$LINENO: checking for doxygen doc'n for $proj " >&5 echo $ECHO_N "checking for doxygen doc'n for $proj ... $ECHO_C" >&6 doxytag=${lc_proj}_doxy.tag doxyfound=no # proj will be configured, hence doxydoc present in build tree doxysrcdir="${srcdir}/../${proj}" # AC_MSG_NOTICE([Considering $doxysrcdir (base)]) if test -d "$doxysrcdir" ; then # with a doxydoc directory? doxydir="$doxysrcdir/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (base)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) if test -d "$doxydir" ; then # use tag file; don't process source doxydir="../${proj}/doxydoc" coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 coin_doxy_excludes="$coin_doxy_excludes */${proj}" else # will process the source -- nothing further to be done here echo "$as_me:$LINENO: result: $doxysrcdir (src)" >&5 echo "${ECHO_T}$doxysrcdir (src)" >&6 fi doxyfound=yes fi # Not built, fall back to installed tag file if test $doxyfound = no ; then eval doxydir="${datadir}/coin/doc/${proj}/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (install)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 fi done ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) ac_config_files="$ac_config_files Makefile doxydoc/doxygen.conf" # Finally, we let configure write all the output... echo "$as_me:$LINENO: checking which command should be used to link input files" >&5 echo $ECHO_N "checking which command should be used to link input files... $ECHO_C" >&6 coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac echo "$as_me:$LINENO: result: $coin_link_input_cmd" >&5 echo "${ECHO_T}$coin_link_input_cmd" >&6 if test x$coin_skip_ac_output != xyes; then # library extension case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g p _ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within # single-quotes doesn't work because, if this script is created in a # platform that uses two characters for line-breaks (e.g., DOS), tr # would break. ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${COIN_CC_IS_CL_TRUE}" && test -z "${COIN_CC_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CXX_IS_CL_TRUE}" && test -z "${COIN_CXX_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_EXTERNALS_TRUE}" && test -z "${HAVE_EXTERNALS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DEPENDENCY_LINKING_TRUE}" && test -z "${DEPENDENCY_LINKING_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_DOXYGEN_TRUE}" && test -z "${COIN_HAS_DOXYGEN_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LATEX_TRUE}" && test -z "${COIN_HAS_LATEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by Vol $as_me 1.5.4, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ Vol config.status 1.5.4 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doxydoc/doxygen.conf" ) CONFIG_FILES="$CONFIG_FILES doxydoc/doxygen.conf" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@CDEFS@,$CDEFS,;t t s,@ADD_CFLAGS@,$ADD_CFLAGS,;t t s,@DBG_CFLAGS@,$DBG_CFLAGS,;t t s,@OPT_CFLAGS@,$OPT_CFLAGS,;t t s,@sol_cc_compiler@,$sol_cc_compiler,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@COIN_CC_IS_CL_TRUE@,$COIN_CC_IS_CL_TRUE,;t t s,@COIN_CC_IS_CL_FALSE@,$COIN_CC_IS_CL_FALSE,;t t s,@MPICC@,$MPICC,;t t s,@CXXDEFS@,$CXXDEFS,;t t s,@ADD_CXXFLAGS@,$ADD_CXXFLAGS,;t t s,@DBG_CXXFLAGS@,$DBG_CXXFLAGS,;t t s,@OPT_CXXFLAGS@,$OPT_CXXFLAGS,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@COIN_CXX_IS_CL_TRUE@,$COIN_CXX_IS_CL_TRUE,;t t s,@COIN_CXX_IS_CL_FALSE@,$COIN_CXX_IS_CL_FALSE,;t t s,@MPICXX@,$MPICXX,;t t s,@ADD_FFLAGS@,$ADD_FFLAGS,;t t s,@DBG_FFLAGS@,$DBG_FFLAGS,;t t s,@OPT_FFLAGS@,$OPT_FFLAGS,;t t s,@F77@,$F77,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@MPIF77@,$MPIF77,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CPP@,$CPP,;t t s,@CXXCPP@,$CXXCPP,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@ac_c_preproc_warn_flag@,$ac_c_preproc_warn_flag,;t t s,@ac_cxx_preproc_warn_flag@,$ac_cxx_preproc_warn_flag,;t t s,@RPATH_FLAGS@,$RPATH_FLAGS,;t t s,@DEPENDENCY_LINKING_TRUE@,$DEPENDENCY_LINKING_TRUE,;t t s,@DEPENDENCY_LINKING_FALSE@,$DEPENDENCY_LINKING_FALSE,;t t s,@LT_LDFLAGS@,$LT_LDFLAGS,;t t s,@COIN_SKIP_PROJECTS@,$COIN_SKIP_PROJECTS,;t t s,@subdirs@,$subdirs,;t t s,@coin_have_doxygen@,$coin_have_doxygen,;t t s,@coin_have_latex@,$coin_have_latex,;t t s,@coin_doxy_usedot@,$coin_doxy_usedot,;t t s,@coin_doxy_tagname@,$coin_doxy_tagname,;t t s,@coin_doxy_logname@,$coin_doxy_logname,;t t s,@COIN_HAS_DOXYGEN_TRUE@,$COIN_HAS_DOXYGEN_TRUE,;t t s,@COIN_HAS_DOXYGEN_FALSE@,$COIN_HAS_DOXYGEN_FALSE,;t t s,@COIN_HAS_LATEX_TRUE@,$COIN_HAS_LATEX_TRUE,;t t s,@COIN_HAS_LATEX_FALSE@,$COIN_HAS_LATEX_FALSE,;t t s,@coin_doxy_tagfiles@,$coin_doxy_tagfiles,;t t s,@coin_doxy_excludes@,$coin_doxy_excludes,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file and --srcdir arguments so they do not pile up. ac_sub_configure_args= ac_prev= for ac_arg in $ac_configure_args; do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ | --c=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_sub_configure_args="--prefix=$prefix $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d $srcdir/$ac_dir || continue { echo "$as_me:$LINENO: configuring in $ac_dir" >&5 echo "$as_me: configuring in $ac_dir" >&6;} { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then ac_sub_configure="$SHELL '$ac_srcdir/configure.gnu'" elif test -f $ac_srcdir/configure; then ac_sub_configure="$SHELL '$ac_srcdir/configure'" elif test -f $ac_srcdir/configure.in; then ac_sub_configure=$ac_configure else { echo "$as_me:$LINENO: WARNING: no configuration information is in $ac_dir" >&5 echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; *) # Relative path. ac_sub_cache_file=$ac_top_builddir$cache_file ;; esac { echo "$as_me:$LINENO: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 echo "$as_me: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval $ac_sub_configure $ac_sub_configure_args \ --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir || { { echo "$as_me:$LINENO: error: $ac_sub_configure failed for $ac_dir" >&5 echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;} { (exit 1); exit 1; }; } fi cd $ac_popdir done fi if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then { echo "$as_me:$LINENO: Copying data files for VPATH configuration" >&5 echo "$as_me: Copying data files for VPATH configuration" >&6;} else { echo "$as_me:$LINENO: Creating VPATH links for data files" >&5 echo "$as_me: Creating VPATH links for data files" >&6;} fi for file in $coin_vpath_link_files; do dir=`(dirname "./$file") 2>/dev/null || $as_expr X"./$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"./$file" : 'X\(//\)[^/]' \| \ X"./$file" : 'X\(//\)$' \| \ X"./$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"./$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test -d $dir; then : ; else { if $as_mkdir_p; then mkdir -p $dir else as_dir=$dir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dir" >&5 echo "$as_me: error: cannot create directory $dir" >&2;} { (exit 1); exit 1; }; }; } fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi { echo "$as_me:$LINENO: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&5 echo "$as_me: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&6;} if test x$coin_projectdir = xyes; then { echo "$as_me:$LINENO: Configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Configuration of $PACKAGE_NAME successful" >&6;} else { echo "$as_me:$LINENO: Main configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Main configuration of $PACKAGE_NAME successful" >&6;} fi else { echo "$as_me:$LINENO: No configuration of $PACKAGE_NAME necessary" >&5 echo "$as_me: No configuration of $PACKAGE_NAME necessary" >&6;} fi Vol-1.5.4/appveyor.yml0000644000175000017500000000331313434065343013710 0ustar sudipsudipplatform: - x64 environment: matrix: - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 ARCH: win32-msvc9 HOST_ARCH_ARG: --enable-msvc=MD ADD_PATH: /mingw64/bin - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 ARCH: win32-msvc14 HOST_ARCH_ARG: --enable-msvc ADD_PATH: /mingw64/bin - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ARCH: win32-msvc15 HOST_ARCH_ARG: --enable-msvc ADD_PATH: /mingw64/bin - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ARCH: x86_64-w64-mingw32 HOST_ARCH_ARG: --host=x86_64-w64-mingw32 ADD_PATH: /mingw64/bin - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ARCH: i686-w64-mingw32 HOST_ARCH_ARG: --host=i686-w64-mingw32 ADD_PATH: /mingw32/bin install: - IF %ARCH%==win32-msvc9 (CALL C:\"Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat") - IF %ARCH%==win32-msvc14 (CALL C:\"Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat") - IF %ARCH%==win32-msvc15 (CALL C:\"Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 8.1) - C:\msys64\usr\bin\bash -lc "" build_script: - C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER; git clone https://github.com/coin-or/COIN-OR-OptimizationSuite COIN" - C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER/COIN; ./coin.install.sh fetch --no-prompt --main-proj=%APPVEYOR_PROJECT_NAME% --no-third-party" - C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER/COIN; export PATH=$ADD_PATH:$PATH; ./coin.install.sh build --no-prompt --main-proj=%APPVEYOR_PROJECT_NAME% --no-third-party --build=x86_64-w64-mingw32 $HOST_ARCH_ARG --verbosity=2 --test" test: off Vol-1.5.4/ltmain.sh0000755000175000017500000057753010430664070013157 0ustar sudipsudip# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $mkdir "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` if eval $echo \"$deplib\" 2>/dev/null \ | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $absdir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes ; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then $show "${rm}r $gentop" $run ${rm}r "$gentop" fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ char * find_executable (const char* wrapper) { int has_slash = 0; const char* p; const char* p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char* concat_name; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char* path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char* q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR(*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); return NULL; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: Vol-1.5.4/Data/0000755000175000017500000000000013434204224012162 5ustar sudipsudipVol-1.5.4/Data/Sample/0000755000175000017500000000000013434204224013403 5ustar sudipsudipVol-1.5.4/Data/Sample/app0110R.cor0000755000175000017500000001462611015552002015321 0ustar sudipsudipNAME MYSMPS ROWS N OBJECTRW L R0000001 L R0000002 L R0000003 L R0000004 L R0000005 E R0000006 E R0000007 E R0000008 E R0000009 E R0000010 E R0000011 E R0000012 E R0000013 E R0000014 E R0000015 E R0000016 E R0000017 E R0000018 E R0000019 E R0000020 E R0000021 E R0000022 E R0000023 E R0000024 E R0000025 COLUMNS C0000001 R0000001 1. R0000006 1. C0000002 R0000001 1. R0000007 1. C0000003 R0000001 1. R0000008 1. C0000004 R0000001 1. R0000009 1. C0000005 R0000002 1. R0000010 1. C0000006 R0000002 1. R0000011 1. C0000007 R0000002 1. R0000012 1. C0000008 R0000002 1. R0000013 1. C0000009 R0000003 1. R0000014 1. C0000010 R0000003 1. R0000015 1. C0000011 R0000003 1. R0000016 1. C0000012 R0000003 1. R0000017 1. C0000013 R0000004 1. R0000018 1. C0000014 R0000004 1. R0000019 1. C0000015 R0000004 1. R0000020 1. C0000016 R0000004 1. R0000021 1. C0000017 R0000005 1. R0000022 1. C0000018 R0000005 1. R0000023 1. C0000019 R0000005 1. R0000024 1. C0000020 R0000005 1. R0000025 1. C0000021 OBJECTRW 1. R0000006 -1. C0000021 R0000010 1. C0000022 OBJECTRW 2. R0000006 1. C0000023 OBJECTRW 2. R0000007 -1. C0000023 R0000011 1. C0000024 OBJECTRW 3. R0000007 1. C0000025 OBJECTRW 3. R0000008 -1. C0000025 R0000012 1. C0000026 OBJECTRW 2. R0000008 1. C0000027 OBJECTRW 4. R0000009 -1. C0000027 R0000013 1. C0000028 OBJECTRW 5. R0000009 1. C0000029 OBJECTRW 1. R0000010 -1. C0000029 R0000014 1. C0000030 OBJECTRW 2. R0000010 1. C0000031 OBJECTRW 2. R0000011 -1. C0000031 R0000015 1. C0000032 OBJECTRW 3. R0000011 1. C0000033 OBJECTRW 3. R0000012 -1. C0000033 R0000016 1. C0000034 OBJECTRW 2. R0000012 1. C0000035 OBJECTRW 4. R0000013 -1. C0000035 R0000017 1. C0000036 OBJECTRW 5. R0000013 1. C0000037 OBJECTRW 1. R0000014 -1. C0000037 R0000018 1. C0000038 OBJECTRW 2. R0000014 1. C0000039 OBJECTRW 2. R0000015 -1. C0000039 R0000019 1. C0000040 OBJECTRW 3. R0000015 1. C0000041 OBJECTRW 3. R0000016 -1. C0000041 R0000020 1. C0000042 OBJECTRW 2. R0000016 1. C0000043 OBJECTRW 4. R0000017 -1. C0000043 R0000021 1. C0000044 OBJECTRW 5. R0000017 1. C0000045 OBJECTRW 1. R0000018 -1. C0000045 R0000022 1. C0000046 OBJECTRW 2. R0000018 1. C0000047 OBJECTRW 2. R0000019 -1. C0000047 R0000023 1. C0000048 OBJECTRW 3. R0000019 1. C0000049 OBJECTRW 3. R0000020 -1. C0000049 R0000024 1. C0000050 OBJECTRW 2. R0000020 1. C0000051 OBJECTRW 4. R0000021 -1. C0000051 R0000025 1. C0000052 OBJECTRW 5. R0000021 1. C0000053 OBJECTRW 1. R0000022 -1. C0000054 OBJECTRW 2. R0000022 1. C0000055 OBJECTRW 2. R0000023 -1. C0000056 OBJECTRW 3. R0000023 1. C0000057 OBJECTRW 3. R0000024 -1. C0000058 OBJECTRW 2. R0000024 1. C0000059 OBJECTRW 4. R0000025 -1. C0000060 OBJECTRW 5. R0000025 1. RHS RHS R0000001 3. R0000002 6. RHS R0000003 10. R0000004 2000. RHS R0000005 18. R0000006 1. RHS R0000007 1. R0000008 1. RHS R0000009 1. R0000010 2.667 RHS R0000011 1.667 R0000012 2.667 RHS R0000013 3.333 R0000014 2.667 RHS R0000015 2. R0000016 3. RHS R0000017 3. R0000018 2.667 RHS R0000019 2.667 R0000020 2.667 RHS R0000021 2.667 R0000022 2.667 RHS R0000023 2.333 R0000024 2.333 RHS R0000025 2.333 BOUNDS UP BOUND C0000029 51. UP BOUND C0000030 51. UP BOUND C0000031 51. UP BOUND C0000032 51. ENDATA Vol-1.5.4/Data/Sample/finnis.mps0000644000175000017500000030727410662211140015422 0ustar sudipsudipNAME FINNIS (PTABLES3) ROWS N PRICER G 1BALHCO G 1BALCOK G 1BALOIK G 1BALOIL G 1BALGSL G 1BALDSL G 1BALDSH G 1BALDSR G 1BALGAK G 1BALGAS G 1BALALC G 1BALHYD G 1BALURN G 1BALUDP G 1BALPLU G 1BALMAG G 1BALAGR G 1BALAGS G 1BALLMF G 1BALLMS G 2BALHCO G 2BALCOK G 2BALOIK G 2BALOIL G 2BALGSL G 2BALDSL G 2BALDSH G 2BALDSR G 2BALGAK G 2BALGAS G 2BALALC G 2BALHYD G 2BALURN G 2BALUDP G 2BALPLU G 2BALMAG G 2BALAGR G 2BALAGS G 2BALLMF G 2BALLMS G 3BALHCO G 3BALCOK G 3BALOIK G 3BALOIL G 3BALGSL G 3BALDSL G 3BALDSH G 3BALDSR G 3BALGAK G 3BALGAS G 3BALALC G 3BALHYD G 3BALURN G 3BALUDP G 3BALPLU G 3BALMAG G 3BALAGR G 3BALAGS G 3BALLMF G 3BALLMS E 1CPTEC3 E 1CPTEP1 E 1CPTE14 E 1CPTE22 E 1CPTE23 E 1CPTE31 E 1CPTE51 E 1CPTS06 E 1CPTS08 E 1CPTS09 E 1CPTS21 E 1CPTS23 E 1CPTS28 E 2CPTEC3 E 2CPTEP1 E 2CPTE14 E 2CPTE22 E 2CPTE23 E 2CPTE31 E 2CPTE35 E 2CPTE51 E 2CPTS06 E 2CPTS08 E 2CPTS09 E 2CPTS21 E 2CPTS23 E 2CPTS28 E 3CPTEC3 E 3CPTEP1 E 3CPTE14 E 3CPTE22 E 3CPTE23 E 3CPTE31 E 3CPTE35 E 3CPTE94 E 3CPTE60 E 3CPTE51 E 3CPTS01 E 3CPTS04 E 3CPTS06 E 3CPTS08 E 3CPTS09 E 3CPTS21 E 3CPTS23 E 3CPTS28 E 3CPTS29 E 3CPTS80 L 1CPTIJ6 L 1CPTIJ7 L 1CPTIJ8 L 1CPTR20 L 1CPTR21 L 1CPTR23 L 1CPTR27 L 1CPTR28 L 1CPTR2D L 1CPTR2L L 1CPTRT0 L 1CPTRT1 L 1CPTRT3 L 1CPTRT7 L 1CPTRT8 L 1CPTR50 L 1CPTR51 L 1CPTR53 L 1CPTR57 L 1CPTR58 L 1CPTR5H L 1CPTR5L L 1CPTR5M L 2CPTIJ6 L 2CPTIJ7 L 2CPTIJ8 L 2CPTR20 L 2CPTR21 L 2CPTR23 L 2CPTR27 L 2CPTR28 L 2CPTR2A L 2CPTR2B L 2CPTR2C L 2CPTR2D L 2CPTR2L L 2CPTRT0 L 2CPTRT1 L 2CPTRT3 L 2CPTRT7 L 2CPTRT8 L 2CPTRTB L 2CPTRTC L 2CPTR50 L 2CPTR51 L 2CPTR53 L 2CPTR57 L 2CPTR58 L 2CPTR5A L 2CPTR5H L 2CPTR5L L 2CPTR5M L 3CPTIJ6 L 3CPTIJ7 L 3CPTIJ8 L 3CPTR20 L 3CPTR21 L 3CPTR23 L 3CPTR27 L 3CPTR28 L 3CPTR2A L 3CPTR2B L 3CPTR2C L 3CPTR2D L 3CPTR2L L 3CPTRT0 L 3CPTRT1 L 3CPTRT3 L 3CPTRT7 L 3CPTRT8 L 3CPTRTB L 3CPTRTC L 3CPTR50 L 3CPTR51 L 3CPTR53 L 3CPTR57 L 3CPTR58 L 3CPTR5A L 3CPTR5C L 3CPTR5H L 3CPTR5L L 3CPTR5M L 3GRCE35 L 2GRCT80 L 3GRCT80 G 1DEMI1 G 1DEMII G 1DEMIJ G 1DEMNY G 1DEMR2 G 1DEMRT G 1DEMR5 G 1DEMRD G 1DEMT8 G 1DEMTX G 2DEMI1 G 2DEMII G 2DEMIJ G 2DEMNY G 2DEMR2 G 2DEMRT G 2DEMR5 G 2DEMRD G 2DEMT8 G 2DEMTX G 3DEMI1 G 3DEMII G 3DEMIJ G 3DEMNY G 3DEMR2 G 3DEMRT G 3DEMR5 G 3DEMRD G 3DEMT8 G 3DEMTX L 1UTLS06 L 1UTLS08 L 1UTLS09 L 1UTLS21 L 1UTLS23 L 1UTLS28 L 2UTLS06 L 2UTLS08 L 2UTLS09 L 2UTLS21 L 2UTLS23 L 2UTLS28 L 3UTLS01 L 3UTLS04 L 3UTLS06 L 3UTLS08 L 3UTLS09 L 3UTLS21 L 3UTLS23 L 3UTLS28 L 3UTLS29 L 3UTLS80 G 1UTLEC1 G 1UTLEC2 G 1UTLEP1 G 1UTLE22 G 1UTLE23 G 2UTLEC1 G 2UTLEC2 G 2UTLEP1 G 2UTLE22 G 2UTLE23 G 3UTLEC1 G 3UTLEC2 G 3UTLEP1 G 3UTLE22 G 3UTLE23 G 1BNDEP1L G 2BNDEP1L G 1BALEWD G 1BALEWN G 1BALEID G 1BALEIN G 1BALESD G 1BALESN G 2BALEWD G 2BALEWN G 2BALEID G 2BALEIN G 2BALESD G 2BALESN G 3BALEWD G 3BALEWN G 3BALEID G 3BALEIN G 3BALESD G 3BALESN G 1EPKWD G 1EPKSD G 2EPKWD G 2EPKSD G 3EPKWD G 3EPKSD L 1EWDEC1 L 1EWDEC2 L 1EWDEC3 L 1EWDEP1 L 1EWDE14 L 1EWDE22 L 1EWDE23 L 1EWDE31 L 1EWDE51 L 1EIDEC1 L 1EIDEC2 L 1EIDEC3 L 1EIDEP1 L 1EIDE14 L 1EIDE22 L 1EIDE23 L 1EIDE31 L 1EIDE51 L 1ESDEC1 L 1ESDEC2 L 1ESDEC3 L 1ESDEP1 L 1ESDE14 L 1ESDE22 L 1ESDE23 L 1ESDE31 L 1ESDE51 L 2EWDEC1 L 2EWDEC2 L 2EWDEC3 L 2EWDEP1 L 2EWDE14 L 2EWDE22 L 2EWDE23 L 2EWDE31 L 2EWDE35 L 2EWDE51 L 2EIDEC1 L 2EIDEC2 L 2EIDEC3 L 2EIDEP1 L 2EIDE14 L 2EIDE22 L 2EIDE23 L 2EIDE31 L 2EIDE35 L 2EIDE51 L 2ESDEC1 L 2ESDEC2 L 2ESDEC3 L 2ESDEP1 L 2ESDE14 L 2ESDE22 L 2ESDE23 L 2ESDE31 L 2ESDE35 L 2ESDE51 L 3EWDEC1 L 3EWDEC2 L 3EWDEC3 L 3EWDEP1 L 3EWDE14 L 3EWDE22 L 3EWDE23 L 3EWDE31 L 3EWDE35 L 3EWDE94 L 3EWDE60 L 3EWDE51 L 3EIDEC1 L 3EIDEC2 L 3EIDEC3 L 3EIDEP1 L 3EIDE14 L 3EIDE22 L 3EIDE23 L 3EIDE31 L 3EIDE35 L 3EIDE94 L 3EIDE60 L 3EIDE51 L 3ESDEC1 L 3ESDEC2 L 3ESDEC3 L 3ESDEP1 L 3ESDE14 L 3ESDE22 L 3ESDE23 L 3ESDE31 L 3ESDE35 L 3ESDE94 L 3ESDE60 L 3ESDE51 L 1EWNEC1 L 1EWNEC2 L 1EWNEC3 L 1EWNEP1 L 1EWNE14 L 1EWNE31 L 1EINEC1 L 1EINEC2 L 1EINEC3 L 1EINEP1 L 1EINE14 L 1EINE31 L 1ESNEC1 L 1ESNEC2 L 1ESNEC3 L 1ESNEP1 L 1ESNE14 L 1ESNE31 L 2EWNEC1 L 2EWNEC2 L 2EWNEC3 L 2EWNEP1 L 2EWNE14 L 2EWNE31 L 2EWNE35 L 2EINEC1 L 2EINEC2 L 2EINEC3 L 2EINEP1 L 2EINE14 L 2EINE31 L 2EINE35 L 2ESNEC1 L 2ESNEC2 L 2ESNEC3 L 2ESNEP1 L 2ESNE14 L 2ESNE31 L 2ESNE35 L 3EWNEC1 L 3EWNEC2 L 3EWNEC3 L 3EWNEP1 L 3EWNE14 L 3EWNE31 L 3EWNE35 L 3EWNE94 L 3EWNE60 L 3EINEC1 L 3EINEC2 L 3EINEC3 L 3EINEP1 L 3EINE14 L 3EINE31 L 3EINE35 L 3EINE94 L 3EINE60 L 3ESNEC1 L 3ESNEC2 L 3ESNEC3 L 3ESNEP1 L 3ESNE14 L 3ESNE31 L 3ESNE35 L 3ESNE94 L 3ESNE60 L 1BASW L 1BASI L 1BASS L 2BASW L 2BASI L 2BASS L 3BASW L 3BASI L 3BASS G 2BALDHW G 2BALDHI G 2BALDHS G 3BALDHW G 3BALDHI G 3BALDHS G 2HPKW G 3HPKW G 1RAT001 G 2RAT001 G 3RAT001 G 1RAT002 G 2RAT002 G 3RAT002 G 1RAT003 G 2RAT003 G 3RAT003 L 1RAT004 L 2RAT004 L 3RAT004 L 1RAT005 L 2RAT005 L 3RAT005 L 1RAT006 L 2RAT006 L 3RAT006 L 1RAT007 L 2RAT007 L 3RAT007 L 2RAT008 L 3RAT008 L 2RAT009 L 3RAT009 L 1RAT010 L 2RAT010 L 3RAT010 L 1RAT011 L 2RAT011 L 3RAT011 L 2RAT012 L 3RAT012 L 1RAT013 L 2RAT013 L 3RAT013 COLUMNS 1MINHCO1 PRICER 10.330608 1BALHCO 1. 1MINHCO1 1BALEWD -.000659 1BALEWN -.000659 1MINHCO1 1BALEID -.000857 1BALEIN -.000461 1MINHCO1 1BALESD -.002834 1BALESN -.00112 1MINHCO1 1EPKWD -.00659 1EPKSD -.00659 2MINHCO1 PRICER 9.170958 2BALHCO 1. 2MINHCO1 2BALEWD -.000659 2BALEWN -.000659 2MINHCO1 2BALEID -.000857 2BALEIN -.000461 2MINHCO1 2BALESD -.002834 2BALESN -.00112 2MINHCO1 2EPKWD -.00659 2EPKSD -.00659 3MINHCO1 PRICER 7.93182 3BALHCO 1. 3MINHCO1 3BALEWD -.000659 3BALEWN -.000659 3MINHCO1 3BALEID -.000857 3BALEIN -.000461 3MINHCO1 3BALESD -.002834 3BALESN -.00112 3MINHCO1 3EPKWD -.00659 3EPKSD -.00659 1IMPHCO1 PRICER 16.167389 1BALHCO 1. 2IMPHCO1 PRICER 13.355014 2BALHCO 1. 3IMPHCO1 PRICER 10.93149 3BALHCO 1. 1EXPHCO1 PRICER -16.167389 1BALHCO -1. 2EXPHCO1 PRICER -13.355014 2BALHCO -1. 3EXPHCO1 PRICER -10.93149 3BALHCO -1. 1IMPOIL1 PRICER 27.995941 1BALOIL 1. 2IMPOIL1 PRICER 22.001038 2BALOIL 1. 3IMPOIL1 PRICER 17.248093 3BALOIL 1. 1EXPOIL1 PRICER -27.995941 1BALOIL -1. 2EXPOIL1 PRICER -22.001038 2BALOIL -1. 3EXPOIL1 PRICER -17.248093 3BALOIL -1. 1STKOIK1 1BALOIK 1. 1RAT011 -1. 2STKOIK1 2BALOIK 1. 1BALOIK -1. 2STKOIK1 2RAT011 -1. 3STKOIK1 3BALOIK 1. 2BALOIK -1. 3STKOIK1 3RAT011 -1. ZSTKOIK1 3BALOIK -1. 1EXPDSH1 1BALDSH -1. 2EXPDSH1 2BALDSH -1. 3EXPDSH1 3BALDSH -1. 1EXPDSL1 1BALDSL -1. 2EXPDSL1 2BALDSL -1. 3EXPDSL1 3BALDSL -1. 1IMPGAS1 PRICER 19.886414 1BALGAS .95 2IMPGAS1 PRICER 18.295593 2BALGAS .95 3IMPGAS1 PRICER 16.238586 3BALGAS .95 1EXPGAS1 PRICER -19.886414 1BALGAS -1. 2EXPGAS1 PRICER -18.295593 2BALGAS -1. 3EXPGAS1 PRICER -16.238586 3BALGAS -1. 1STKGAK1 1BALGAK 1. 1RAT010 -1. 2STKGAK1 2BALGAK 1. 1BALGAK -1. 2STKGAK1 2RAT010 -1. 3STKGAK1 3BALGAK 1. 2BALGAK -1. 3STKGAK1 3RAT010 -1. ZSTKGAK1 3BALGAK -1. 1IMPURN1 PRICER .537191 1BALURN 1. 2IMPURN1 PRICER .401422 2BALURN 1. 3IMPURN1 PRICER .299967 3BALURN 1. 1STKURN1 1BALURN 1. 2STKURN1 2BALURN 1. 1BALURN -1. 3STKURN1 3BALURN 1. 2BALURN -1. ZSTKURN1 3BALURN -1. 1STKUDP1 1BALUDP 1. 2STKUDP1 2BALUDP 1. 1BALUDP -1. 3STKUDP1 3BALUDP 1. 2BALUDP -1. ZSTKUDP1 3BALUDP -1. 1STKPLU1 1BALPLU 1. 2STKPLU1 2BALPLU 1. 1BALPLU -1. 3STKPLU1 3BALPLU 1. 2BALPLU -1. ZSTKPLU1 3BALPLU -1. 1STKAGS1 1BALAGS 1. 2STKAGS1 2BALAGS 1. 1BALAGS -1. 3STKAGS1 3BALAGS 1. 2BALAGS -1. ZSTKAGS1 3BALAGS -1. 1STKLMS1 1BALLMS 1. 2STKLMS1 2BALLMS 1. 1BALLMS -1. 3STKLMS1 3BALLMS 1. 2BALLMS -1. ZSTKLMS1 3BALLMS -1. 1EC3INV PRICER 2240.95752 1CPTEC3 -1. 1EC3INV 2CPTEC3 -1. 3CPTEC3 -1. 2EC3INV PRICER 1269.021484 2CPTEC3 -1. 2EC3INV 3CPTEC3 -1. 3EC3INV PRICER 542.729248 3CPTEC3 -1. 1EP1INV PRICER 2188.71875 1CPTEP1 -1. 1EP1INV 2CPTEP1 -1. 3CPTEP1 -1. 2EP1INV PRICER 1239.439453 2CPTEP1 -1. 2EP1INV 3CPTEP1 -1. 3EP1INV PRICER 530.077637 3CPTEP1 -1. 1E14INV PRICER 1783.052734 1CPTE14 -1. 1E14INV 2CPTE14 -1. 3CPTE14 -1. 2E14INV PRICER 1009.716797 2CPTE14 -1. 2E14INV 3CPTE14 -1. 3E14INV PRICER 431.830811 3CPTE14 -1. 1E22INV PRICER 1260.778809 1CPTE22 -1. 1E22INV 2CPTE22 -1. 3CPTE22 -1. 2E22INV PRICER 713.960449 2CPTE22 -1. 2E22INV 3CPTE22 -1. 3E22INV PRICER 305.343506 3CPTE22 -1. 1E23INV PRICER 4029.3042 1CPTE23 -1. 1E23INV 2CPTE23 -1. 3CPTE23 -1. 2E23INV PRICER 2281.73584 1BALAGR -11.662 2E23INV 2CPTE23 -1. 3CPTE23 -1. 3E23INV PRICER 975.842285 2BALAGR -11.662 3E23INV 3CPTE23 -1. 1E31INV PRICER .00001 1CPTE31 -1. 1E31INV 2CPTE31 -1. 3CPTE31 -1. 2E31INV PRICER .00001 2CPTE31 -1. 2E31INV 3CPTE31 -1. 3E31INV PRICER .00001 3CPTE31 -1. 2E35INV PRICER .00001 2CPTE35 -1. 2E35INV 3CPTE35 -1. 3E35INV PRICER .00001 3CPTE35 -1. 3E94INV PRICER 369.621338 3CPTE94 -1. 3E60INV PRICER 721.590332 3CPTE60 -1. 1E51INV PRICER 814.03125 1CPTE51 -1. 1E51INV 2CPTE51 -1. 3CPTE51 -1. 2E51INV PRICER 460.973877 2CPTE51 -1. 2E51INV 3CPTE51 -1. 3E51INV PRICER 197.147232 3CPTE51 -1. 3S01INV PRICER 2.182532 3CPTS01 -1. 3S04INV PRICER 2.932184 3CPTS04 -1. 1S06INV 1CPTS06 -1. 2CPTS06 -1. 1S06INV 3CPTS06 -1. 2S06INV 2CPTS06 -1. 3CPTS06 -1. 3S06INV 3CPTS06 -1. 1S08INV PRICER 2.611933 1CPTS08 -1. 1S08INV 2CPTS08 -1. 3CPTS08 -1. 2S08INV PRICER 1.4791 2CPTS08 -1. 2S08INV 3CPTS08 -1. 3S08INV PRICER .632575 3CPTS08 -1. 1S09INV PRICER 6.203342 1CPTS09 -1. 1S09INV 2CPTS09 -1. 3CPTS09 -1. 2S09INV PRICER 3.512862 2CPTS09 -1. 2S09INV 3CPTS09 -1. 3S09INV PRICER 1.502365 3CPTS09 -1. 1S21INV PRICER 5.800726 1CPTS21 -1. 1S21INV 2CPTS21 -1. 3CPTS21 -1. 2S21INV PRICER 3.284866 2CPTS21 -1. 2S21INV 3CPTS21 -1. 3S21INV PRICER 1.404856 3CPTS21 -1. 1S23INV PRICER 5.273388 1CPTS23 -1. 1S23INV 2CPTS23 -1. 3CPTS23 -1. 2S23INV PRICER 2.986242 2CPTS23 -1. 2S23INV 3CPTS23 -1. 3S23INV PRICER 1.277142 3CPTS23 -1. 1S28INV PRICER 2.109354 1CPTS28 -1. 1S28INV 2CPTS28 -1. 3CPTS28 -1. 2S28INV PRICER 1.194496 2CPTS28 -1. 2S28INV 3CPTS28 -1. 3S28INV PRICER .510857 3CPTS28 -1. 3S29INV PRICER 1.532571 3CPTS29 -1. 3S80INV PRICER 1.870049 3CPTS80 -1. 1IJ6INV PRICER 1.43445 1CPTIJ6 -1. 1IJ6INV 2CPTIJ6 -1. 3CPTIJ6 -1. 2IJ6INV PRICER .812309 2CPTIJ6 -1. 2IJ6INV 3CPTIJ6 -1. 3IJ6INV PRICER .347404 3CPTIJ6 -1. 1IJ7INV PRICER 1.43445 1CPTIJ7 -1. 1IJ7INV 2CPTIJ7 -1. 3CPTIJ7 -1. 2IJ7INV PRICER .812309 2CPTIJ7 -1. 2IJ7INV 3CPTIJ7 -1. 3IJ7INV PRICER .347404 3CPTIJ7 -1. 1IJ8INV PRICER 4.944228 1CPTIJ8 -1. 1IJ8INV 2CPTIJ8 -1. 3CPTIJ8 -1. 2IJ8INV PRICER 2.799844 2CPTIJ8 -1. 2IJ8INV 3CPTIJ8 -1. 3IJ8INV PRICER 1.197424 3CPTIJ8 -1. 1R20INV PRICER 19.863083 1CPTR20 -1. 1R20INV 2CPTR20 -1. 3CPTR20 -1. 2R20INV PRICER 11.248174 2CPTR20 -1. 2R20INV 3CPTR20 -1. 3R20INV PRICER 4.810567 3CPTR20 -1. 1R21INV PRICER 11.053495 1CPTR21 -1. 1R21INV 2CPTR21 -1. 3CPTR21 -1. 2R21INV PRICER 6.259433 2CPTR21 -1. 2R21INV 3CPTR21 -1. 3R21INV PRICER 2.677005 3CPTR21 -1. 1R23INV PRICER 53.349091 1CPTR23 -1. 1R23INV 2CPTR23 -1. 3CPTR23 -1. 2R23INV PRICER 30.210815 2CPTR23 -1. 2R23INV 3CPTR23 -1. 3R23INV PRICER 12.920424 3CPTR23 -1. 1R27INV PRICER 39.374603 1CPTR27 -1. 1R27INV 2CPTR27 -1. 3CPTR27 -1. 2R27INV PRICER 22.297272 2CPTR27 -1. 2R27INV 3CPTR27 -1. 3R27INV PRICER 9.536002 3CPTR27 -1. 1R28INV PRICER 54.491653 1CPTR28 -1. 1R28INV 2CPTR28 -1. 3CPTR28 -1. 2R28INV PRICER 30.857819 2CPTR28 -1. 2R28INV 3CPTR28 -1. 3R28INV PRICER 13.197139 3CPTR28 -1. 2R2AINV PRICER .00001 2CPTR2A -1. 2R2AINV 3CPTR2A -1. 3R2AINV PRICER .00001 3CPTR2A -1. 2R2BINV PRICER .00001 2CPTR2B -1. 2R2BINV 3CPTR2B -1. 3R2BINV PRICER .00001 3CPTR2B -1. 2R2CINV PRICER 20.4711 2CPTR2C -1. 2R2CINV 3CPTR2C -1. 3R2CINV PRICER 8.755 3CPTR2C -1. 1R2DINV PRICER .00001 1CPTR2D -1. 1R2DINV 2CPTR2D -1. 3CPTR2D -1. 2R2DINV PRICER .00001 2CPTR2D -1. 2R2DINV 3CPTR2D -1. 3R2DINV PRICER .00001 3CPTR2D -1. 1R2LINV PRICER 55.615082 1CPTR2L -1. 1R2LINV 2CPTR2L -1. 3CPTR2L -1. 2R2LINV PRICER 31.494003 2CPTR2L -1. 2R2LINV 3CPTR2L -1. 3R2LINV PRICER 13.469211 3CPTR2L -1. 1RT0INV PRICER 19.863083 1CPTRT0 -1. 1RT0INV 2CPTRT0 -1. 3CPTRT0 -1. 2RT0INV PRICER 11.248174 2CPTRT0 -1. 2RT0INV 3CPTRT0 -1. 3RT0INV PRICER 4.810567 3CPTRT0 -1. 1RT1INV PRICER 11.053495 1CPTRT1 -1. 1RT1INV 2CPTRT1 -1. 3CPTRT1 -1. 2RT1INV PRICER 6.259433 2CPTRT1 -1. 2RT1INV 3CPTRT1 -1. 3RT1INV PRICER 2.677005 3CPTRT1 -1. 1RT3INV PRICER 53.349091 1CPTRT3 -1. 1RT3INV 2CPTRT3 -1. 3CPTRT3 -1. 2RT3INV PRICER 30.210815 2CPTRT3 -1. 2RT3INV 3CPTRT3 -1. 3RT3INV PRICER 12.920424 3CPTRT3 -1. 1RT7INV PRICER 39.374603 1CPTRT7 -1. 1RT7INV 2CPTRT7 -1. 3CPTRT7 -1. 2RT7INV PRICER 22.297272 2CPTRT7 -1. 2RT7INV 3CPTRT7 -1. 3RT7INV PRICER 9.536002 3CPTRT7 -1. 1RT8INV PRICER 54.491653 1CPTRT8 -1. 1RT8INV 2CPTRT8 -1. 3CPTRT8 -1. 2RT8INV PRICER 30.857819 2CPTRT8 -1. 2RT8INV 3CPTRT8 -1. 3RT8INV PRICER 13.197139 3CPTRT8 -1. 2RTBINV PRICER .00001 2CPTRTB -1. 2RTBINV 3CPTRTB -1. 3RTBINV PRICER .00001 3CPTRTB -1. 2RTCINV PRICER 20.4711 2CPTRTC -1. 2RTCINV 3CPTRTC -1. 3RTCINV PRICER 8.755 3CPTRTC -1. 1R50INV PRICER 17.226379 1CPTR50 -1. 1R50INV 2CPTR50 -1. 3CPTR50 -1. 2R50INV PRICER 9.755052 2CPTR50 -1. 2R50INV 3CPTR50 -1. 3R50INV PRICER 4.172 3CPTR50 -1. 1R51INV PRICER 8.560434 1CPTR51 -1. 1R51INV 2CPTR51 -1. 3CPTR51 -1. 2R51INV PRICER 4.847649 2CPTR51 -1. 2R51INV 3CPTR51 -1. 3R51INV PRICER 2.073219 3CPTR51 -1. 1R53INV PRICER 53.349091 1CPTR53 -1. 1R53INV 2CPTR53 -1. 3CPTR53 -1. 2R53INV PRICER 30.210815 2CPTR53 -1. 2R53INV 3CPTR53 -1. 3R53INV PRICER 12.920424 3CPTR53 -1. 1R57INV PRICER 39.374603 1CPTR57 -1. 1R57INV 2CPTR57 -1. 3CPTR57 -1. 2R57INV PRICER 22.297272 2CPTR57 -1. 2R57INV 3CPTR57 -1. 3R57INV PRICER 9.536002 3CPTR57 -1. 1R58INV PRICER 54.491653 1CPTR58 -1. 1R58INV 2CPTR58 -1. 3CPTR58 -1. 2R58INV PRICER 30.857819 2CPTR58 -1. 2R58INV 3CPTR58 -1. 3R58INV PRICER 13.197139 3CPTR58 -1. 2R5AINV PRICER .00001 2CPTR5A -1. 2R5AINV 3CPTR5A -1. 3R5AINV PRICER .00001 3CPTR5A -1. 3R5CINV PRICER 8.755 3CPTR5C -1. 1R5HINV PRICER 101.799759 1CPTR5H -1. 1R5HINV 2CPTR5H -1. 3CPTR5H -1. 2R5HINV PRICER 57.647705 2CPTR5H -1. 2R5HINV 3CPTR5H -1. 3R5HINV PRICER 24.654495 3CPTR5H -1. 1R5LINV PRICER 17.120865 1CPTR5L -1. 1R5LINV 2CPTR5L -1. 3CPTR5L -1. 2R5LINV PRICER 9.695297 2CPTR5L -1. 2R5LINV 3CPTR5L -1. 3R5LINV PRICER 4.146439 3CPTR5L -1. 1R5MINV PRICER 17.120865 1CPTR5M -1. 1R5MINV 2CPTR5M -1. 3CPTR5M -1. 2R5MINV PRICER 9.695297 2CPTR5M -1. 2R5MINV 3CPTR5M -1. 3R5MINV PRICER 4.146439 3CPTR5M -1. 1I1YCAP 1BALHCO -.0135 1BALCOK -.4268 1I1YCAP 1BALDSL -.0323 1BALDSH -.1983 1I1YCAP 1BALGAS -.2186 1DEMI1 1. 1I1YCAP 1BALEWD -.014242 1BALEWN -.01104 1I1YCAP 1BALEID -.016781 1BALEIN -.006182 1I1YCAP 1BALESD -.048907 1BALESN -.013248 1I1YCAP 1EPKWD -.142416 1EPKSD -.113738 2I1YCAP 2BALHCO -.0165 2BALCOK -.5198 2I1YCAP 2BALDSL -.0212 2BALDSH -.1305 2I1YCAP 2BALGAS -.1977 2DEMI1 1. 2I1YCAP 2BALEWD -.014758 2BALEWN -.01144 2I1YCAP 2BALEID -.017389 2BALEIN -.006406 2I1YCAP 2BALESD -.050679 2BALESN -.013728 2I1YCAP 2EPKWD -.147576 2EPKSD -.117859 3I1YCAP 3BALHCO -.0194 3BALCOK -.6166 3I1YCAP 3BALDSL -.0102 3BALDSH -.0628 3I1YCAP 3BALGAS -.1777 3DEMI1 1. 3I1YCAP 3BALEWD -.015261 3BALEWN -.01183 3I1YCAP 3BALEID -.017982 3BALEIN -.006625 3I1YCAP 3BALESD -.052407 3BALESN -.014196 3I1YCAP 3EPKWD -.152607 3EPKSD -.121876 1IIYCAP 1BALHCO -.1313 1BALCOK -.027 1IIYCAP 1BALDSL -.2811 1BALGAS -.2555 1IIYCAP 1DEMII 1. 1BALEWD -.039358 1IIYCAP 1BALEWN -.03051 1BALEID -.046375 1IIYCAP 1BALEIN -.017086 1BALESD -.135159 1IIYCAP 1BALESN -.036612 1EPKWD -.393579 1IIYCAP 1EPKSD -.314324 2IIYCAP 2BALHCO -.1549 2BALCOK -.0318 2IIYCAP 2BALDSL -.2619 2BALGAS -.2453 2IIYCAP 2DEMII 1. 2BALEWD -.039487 2IIYCAP 2BALEWN -.03061 2BALEID -.046527 2IIYCAP 2BALEIN -.017142 2BALESD -.135602 2IIYCAP 2BALESN -.036732 2EPKWD -.394869 2IIYCAP 2EPKSD -.315354 3IIYCAP 3BALHCO -.1852 3BALCOK -.038 3IIYCAP 3BALDSL -.2695 3BALGAS -.2048 3IIYCAP 3DEMII 1. 3BALEWD -.03901 3IIYCAP 3BALEWN -.03024 3BALEID -.045965 3IIYCAP 3BALEIN -.016934 3BALESD -.133963 3IIYCAP 3BALESN -.036288 3EPKWD -.390096 3IIYCAP 3EPKSD -.311542 1IJ6CAP PRICER 15.909122 1BALDSH -1.818181 1IJ6CAP 1CPTIJ6 1. 1DEMIJ 1. 2IJ6CAP PRICER 11.88827 2BALDSH -1.818181 2IJ6CAP 2CPTIJ6 1. 2DEMIJ 1. 3IJ6CAP PRICER 8.88363 3BALDSH -1.818181 3IJ6CAP 3CPTIJ6 1. 3DEMIJ 1. 1IJ7CAP PRICER 39.002 1BALGAS -1.538461 1IJ7CAP 1CPTIJ7 1. 1DEMIJ 1. 2IJ7CAP PRICER 29.144684 2BALGAS -1.538461 2IJ7CAP 2CPTIJ7 1. 2DEMIJ 1. 3IJ7CAP PRICER 21.778656 3BALGAS -1.538461 3IJ7CAP 3CPTIJ7 1. 3DEMIJ 1. 1IJ8CAP PRICER 11.053747 1BALHCO -2. 1IJ8CAP 1CPTIJ8 1. 1DEMIJ 1. 2IJ8CAP PRICER 8.260037 2BALHCO -2. 2IJ8CAP 2CPTIJ8 1. 2DEMIJ 1. 3IJ8CAP PRICER 6.172396 3BALHCO -2. 3IJ8CAP 3CPTIJ8 1. 3DEMIJ 1. 1NYYCAP 1BALGSL -.2795 1BALDSH -.4192 1NYYCAP 1BALGAS -.3013 1DEMNY 1. 2NYYCAP 2BALGSL -.285 2BALDSH -.4275 2NYYCAP 2BALGAS -.2875 2DEMNY 1. 3NYYCAP 3BALGSL -.2915 3BALDSH -.4373 3NYYCAP 3BALGAS -.2712 3DEMNY 1. 1R20CAP PRICER 7.231423 1CPTR20 1. 1R20CAP 1DEMR2 1. 1BALEWN -.482222 1R20CAP 1BALEIN -.345555 1BALESN -.283333 2R20CAP PRICER 5.403763 2CPTR20 1. 2R20CAP 2DEMR2 1. 2BALEWN -.482222 2R20CAP 2BALEIN -.345555 2BALESN -.283333 3R20CAP PRICER 4.038016 3CPTR20 1. 3R20CAP 3DEMR2 1. 3BALEWN -.482222 3R20CAP 3BALEIN -.345555 3BALESN -.283333 1R21CAP PRICER 6.869854 1CPTR21 1. 1R21CAP 1DEMR2 1. 1BALEWD -.385555 1R21CAP 1BALEWN -.096667 1BALEID -.276667 1R21CAP 1BALEIN -.068889 1BALESD -.226667 1R21CAP 1BALESN -.056667 1EPKWD -3.855558 1R21CAP 1EPKSD -.527132 1RAT004 .311 2R21CAP PRICER 5.133575 2CPTR21 1. 2R21CAP 2DEMR2 1. 2BALEWD -.385555 2R21CAP 2BALEWN -.096667 2BALEID -.276667 2R21CAP 2BALEIN -.068889 2BALESD -.226667 2R21CAP 2BALESN -.056667 2EPKWD -3.855558 2R21CAP 2EPKSD -.527132 2RAT004 .314 3R21CAP PRICER 3.836116 3CPTR21 1. 3R21CAP 3DEMR2 1. 3BALEWD -.385555 3R21CAP 3BALEWN -.096667 3BALEID -.276667 3R21CAP 3BALEIN -.068889 3BALESD -.226667 3R21CAP 3BALESN -.056667 3EPKWD -3.855558 3R21CAP 3EPKSD -.527132 3RAT004 .317 1R23CAP PRICER 15.416441 1BALDSL -1.538461 1R23CAP 1CPTR23 1. 1DEMR2 1. 1R23CAP 1RAT005 .311 2R23CAP PRICER 11.520109 2BALDSL -1.538461 2R23CAP 2CPTR23 1. 2DEMR2 1. 2R23CAP 2RAT005 .314 3R23CAP PRICER 8.608518 3BALDSL -1.538461 3R23CAP 3CPTR23 1. 3DEMR2 1. 3R23CAP 3RAT005 .317 1R27CAP PRICER 19.469208 1BALGAS -1.538461 1R27CAP 1CPTR27 1. 1DEMR2 1. 1R27CAP 1RAT006 .311 2R27CAP PRICER 14.548593 2BALGAS -1.538461 2R27CAP 2CPTR27 1. 2DEMR2 1. 2R27CAP 2RAT006 .314 3R27CAP PRICER 10.871583 3BALGAS -1.538461 3R27CAP 3CPTR27 1. 3DEMR2 1. 3R27CAP 3RAT006 .317 1R28CAP PRICER 31.92157 1BALHCO -2. 1R28CAP 1CPTR28 1. 1DEMR2 1. 1R28CAP 1RAT007 .311 2R28CAP PRICER 23.853745 2BALHCO -2. 2R28CAP 2CPTR28 1. 2DEMR2 1. 2R28CAP 2RAT007 .314 3R28CAP PRICER 17.824951 3BALHCO -2. 3R28CAP 3CPTR28 1. 3DEMR2 1. 3R28CAP 3RAT007 .317 2R2ACAP PRICER 6.947694 2CPTR2A 1. 2R2ACAP 2DEMR2 1. 2BALEWD -.144583 2R2ACAP 2BALEWN -.03625 2BALEID -.10375 2R2ACAP 2BALEIN -.025833 2BALESD -.085 2R2ACAP 2BALESN -.02125 2EPKWD -1.445833 2R2ACAP 2EPKSD -.197674 2RAT008 .314 3R2ACAP PRICER 5.191734 3CPTR2A 1. 3R2ACAP 3DEMR2 1. 3BALEWD -.144583 3R2ACAP 3BALEWN -.03625 3BALEID -.10375 3R2ACAP 3BALEIN -.025833 3BALESD -.085 3R2ACAP 3BALESN -.02125 3EPKWD -1.445833 3R2ACAP 3EPKSD -.197674 3RAT008 .317 2R2BCAP PRICER 11.901143 2BALGAS -.833333 2R2BCAP 2CPTR2B 1. 2DEMR2 1. 2R2BCAP 2RAT009 .314 3R2BCAP PRICER 8.862661 3BALGAS -.826447 3R2BCAP 3CPTR2B 1. 3DEMR2 1. 3R2BCAP 3RAT009 .317 2R2CCAP PRICER 9.263595 2CPTR2C 1. 2R2CCAP 2DEMR2 1. 2BALDHW -.563636 2R2CCAP 2BALDHI -.403896 2BALDHS -.331169 2R2CCAP 2HPKW -2.818182 2RAT012 .314 3R2CCAP PRICER 6.922315 3CPTR2C 1. 3R2CCAP 3DEMR2 1. 3BALDHW -.563636 3R2CCAP 3BALDHI -.403896 3BALDHS -.331169 3R2CCAP 3HPKW -2.818182 3RAT012 .317 1R2DCAP 1CPTR2D 1. 1DEMR2 1. 1R2DCAP 1RAT002 -1.8 2R2DCAP 2CPTR2D 1. 2DEMR2 1. 2R2DCAP 2RAT002 -1.8 3R2DCAP 3CPTR2D 1. 3DEMR2 1. 3R2DCAP 3RAT002 -1.8 1R2LCAP PRICER 14.772768 1CPTR2L 1. 1R2LCAP 1DEMR2 1. 1BALEWD -.347 1R2LCAP 1BALEWN -.087 1BALEID -.249 1R2LCAP 1BALEIN -.062 1BALESD -.204 1R2LCAP 1BALESN -.051 1EPKWD -3.47 1R2LCAP 1EPKSD -.474419 1RAT002 1. 2R2LCAP PRICER 11.039117 2CPTR2L 1. 2R2LCAP 2DEMR2 1. 2BALEWD -.347 2R2LCAP 2BALEWN -.087 2BALEID -.249 2R2LCAP 2BALEIN -.062 2BALESD -.204 2R2LCAP 2BALESN -.051 2EPKWD -3.47 2R2LCAP 2EPKSD -.474419 2RAT002 1. 3R2LCAP PRICER 8.249092 3CPTR2L 1. 3R2LCAP 3DEMR2 1. 3BALEWD -.347 3R2LCAP 3BALEWN -.087 3BALEID -.249 3R2LCAP 3BALEIN -.062 3BALESD -.204 3R2LCAP 3BALESN -.051 3EPKWD -3.47 3R2LCAP 3EPKSD -.474419 3RAT002 1. 1R2YCAP 1BALHCO -.923936 1BALDSL -.114623 1R2YCAP 1BALGAS -1.068479 1DEMR2 1. 2R2YCAP 2BALHCO -.54554 2BALDSL -.072151 2R2YCAP 2BALGAS -1.256371 2DEMR2 1. 3R2YCAP 3BALHCO -.418028 3BALDSL -.058718 3R2YCAP 3BALGAS -1.318908 3DEMR2 1. 1RT0CAP PRICER 7.231423 1CPTRT0 1. 1RT0CAP 1DEMRT 1. 1BALEWN -.482222 1RT0CAP 1BALEIN -.345555 1BALESN -.283333 2RT0CAP PRICER 5.403763 2CPTRT0 1. 2RT0CAP 2DEMRT 1. 2BALEWN -.482222 2RT0CAP 2BALEIN -.345555 2BALESN -.283333 3RT0CAP PRICER 4.038016 3CPTRT0 1. 3RT0CAP 3DEMRT 1. 3BALEWN -.482222 3RT0CAP 3BALEIN -.345555 3BALESN -.283333 1RT1CAP PRICER 6.869854 1CPTRT1 1. 1RT1CAP 1DEMRT 1. 1BALEWD -.385555 1RT1CAP 1BALEWN -.096667 1BALEID -.276667 1RT1CAP 1BALEIN -.068889 1BALESD -.226667 1RT1CAP 1BALESN -.056667 1EPKWD -3.855558 1RT1CAP 1EPKSD -.527132 2RT1CAP PRICER 5.133575 2CPTRT1 1. 2RT1CAP 2DEMRT 1. 2BALEWD -.385555 2RT1CAP 2BALEWN -.096667 2BALEID -.276667 2RT1CAP 2BALEIN -.068889 2BALESD -.226667 2RT1CAP 2BALESN -.056667 2EPKWD -3.855558 2RT1CAP 2EPKSD -.527132 3RT1CAP PRICER 3.836116 3CPTRT1 1. 3RT1CAP 3DEMRT 1. 3BALEWD -.385555 3RT1CAP 3BALEWN -.096667 3BALEID -.276667 3RT1CAP 3BALEIN -.068889 3BALESD -.226667 3RT1CAP 3BALESN -.056667 3EPKWD -3.855558 3RT1CAP 3EPKSD -.527132 1RT3CAP PRICER 16.528961 1BALDSL -1.818181 1RT3CAP 1CPTRT3 1. 1DEMRT 1. 2RT3CAP PRICER 12.351457 2BALDSL -1.818181 2RT3CAP 2CPTRT3 1. 2DEMRT 1. 3RT3CAP PRICER 9.229751 3BALDSL -1.818181 3RT3CAP 3CPTRT3 1. 3DEMRT 1. 1RT7CAP PRICER 19.469208 1BALGAS -1.538461 1RT7CAP 1CPTRT7 1. 1DEMRT 1. 2RT7CAP PRICER 14.548593 2BALGAS -1.538461 2RT7CAP 2CPTRT7 1. 2DEMRT 1. 3RT7CAP PRICER 10.871583 3BALGAS -1.538461 3RT7CAP 3CPTRT7 1. 3DEMRT 1. 1RT8CAP PRICER 31.92157 1BALHCO -2. 1RT8CAP 1CPTRT8 1. 1DEMRT 1. 2RT8CAP PRICER 23.853745 2BALHCO -2. 2RT8CAP 2CPTRT8 1. 2DEMRT 1. 3RT8CAP PRICER 17.824951 3BALHCO -2. 3RT8CAP 3CPTRT8 1. 3DEMRT 1. 2RTBCAP PRICER 11.901143 2BALGAS -.833333 2RTBCAP 2CPTRTB 1. 2DEMRT 1. 3RTBCAP PRICER 8.893249 3BALGAS -.833333 3RTBCAP 3CPTRTB 1. 3DEMRT 1. 2RTCCAP PRICER 9.263595 2CPTRTC 1. 2RTCCAP 2DEMRT 1. 2BALDHW -.563636 2RTCCAP 2BALDHI -.403896 2BALDHS -.331169 2RTCCAP 2HPKW -2.818182 3RTCCAP PRICER 6.922315 3CPTRTC 1. 3RTCCAP 3DEMRT 1. 3BALDHW -.563636 3RTCCAP 3BALDHI -.403896 3BALDHS -.331169 3RTCCAP 3HPKW -2.818182 1RTYCAP 1BALHCO -.634921 1BALGAS -.952381 1RTYCAP 1DEMRT 1. 2RTYCAP 2BALHCO -.3125 2BALGAS -1.25 2RTYCAP 2DEMRT 1. 3RTYCAP 3BALGAS -1.538461 3DEMRT 1. 1R50CAP PRICER 1.54959 1CPTR50 1. 1R50CAP 1DEMR5 1. 1BALEWN -.248889 1R50CAP 1BALEIN -.23 1BALESN -.632222 2R50CAP PRICER 1.157948 2CPTR50 1. 2R50CAP 2DEMR5 1. 2BALEWN -.248889 2R50CAP 2BALEIN -.23 2BALESN -.632222 3R50CAP PRICER .865289 3CPTR50 1. 3R50CAP 3DEMR5 1. 3BALEWN -.248889 3R50CAP 3BALEIN -.23 3BALESN -.632222 1R51CAP 1CPTR51 1. 1DEMR5 1. 1R51CAP 1BALEWD -.176667 1BALEWN -.072222 1R51CAP 1BALEID -.212222 1BALEIN -.017778 1R51CAP 1BALESD -.604444 1BALESN -.027778 1R51CAP 1EPKWD -1.766667 1EPKSD -1.405684 1R51CAP 1RAT004 -1. 2R51CAP 2CPTR51 1. 2DEMR5 1. 2R51CAP 2BALEWD -.176667 2BALEWN -.072222 2R51CAP 2BALEID -.212222 2BALEIN -.017778 2R51CAP 2BALESD -.604444 2BALESN -.027778 2R51CAP 2EPKWD -1.766667 2EPKSD -1.405684 2R51CAP 2RAT004 -1. 3R51CAP 3CPTR51 1. 3DEMR5 1. 3R51CAP 3BALEWD -.176667 3BALEWN -.072222 3R51CAP 3BALEID -.212222 3BALEIN -.017778 3R51CAP 3BALESD -.604444 3BALESN -.027778 3R51CAP 3EPKWD -1.766667 3EPKSD -1.405684 3R51CAP 3RAT004 -1. 1R53CAP PRICER 16.528961 1BALDSL -1.818181 1R53CAP 1CPTR53 1. 1DEMR5 1. 1R53CAP 1RAT005 -1. 2R53CAP PRICER 12.351457 2BALDSL -1.818181 2R53CAP 2CPTR53 1. 2DEMR5 1. 2R53CAP 2RAT005 -1. 3R53CAP PRICER 9.229751 3BALDSL -1.818181 3R53CAP 3CPTR53 1. 3DEMR5 1. 3R53CAP 3RAT005 -1. 1R57CAP PRICER 19.469208 1BALGAS -1.538461 1R57CAP 1CPTR57 1. 1DEMR5 1. 1R57CAP 1RAT006 -1. 2R57CAP PRICER 14.548593 2BALGAS -1.538461 2R57CAP 2CPTR57 1. 2DEMR5 1. 2R57CAP 2RAT006 -1. 3R57CAP PRICER 10.871583 3BALGAS -1.538461 3R57CAP 3CPTR57 1. 3DEMR5 1. 3R57CAP 3RAT006 -1. 1R58CAP PRICER 31.92157 1BALHCO -2. 1R58CAP 1CPTR58 1. 1DEMR5 1. 1R58CAP 1RAT007 -1. 2R58CAP PRICER 23.853745 2BALHCO -2. 2R58CAP 2CPTR58 1. 2DEMR5 1. 2R58CAP 2RAT007 -1. 3R58CAP PRICER 17.824951 3BALHCO -2. 3R58CAP 3CPTR58 1. 3DEMR5 1. 3R58CAP 3RAT007 -1. 2R5ACAP PRICER 6.947694 2CPTR5A 1. 2R5ACAP 2DEMR5 1. 2BALEWD -.045429 2R5ACAP 2BALEWN -.018571 2BALEID -.054571 2R5ACAP 2BALEIN -.004571 2BALESD -.155429 2R5ACAP 2BALESN -.007143 2EPKWD -.454286 2R5ACAP 2EPKSD -.361462 2RAT008 -1. 3R5ACAP PRICER 5.191734 3CPTR5A 1. 3R5ACAP 3DEMR5 1. 3BALEWD -.045429 3R5ACAP 3BALEWN -.018571 3BALEID -.054571 3R5ACAP 3BALEIN -.004571 3BALESD -.155429 3R5ACAP 3BALESN -.007143 3EPKWD -.454286 3R5ACAP 3EPKSD -.361462 3RAT008 -1. 3R5CCAP PRICER 6.922315 3CPTR5C 1. 3R5CCAP 3DEMR5 1. 3BALDHW -.329412 3R5CCAP 3BALDHI -.304412 3BALDHS -.836765 3R5CCAP 3HPKW -1.647059 3RAT012 -1. 1R5HCAP PRICER 85.948608 1BALGAS -1.960784 1R5HCAP 1CPTR5H 1. 1DEMR5 1. 1R5HCAP 1RAT001 1. 1RAT003 1. 1R5HCAP 1RAT013 -1. 2R5HCAP PRICER 64.001907 2BALGAS -1.923077 2R5HCAP 2CPTR5H 1. 2DEMR5 1. 2R5HCAP 2RAT001 1. 2RAT003 1. 2R5HCAP 2RAT013 -1. 3R5HCAP PRICER 47.664902 3BALGAS -1.886792 3R5HCAP 3CPTR5H 1. 3DEMR5 1. 3R5HCAP 3RAT001 1. 3RAT003 1. 3R5HCAP 3RAT013 -1. 1R5LCAP 1CPTR5L 1. 1DEMR5 1. 1R5LCAP 1BALEWD -.223944 1BALEWN -.091549 1R5LCAP 1BALEID -.269014 1BALEIN -.022535 1R5LCAP 1BALESD -.766197 1BALESN -.035211 1R5LCAP 1EPKWD -2.239438 1EPKSD -1.781854 1R5LCAP 1RAT001 1. 1RAT013 -1. 2R5LCAP 2CPTR5L 1. 2DEMR5 1. 2R5LCAP 2BALEWD -.220833 2BALEWN -.090278 2R5LCAP 2BALEID -.265278 2BALEIN -.022222 2R5LCAP 2BALESD -.755556 2BALESN -.034722 2R5LCAP 2EPKWD -2.208334 2EPKSD -1.757106 2R5LCAP 2RAT001 1. 2RAT013 -1. 3R5LCAP 3CPTR5L 1. 3DEMR5 1. 3R5LCAP 3BALEWD -.217808 3BALEWN -.089041 3R5LCAP 3BALEID -.261644 3BALEIN -.021918 3R5LCAP 3BALESD -.745205 3BALESN -.034247 3R5LCAP 3EPKWD -2.178082 3EPKSD -1.733036 3R5LCAP 3RAT001 1. 3RAT013 -1. 1R5MCAP 1CPTR5M 1. 1DEMR5 1. 1R5MCAP 1BALEWD -.223944 1BALEWN -.091549 1R5MCAP 1BALEID -.269014 1BALEIN -.022535 1R5MCAP 1BALESD -.766197 1BALESN -.035211 1R5MCAP 1EPKWD -2.239438 1EPKSD -1.781854 1R5MCAP 1RAT003 1. 1RAT013 -1. 2R5MCAP 2CPTR5M 1. 2DEMR5 1. 2R5MCAP 2BALEWD -.220833 2BALEWN -.090278 2R5MCAP 2BALEID -.265278 2BALEIN -.022222 2R5MCAP 2BALESD -.755556 2BALESN -.034722 2R5MCAP 2EPKWD -2.208334 2EPKSD -1.757106 2R5MCAP 2RAT003 1. 2RAT013 -1. 3R5MCAP 3CPTR5M 1. 3DEMR5 1. 3R5MCAP 3BALEWD -.217808 3BALEWN -.089041 3R5MCAP 3BALEID -.261644 3BALEIN -.021918 3R5MCAP 3BALESD -.745205 3BALESN -.034247 3R5MCAP 3EPKWD -2.178082 3EPKSD -1.733036 3R5MCAP 3RAT003 1. 3RAT013 -1. 1RDYCAP 1BALHCO -.034892 1BALCOK -.009677 1RDYCAP 1BALDSL -.332697 1BALGAS -.371269 1RDYCAP 1DEMRD 1. 1BALEWD -.148042 1RDYCAP 1BALEWN -.082314 1BALEID -.119785 1RDYCAP 1BALEIN -.033786 1BALESD -.181214 1RDYCAP 1BALESN -.049143 1EPKWD -1.480425 1RDYCAP 1EPKSD -.421427 2RDYCAP 2BALHCO -.030143 2BALCOK -.007975 2RDYCAP 2BALDSL -.282779 2BALGAS -.410787 2RDYCAP 2DEMRD 1. 2BALEWD -.149428 2RDYCAP 2BALEWN -.083084 2BALEID -.120906 2RDYCAP 2BALEIN -.034102 2BALESD -.182909 2RDYCAP 2BALESN -.049603 2EPKWD -1.494279 2RDYCAP 2EPKSD -.425371 3RDYCAP 3BALHCO -.02846 3BALCOK -.007786 3RDYCAP 3BALDSL -.26084 3BALGAS -.411062 3RDYCAP 3DEMRD 1. 3BALEWD -.152869 3RDYCAP 3BALEWN -.084998 3BALEID -.123691 3RDYCAP 3BALEIN -.034887 3BALESD -.187122 3RDYCAP 3BALESN -.050745 3EPKWD -1.528695 3RDYCAP 3EPKSD -.435168 1T80CAP 2GRCT80 -1.227805 1DEMT8 1. 1T80CAP 1BALEWN -.1 1BALEIN -.1 1T80CAP 1BALESN -.3 2T80CAP 3GRCT80 -1.227805 2GRCT80 1. 2T80CAP 2DEMT8 1. 2BALEWN -.1 2T80CAP 2BALEIN -.1 2BALESN -.3 3T80CAP 3GRCT80 1. 3DEMT8 1. 3T80CAP 3BALEWN -.1 3BALEIN -.1 3T80CAP 3BALESN -.3 1T83CAP PRICER 5.475219 1BALDSL -1. 1T83CAP 1DEMT8 1. 2T83CAP PRICER 4.091419 2BALDSL -1. 2T83CAP 2DEMT8 1. 3T83CAP PRICER 3.057354 3BALDSL -1. 3T83CAP 3DEMT8 1. 1T8FCAP 1BALGSL -1. 1DEMT8 1. 2T8FCAP 2BALGSL -1. 2DEMT8 1. 3T8FCAP 3BALGSL -1. 3DEMT8 1. 1TXYCAP 1BALDSL -.9792 1DEMTX 1. 1TXYCAP 1BALEWD -.00208 1BALEWN -.00208 1TXYCAP 1BALEID -.002704 1BALEIN -.001456 1TXYCAP 1BALESD -.008944 1BALESN -.003536 1TXYCAP 1EPKWD -.0208 1EPKSD -.0208 2TXYCAP 2BALDSL -.9808 2DEMTX 1. 2TXYCAP 2BALEWD -.00192 2BALEWN -.00192 2TXYCAP 2BALEID -.002496 2BALEIN -.001344 2TXYCAP 2BALESD -.008256 2BALESN -.003264 2TXYCAP 2EPKWD -.0192 2EPKSD -.0192 3TXYCAP 3BALDSL -.9981 3DEMTX 1. 3TXYCAP 3BALEWD -.00189 3BALEWN -.00189 3TXYCAP 3BALEID -.002457 3BALEIN -.001323 3TXYCAP 3BALESD -.008127 3BALESN -.003213 3TXYCAP 3EPKWD -.0189 3EPKSD -.0189 3S01CAP PRICER 4.961 3CPTS01 1. 3S01CAP 3UTLS01 -.85 3S04CAP PRICER 5.710909 3CPTS04 1. 3S04CAP 3UTLS04 -.85 1S06CAP 1CPTS06 1. 1UTLS06 -.9 2S06CAP 2CPTS06 1. 2UTLS06 -.9 3S06CAP 3CPTS06 1. 3UTLS06 -.9 1S08CAP 1CPTS08 1. 1UTLS08 -.9 2S08CAP 2CPTS08 1. 2UTLS08 -.9 3S08CAP 3CPTS08 1. 3UTLS08 -.9 1S09CAP 1CPTS09 1. 1UTLS09 -1. 2S09CAP 2CPTS09 1. 2UTLS09 -1. 3S09CAP 3CPTS09 1. 3UTLS09 -1. 1S21CAP 1CPTS21 1. 1UTLS21 -1. 2S21CAP 2CPTS21 1. 2UTLS21 -1. 3S21CAP 3CPTS21 1. 3UTLS21 -1. 1S23CAP 1CPTS23 1. 1UTLS23 -1. 2S23CAP 2CPTS23 1. 2UTLS23 -1. 3S23CAP 3CPTS23 1. 3UTLS23 -1. 1S28CAP 1CPTS28 1. 1UTLS28 -1. 2S28CAP 2CPTS28 1. 2UTLS28 -1. 3S28CAP 3CPTS28 1. 3UTLS28 -1. 3S29CAP 3CPTS29 1. 3UTLS29 -1. 1S44CAP 1BALURN -1.02 1BALMAG .744 1S44CAP 2BALMAG .256 2S44CAP 2BALURN -1.02 2BALMAG .744 2S44CAP 3BALMAG .256 3S44CAP 3BALURN -1.02 3BALMAG .744 1S45CAP PRICER 2.89257 1BALURN -4.4348 1S45CAP 1BALUDP 3.4348 1BALAGR .634 1S45CAP 2BALAGR .366 2S45CAP PRICER 2.161505 2BALURN -4.4348 2S45CAP 2BALUDP 3.4348 2BALAGR .634 2S45CAP 3BALAGR .366 3S45CAP PRICER 1.615207 3BALURN -4.4348 3S45CAP 3BALUDP 3.4348 3BALAGR .634 1S46CAP PRICER .619836 1BALURN -.9841 1S46CAP 1BALPLU -.01591 1BALAGR .734 1S46CAP 2BALAGR .266 2S46CAP PRICER .46318 2BALURN -.9841 2S46CAP 2BALPLU -.01591 2BALAGR .734 2S46CAP 3BALAGR .266 3S46CAP PRICER .346116 3BALURN -.9841 3S46CAP 3BALPLU -.01591 3BALAGR .734 1S47CAP PRICER .619836 1BALUDP -.9796 1S47CAP 1BALPLU -.02045 1BALAGR .734 1S47CAP 2BALAGR .266 2S47CAP PRICER .46318 2BALUDP -.9796 2S47CAP 2BALPLU -.02045 2BALAGR .734 2S47CAP 3BALAGR .266 3S47CAP PRICER .346116 3BALUDP -.9796 3S47CAP 3BALPLU -.02045 3BALAGR .734 1S4ACAP PRICER .619836 1BALUDP -.9476 1S4ACAP 1BALPLU -.05237 1BALLMF .95 1S4ACAP 2BALLMF .05 2S4ACAP PRICER .46318 2BALUDP -.9476 2S4ACAP 2BALPLU -.05237 2BALLMF .95 2S4ACAP 3BALLMF .05 3S4ACAP PRICER .346116 3BALUDP -.9476 3S4ACAP 3BALPLU -.05237 3BALLMF .95 1S54CAP PRICER 4.752079 1BALUDP .9282 1S54CAP 1BALPLU .06318 1BALLMS -1. 2S54CAP PRICER 3.551044 2BALUDP .9282 2S54CAP 2BALPLU .06318 2BALLMS -.9 2S54CAP 1BALLMS -.1 3S54CAP PRICER 2.653554 3BALUDP .9282 3S54CAP 3BALPLU .06318 3BALLMS -.9 3S54CAP 2BALLMS -.1 1S55CAP PRICER 4.752079 1BALURN 1.047 1S55CAP 1BALPLU .004783 1BALAGS -1. 2S55CAP PRICER 3.551044 2BALURN 1.047 2S55CAP 2BALPLU .004783 2BALAGS -.8 2S55CAP 1BALAGS -.2 3S55CAP PRICER 2.653554 3BALURN 1.047 3S55CAP 3BALPLU .004783 3BALAGS -.8 3S55CAP 2BALAGS -.2 1S6HCAP 1BALGAS .95 1BALHYD -1. 2S6HCAP 2BALGAS .95 2BALHYD -1. 3S6HCAP 3BALGAS .95 3BALHYD -1. 1S71CAP 1BALGSL 1. 1BALALC -1. 2S71CAP 2BALGSL 1. 2BALALC -1. 3S71CAP 3BALGSL 1. 3BALALC -1. 1S72CAP 1BALDSH 1. 1BALDSR -1. 2S72CAP 2BALDSH 1. 2BALDSR -1. 3S72CAP 3BALDSH 1. 3BALDSR -1. 1S79CAP 1BALGAK -1. 1BALGAS .95 1S79CAP 1RAT010 2.66 2S79CAP 2BALGAK -1. 2BALGAS .95 2S79CAP 2RAT010 2.66 3S79CAP 3BALGAK -1. 3BALGAS .95 3S79CAP 3RAT010 2.66 1S7ACAP 1BALOIK -1. 1BALOIL 1. 1S7ACAP 1RAT011 2.66 2S7ACAP 2BALOIK -1. 2BALOIL 1. 2S7ACAP 2RAT011 2.66 3S7ACAP 3BALOIK -1. 3BALOIL 1. 3S7ACAP 3RAT011 2.66 3S80CAP PRICER 1.211405 3CPTS80 1. 3S80CAP 3UTLS80 -.9 3S01ACT PRICER 1.817107 3BALHCO -1. 3S01ACT 3BALGAS .665 3UTLS01 1. 3S04ACT PRICER 1.586364 3BALHCO -1. 3S04ACT 3BALALC .3 3UTLS04 1. 1S06ACT PRICER 1.497937 1BALHCO -1. 1S06ACT 1BALCOK .6 1BALGAS .1425 1S06ACT 1UTLS06 1. 2S06ACT PRICER 1.11935 2BALHCO -1. 2S06ACT 2BALCOK .6 2BALGAS .1425 2S06ACT 2UTLS06 1. 3S06ACT PRICER .836446 3BALHCO -1. 3S06ACT 3BALCOK .6 3BALGAS .1425 3S06ACT 3UTLS06 1. 1S08ACT PRICER 1.497937 1BALHCO -1. 1S08ACT 1BALCOK .64 1BALGAS .152 1S08ACT 1UTLS08 1. 2S08ACT PRICER 1.11935 2BALHCO -1. 2S08ACT 2BALCOK .64 2BALGAS .152 2S08ACT 2UTLS08 1. 3S08ACT PRICER .836446 3BALHCO -1. 3S08ACT 3BALCOK .64 3BALGAS .152 3S08ACT 3UTLS08 1. 1S09ACT PRICER 1.497937 1BALHCO -1. 1S09ACT 1BALCOK .64 1BALGAS .152 1S09ACT 1UTLS09 1. 2S09ACT PRICER 1.11935 2BALHCO -1. 2S09ACT 2BALCOK .64 2BALGAS .152 2S09ACT 2UTLS09 1. 3S09ACT PRICER .836446 3BALHCO -1. 3S09ACT 3BALCOK .64 3BALGAS .152 3S09ACT 3UTLS09 1. 1S21ACT 1BALOIL -1. 1BALGSL .16 1S21ACT 1BALDSL .32 1BALDSR .46 1S21ACT 1UTLS21 1. 2S21ACT 2BALOIL -1. 2BALGSL .16 2S21ACT 2BALDSL .32 2BALDSR .46 2S21ACT 2UTLS21 1. 3S21ACT 3BALOIL -1. 3BALGSL .16 3S21ACT 3BALDSL .32 3BALDSR .46 3S21ACT 3UTLS21 1. 1S23ACT 1BALDSL .5 1BALDSH .5 1S23ACT 1BALDSR -1. 1UTLS23 1. 2S23ACT 2BALDSL .5 2BALDSH .5 2S23ACT 2BALDSR -1. 2UTLS23 1. 3S23ACT 3BALDSL .5 3BALDSH .5 3S23ACT 3BALDSR -1. 3UTLS23 1. 1S28ACT 1BALGSL .67 1BALDSL -1. 1S28ACT 1UTLS28 1. 2S28ACT 2BALGSL .67 2BALDSL -1. 2S28ACT 2UTLS28 1. 3S28ACT 3BALGSL .67 3BALDSL -1. 3S28ACT 3UTLS28 1. 3S29ACT 3BALGSL .87 3BALDSL -1. 3S29ACT 3UTLS29 1. 3S80ACT PRICER .365152 3BALHYD .722 3S80ACT 3UTLS80 1. 3BALEWN -.2 3S80ACT 3BALEIN -.2 3BALESN -.6 1EC1WM 1UTLEC1 1. 1EWDEC1 .5 1EC1WM 1EWNEC1 .5 1EC1IM 1UTLEC1 1. 1EIDEC1 .65 1EC1IM 1EINEC1 .35 1EC1SM 1UTLEC1 1. 1ESDEC1 .716667 1EC1SM 1ESNEC1 .283333 2EC1WM 2UTLEC1 1. 2EWDEC1 .5 2EC1WM 2EWNEC1 .5 2EC1IM 2UTLEC1 1. 2EIDEC1 .65 2EC1IM 2EINEC1 .35 2EC1SM 2UTLEC1 1. 2ESDEC1 .716667 2EC1SM 2ESNEC1 .283333 3EC1WM 3UTLEC1 1. 3EWDEC1 .5 3EC1WM 3EWNEC1 .5 3EC1IM 3UTLEC1 1. 3EIDEC1 .65 3EC1IM 3EINEC1 .35 3EC1SM 3UTLEC1 1. 3ESDEC1 .716667 3EC1SM 3ESNEC1 .283333 1EC2WM 1UTLEC2 1. 1EWDEC2 .5 1EC2WM 1EWNEC2 .5 1EC2IM 1UTLEC2 1. 1EIDEC2 .65 1EC2IM 1EINEC2 .35 1EC2SM 1UTLEC2 1. 1ESDEC2 .716667 1EC2SM 1ESNEC2 .283333 2EC2WM 2UTLEC2 1. 2EWDEC2 .5 2EC2WM 2EWNEC2 .5 2EC2IM 2UTLEC2 1. 2EIDEC2 .65 2EC2IM 2EINEC2 .35 2EC2SM 2UTLEC2 1. 2ESDEC2 .716667 2EC2SM 2ESNEC2 .283333 3EC2WM 3UTLEC2 1. 3EWDEC2 .5 3EC2WM 3EWNEC2 .5 3EC2IM 3UTLEC2 1. 3EIDEC2 .65 3EC2IM 3EINEC2 .35 3EC2SM 3UTLEC2 1. 3ESDEC2 .716667 3EC2SM 3ESNEC2 .283333 1EP1WM 1UTLEP1 1. 1EWDEP1 .5 1EP1WM 1EWNEP1 .5 1EP1IM 1UTLEP1 1. 1EIDEP1 .65 1EP1IM 1EINEP1 .35 1EP1SM 1UTLEP1 1. 1ESDEP1 .716667 1EP1SM 1ESNEP1 .283333 2EP1WM 2UTLEP1 1. 2EWDEP1 .5 2EP1WM 2EWNEP1 .5 2EP1IM 2UTLEP1 1. 2EIDEP1 .65 2EP1IM 2EINEP1 .35 2EP1SM 2UTLEP1 1. 2ESDEP1 .716667 2EP1SM 2ESNEP1 .283333 3EP1WM 3UTLEP1 1. 3EWDEP1 .5 3EP1WM 3EWNEP1 .5 3EP1IM 3UTLEP1 1. 3EIDEP1 .65 3EP1IM 3EINEP1 .35 3EP1SM 3UTLEP1 1. 3ESDEP1 .716667 3EP1SM 3ESNEP1 .283333 1E22WM 1UTLE22 1. 1EWDE22 1. 1E22IM 1UTLE22 1. 1EIDE22 1. 1E22SM 1UTLE22 1. 1ESDE22 1. 2E22WM 2UTLE22 1. 2EWDE22 1. 2E22IM 2UTLE22 1. 2EIDE22 1. 2E22SM 2UTLE22 1. 2ESDE22 1. 3E22WM 3UTLE22 1. 3EWDE22 1. 3E22IM 3UTLE22 1. 3EIDE22 1. 3E22SM 3UTLE22 1. 3ESDE22 1. 1E23WM 1UTLE23 1. 1EWDE23 1. 1E23IM 1UTLE23 1. 1EIDE23 1. 1E23SM 1UTLE23 1. 1ESDE23 1. 2E23WM 2UTLE23 1. 2EWDE23 1. 2E23IM 2UTLE23 1. 2EIDE23 1. 2E23SM 2UTLE23 1. 2ESDE23 1. 3E23WM 3UTLE23 1. 3EWDE23 1. 3E23IM 3UTLE23 1. 3EIDE23 1. 3E23SM 3UTLE23 1. 3ESDE23 1. 1EC1CAP PRICER 289.256836 1UTLEC1 -4.4184 1EC1CAP 1EPKWD 24.213669 1EPKSD 24.213669 1EC1CAP 1EWDEC1 -2.714158 1EWNEC1 -2.714158 1EC1CAP 1EIDEC1 -3.528407 1EINEC1 -1.899911 1EC1CAP 1ESDEC1 -11.670885 1ESNEC1 -4.61407 2EC1CAP PRICER 216.150574 2UTLEC1 -4.4184 2EC1CAP 2EPKWD 24.213669 2EPKSD 24.213669 2EC1CAP 2EWDEC1 -2.714158 2EWNEC1 -2.714158 2EC1CAP 2EIDEC1 -3.528407 2EINEC1 -1.899911 2EC1CAP 2ESDEC1 -11.670885 2ESNEC1 -4.61407 3EC1CAP PRICER 161.520706 3UTLEC1 -4.4184 3EC1CAP 3EPKWD 24.213669 3EPKSD 24.213669 3EC1CAP 3EWDEC1 -2.714158 3EWNEC1 -2.714158 3EC1CAP 3EIDEC1 -3.528407 3EINEC1 -1.899911 3EC1CAP 3ESDEC1 -11.670885 3ESNEC1 -4.61407 1EC2CAP PRICER 289.256836 1UTLEC2 -5.049611 1EC2CAP 1EPKWD 24.213669 1EPKSD 24.213669 1EC2CAP 1EWDEC2 -2.777279 1EWNEC2 -2.777279 1EC2CAP 1EIDEC2 -3.610465 1EINEC2 -1.944096 1EC2CAP 1ESDEC2 -11.942307 1ESNEC2 -4.721376 2EC2CAP PRICER 216.150574 2UTLEC2 -5.049611 2EC2CAP 2EPKWD 24.213669 2EPKSD 24.213669 2EC2CAP 2EWDEC2 -2.777279 2EWNEC2 -2.777279 2EC2CAP 2EIDEC2 -3.610465 2EINEC2 -1.944096 2EC2CAP 2ESDEC2 -11.942307 2ESNEC2 -4.721376 3EC2CAP PRICER 161.520706 3UTLEC2 -5.049611 3EC2CAP 3EPKWD 24.213669 3EPKSD 24.213669 3EC2CAP 3EWDEC2 -2.777279 3EWNEC2 -2.777279 3EC2CAP 3EIDEC2 -3.610465 3EINEC2 -1.944096 3EC2CAP 3ESDEC2 -11.942307 3ESNEC2 -4.721376 1EC3CAP PRICER 114.669724 1CPTEC3 1. 1EC3CAP 1EPKWD 24.213669 1EPKSD 24.213669 1EC3CAP 1EWDEC3 -2.114518 1EWNEC3 -2.114518 1EC3CAP 1EIDEC3 -2.748875 1EINEC3 -1.480163 1EC3CAP 1ESDEC3 -9.092433 1ESNEC3 -3.594682 2EC3CAP PRICER 85.688248 2CPTEC3 1. 2EC3CAP 2EPKWD 24.213669 2EPKSD 24.213669 2EC3CAP 2EWDEC3 -2.114518 2EWNEC3 -2.114518 2EC3CAP 2EIDEC3 -2.748875 2EINEC3 -1.480163 2EC3CAP 2ESDEC3 -9.092433 2ESNEC3 -3.594682 3EC3CAP PRICER 64.031403 3CPTEC3 1. 3EC3CAP 3EPKWD 24.213669 3EPKSD 24.213669 3EC3CAP 3EWDEC3 -2.114518 3EWNEC3 -2.114518 3EC3CAP 3EIDEC3 -2.748875 3EINEC3 -1.480163 3EC3CAP 3ESDEC3 -9.092433 3ESNEC3 -3.594682 1EP1CAP PRICER 114.669724 1CPTEP1 1. 1EP1CAP 1UTLEP1 -4.4184 1EPKWD 24.213669 1EP1CAP 1EPKSD 24.213669 1EWDEP1 -2.714158 1EP1CAP 1EWNEP1 -2.714158 1EIDEP1 -3.528407 1EP1CAP 1EINEP1 -1.899911 1ESDEP1 -11.670885 1EP1CAP 1ESNEP1 -4.61407 2EP1CAP PRICER 85.688248 2CPTEP1 1. 2EP1CAP 2UTLEP1 -4.4184 2EPKWD 24.213669 2EP1CAP 2EPKSD 24.213669 2EWDEP1 -2.714158 2EP1CAP 2EWNEP1 -2.714158 2EIDEP1 -3.528407 2EP1CAP 2EINEP1 -1.899911 2ESDEP1 -11.670885 2EP1CAP 2ESNEP1 -4.61407 3EP1CAP PRICER 64.031403 3CPTEP1 1. 3EP1CAP 3UTLEP1 -4.4184 3EPKWD 24.213669 3EP1CAP 3EPKSD 24.213669 3EWDEP1 -2.714158 3EP1CAP 3EWNEP1 -2.714158 3EIDEP1 -3.528407 3EP1CAP 3EINEP1 -1.899911 3ESDEP1 -11.670885 3EP1CAP 3ESNEP1 -4.61407 1E14CAP PRICER 72.83078 1CPTE14 1. 1E14CAP 1EPKWD 24.213669 1EPKSD 24.213669 1E14CAP 1EWDE14 -2.998198 1EWNE14 -2.998198 1E14CAP 1EIDE14 -3.897659 1EINE14 -2.098739 1E14CAP 1ESDE14 -12.892257 1ESNE14 -5.096938 2E14CAP PRICER 54.423615 2CPTE14 1. 2E14CAP 2EPKWD 24.213669 2EPKSD 24.213669 2E14CAP 2EWDE14 -2.998198 2EWNE14 -2.998198 2E14CAP 2EIDE14 -3.897659 2EINE14 -2.098739 2E14CAP 2ESDE14 -12.892257 2ESNE14 -5.096938 3E14CAP PRICER 40.668594 3CPTE14 1. 3E14CAP 3EPKWD 24.213669 3EPKSD 24.213669 3E14CAP 3EWDE14 -2.998198 3EWNE14 -2.998198 3E14CAP 3EIDE14 -3.897659 3EINE14 -2.098739 3E14CAP 3ESDE14 -12.892257 3ESNE14 -5.096938 1E22CAP PRICER 81.611801 1CPTE22 1. 1E22CAP 1UTLE22 -6.311683 1EPKWD 24.213669 1E22CAP 1EPKSD 24.213669 1EWDE22 -5.365133 1E22CAP 1EIDE22 -5.365135 1ESDE22 -16.095398 2E22CAP PRICER 60.985336 2CPTE22 1. 2E22CAP 2UTLE22 -6.311683 2EPKWD 24.213669 2E22CAP 2EPKSD 24.213669 2EWDE22 -5.365133 2E22CAP 2EIDE22 -5.365135 2ESDE22 -16.095398 3E22CAP PRICER 45.5719 3CPTE22 1. 3E22CAP 3UTLE22 -6.311683 3EPKWD 24.213669 3E22CAP 3EPKSD 24.213669 3EWDE22 -5.365133 3E22CAP 3EIDE22 -5.365135 3ESDE22 -16.095398 1E23CAP PRICER 74.380371 1CPTE23 1. 1E23CAP 1UTLE23 -6.311683 1EPKWD 24.213669 1E23CAP 1EPKSD 24.213669 1EWDE23 -5.365133 1E23CAP 1EIDE23 -5.365135 1ESDE23 -16.095398 2E23CAP PRICER 55.581573 2CPTE23 1. 2E23CAP 2UTLE23 -6.311683 2EPKWD 24.213669 2E23CAP 2EPKSD 24.213669 2EWDE23 -5.365133 2E23CAP 2EIDE23 -5.365135 2ESDE23 -16.095398 3E23CAP PRICER 41.53389 3CPTE23 1. 3E23CAP 3UTLE23 -6.311683 3EPKWD 24.213669 3E23CAP 3EPKSD 24.213669 3EWDE23 -5.365133 3E23CAP 3EIDE23 -5.365135 3ESDE23 -16.095398 1E31CAP 1CPTE31 1. 1EPKWD 24.213669 1E31CAP 1EPKSD 24.213669 1EWDE31 -1.199279 1E31CAP 1EWNE31 -1.199279 1EIDE31 -.738504 1E31CAP 1EINE31 -.397656 1ESDE31 -2.442742 1E31CAP 1ESNE31 -.965735 2E31CAP 2CPTE31 1. 2EPKWD 24.213669 2E31CAP 2EPKSD 24.213669 2EWDE31 -1.199279 2E31CAP 2EWNE31 -1.199279 2EIDE31 -.738504 2E31CAP 2EINE31 -.397656 2ESDE31 -2.442742 2E31CAP 2ESNE31 -.965735 3E31CAP 3CPTE31 1. 3EPKWD 24.213669 3E31CAP 3EPKSD 24.213669 3EWDE31 -1.199279 3E31CAP 3EWNE31 -1.199279 3EIDE31 -.738504 3E31CAP 3EINE31 -.397656 3ESDE31 -2.442742 3E31CAP 3ESNE31 -.965735 2E35CAP PRICER 21.229065 2CPTE35 1. 2E35CAP 3GRCE35 -32. 2EWDE35 -.883679 2E35CAP 2EWNE35 -.883679 2EIDE35 -1.148784 2E35CAP 2EINE35 -.618576 2ESDE35 -3.121283 2E35CAP 2ESNE35 -1.234 3E35CAP PRICER 15.863641 3CPTE35 1. 3E35CAP 3GRCE35 1. 3EWDE35 -.883679 3E35CAP 3EWNE35 -.883679 3EIDE35 -1.148784 3E35CAP 3EINE35 -.618576 3ESDE35 -3.121283 3E35CAP 3ESNE35 -1.234 3E94CAP PRICER 61.723953 3CPTE94 1. 3E94CAP 3EPKWD 26.521011 3EPKSD 26.521011 3E94CAP 3EWDE94 -3.156 3EWNE94 -3.156 3E94CAP 3EIDE94 -4.1028 3EINE94 -2.2092 3E94CAP 3ESDE94 -13.570797 3ESNE94 -5.365198 3E60CAP PRICER 74.414856 3CPTE60 1. 3E60CAP 3EPKWD 26.521011 3EPKSD 26.521011 3E60CAP 3EWDE60 -2.114518 3EWNE60 -2.114518 3E60CAP 3EIDE60 -2.748875 3EINE60 -1.480163 3E60CAP 3ESDE60 -9.092433 3ESNE60 -3.594682 3E60CAP 3HPKW 31.56 1E51CAP PRICER 71.281189 1CPTE51 1. 1E51CAP 1EPKWD 24.213669 1EPKSD 24.213669 1E51CAP 1EWDE51 -2.840398 1EIDE51 -3.692519 1E51CAP 1ESDE51 -12.213717 2E51CAP PRICER 53.265671 2CPTE51 1. 2E51CAP 2EPKWD 24.213669 2EPKSD 24.213669 2E51CAP 2EWDE51 -2.840398 2EIDE51 -3.692519 2E51CAP 2ESDE51 -12.213717 3E51CAP PRICER 39.803314 3CPTE51 1. 3E51CAP 3EPKWD 24.213669 3EPKSD 24.213669 3E51CAP 3EWDE51 -2.840398 3EIDE51 -3.692519 3E51CAP 3ESDE51 -12.213717 1EC1WD PRICER 5.448 1BALHCO -3.637 1EC1WD 1BALDSL -.066667 1BALEWD .913 1EC1WD 1EWDEC1 1. 1EC1ID PRICER 5.448 1BALHCO -3.637 1EC1ID 1BALDSL -.066667 1BALEID .913 1EC1ID 1EIDEC1 1. 1EC1SD PRICER 5.448 1BALHCO -3.637 1EC1SD 1BALDSL -.066667 1BALESD .913 1EC1SD 1ESDEC1 1. 1EC1WN PRICER 5.448 1BALHCO -3.637 1EC1WN 1BALDSL -.066667 1BALEWN .913 1EC1WN 1EWNEC1 1. 1BASW -.77605 1EC1IN PRICER 5.448 1BALHCO -3.637 1EC1IN 1BALDSL -.066667 1BALEIN .913 1EC1IN 1EINEC1 1. 1BASI -.77605 1EC1SN PRICER 5.448 1BALHCO -3.637 1EC1SN 1BALDSL -.066667 1BALESN .913 1EC1SN 1ESNEC1 1. 1BASS -.77605 2EC1WD PRICER 4.071078 2BALHCO -3.637 2EC1WD 2BALDSL -.066667 2BALEWD .913 2EC1WD 2EWDEC1 1. 2EC1ID PRICER 4.071078 2BALHCO -3.637 2EC1ID 2BALDSL -.066667 2BALEID .913 2EC1ID 2EIDEC1 1. 2EC1SD PRICER 4.071078 2BALHCO -3.637 2EC1SD 2BALDSL -.066667 2BALESD .913 2EC1SD 2ESDEC1 1. 2EC1WN PRICER 4.071078 2BALHCO -3.637 2EC1WN 2BALDSL -.066667 2BALEWN .913 2EC1WN 2EWNEC1 1. 2BASW -.77605 2EC1IN PRICER 4.071078 2BALHCO -3.637 2EC1IN 2BALDSL -.066667 2BALEIN .913 2EC1IN 2EINEC1 1. 2BASI -.77605 2EC1SN PRICER 4.071078 2BALHCO -3.637 2EC1SN 2BALDSL -.066667 2BALESN .913 2EC1SN 2ESNEC1 1. 2BASS -.77605 3EC1WD PRICER 3.042154 3BALHCO -3.637 3EC1WD 3BALDSL -.066667 3BALEWD .913 3EC1WD 3EWDEC1 1. 3EC1ID PRICER 3.042154 3BALHCO -3.637 3EC1ID 3BALDSL -.066667 3BALEID .913 3EC1ID 3EIDEC1 1. 3EC1SD PRICER 3.042154 3BALHCO -3.637 3EC1SD 3BALDSL -.066667 3BALESD .913 3EC1SD 3ESDEC1 1. 3EC1WN PRICER 3.042154 3BALHCO -3.637 3EC1WN 3BALDSL -.066667 3BALEWN .913 3EC1WN 3EWNEC1 1. 3BASW -.77605 3EC1IN PRICER 3.042154 3BALHCO -3.637 3EC1IN 3BALDSL -.066667 3BALEIN .913 3EC1IN 3EINEC1 1. 3BASI -.77605 3EC1SN PRICER 3.042154 3BALHCO -3.637 3EC1SN 3BALDSL -.066667 3BALESN .913 3EC1SN 3ESNEC1 1. 3BASS -.77605 1EC2WD PRICER 4.457562 1BALHCO -2.9758 1EC2WD 1BALDSL -.054545 1BALEWD .913 1EC2WD 1EWDEC2 1. 1EC2ID PRICER 4.457562 1BALHCO -2.9758 1EC2ID 1BALDSL -.054545 1BALEID .913 1EC2ID 1EIDEC2 1. 1EC2SD PRICER 4.457562 1BALHCO -2.9758 1EC2SD 1BALDSL -.054545 1BALESD .913 1EC2SD 1ESDEC2 1. 1EC2WN PRICER 4.457562 1BALHCO -2.9758 1EC2WN 1BALDSL -.054545 1BALEWN .913 1EC2WN 1EWNEC2 1. 1BASW -.77605 1EC2IN PRICER 4.457562 1BALHCO -2.9758 1EC2IN 1BALDSL -.054545 1BALEIN .913 1EC2IN 1EINEC2 1. 1BASI -.77605 1EC2SN PRICER 4.457562 1BALHCO -2.9758 1EC2SN 1BALDSL -.054545 1BALESN .913 1EC2SN 1ESNEC2 1. 1BASS -.77605 2EC2WD PRICER 3.330964 2BALHCO -2.9758 2EC2WD 2BALDSL -.054545 2BALEWD .913 2EC2WD 2EWDEC2 1. 2EC2ID PRICER 3.330964 2BALHCO -2.9758 2EC2ID 2BALDSL -.054545 2BALEID .913 2EC2ID 2EIDEC2 1. 2EC2SD PRICER 3.330964 2BALHCO -2.9758 2EC2SD 2BALDSL -.054545 2BALESD .913 2EC2SD 2ESDEC2 1. 2EC2WN PRICER 3.330964 2BALHCO -2.9758 2EC2WN 2BALDSL -.054545 2BALEWN .913 2EC2WN 2EWNEC2 1. 2BASW -.77605 2EC2IN PRICER 3.330964 2BALHCO -2.9758 2EC2IN 2BALDSL -.054545 2BALEIN .913 2EC2IN 2EINEC2 1. 2BASI -.77605 2EC2SN PRICER 3.330964 2BALHCO -2.9758 2EC2SN 2BALDSL -.054545 2BALESN .913 2EC2SN 2ESNEC2 1. 2BASS -.77605 3EC2WD PRICER 2.489097 3BALHCO -2.9758 3EC2WD 3BALDSL -.054545 3BALEWD .913 3EC2WD 3EWDEC2 1. 3EC2ID PRICER 2.489097 3BALHCO -2.9758 3EC2ID 3BALDSL -.054545 3BALEID .913 3EC2ID 3EIDEC2 1. 3EC2SD PRICER 2.489097 3BALHCO -2.9758 3EC2SD 3BALDSL -.054545 3BALESD .913 3EC2SD 3ESDEC2 1. 3EC2WN PRICER 2.489097 3BALHCO -2.9758 3EC2WN 3BALDSL -.054545 3BALEWN .913 3EC2WN 3EWNEC2 1. 3BASW -.77605 3EC2IN PRICER 2.489097 3BALHCO -2.9758 3EC2IN 3BALDSL -.054545 3BALEIN .913 3EC2IN 3EINEC2 1. 3BASI -.77605 3EC2SN PRICER 2.489097 3BALHCO -2.9758 3EC2SN 3BALDSL -.054545 3BALESN .913 3EC2SN 3ESNEC2 1. 3BASS -.77605 1EC3WD PRICER 5.635665 1BALHCO -2.7278 1EC3WD 1BALDSL -.05 1BALEWD .913 1EC3WD 1EWDEC3 1. 1EC3ID PRICER 5.635665 1BALHCO -2.7278 1EC3ID 1BALDSL -.05 1BALEID .913 1EC3ID 1EIDEC3 1. 1EC3SD PRICER 5.635665 1BALHCO -2.7278 1EC3SD 1BALDSL -.05 1BALESD .913 1EC3SD 1ESDEC3 1. 1EC3WN PRICER 5.635665 1BALHCO -2.7278 1EC3WN 1BALDSL -.05 1BALEWN .913 1EC3WN 1EWNEC3 1. 1BASW -.77605 1EC3IN PRICER 5.635665 1BALHCO -2.7278 1EC3IN 1BALDSL -.05 1BALEIN .913 1EC3IN 1EINEC3 1. 1BASI -.77605 1EC3SN PRICER 5.635665 1BALHCO -2.7278 1EC3SN 1BALDSL -.05 1BALESN .913 1EC3SN 1ESNEC3 1. 1BASS -.77605 2EC3WD PRICER 4.211314 2BALHCO -2.7278 2EC3WD 2BALDSL -.05 2BALEWD .913 2EC3WD 2EWDEC3 1. 2EC3ID PRICER 4.211314 2BALHCO -2.7278 2EC3ID 2BALDSL -.05 2BALEID .913 2EC3ID 2EIDEC3 1. 2EC3SD PRICER 4.211314 2BALHCO -2.7278 2EC3SD 2BALDSL -.05 2BALESD .913 2EC3SD 2ESDEC3 1. 2EC3WN PRICER 4.211314 2BALHCO -2.7278 2EC3WN 2BALDSL -.05 2BALEWN .913 2EC3WN 2EWNEC3 1. 2BASW -.77605 2EC3IN PRICER 4.211314 2BALHCO -2.7278 2EC3IN 2BALDSL -.05 2BALEIN .913 2EC3IN 2EINEC3 1. 2BASI -.77605 2EC3SN PRICER 4.211314 2BALHCO -2.7278 2EC3SN 2BALDSL -.05 2BALESN .913 2EC3SN 2ESNEC3 1. 2BASS -.77605 3EC3WD PRICER 3.146947 3BALHCO -2.7278 3EC3WD 3BALDSL -.05 3BALEWD .913 3EC3WD 3EWDEC3 1. 3EC3ID PRICER 3.146947 3BALHCO -2.7278 3EC3ID 3BALDSL -.05 3BALEID .913 3EC3ID 3EIDEC3 1. 3EC3SD PRICER 3.146947 3BALHCO -2.7278 3EC3SD 3BALDSL -.05 3BALESD .913 3EC3SD 3ESDEC3 1. 3EC3WN PRICER 3.146947 3BALHCO -2.7278 3EC3WN 3BALDSL -.05 3BALEWN .913 3EC3WN 3EWNEC3 1. 3BASW -.77605 3EC3IN PRICER 3.146947 3BALHCO -2.7278 3EC3IN 3BALDSL -.05 3BALEIN .913 3EC3IN 3EINEC3 1. 3BASI -.77605 3EC3SN PRICER 3.146947 3BALHCO -2.7278 3EC3SN 3BALDSL -.05 3BALESN .913 3EC3SN 3ESNEC3 1. 3BASS -.77605 1EP1WD PRICER 22.382751 1BALDSH -3.3333 1EP1WD 1BNDEP1L 1. 1BALEWD .913 1EP1WD 1EWDEP1 1. 1EP1ID PRICER 22.382751 1BALDSH -3.3333 1EP1ID 1BNDEP1L 1. 1BALEID .913 1EP1ID 1EIDEP1 1. 1EP1SD PRICER 22.382751 1BALDSH -3.3333 1EP1SD 1BNDEP1L 1. 1BALESD .913 1EP1SD 1ESDEP1 1. 1EP1WN PRICER 22.382751 1BALDSH -3.3333 1EP1WN 1BNDEP1L 1. 1BALEWN .913 1EP1WN 1EWNEP1 1. 1BASW -.77605 1EP1IN PRICER 22.382751 1BALDSH -3.3333 1EP1IN 1BNDEP1L 1. 1BALEIN .913 1EP1IN 1EINEP1 1. 1BASI -.77605 1EP1SN PRICER 22.382751 1BALDSH -3.3333 1EP1SN 1BNDEP1L 1. 1BALESN .913 1EP1SN 1ESNEP1 1. 1BASS -.77605 2EP1WD PRICER 16.725754 2BALDSH -3.3333 2EP1WD 2BNDEP1L 1. 2BALEWD .913 2EP1WD 2EWDEP1 1. 2EP1ID PRICER 16.725754 2BALDSH -3.3333 2EP1ID 2BNDEP1L 1. 2BALEID .913 2EP1ID 2EIDEP1 1. 2EP1SD PRICER 16.725754 2BALDSH -3.3333 2EP1SD 2BNDEP1L 1. 2BALESD .913 2EP1SD 2ESDEP1 1. 2EP1WN PRICER 16.725754 2BALDSH -3.3333 2EP1WN 2BNDEP1L 1. 2BALEWN .913 2EP1WN 2EWNEP1 1. 2BASW -.77605 2EP1IN PRICER 16.725754 2BALDSH -3.3333 2EP1IN 2BNDEP1L 1. 2BALEIN .913 2EP1IN 2EINEP1 1. 2BASI -.77605 2EP1SN PRICER 16.725754 2BALDSH -3.3333 2EP1SN 2BNDEP1L 1. 2BALESN .913 2EP1SN 2ESNEP1 1. 2BASS -.77605 3EP1WD PRICER 12.498495 3BALDSH -3.3333 3EP1WD 3BALEWD .913 3EWDEP1 1. 3EP1ID PRICER 12.498495 3BALDSH -3.3333 3EP1ID 3BALEID .913 3EIDEP1 1. 3EP1SD PRICER 12.498495 3BALDSH -3.3333 3EP1SD 3BALESD .913 3ESDEP1 1. 3EP1WN PRICER 12.498495 3BALDSH -3.3333 3EP1WN 3BALEWN .913 3EWNEP1 1. 3EP1WN 3BASW -.77605 3EP1IN PRICER 12.498495 3BALDSH -3.3333 3EP1IN 3BALEIN .913 3EINEP1 1. 3EP1IN 3BASI -.77605 3EP1SN PRICER 12.498495 3BALDSH -3.3333 3EP1SN 3BALESN .913 3ESNEP1 1. 3EP1SN 3BASS -.77605 1E14WD PRICER 4.183896 1BALDSL -3.5971 1E14WD 1BALEWD .913 1EWDE14 1. 1E14ID PRICER 4.183896 1BALDSL -3.5971 1E14ID 1BALEID .913 1EIDE14 1. 1E14SD PRICER 4.183896 1BALDSL -3.5971 1E14SD 1BALESD .913 1ESDE14 1. 1E14WN PRICER 4.183896 1BALDSL -3.5971 1E14WN 1BALEWN .913 1EWNE14 1. 1E14WN 1BASW -.77605 1E14IN PRICER 4.183896 1BALDSL -3.5971 1E14IN 1BALEIN .913 1EINE14 1. 1E14IN 1BASI -.77605 1E14SN PRICER 4.183896 1BALDSL -3.5971 1E14SN 1BALESN .913 1ESNE14 1. 1E14SN 1BASS -.77605 2E14WD PRICER 3.126463 2BALDSL -3.5971 2E14WD 2BALEWD .913 2EWDE14 1. 2E14ID PRICER 3.126463 2BALDSL -3.5971 2E14ID 2BALEID .913 2EIDE14 1. 2E14SD PRICER 3.126463 2BALDSL -3.5971 2E14SD 2BALESD .913 2ESDE14 1. 2E14WN PRICER 3.126463 2BALDSL -3.5971 2E14WN 2BALEWN .913 2EWNE14 1. 2E14WN 2BASW -.77605 2E14IN PRICER 3.126463 2BALDSL -3.5971 2E14IN 2BALEIN .913 2EINE14 1. 2E14IN 2BASI -.77605 2E14SN PRICER 3.126463 2BALDSL -3.5971 2E14SN 2BALESN .913 2ESNE14 1. 2E14SN 2BASS -.77605 3E14WD PRICER 2.336281 3BALDSL -3.5971 3E14WD 3BALEWD .913 3EWDE14 1. 3E14ID PRICER 2.336281 3BALDSL -3.5971 3E14ID 3BALEID .913 3EIDE14 1. 3E14SD PRICER 2.336281 3BALDSL -3.5971 3E14SD 3BALESD .913 3ESDE14 1. 3E14WN PRICER 2.336281 3BALDSL -3.5971 3E14WN 3BALEWN .913 3EWNE14 1. 3E14WN 3BASW -.77605 3E14IN PRICER 2.336281 3BALDSL -3.5971 3E14IN 3BALEIN .913 3EINE14 1. 3E14IN 3BASI -.77605 3E14SN PRICER 2.336281 3BALDSL -3.5971 3E14SN 3BALESN .913 3ESNE14 1. 3E14SN 3BASS -.77605 1E22WD PRICER 1.807856 1BALPLU .016627 1E22WD 1BALMAG -12.6582 2BALPLU .007126 1E22WD 1BALEWD .4565 1BALEWN .4565 1E22WD 1EWDE22 1. 1BASW .068475 1E22ID PRICER 1.807856 1BALPLU .016627 1E22ID 1BALMAG -12.6582 2BALPLU .007126 1E22ID 1BALEID .59345 1BALEIN .31955 1E22ID 1EIDE22 1. 1BASI .047932 1E22SD PRICER 1.807856 1BALPLU .016627 1E22SD 1BALMAG -12.6582 2BALPLU .007126 1E22SD 1BALESD .654317 1BALESN .258683 1E22SD 1ESDE22 1. 1BASS .038802 2E22WD PRICER 1.350941 2BALPLU .016627 2E22WD 2BALMAG -12.6582 3BALPLU .007126 2E22WD 2BALEWD .4565 2BALEWN .4565 2E22WD 2EWDE22 1. 2BASW .068475 2E22ID PRICER 1.350941 2BALPLU .016627 2E22ID 2BALMAG -12.6582 3BALPLU .007126 2E22ID 2BALEID .59345 2BALEIN .31955 2E22ID 2EIDE22 1. 2BASI .047932 2E22SD PRICER 1.350941 2BALPLU .016627 2E22SD 2BALMAG -12.6582 3BALPLU .007126 2E22SD 2BALESD .654317 2BALESN .258683 2E22SD 2ESDE22 1. 2BASS .038802 3E22WD PRICER 1.009503 3BALPLU .016627 3E22WD 3BALMAG -12.6582 3BALEWD .4565 3E22WD 3BALEWN .4565 3EWDE22 1. 3E22WD 3BASW .068475 3E22ID PRICER 1.009503 3BALPLU .016627 3E22ID 3BALMAG -12.6582 3BALEID .59345 3E22ID 3BALEIN .31955 3EIDE22 1. 3E22ID 3BASI .047932 3E22SD PRICER 1.009503 3BALPLU .016627 3E22SD 3BALMAG -12.6582 3BALESD .654317 3E22SD 3BALESN .258683 3ESDE22 1. 3E22SD 3BASS .038802 1E23WD PRICER 1.136366 1BALAGR -1.457729 1E23WD 1BALAGS 1.457729 1BALEWD .4565 1E23WD 1BALEWN .4565 1EWDE23 1. 1E23WD 1BASW .068475 1E23ID PRICER 1.136366 1BALAGR -1.457729 1E23ID 1BALAGS 1.457729 1BALEID .59345 1E23ID 1BALEIN .31955 1EIDE23 1. 1E23ID 1BASI .047932 1E23SD PRICER 1.136366 1BALAGR -1.457729 1E23SD 1BALAGS 1.457729 1BALESD .654317 1E23SD 1BALESN .258683 1ESDE23 1. 1E23SD 1BASS .038802 2E23WD PRICER .849163 2BALAGR -1.457729 2E23WD 2BALAGS 1.457729 2BALEWD .4565 2E23WD 2BALEWN .4565 2EWDE23 1. 2E23WD 2BASW .068475 2E23ID PRICER .849163 2BALAGR -1.457729 2E23ID 2BALAGS 1.457729 2BALEID .59345 2E23ID 2BALEIN .31955 2EIDE23 1. 2E23ID 2BASI .047932 2E23SD PRICER .849163 2BALAGR -1.457729 2E23SD 2BALAGS 1.457729 2BALESD .654317 2E23SD 2BALESN .258683 2ESDE23 1. 2E23SD 2BASS .038802 3E23WD PRICER .634546 3BALAGR -1.457729 3E23WD 3BALAGS 1.457729 3BALEWD .4565 3E23WD 3BALEWN .4565 3EWDE23 1. 3E23WD 3BASW .068475 3E23ID PRICER .634546 3BALAGR -1.457729 3E23ID 3BALAGS 1.457729 3BALEID .59345 3E23ID 3BALEIN .31955 3EIDE23 1. 3E23ID 3BASI .047932 3E23SD PRICER .634546 3BALAGR -1.457729 3E23SD 3BALAGS 1.457729 3BALESD .654317 3E23SD 3BALESN .258683 3ESDE23 1. 3E23SD 3BASS .038802 1E31WD 1BALEWD .913 1EWDE31 1. 1E31ID 1BALEID .913 1EIDE31 1. 1E31SD 1BALESD .913 1ESDE31 1. 1E31WN 1BALEWN .913 1EWNE31 1. 1E31WN 1BASW -.77605 1E31IN 1BALEIN .913 1EINE31 1. 1E31IN 1BASI -.77605 1E31SN 1BALESN .913 1ESNE31 1. 1E31SN 1BASS -.77605 2E31WD 2BALEWD .913 2EWDE31 1. 2E31ID 2BALEID .913 2EIDE31 1. 2E31SD 2BALESD .913 2ESDE31 1. 2E31WN 2BALEWN .913 2EWNE31 1. 2E31WN 2BASW -.77605 2E31IN 2BALEIN .913 2EINE31 1. 2E31IN 2BASI -.77605 2E31SN 2BALESN .913 2ESNE31 1. 2E31SN 2BASS -.77605 3E31WD 3BALEWD .913 3EWDE31 1. 3E31ID 3BALEID .913 3EIDE31 1. 3E31SD 3BALESD .913 3ESDE31 1. 3E31WN 3BALEWN .913 3EWNE31 1. 3E31WN 3BASW -.77605 3E31IN 3BALEIN .913 3EINE31 1. 3E31IN 3BASI -.77605 3E31SN 3BALESN .913 3ESNE31 1. 3E31SN 3BASS -.77605 2E35WD 2BALEWD .913 2EWDE35 1. 2E35ID 2BALEID .913 2EIDE35 1. 2E35SD 2BALESD .913 2ESDE35 1. 2E35WN 2BALEWN .913 2EWNE35 1. 2E35WN 2BASW -.77605 2E35IN 2BALEIN .913 2EINE35 1. 2E35IN 2BASI -.77605 2E35SN 2BALESN .913 2ESNE35 1. 2E35SN 2BASS -.77605 3E35WD 3BALEWD .913 3EWDE35 1. 3E35ID 3BALEID .913 3EIDE35 1. 3E35SD 3BALESD .913 3ESDE35 1. 3E35WN 3BALEWN .913 3EWNE35 1. 3E35WN 3BASW -.77605 3E35IN 3BALEIN .913 3EINE35 1. 3E35IN 3BASI -.77605 3E35SN 3BALESN .913 3ESNE35 1. 3E35SN 3BASS -.77605 3E94WD PRICER 41.750214 3BALGAS -2.5 3E94WD 3BALEWD 1. 3EWDE94 1. 3E94ID PRICER 41.750214 3BALGAS -2.5 3E94ID 3BALEID 1. 3EIDE94 1. 3E94SD PRICER 41.750214 3BALGAS -2.5 3E94SD 3BALESD 1. 3ESDE94 1. 3E94WN PRICER 41.750214 3BALGAS -2.5 3E94WN 3BALEWN 1. 3EWNE94 1. 3E94WN 3BASW -.85 3E94IN PRICER 41.750214 3BALGAS -2.5 3E94IN 3BALEIN 1. 3EINE94 1. 3E94IN 3BASI -.85 3E94SN PRICER 41.750214 3BALGAS -2.5 3E94SN 3BALESN 1. 3ESNE94 1. 3E94SN 3BASS -.85 3E60WD PRICER 3.533263 3BALHCO -2.5 3E60WD 3BALEWD 1. 3EWDE60 1. 3E60WD 3BALDHW 2. 3E60ID PRICER 3.533263 3BALHCO -2.5 3E60ID 3BALEID 1. 3EIDE60 1. 3E60ID 3BALDHI 2. 3E60SD PRICER 3.533263 3BALHCO -2.5 3E60SD 3BALESD 1. 3ESDE60 1. 3E60SD 3BALDHS 2. 3E60WN PRICER 3.533263 3BALHCO -2.5 3E60WN 3BALEWN 1. 3EWNE60 1. 3E60WN 3BASW -.85 3BALDHW 2. 3E60IN PRICER 3.533263 3BALHCO -2.5 3E60IN 3BALEIN 1. 3EINE60 1. 3E60IN 3BASI -.85 3BALDHI 2. 3E60SN PRICER 3.533263 3BALHCO -2.5 3E60SN 3BALESN 1. 3ESNE60 1. 3E60SN 3BASS -.85 3BALDHS 2. 1E51WD 1BALEWD .913 1BALEWN -1.304311 1E51WD 1EWDE51 1. 1E51ID 1BALEID .913 1BALEIN -1.304311 1E51ID 1EIDE51 1. 1E51SD 1BALESD .913 1BALESN -1.304311 1E51SD 1ESDE51 1. 2E51WD 2BALEWD .913 2BALEWN -1.292807 2E51WD 2EWDE51 1. 2E51ID 2BALEID .913 2BALEIN -1.292807 2E51ID 2EIDE51 1. 2E51SD 2BALESD .913 2BALESN -1.292807 2E51SD 2ESDE51 1. 3E51WD 3BALEWD .913 3BALEWN -1.281395 3E51WD 3EWDE51 1. 3E51ID 3BALEID .913 3BALEIN -1.281395 3E51ID 3EIDE51 1. 3E51SD 3BALESD .913 3BALESN -1.281395 3E51SD 3ESDE51 1. RHS REST 1CPTEP1 12.355 1CPTE14 3.487 REST 1CPTE22 3.727 1CPTE23 2. REST 1CPTE31 1.686 1CPTE51 1. REST 1CPTS06 555. 1CPTS21 4088. REST 1CPTS23 728. 1CPTS28 445. REST 1CPTIJ6 248.21 1CPTIJ7 126.78 REST 1CPTIJ8 61.21 1CPTR20 38.95 REST 1CPTR21 24.79 1CPTR23 43.24 REST 1CPTR27 235.17 1CPTR28 52.4 REST 1CPTRT0 30.689987 1CPTRT1 61.37 REST 1CPTRT3 85.93 1CPTRT7 76.63 REST 1CPTRT8 16.63 1CPTR50 4. REST 1CPTR51 65.64 1CPTR53 34.019989 REST 1CPTR57 157.73 1CPTR58 26.34 REST 2CPTEP1 8.303 2CPTE14 2.838 REST 2CPTE22 3.727 2CPTE23 2. REST 2CPTE31 1.686 2CPTE51 1. REST 2CPTS06 229. 2CPTS21 3270. REST 2CPTS23 582. 2CPTS28 356. REST 2CPTIJ6 150. 2CPTIJ7 70. REST 2CPTIJ8 30. 2CPTR20 20. REST 2CPTR21 12. 2CPTR23 22. REST 2CPTR27 118. 2CPTR28 26. REST 2CPTRT0 15. 2CPTRT1 30. REST 2CPTRT3 43. 2CPTRT7 38. REST 2CPTRT8 8. 2CPTR50 2. REST 2CPTR51 32. 2CPTR53 17. REST 2CPTR57 80. 2CPTR58 13. REST 3CPTEP1 7.765 3CPTE14 2.838 REST 3CPTE22 2.906 3CPTE23 2. REST 3CPTE31 1.686 3CPTE51 1. REST 3CPTS06 153. 3CPTS21 2453. REST 3CPTS23 437. 3CPTS28 267. REST 3CPTIJ6 50. 3CPTIJ7 30. REST 3CPTR20 10. 3CPTR21 6. REST 3CPTR23 11. 3CPTR27 59. REST 3CPTR28 13. 3CPTRT0 7.5 REST 3CPTRT1 15. 3CPTRT3 21. REST 3CPTRT7 19. 3CPTRT8 4. REST 3CPTR50 1. 3CPTR51 16. REST 3CPTR53 8.5 3CPTR57 40. REST 3CPTR58 6.5 3GRCE35 .01 REST 1DEMI1 332.829834 1DEMII 826.959961 REST 1DEMIJ 436.189941 1DEMNY 616.079834 REST 1DEMR2 617.72998 1DEMRT 277.599854 REST 1DEMR5 287.72998 1DEMRD 417.99 REST 1DEMT8 1161.799805 1DEMTX 327.7 REST 2DEMI1 328.219971 2DEMII 827.689941 REST 2DEMIJ 397.099854 2DEMNY 626.849854 REST 2DEMR2 606.099854 2DEMRT 268.7 REST 2DEMR5 277.139893 2DEMRD 413.799805 REST 2DEMT8 1200. 2DEMTX 338.5 REST 3DEMI1 291.689941 3DEMII 855.269775 REST 3DEMIJ 376.829834 3DEMNY 634.919922 REST 3DEMR2 576.839844 3DEMRT 264.799805 REST 3DEMR5 264.829834 3DEMRD 418.579834 REST 3DEMT8 1201.599854 3DEMTX 358.9 REST 1BNDEP1L 64.659988 2BNDEP1L 24.25 BOUNDS FX BNDSET1 1MINHCO1 3084.099854 UP BNDSET1 2MINHCO1 3084.099854 UP BNDSET1 3MINHCO1 3039. UP BNDSET1 1STKOIK1 28940. FX BNDSET1 1EXPDSH1 91. FX BNDSET1 2EXPDSH1 61. FX BNDSET1 3EXPDSH1 61. FX BNDSET1 1EXPDSL1 23. FX BNDSET1 2EXPDSL1 17. FX BNDSET1 3EXPDSL1 17. UP BNDSET1 1EXPGAS1 .1 UP BNDSET1 2EXPGAS1 .1 UP BNDSET1 3EXPGAS1 .1 UP BNDSET1 1STKGAK1 12058. UP BNDSET1 1STKURN1 .1 UP BNDSET1 1STKUDP1 .1 UP BNDSET1 1STKPLU1 1.5 UP BNDSET1 1STKAGS1 .0001 UP BNDSET1 1STKLMS1 .0001 UP BNDSET1 2E35INV .0001 UP BNDSET1 3E35INV .0001 UP BNDSET1 3E94INV .0001 UP BNDSET1 3E60INV .0001 UP BNDSET1 3S80INV .001 LO BNDSET1 1IJ6CAP 248.21 LO BNDSET1 2IJ6CAP 150. LO BNDSET1 3IJ6CAP 50. LO BNDSET1 1IJ7CAP 126.78 LO BNDSET1 2IJ7CAP 70. LO BNDSET1 3IJ7CAP 30. LO BNDSET1 1IJ8CAP 61.21 LO BNDSET1 2IJ8CAP 30. LO BNDSET1 1R20CAP 38.95 LO BNDSET1 2R20CAP 20. LO BNDSET1 3R20CAP 10. LO BNDSET1 1R21CAP 24.79 LO BNDSET1 2R21CAP 12. LO BNDSET1 3R21CAP 6. LO BNDSET1 1R23CAP 43.24 LO BNDSET1 2R23CAP 22. LO BNDSET1 3R23CAP 11. LO BNDSET1 1R27CAP 235.17 LO BNDSET1 2R27CAP 118. LO BNDSET1 3R27CAP 59. LO BNDSET1 1R28CAP 52.4 LO BNDSET1 2R28CAP 26. LO BNDSET1 3R28CAP 13. UP BNDSET1 2R2ACAP .29 UP BNDSET1 3R2ACAP .58 FX BNDSET1 1R2YCAP 223.18 FX BNDSET1 2R2YCAP 218.49 FX BNDSET1 3R2YCAP 205.62 FX BNDSET1 1RT0CAP 30.689987 LO BNDSET1 2RT0CAP 15. LO BNDSET1 3RT0CAP 7.5 FX BNDSET1 1RT1CAP 61.37 LO BNDSET1 2RT1CAP 30. LO BNDSET1 3RT1CAP 15. FX BNDSET1 1RT7CAP 76.63 LO BNDSET1 2RT7CAP 38. LO BNDSET1 3RT7CAP 19. FX BNDSET1 1RT8CAP 16.63 LO BNDSET1 2RT8CAP 8. LO BNDSET1 3RT8CAP 4. FX BNDSET1 1RTYCAP 6.3 FX BNDSET1 2RTYCAP 4.9 FX BNDSET1 3RTYCAP 4.2 FX BNDSET1 1R50CAP 4. LO BNDSET1 2R50CAP 2. LO BNDSET1 3R50CAP 1. FX BNDSET1 1R53CAP 34.019989 LO BNDSET1 2R53CAP 17. LO BNDSET1 3R53CAP 8.5 FX BNDSET1 1R57CAP 157.73 LO BNDSET1 2R57CAP 80. LO BNDSET1 3R57CAP 40. FX BNDSET1 1R58CAP 26.34 LO BNDSET1 2R58CAP 13. LO BNDSET1 3R58CAP 6.5 UP BNDSET1 2R5ACAP .09 UP BNDSET1 3R5ACAP .18 FX BNDSET1 1T80CAP 8.32 FX BNDSET1 1T8FCAP 754.629883 FX BNDSET1 2T8FCAP 728.629883 FX BNDSET1 3T8FCAP 702.629883 FX BNDSET1 1S06CAP 555. FX BNDSET1 2S06CAP 229. FX BNDSET1 3S06CAP 153. UP BNDSET1 1S08CAP 115. UP BNDSET1 2S08CAP 384. UP BNDSET1 3S08CAP 458. FX BNDSET1 1S79CAP 1457. UP BNDSET1 2S79CAP 1840. UP BNDSET1 3S79CAP 2060. FX BNDSET1 1S7ACAP 3640. UP BNDSET1 2S7ACAP 4967. UP BNDSET1 3S7ACAP 4290. FX BNDSET1 1EC1CAP 9.536 FX BNDSET1 2EC1CAP 4.392 FX BNDSET1 3EC1CAP .622 FX BNDSET1 1EC2CAP 35.288 FX BNDSET1 2EC2CAP 34.874 FX BNDSET1 3EC2CAP 33.635986 LO BNDSET1 3EC3CAP 1.875 FX BNDSET1 1EP1CAP 12.355 FX BNDSET1 2EP1CAP 14.817 LO BNDSET1 2E14CAP 3.109 FX BNDSET1 1E22CAP 3.727 FX BNDSET1 2E22CAP 3.727 FX BNDSET1 3E22CAP 2.906 FX BNDSET1 1E23CAP 2. FX BNDSET1 2E23CAP 5.112 FX BNDSET1 3E23CAP 7.592 UP BNDSET1 1E31CAP 1.686 UP BNDSET1 2E31CAP 1.686 UP BNDSET1 3E31CAP 1.686 UP BNDSET1 2E35CAP .005 UP BNDSET1 3E35CAP 1. UP BNDSET1 3E60CAP 3. FX BNDSET1 1E51CAP 1.3 UP BNDSET1 2E51CAP 1.301 UP BNDSET1 3E51CAP 1.301 ENDATA Vol-1.5.4/Data/Sample/app0110R.stoch0000755000175000017500000001062311015552002015647 0ustar sudipsudipNAME MYSMPS SCENARIOS DISCRETE REPLACE SC SCEN0001 ROOT 0.111 STG00002 RHS R0000010 2 RHS R0000011 1 RHS R0000012 2 RHS R0000013 2 RHS R0000014 3 RHS R0000015 1 RHS R0000017 2 RHS R0000018 4 RHS R0000019 1 RHS R0000020 4 RHS R0000021 2 RHS R0000022 5 RHS R0000023 1 RHS R0000024 5 RHS R0000025 2 SC SCEN0002 SCEN0001 0.111 STG00003 RHS R0000014 2 RHS R0000015 3 RHS R0000018 2 RHS R0000019 2 RHS R0000020 2 RHS R0000021 3 RHS R0000022 2 RHS R0000023 1 RHS R0000024 1 RHS R0000025 3 SC SCEN0003 SCEN0001 0.111 STG00003 RHS R0000014 3 RHS R0000017 4 RHS R0000018 2 RHS R0000019 5 RHS R0000020 2 RHS R0000021 3 RHS R0000022 1 RHS R0000023 5 RHS R0000024 1 RHS R0000025 2 SC SCEN0004 ROOT 0.111 STG00002 RHS R0000010 2 RHS R0000011 2 RHS R0000012 2 RHS R0000013 3 RHS R0000014 3 RHS R0000015 1 RHS R0000017 2 RHS R0000018 4 RHS R0000019 1 RHS R0000020 4 RHS R0000021 2 RHS R0000022 5 RHS R0000023 1 RHS R0000024 5 RHS R0000025 2 SC SCEN0005 SCEN0004 0.111 STG00003 RHS R0000014 2 RHS R0000015 3 RHS R0000018 2 RHS R0000019 2 RHS R0000020 2 RHS R0000021 3 RHS R0000022 2 RHS R0000023 1 RHS R0000024 1 RHS R0000025 3 SC SCEN0006 SCEN0004 0.111 STG00003 RHS R0000014 3 RHS R0000017 4 RHS R0000018 2 RHS R0000019 5 RHS R0000020 2 RHS R0000021 3 RHS R0000022 1 RHS R0000023 5 RHS R0000024 1 RHS R0000025 2 SC SCEN0007 ROOT 0.111 STG00002 RHS R0000010 4 RHS R0000011 2 RHS R0000012 4 RHS R0000013 5 RHS R0000014 3 RHS R0000015 1 RHS R0000017 2 RHS R0000018 4 RHS R0000019 1 RHS R0000020 4 RHS R0000021 2 RHS R0000022 5 RHS R0000023 1 RHS R0000024 5 RHS R0000025 2 SC SCEN0008 SCEN0007 0.111 STG00003 RHS R0000014 2 RHS R0000015 3 RHS R0000018 2 RHS R0000019 2 RHS R0000020 2 RHS R0000021 3 RHS R0000022 2 RHS R0000023 1 RHS R0000024 1 RHS R0000025 3 SC SCEN0009 SCEN0007 0.111 STG00003 RHS R0000014 3 RHS R0000017 4 RHS R0000018 2 RHS R0000019 5 RHS R0000020 2 RHS R0000021 3 RHS R0000022 1 RHS R0000023 5 RHS R0000024 1 RHS R0000025 2 ENDATA Vol-1.5.4/Data/Sample/bug.time0000755000175000017500000000021311015552002015030 0ustar sudipsudipTIME BUG PERIODS LP x01 C0 STG01 x04 C1 STG02 ENDATA Vol-1.5.4/Data/Sample/configure0000755000175000017500000034547013374040606015334 0ustar sudipsudip#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for DataSample 1.2.11. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # # Copyright 2006 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package Coin which is distributed # under the Eclipse Public License. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='DataSample' PACKAGE_TARNAME='datasample' PACKAGE_VERSION='1.2.11' PACKAGE_STRING='DataSample 1.2.11' PACKAGE_BUGREPORT='https://projects.coin-or.org/BuildTools/' ac_unique_file="configure.ac" ac_default_prefix=`pwd` ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS ALWAYS_FALSE_TRUE ALWAYS_FALSE_FALSE have_svnversion DATASAMPLE_SVN_REV EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE build build_cpu build_vendor build_os EXAMPLE_UNCOMPRESSED_FILES EXAMPLE_FILES EXAMPLE_CLEAN_FILES ABSBUILDDIR LIBEXT VPATH_DISTCLEANFILES LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures DataSample 1.2.11 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of DataSample 1.2.11:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. Report bugs to . _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF DataSample configure 1.2.11 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by DataSample $as_me 1.2.11, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # List one file in the package so that the configure script can test # whether the package is actually there # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. # As backup, we make sure we don't loose an FLIBS if it has been set # by the user save_FLIBS="$FLIBS" # A useful makefile conditional that is always false if false; then ALWAYS_FALSE_TRUE= ALWAYS_FALSE_FALSE='#' else ALWAYS_FALSE_TRUE='#' ALWAYS_FALSE_FALSE= fi # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes # Set the project's version numbers cat >>confdefs.h <<_ACEOF #define DATASAMPLE_VERSION "$PACKAGE_VERSION" _ACEOF coin_majorver=`echo $PACKAGE_VERSION | sed -n -e 's/^\([0-9]*\).*/\1/gp'` coin_minorver=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.\([0-9]*\).*/\1/gp'` coin_releasever=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/gp'` if test "x$coin_majorver" = x ; then coin_majorver=9999 ; fi if test "x$coin_minorver" = x ; then coin_minorver=9999 ; fi if test "x$coin_releasever" = x ; then coin_releasever=9999 ; fi cat >>confdefs.h <<_ACEOF #define DATASAMPLE_VERSION_MAJOR $coin_majorver _ACEOF cat >>confdefs.h <<_ACEOF #define DATASAMPLE_VERSION_MINOR $coin_minorver _ACEOF cat >>confdefs.h <<_ACEOF #define DATASAMPLE_VERSION_RELEASE $coin_releasever _ACEOF # We use the following variable to have a string with the upper case # version of the project name COIN_PRJCT=DATASAMPLE # Set the project's SVN revision number. The complicated sed expression # (made worse by quadrigraphs) ensures that things like 4123:4168MS end up # as a single number. # Extract the first word of "svnversion", so it can be a program name with args. set dummy svnversion; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svnversion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svnversion"; then ac_cv_prog_have_svnversion="$have_svnversion" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svnversion="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svnversion" && ac_cv_prog_have_svnversion="no" fi fi have_svnversion=$ac_cv_prog_have_svnversion if test -n "$have_svnversion"; then echo "$as_me:$LINENO: result: $have_svnversion" >&5 echo "${ECHO_T}$have_svnversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$have_svnversion" = xyes; then svn_rev_tmp=`LANG=en_EN svnversion $srcdir 2>/dev/null` if test "x$svn_rev_tmp" != xexported -a "x$svn_rev_tmp" != x -a "x$svn_rev_tmp" != "xUnversioned directory"; then DATASAMPLE_SVN_REV=`echo $svn_rev_tmp | sed -n -e 's/^[0-9]*://' -e 's/\([0-9]\)[^0-9]*$/\1/p'` cat >>confdefs.h <<_ACEOF #define DATASAMPLE_SVN_REV $DATASAMPLE_SVN_REV _ACEOF fi fi # Capture libtool library version, if given. coin_libversion=2:11:1 ############################################################################# # We only need automake to generate Makefiles for the distribution # ############################################################################# # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='datasample' VERSION='1.2.11' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME echo "$as_me:$LINENO: checking whether we are using the correct autotools" >&5 echo $ECHO_N "checking whether we are using the correct autotools... $ECHO_C" >&6 if test "${ac_cv_use_correct_autotools+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_use_correct_autotools=check fi echo "$as_me:$LINENO: result: $ac_cv_use_correct_autotools" >&5 echo "${ECHO_T}$ac_cv_use_correct_autotools" >&6 if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf # Extract the first word of "autoconf", so it can be a program name with args. set dummy autoconf; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_autoconf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_autoconf"; then ac_cv_prog_have_autoconf="$have_autoconf" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_autoconf="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_autoconf" && ac_cv_prog_have_autoconf="no" fi fi have_autoconf=$ac_cv_prog_have_autoconf if test -n "$have_autoconf"; then echo "$as_me:$LINENO: result: $have_autoconf" >&5 echo "${ECHO_T}$have_autoconf" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_autoconf = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of autoconf" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of autoconf... $ECHO_C" >&6 autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of autoconf as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of autoconf as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location echo "$as_me:$LINENO: checking whether autoconf is coming from the correct location" >&5 echo $ECHO_N "checking whether autoconf is coming from the correct location... $ECHO_C" >&6 autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if we have automake # Extract the first word of "automake", so it can be a program name with args. set dummy automake; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_automake+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_automake"; then ac_cv_prog_have_automake="$have_automake" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_automake="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_automake" && ac_cv_prog_have_automake="no" fi fi have_automake=$ac_cv_prog_have_automake if test -n "$have_automake"; then echo "$as_me:$LINENO: result: $have_automake" >&5 echo "${ECHO_T}$have_automake" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_automake = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of automake" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of automake... $ECHO_C" >&6 automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of automake as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of automake as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable automake is picked up from the correct location echo "$as_me:$LINENO: checking whether automake is coming from the correct location" >&5 echo $ECHO_N "checking whether automake is coming from the correct location... $ECHO_C" >&6 automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` if test -r $want_dir/libtool/ltmain.sh; then have_ltmain=yes : else have_ltmain=no : fi echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of libtool." >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of libtool.... $ECHO_C" >&6 if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of libtool." >&5 echo "$as_me: error: You don't have the correct version of libtool." >&2;} { (exit 1); exit 1; }; } fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: I cannot find the ltmain.sh file." >&5 echo "$as_me: error: I cannot find the ltmain.sh file." >&2;} { (exit 1); exit 1; }; } fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi if test -r $want_dir/aclocal/libtool.m4; then LIBTOOLM4="$want_dir/aclocal/libtool.m4" : else { { echo "$as_me:$LINENO: error: I cannot find the libtool.m4 file." >&5 echo "$as_me: error: I cannot find the libtool.m4 file." >&2;} { (exit 1); exit 1; }; } : fi # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svn"; then ac_cv_prog_have_svn="$have_svn" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svn="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svn" && ac_cv_prog_have_svn="no" fi fi have_svn=$ac_cv_prog_have_svn if test -n "$have_svn"; then echo "$as_me:$LINENO: result: $have_svn" >&5 echo "${ECHO_T}$have_svn" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$have_svn = xyes; then echo "$as_me:$LINENO: checking whether svn understands https" >&5 echo $ECHO_N "checking whether svn understands https... $ECHO_C" >&6 if test "${ac_cv_svn_understands_https+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out fi echo "$as_me:$LINENO: result: $ac_cv_svn_understands_https" >&5 echo "${ECHO_T}$ac_cv_svn_understands_https" >&6 fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else { { echo "$as_me:$LINENO: error: Cannot find the BuildTools directory" >&5 echo "$as_me: error: Cannot find the BuildTools directory" >&2;} { (exit better disable maintainer mode.); exit better disable maintainer mode.; }; } fi fi fi # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` abs_lib_dir=$full_prefix/lib abs_include_dir=$full_prefix/include abs_bin_dir=$full_prefix/bin if test $coin_have_externals = yes && test x$have_svn = xyes; then HAVE_EXTERNALS_TRUE= HAVE_EXTERNALS_FALSE='#' else HAVE_EXTERNALS_TRUE='#' HAVE_EXTERNALS_FALSE= fi # AC_MSG_NOTICE([End automake initialisation.]) ############################################################################# #Find out what the data files are and create links if this is a VPATH config# ############################################################################# echo "$as_me:$LINENO: checking whether this is a VPATH configuration" >&5 echo $ECHO_N "checking whether this is a VPATH configuration... $ECHO_C" >&6 if test `cd $srcdir; pwd` != `pwd`; then coin_vpath_config=yes; else coin_vpath_config=no; fi echo "$as_me:$LINENO: result: $coin_vpath_config" >&5 echo "${ECHO_T}$coin_vpath_config" >&6 # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac fi files=`cd $srcdir; ls *.mps` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (*.mps)" >&5 echo "$as_me: Copying example files (*.mps)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (*.mps)" >&5 echo "$as_me: Creating links to the example files (*.mps)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES *.mps" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done files=`cd $srcdir; ls *.lp` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (*.lp)" >&5 echo "$as_me: Copying example files (*.lp)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (*.lp)" >&5 echo "$as_me: Creating links to the example files (*.lp)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES *.lp" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done files=`cd $srcdir; ls *.block` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (*.block)" >&5 echo "$as_me: Copying example files (*.block)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (*.block)" >&5 echo "$as_me: Creating links to the example files (*.block)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES *.block" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done files=`cd $srcdir; ls *.dec` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (*.dec)" >&5 echo "$as_me: Copying example files (*.dec)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (*.dec)" >&5 echo "$as_me: Creating links to the example files (*.dec)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES *.dec" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done files=`cd $srcdir; ls input.130` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (input.130)" >&5 echo "$as_me: Copying example files (input.130)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (input.130)" >&5 echo "$as_me: Creating links to the example files (input.130)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES input.130" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done files=`cd $srcdir; ls app0110.* app0110R.* bug.*` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (app0110.* app0110R.* bug.*)" >&5 echo "$as_me: Copying example files (app0110.* app0110R.* bug.*)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (app0110.* app0110R.* bug.*)" >&5 echo "$as_me: Creating links to the example files (app0110.* app0110R.* bug.*)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES app0110.* app0110R.* bug.*" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done ############################################################################## # Finishing up by writing all the output # ############################################################################## ABSBUILDDIR="`pwd`" # Here list all the files that configure should create (except for the # configuration header file) ac_config_files="$ac_config_files Makefile coindatasample.pc coindatasample-uninstalled.pc" # Finally, we let configure write all the output... echo "$as_me:$LINENO: checking which command should be used to link input files" >&5 echo $ECHO_N "checking which command should be used to link input files... $ECHO_C" >&6 coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac echo "$as_me:$LINENO: result: $coin_link_input_cmd" >&5 echo "${ECHO_T}$coin_link_input_cmd" >&6 if test x$coin_skip_ac_output != xyes; then # library extension case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g p _ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within # single-quotes doesn't work because, if this script is created in a # platform that uses two characters for line-breaks (e.g., DOS), tr # would break. ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${ALWAYS_FALSE_TRUE}" && test -z "${ALWAYS_FALSE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_EXTERNALS_TRUE}" && test -z "${HAVE_EXTERNALS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by DataSample $as_me 1.2.11, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ DataSample config.status 1.2.11 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "coindatasample.pc" ) CONFIG_FILES="$CONFIG_FILES coindatasample.pc" ;; "coindatasample-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES coindatasample-uninstalled.pc" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@ALWAYS_FALSE_TRUE@,$ALWAYS_FALSE_TRUE,;t t s,@ALWAYS_FALSE_FALSE@,$ALWAYS_FALSE_FALSE,;t t s,@have_svnversion@,$have_svnversion,;t t s,@DATASAMPLE_SVN_REV@,$DATASAMPLE_SVN_REV,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@EXAMPLE_UNCOMPRESSED_FILES@,$EXAMPLE_UNCOMPRESSED_FILES,;t t s,@EXAMPLE_FILES@,$EXAMPLE_FILES,;t t s,@EXAMPLE_CLEAN_FILES@,$EXAMPLE_CLEAN_FILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then { echo "$as_me:$LINENO: Copying data files for VPATH configuration" >&5 echo "$as_me: Copying data files for VPATH configuration" >&6;} else { echo "$as_me:$LINENO: Creating VPATH links for data files" >&5 echo "$as_me: Creating VPATH links for data files" >&6;} fi for file in $coin_vpath_link_files; do dir=`(dirname "./$file") 2>/dev/null || $as_expr X"./$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"./$file" : 'X\(//\)[^/]' \| \ X"./$file" : 'X\(//\)$' \| \ X"./$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"./$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test -d $dir; then : ; else { if $as_mkdir_p; then mkdir -p $dir else as_dir=$dir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dir" >&5 echo "$as_me: error: cannot create directory $dir" >&2;} { (exit 1); exit 1; }; }; } fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi { echo "$as_me:$LINENO: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&5 echo "$as_me: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&6;} if test x$coin_projectdir = xyes; then { echo "$as_me:$LINENO: Configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Configuration of $PACKAGE_NAME successful" >&6;} else { echo "$as_me:$LINENO: Main configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Main configuration of $PACKAGE_NAME successful" >&6;} fi else { echo "$as_me:$LINENO: No configuration of $PACKAGE_NAME necessary" >&5 echo "$as_me: No configuration of $PACKAGE_NAME necessary" >&6;} fi Vol-1.5.4/Data/Sample/bug.stoch0000755000175000017500000000060511015552002015217 0ustar sudipsudipNAME BUG SCENARIOS DISCRETE REPLACE SC SCEN01 ROOT 0.500 STG02 RHS C1 1.000 RHS C2 1.000 RHS C3 0.000 SC SCEN02 ROOT 0.500 STG02 RHS C1 0.000 RHS C2 1.000 RHS C3 0.000 ENDATA Vol-1.5.4/Data/Sample/coindatasample-uninstalled.pc.in0000644000175000017500000000023211507632611021641 0ustar sudipsudipdatadir=@ABSBUILDDIR@ Name: Sample Description: Sample models URL: https://projects.coin-or.org/svn/Data/Sample Version: @PACKAGE_VERSION@ Libs: Cflags: Vol-1.5.4/Data/Sample/afiro.mps0000644000175000017500000000637710662211140015234 0ustar sudipsudipNAME AFIRO ROWS E R09 E R10 L X05 L X21 E R12 E R13 L X17 L X18 L X19 L X20 E R19 E R20 L X27 L X44 E R22 E R23 L X40 L X41 L X42 L X43 L X45 L X46 L X47 L X48 L X49 L X50 L X51 N COST COLUMNS X01 X48 .301 R09 -1. X01 R10 -1.06 X05 1. X02 X21 -1. R09 1. X02 COST -.4 X03 X46 -1. R09 1. X04 X50 1. R10 1. X06 X49 .301 R12 -1. X06 R13 -1.06 X17 1. X07 X49 .313 R12 -1. X07 R13 -1.06 X18 1. X08 X49 .313 R12 -1. X08 R13 -.96 X19 1. X09 X49 .326 R12 -1. X09 R13 -.86 X20 1. X10 X45 2.364 X17 -1. X11 X45 2.386 X18 -1. X12 X45 2.408 X19 -1. X13 X45 2.429 X20 -1. X14 X21 1.4 R12 1. X14 COST -.32 X15 X47 -1. R12 1. X16 X51 1. R13 1. X22 X46 .109 R19 -1. X22 R20 -.43 X27 1. X23 X44 -1. R19 1. X23 COST -.6 X24 X48 -1. R19 1. X25 X45 -1. R19 1. X26 X50 1. R20 1. X28 X47 .109 R22 -.43 X28 R23 1. X40 1. X29 X47 .108 R22 -.43 X29 R23 1. X41 1. X30 X47 .108 R22 -.39 X30 R23 1. X42 1. X31 X47 .107 R22 -.37 X31 R23 1. X43 1. X32 X45 2.191 X40 -1. X33 X45 2.219 X41 -1. X34 X45 2.249 X42 -1. X35 X45 2.279 X43 -1. X36 X44 1.4 R23 -1. X36 COST -.48 X37 X49 -1. R23 1. X38 X51 1. R22 1. X39 R23 1. COST 10. RHS B X50 310. X51 300. B X05 80. X17 80. B X27 500. R23 44. B X40 500. ENDATA Vol-1.5.4/Data/Sample/lseu.mps0000644000175000017500000004211612223473003015076 0ustar sudipsudip*NAME: lseu *ROWS: 28 *COLUMNS: 89 *INTEGER: 89 *NONZERO: 309 *BEST SOLN: 1120 (opt) *LP SOLN: 834.68 *SOURCE: C. E. Lemke and K. Spielberg * Ellis L. Johnson and Uwe H. Suhl * John J. Forrest (IBM) *APPLICATION: unknown *COMMENTS: pure 0/1 IP * * NAME LSEU ROWS N R100 L R101 L R102 L R103 L R104 L R105 L R106 L R107 L R108 L R109 L R110 L R111 L R112 L R113 L R114 L R115 L R116 L R117 L R118 L R119 L R120 L R121 L R122 L R123 L R124 L R125 L R126 L R127 L R128 COLUMNS MARK0000 'MARKER' 'INTORG' C101 R100 7 R119 525 C101 R120 -525 R122 -525 C101 R123 -525 C102 R100 10 R119 500 C102 R120 -500 R122 -500 C102 R123 -500 C103 R100 179 R101 1 C103 R119 475 R120 -475 C103 R124 -475 R125 -475 C104 R100 186 R101 1 C104 R119 475 R120 -475 C104 R122 -475 R123 -475 C105 R100 179 R101 1 C105 R119 475 R120 -475 C105 R122 -190 R123 -190 C105 R124 -285 R125 -285 C106 R102 1 R118 -450 C107 R102 1 R124 -450 C107 R125 -450 C108 R100 6 R102 1 C108 R122 -450 R123 -450 C109 R102 1 R122 -165 C109 R123 -165 R124 -285 C109 R125 -285 C110 R102 1 R124 -150 C110 R125 -150 C111 R100 164 R103 1 C111 R118 -435 C112 R100 164 R103 1 C112 R124 -435 R125 -435 C113 R100 170 R103 1 C113 R119 435 R120 -435 C113 R123 -435 C114 R100 164 R103 1 C114 R119 435 R120 -435 C114 R121 -435 C115 R100 346 R104 1 C115 R124 -435 R125 -435 C116 R100 346 R104 1 C116 R119 435 R120 -435 C116 R125 -435 C117 R100 248 R105 1 C117 R119 435 R120 -435 C117 R124 -435 R125 -435 C118 R100 253 R105 1 C118 R119 435 R120 -435 C118 R122 -435 R123 -435 C119 R100 248 R105 1 C119 R119 435 R120 -435 C119 R122 -300 R123 -300 C119 R124 -135 R125 -135 C120 R100 346 R106 1 C120 R118 -435 C121 R100 346 R106 1 C121 R123 -400 C122 R100 346 R106 1 C122 R121 -400 C123 R100 346 R106 1 C123 R124 -100 R125 -100 C123 R127 -300 C124 R100 160 R107 1 C124 R124 -400 R125 -400 C125 R100 161 R107 1 C125 R122 -400 R123 -400 C126 R100 160 R107 1 C126 R122 -115 R123 -115 C126 R124 -285 R125 -285 C127 R100 160 R107 1 C127 R119 425 R120 -425 C127 R125 -425 C128 R100 161 R107 1 C128 R119 425 R120 -425 C128 R123 -425 C129 R100 160 R107 1 C129 R119 425 R120 -425 C129 R123 -140 R125 -285 C130 R100 160 R107 1 C130 R124 -100 R125 -100 C130 R126 -300 R127 -300 C131 R100 278 R108 1 C131 R118 -350 C132 R100 278 R108 1 C132 R124 -350 R125 -350 C133 R100 278 R108 1 C133 R121 -350 C134 R100 86 R109 1 C134 R122 -330 R123 -330 C135 R100 86 R109 1 C135 R126 -330 R127 -330 C136 R100 86 R109 1 C136 R119 330 R120 -330 C136 R124 -330 R125 -330 C137 R100 86 R109 1 C137 R119 330 R120 -330 C137 R123 -330 C138 R100 86 R109 1 C138 R119 330 R120 -330 C138 R121 -330 C139 R100 86 R119 330 C139 R120 -330 R122 -330 C139 R123 -330 C140 R100 188 R110 1 C140 R122 -330 R123 -330 C141 R100 188 R110 1 C141 R119 330 R120 -330 C141 R124 -330 R125 -330 C142 R100 188 R110 1 C142 R119 330 R120 -330 C142 R121 -330 C143 R100 85 R111 1 C143 R122 -325 R123 -325 C144 R100 85 R111 1 C144 R126 -325 R127 -325 C145 R100 85 R111 1 C145 R119 325 R120 -325 C145 R124 -325 R125 -325 C146 R100 85 R111 1 C146 R119 325 R120 -325 C146 R123 -325 C147 R100 85 R111 1 C147 R119 325 R120 -325 C147 R121 -325 C148 R100 78 R112 1 C148 R122 -300 R123 -300 C149 R100 78 R112 1 C149 R119 300 R120 -300 C149 R124 -300 R125 -300 C150 R100 78 R112 1 C150 R119 300 R120 -300 C150 R121 -300 C151 R100 78 R112 1 C151 R128 -300 C152 R100 78 R113 1 C152 R122 -300 R123 -300 C153 R100 78 R113 1 C153 R126 -300 R127 -300 C154 R100 78 R113 1 C154 R119 300 R120 -300 C154 R124 -300 R125 -300 C155 R100 78 R113 1 C155 R119 300 R120 -300 C155 R123 -300 C156 R100 78 R113 1 C156 R119 300 R120 -300 C156 R121 -300 C157 R100 171 R114 1 C157 R122 -300 R123 -300 C158 R100 171 R114 1 C158 R126 -300 R127 -300 C159 R100 171 R114 1 C159 R119 300 R120 -300 C159 R123 -300 C160 R100 171 R114 1 C160 R119 300 R120 -300 C160 R121 -300 C161 R100 163 R115 1 C161 R119 285 R120 -285 C161 R124 -285 R125 -285 C162 R100 163 R115 1 C162 R119 285 R120 -285 C162 R122 -285 R123 -285 C163 R100 163 R115 1 C163 R128 -285 C164 R100 69 R116 1 C164 R119 265 R120 -265 C164 R124 -265 R125 -265 C165 R100 69 R116 1 C165 R119 265 R120 -265 C165 R122 -265 R123 -265 C166 R100 183 R117 1 C166 R118 -230 C167 R100 183 R117 1 C167 R124 -230 R125 -230 C168 R100 183 R117 1 C168 R119 230 R120 -230 C168 R125 -230 C169 R100 183 R117 1 C169 R119 230 R120 -230 C169 R123 -230 C170 R100 49 R119 190 C170 R120 -190 R122 -190 C170 R123 -190 C171 R100 183 R117 1 C172 R100 258 R118 -200 C173 R100 517 R118 -400 C174 R100 250 R126 -200 C174 R127 -200 C175 R100 500 R126 -400 C175 R127 -400 C176 R100 250 R127 -200 C177 R100 500 R127 -400 C178 R100 159 R119 200 C178 R120 -200 R124 -200 C178 R125 -200 C179 R100 318 R119 400 C179 R120 -400 R124 -400 C179 R125 -400 C180 R100 159 R119 200 C180 R120 -200 R125 -200 C181 R100 318 R119 400 C181 R120 -400 R125 -400 C182 R100 159 R119 200 C182 R120 -200 R122 -200 C182 R123 -200 C183 R100 318 R119 400 C183 R120 -400 R122 -400 C183 R123 -400 C184 R100 159 R119 200 C184 R120 -200 R123 -200 C185 R100 318 R119 400 C185 R120 -400 R123 -400 C186 R100 114 R119 200 C186 R120 -200 R121 -200 C187 R100 228 R119 400 C187 R120 -400 R121 -400 C188 R100 159 R128 -200 C189 R100 318 R128 -400 MARK0001 'MARKER' 'INTEND' RHS RHS R101 1 R102 1 RHS R103 1 R104 1 RHS R105 1 R106 1 RHS R107 1 R108 1 RHS R109 1 R110 1 RHS R111 1 R112 1 RHS R113 1 R114 1 RHS R115 1 R116 1 RHS R117 1 R118 -190 RHS R119 2700 R120 -2600 RHS R121 -630 R122 -900 RHS R123 -1656 R124 -335 RHS R125 -1026 R126 -150 RHS R127 -500 R128 -270 BOUNDS UP ONE C101 1 UP ONE C102 1 UP ONE C103 1 UP ONE C104 1 UP ONE C105 1 UP ONE C106 1 UP ONE C107 1 UP ONE C108 1 UP ONE C109 1 UP ONE C110 1 UP ONE C111 1 UP ONE C112 1 UP ONE C113 1 UP ONE C114 1 UP ONE C115 1 UP ONE C116 1 UP ONE C117 1 UP ONE C118 1 UP ONE C119 1 UP ONE C120 1 UP ONE C121 1 UP ONE C122 1 UP ONE C123 1 UP ONE C124 1 UP ONE C125 1 UP ONE C126 1 UP ONE C127 1 UP ONE C128 1 UP ONE C129 1 UP ONE C130 1 UP ONE C131 1 UP ONE C132 1 UP ONE C133 1 UP ONE C134 1 UP ONE C135 1 UP ONE C136 1 UP ONE C137 1 UP ONE C138 1 UP ONE C139 1 UP ONE C140 1 UP ONE C141 1 UP ONE C142 1 UP ONE C143 1 UP ONE C144 1 UP ONE C145 1 UP ONE C146 1 UP ONE C147 1 UP ONE C148 1 UP ONE C149 1 UP ONE C150 1 UP ONE C151 1 UP ONE C152 1 UP ONE C153 1 UP ONE C154 1 UP ONE C155 1 UP ONE C156 1 UP ONE C157 1 UP ONE C158 1 UP ONE C159 1 UP ONE C160 1 UP ONE C161 1 UP ONE C162 1 UP ONE C163 1 UP ONE C164 1 UP ONE C165 1 UP ONE C166 1 UP ONE C167 1 UP ONE C168 1 UP ONE C169 1 UP ONE C170 1 UP ONE C171 1 UP ONE C172 1 UP ONE C173 1 UP ONE C174 1 UP ONE C175 1 UP ONE C176 1 UP ONE C177 1 UP ONE C178 1 UP ONE C179 1 UP ONE C180 1 UP ONE C181 1 UP ONE C182 1 UP ONE C183 1 UP ONE C184 1 UP ONE C185 1 UP ONE C186 1 UP ONE C187 1 UP ONE C188 1 UP ONE C189 1 ENDATA Vol-1.5.4/Data/Sample/bug.cor0000755000175000017500000000103511015552002014660 0ustar sudipsudipNAME BUG ROWS N obj G C0 G C1 G C2 G C3 COLUMNS x01 obj 1 x01 C3 1 x01 C1 1 x01 C0 1 x02 obj 1 x02 C2 1 x02 C1 1 x02 C0 1 x03 obj 1 x03 C3 1 x03 C2 1 x03 C0 1 x04 obj 0.5 x04 C3 1 x04 C1 1 x05 obj 0.5 x05 C2 1 x05 C1 1 x06 obj 0.5 x06 C3 1 x06 C2 1 RHS RHS C0 0 RHS C1 1 RHS C2 1 RHS C3 1 ENDATAVol-1.5.4/Data/Sample/brandy.mps0000644000175000017500000021631410662211140015405 0ustar sudipsudipNAME BRANDY ROWS N 10000A E 10001A E 10002A E 10003A E 10004A L 10006A L 10007A E 10008A L 10009A L 10010A L 10011A L 10012A L 10013A E 10014A L 10015A L 10016A L 10017A L 10018A L 10019A L 10020A L 10021A L 10022A L 10023A L 10024A E 10025A E 10026A E 10027A E 10028A E 10029A E 10030A E 10031A E 10032A E 10033A E 10034A E 10035A E 10036A E 10037A E 10038A E 10039A L 10040A E 10041A E 10042A E 10043A E 10044A E 10045A E 10046A E 10047A E 10048A E 10049A E 10050A E 10051A E 10052A E 10053A E 10054A E 10055A E 10056A E 10057A E 10058A L 10059A L 10060A E 10061A E 10062A E 10063A E 10064A E 10065A E 10066A E 10067A E 10068A E 10069A E 10070A E 10071A E 10072A E 10073A E 10074A E 10075A E 10076A E 10077A E 10078A E 10079A E 10080A E 10081A E 10082A E 10083A E 10084A E 10085A E 10086A E 10087A E 10088A L 10089A E 10090A E 10091A E 10092A E 10093A E 10094A E 10095A E 10096A E 10097A E 10098A E 10099A E 10100A E 10101A E 10102A E 10103A E 10104A E 10105A E 10106A E 10107A E 10108A E 10109A E 10110A E 10111A E 10112A E 10113A E 10114A E 10115A E 10116A E 10117A E 10118A E 10119A E 10120A E 10121A L 10122A E 10123A E 10124A L 10125A E 10126A L 10127A E 10128A E 10129A L 10130A L 10131A L 10132A E 10133A E 10134A E 10135A L 10136A L 10137A E 10138A L 10139A E 10140A E 10141A E 10142A E 10143A E 10144A E 10145A E 10146A E 10147A E 10148A E 10149A E 10150A E 10151A E 10152A E 10153A E 10154A E 10155A E 10156A E 10157A E 10158A E 10159A L 10160A E 10161A L 10162A L 10163A L 10164A E 10165A E 10166A L 10167A L 10168A L 10169A E 10170A E 10171A E 10172A E 10173A E 10174A E 10175A E 10176A E 10177A L 10178A L 10179A L 10180A L 10181A L 10182A L 10183A L 10184A L 10185A L 10186A L 10187A L 10188A L 10189A L 10190A L 10191A L 10192A L 10193A E 10194A L 10195A E 10196A E 10197A E 10198A E 10199A E 10200A E 10201A E 10202A E 10203A E 10204A E 10205A E 10206A E 10207A E 10208A E 10209A E 10210A E 10211A E 10212A E 10213A E 10214A E 10215A E 10216A E 10217A E 10218A E 10219A E 10220A E 10221A COLUMNS 100001 10000A 1. 10056A -1. 100002 10000A 1. 10025A -1. 100100 10006A 1. 10008A 1. 100100 10025A 7. 10043A .003 100100 10044A .067 10045A .022 100100 10056A .01 10063A .22 100100 10064A .1 10065A .112 100100 10066A .349 10068A .125 100100 10144A .02 100101 10006A 1. 10014A 1. 100101 10025A 7.05 10043A .002 100101 10044A .012 10045A .003 100101 10047A .041 10048A .043 100101 10049A .017 10050A .09 100101 10051A .037 10056A .01 100101 10061A .006 10062A .12 100101 10065A .101 10066A .221 100101 10068A .161 10144A .02 100101 10154A .149 100103 10006A 1. 10014A 1. 100103 10025A 7.05 10043A .002 100103 10044A .012 10045A .003 100103 10047A .041 10048A .043 100103 10049A .017 10050A .09 100103 10051A .062 10056A .01 100103 10061A .007 10063A .173 100103 10064A .063 10065A .107 100103 10066A .221 10068A .161 100103 10144A .02 100109 10094A 1. 10107A 1. 100110 10006A 1. 10025A 7.6 100110 10043A .005 10044A .022 100110 10045A .005 10047A .061 100110 10048A .06 10049A .023 100110 10050A .117 10051A .074 100110 10056A .01 10061A .009 100110 10063A .17 10064A .062 100110 10065A .107 10066A .205 100110 10068A .08 10144A .02 100110 10160A 1. 100112 10006A 1. 10025A 7.24 100112 10043A .003 10044A .015 100112 10045A .005 10047A .037 100112 10048A .048 10049A .045 100112 10050A .127 10051A .052 100112 10056A .01 10061A .005 100112 10063A .164 10064A .081 100112 10065A .102 10066A .252 100112 10068A .062 10144A .02 100112 10162A 1. 100113 10006A 1. 10025A 7.17 100113 10043A .002 10044A .007 100113 10045A .002 10047A .036 100113 10048A .041 10049A .019 100113 10050A .098 10051A .058 100113 10056A .01 10061A .006 100113 10063A .179 10064A .068 100113 10065A .118 10066A .25 100113 10068A .117 10144A .02 100113 10163A 1. 100114 10014A -1. 10164A 1. 100120 10007A 1. 10010A 1. 100120 10025A 6.64 10043A .002 100120 10044A .01 10045A .003 100120 10047A .05 10048A .053 100120 10049A .022 10050A .108 100120 10051A .065 10053A .133 100120 10054A .099 10055A .263 100120 10056A .02 10057A .181 100120 10061A .012 10144A .022 100121 10007A 1. 10009A 1. 100121 10025A 5.9 10043A .001 100121 10044A .003 10045A .001 100121 10047A .021 10048A .022 100121 10049A .01 10050A .052 100121 10051A .042 10053A .122 100121 10054A .115 10055A .33 100121 10056A .02 10057A .276 100121 10061A .008 10144A .022 100122 10007A 1. 10025A 6.5 100122 10043A .001 10044A .004 100122 10045A .001 10047A .026 100122 10048A .028 10049A .013 100122 10050A .072 10051A .054 100122 10053A .158 10054A .155 100122 10055A .326 10056A .02 100122 10057A .154 10061A .011 100122 10144A .022 10167A 1. 100125 10007A 1. 10010A 1. 100125 10025A 6.64 10043A .002 100125 10044A .01 10045A .003 100125 10047A .05 10048A .053 100125 10049A .022 10050A .108 100125 10051A .065 10054A .032 100125 10055A .263 10056A .02 100125 10057A .181 10058A .2 100125 10061A .012 10144A .022 100125 10149A -2.23 10150A -.067 100126 10007A 1. 10009A 1. 100126 10025A 5.9 10043A .001 100126 10044A .003 10045A .001 100126 10047A .021 10048A .022 100126 10049A .01 10050A .052 100126 10051A .042 10054A .04 100126 10055A .33 10056A .02 100126 10057A .276 10058A .197 100126 10061A .008 10144A .022 100126 10149A -2.52 10150A -.112 100130 10007A .67 10012A 1. 100130 10025A 5.5 10044A .75 100130 10045A .25 10056A .03 100130 10144A .027 100131 10007A .67 10025A 7. 100131 10044A .05 10045A .95 100131 10056A .03 10122A 1. 100131 10144A .027 100132 10007A .67 10011A 1. 100132 10025A 7.5 10047A .7 100132 10048A .2 10049A .1 100132 10056A .01 10144A .021 100133 10006A 1. 10025A 4. 100133 10044A .75 10045A .25 100133 10056A .03 10144A .027 100133 10159A 1. 100134 10025A 8.5 10044A .05 100134 10045A .95 100140 10048A -.71 10049A -.29 100140 10151A 1. 100150 10043A -.13 10044A -.06 100150 10045A -.05 10046A -.04 100150 10047A -.04 10048A -.04 100150 10049A -.04 10050A -.14 100150 10051A -.05 10070A -.08 100150 10073A -.03 10080A -.07 100150 10081A -.03 10096A -.02 100150 10097A -.01 10098A -.01 100150 10100A 1. 10104A -.0012 100150 10105A -.0012 10107A -.08 100150 10120A -.06 100200 10017A 1. 10018A .565 100200 10041A .032 10043A .047 100200 10044A .007 10045A .027 100200 10046A .049 10056A .03 100200 10069A 1. 10070A .12 100200 10076A .134 10081A .052 100200 10086A .18 10087A .152 100200 10091A .219 10092A .032 100200 10093A .043 10144A .055 100200 10145A -1. 10146A -29. 100200 10147A -.75 100201 10017A 1.25 10018A .539 100201 10041A .032 10043A .041 100201 10044A .005 10045A .024 100201 10046A .044 10056A .03 100201 10069A 1. 10070A .12 100201 10076A .149 10081A .056 100201 10086A .193 10087A .163 100201 10091A .193 10092A .032 100201 10093A .041 10124A .81 100201 10125A .06 10126A .72 100201 10127A -.0015 10144A .058 100201 10145A -1. 10146A -29. 100201 10147A -.75 10207A .82 100203 10017A 1.5 10018A .526 100203 10041A .032 10043A .037 100203 10044A .005 10045A .02 100203 10046A .041 10056A .04 100203 10069A 1. 10070A .12 100203 10076A .16 10081A .058 100203 10086A .203 10087A .17 100203 10091A .175 10092A .032 100203 10093A .04 10124A 1.88 100203 10125A .11 10126A 1.25 100203 10127A -.0025 10144A .061 100203 10145A -1. 10146A -29. 100203 10147A -.75 10207A 1.88 100204 10017A 1. 10018A .758 100204 10041A .032 10043A .065 100204 10044A .014 10045A .045 100204 10046A .061 10056A .03 100204 10069A 1. 10070A .13 100204 10078A .164 10081A .058 100204 10086A .157 10087A .127 100204 10091A .165 10092A .032 100204 10093A .058 10144A .066 100204 10145A -1. 10146A -29. 100204 10147A -.75 100205 10017A 1.25 10018A .719 100205 10041A .032 10043A .06 100205 10044A .012 10045A .04 100205 10046A .054 10056A .03 100205 10069A 1. 10070A .13 100205 10078A .183 10081A .063 100205 10086A .169 10087A .136 100205 10091A .142 10092A .032 100205 10093A .055 10124A 1.34 100205 10125A .06 10126A .7 100205 10127A -.0008 10144A .068 100205 10145A -1. 10146A -29. 100205 10147A -.75 10207A 1.3 100207 10017A 1.5 10018A .707 100207 10041A .032 10043A .053 100207 10044A .011 10045A .037 100207 10046A .051 10056A .04 100207 10069A 1. 10070A .13 100207 10078A .196 10081A .066 100207 10086A .179 10087A .145 100207 10091A .122 10092A .032 100207 10093A .054 10124A 3.32 100207 10125A .09 10126A .76 100207 10127A -.0017 10144A .072 100207 10145A -1. 10146A -29. 100207 10147A -.75 10207A 3.27 100208 10017A 1. 10018A 1.015 100208 10041A .032 10043A .094 100208 10044A .023 10045A .066 100208 10046A .072 10056A .03 100208 10069A 1. 10070A .14 100208 10080A .177 10081A .06 100208 10086A .134 10087A .102 100208 10091A .112 10092A .032 100208 10093A .078 10144A .078 100208 10145A -1. 10146A -29. 100208 10147A -.75 100209 10017A 1.25 10018A .962 100209 10041A .032 10043A .082 100209 10044A .02 10045A .061 100209 10046A .064 10056A .04 100209 10069A 1. 10070A .14 100209 10080A .204 10081A .066 100209 10086A .146 10087A .112 100209 10091A .088 10092A .032 100209 10093A .074 10124A 1.63 100209 10125A .04 10126A .89 100209 10127A -.0009 10144A .081 100209 10145A -1. 10146A -29. 100209 10147A -.75 10207A 1.7 100212 10017A 1. 10018A .668 100212 10041A .01 10043A .07 100212 10044A .015 10045A .058 100212 10046A .058 10056A .03 100212 10064A -1. 10069A 1. 100212 10070A .094 10072A 6.1 100212 10074A -6.52 10081A .046 100212 10082A .165 10086A .159 100212 10087A .318 10091A .017 100212 10092A .01 10093A .051 100212 10136A -.215 10137A -3.18 100212 10144A .061 10208A 3.13 100213 10017A 1. 10018A .468 100213 10043A .057 10044A .01 100213 10045A .042 10046A .037 100213 10053A -1. 10056A .03 100213 10069A 1. 10070A .081 100213 10072A 3.9 10074A -12.04 100213 10081A .234 10083A .138 100213 10086A .391 10093A .036 100213 10136A -.02 10137A -5.86 100213 10144A .054 10208A 3.44 100214 10017A 1.5 10018A 1.195 100214 10041A .031 10043A .11 100214 10044A .029 10045A .079 100214 10046A .07 10056A .04 100214 10069A 1. 10070A .15 100214 10081A .065 10086A .135 100214 10087A .095 10091A .018 100214 10092A .031 10093A .091 100214 10124A 5.7 10125A -.02 100214 10126A 2. 10127A -.0012 100214 10144A .096 10145A -1. 100214 10146A -29. 10147A -.75 100214 10158A .231 10207A 5.45 100215 10017A 1.5 10018A .924 100215 10041A .032 10043A .073 100215 10044A .02 10045A .057 100215 10046A .061 10056A .04 100215 10069A 1. 10070A .14 100215 10080A .221 10081A .069 100215 10086A .156 10087A .12 100215 10091A .069 10092A .032 100215 10093A .071 10124A 4.46 100215 10125A .06 10126A 1.45 100215 10127A -.0014 10144A .083 100215 10145A -1. 10146A -29. 100215 10147A -.75 10207A 4.24 100216 10017A 1. 10018A 1.323 100216 10041A .031 10043A .137 100216 10044A .033 10045A .089 100216 10046A .083 10056A .04 100216 10069A 1. 10070A .15 100216 10081A .054 10086A .11 100216 10087A .075 10091A .066 100216 10092A .031 10093A .101 100216 10144A .093 10145A -1. 100216 10146A -29. 10147A -.75 100216 10158A .174 100217 10017A 1.25 10018A 1.234 100217 10041A .031 10043A .122 100217 10044A .03 10045A .083 100217 10046A .074 10056A .04 100217 10069A 1. 10070A .15 100217 10081A .061 10086A .124 100217 10087A .086 10091A .039 100217 10092A .031 10093A .094 100217 10124A 2.44 10125A -.02 100217 10126A 1.3 10127A -.0009 100217 10144A .094 10145A -1. 100217 10146A -29. 10147A -.75 100217 10158A .211 10207A 2.39 100218 10017A 1. 10018A .588 100218 10041A .006 10043A .064 100218 10044A .012 10045A .051 100218 10046A .051 10056A .03 100218 10069A 1. 10070A .081 100218 10072A 8. 10074A -8.03 100218 10081A .08 10082A .147 100218 10086A .385 10087A .119 100218 10091A .01 10092A .006 100218 10093A .045 10124A -.01 100218 10125A .06 10126A .26 100218 10127A -.0022 10136A -.247 100218 10137A -.27 10144A .056 100218 10154A -1. 10208A 4.27 100220 10015A 1. 10016A .64 100220 10043A .051 10044A .007 100220 10045A .021 10046A .044 100220 10056A .03 10070A .12 100220 10071A .137 10084A .18 100220 10085A .152 10090A .219 100220 10092A .032 10093A .032 100220 10098A .052 10144A .058 100220 10148A -1. 10149A -26. 100220 10150A -2.1 100221 10015A 1.25 10016A .628 100221 10043A .044 10044A .005 100221 10045A .018 10046A .039 100221 10056A .03 10070A .12 100221 10071A .152 10084A .193 100221 10085A .163 10090A .193 100221 10092A .032 10093A .031 100221 10098A .056 10124A .82 100221 10125A .07 10126A .68 100221 10127A -.0044 10144A .062 100221 10148A -1. 10149A -26. 100221 10150A -2.1 10207A .68 100223 10015A 1.5 10016A 1.099 100223 10043A .087 10044A .018 100223 10045A .046 10046A .052 100223 10056A .04 10070A .14 100223 10075A .21 10084A .156 100223 10085A .12 10090A .069 100223 10092A .032 10093A .054 100223 10098A .069 10124A 4.43 100223 10125A .1 10126A 1.48 100223 10127A -.0055 10144A .09 100223 10148A -1. 10149A -26. 100223 10150A -2.1 10207A 4.39 100224 10015A 1. 10016A .864 100224 10043A .074 10044A .014 100224 10045A .035 10046A .053 100224 10056A .03 10070A .13 100224 10073A .164 10084A .157 100224 10085A .127 10090A .165 100224 10092A .032 10093A .043 100224 10098A .058 10144A .07 100224 10148A -1. 10149A -26. 100224 10150A -2.1 100225 10015A 1.25 10016A .85 100225 10043A .065 10044A .012 100225 10045A .032 10046A .048 100225 10056A .04 10070A .13 100225 10073A .185 10084A .169 100225 10085A .136 10090A .142 100225 10092A .032 10093A .042 100225 10098A .063 10124A 1.24 100225 10125A .07 10126A .75 100225 10127A -.0037 10144A .074 100225 10148A -1. 10149A -26. 100225 10150A -2.1 10207A 1.31 100228 10015A 1. 10016A 1.192 100228 10043A .112 10044A .021 100228 10045A .054 10046A .063 100228 10056A .03 10070A .14 100228 10075A .168 10084A .134 100228 10085A .102 10090A .112 100228 10092A .032 10093A .059 100228 10098A .06 10144A .085 100228 10148A -1. 10149A -26. 100228 10150A -2.1 100229 10015A 1.25 10016A 1.113 100229 10043A .096 10044A .018 100229 10045A .049 10046A .055 100229 10056A .04 10070A .14 100229 10075A .195 10084A .146 100229 10085A .112 10090A .088 100229 10092A .032 10093A .055 100229 10098A .066 10124A 1.62 100229 10125A .07 10126A .95 100229 10127A -.0036 10144A .087 100229 10148A -1. 10149A -26. 100229 10150A -2.1 10207A 1.57 100232 10015A 1. 10016A 1.545 100232 10043A .166 10044A .031 100232 10045A .074 10046A .071 100232 10056A .03 10070A .15 100232 10084A .11 10085A .075 100232 10090A .066 10092A .031 100232 10093A .076 10098A .054 100232 10144A .102 10148A -1. 100232 10149A -26. 10150A -2.1 100232 10156A .151 100233 10015A 1.25 10016A 1.44 100233 10043A .14 10044A .028 100233 10045A .069 10046A .063 100233 10056A .04 10070A .15 100233 10084A .124 10085A .086 100233 10090A .039 10092A .031 100233 10093A .071 10098A .061 100233 10124A 2.53 10125A .04 100233 10126A 1.7 10127A -.0039 100233 10144A .102 10148A -1. 100233 10149A -26. 10150A -2.1 100233 10156A .192 10207A 2.44 100234 10015A 1.5 10016A .616 100234 10043A .039 10044A .005 100234 10045A .015 10046A .036 100234 10056A .04 10070A .12 100234 10071A .162 10084A .203 100234 10085A .17 10090A .175 100234 10092A .032 10093A .03 100234 10098A .058 10124A 2.22 100234 10125A .12 10126A 1.13 100234 10127A -.0069 10144A .065 100234 10148A -1. 10149A -26. 100234 10150A -2.1 10207A 1.98 100235 10015A 1.5 10016A .838 100235 10043A .059 10044A .011 100235 10045A .028 10046A .043 100235 10056A .04 10070A .13 100235 10073A .196 10084A .179 100235 10085A .145 10090A .122 100235 10092A .032 10093A .041 100235 10098A .065 10124A 3.55 100235 10125A .1 10126A 1.14 100235 10127A -.0058 10144A .077 100235 10148A -1. 10149A -26. 100235 10150A -2.1 10207A 3.58 100236 10015A 1.5 10016A 1.4 100236 10043A .131 10044A .027 100236 10045A .065 10046A .058 100236 10056A .04 10070A .15 100236 10084A .135 10085A .095 100236 10090A .018 10092A .031 100236 10093A .069 10098A .065 100236 10124A 5.94 10125A .06 100236 10126A 2.49 10127A -.0059 100236 10144A .104 10148A -1. 100236 10149A -26. 10150A -2.1 100236 10156A .211 10207A 5.8 100240 10017A .15 10065A -1.15 100240 10081A .15 10145A 1. 100240 10146A 32.3 10147A .357 100241 10066A -1. 10145A 1. 100241 10146A 27. 10147A .512 100242 10101A -1. 10145A 1. 100242 10146A 30.6 10147A .78 100243 10054A -1. 10145A 1. 100243 10146A 31.4 10147A 1.57 100245 10102A -1. 10145A 1. 100245 10146A 25.6 10147A 2.6 100250 10054A -1. 10148A 1. 100250 10149A 31.6 10150A 1.54 100251 10015A .05 10055A -1.05 100251 10098A .05 10148A 1. 100251 10149A 22.7 10150A 2.51 100252 10102A -1. 10148A 1. 100252 10149A 25.6 10150A 2.6 100254 10101A -1. 10148A 1. 100254 10149A 30.6 10150A .78 100270 10069A -1. 100280 10018A -.004 10041A -.004 100280 10044A -.003 10045A -.006 100280 10046A -.005 10056A -.001 100280 10070A -.004 10072A -.13 100280 10074A 1.33 10080A -.006 100280 10086A .006 10087A .019 100280 10091A -.003 10092A -.004 100280 10124A -.15 10125A -.07 100280 10126A -.12 10127A .0142 100280 10136A .088 10137A -.23 100280 10139A .025 10140A -.27 100280 10144A -.001 10147A -.32 100280 10207A -.15 10208A -.05 100281 10018A .004 10041A .004 100281 10044A .003 10045A .006 100281 10046A .005 10056A .001 100281 10070A .004 10072A .13 100281 10074A -1.33 10080A .006 100281 10086A -.006 10087A -.019 100281 10091A .003 10092A .004 100281 10124A .15 10125A .07 100281 10126A .12 10127A -.0142 100281 10136A -.088 10137A .23 100281 10139A -.025 10140A .27 100281 10144A .001 10147A .32 100281 10207A .15 10208A .05 100282 10018A -.336 10041A -.021 100282 10043A -.036 10044A -.009 100282 10045A -.007 10046A -.017 100282 10056A -.003 10070A -.03 100282 10072A 2.47 10074A 3.35 100282 10080A -.045 10081A .005 100282 10086A .018 10087A .112 100282 10091A .017 10092A -.021 100282 10093A -.026 10124A -.34 100282 10125A -.1 10126A .15 100282 10127A .0027 10136A .016 100282 10137A -4.65 10139A -.013 100282 10140A -1.18 10144A -.018 100282 10146A -5. 10207A -.34 100282 10208A 1.15 100283 10018A .336 10041A .021 100283 10043A .036 10044A .009 100283 10045A .007 10046A .017 100283 10056A .003 10070A .03 100283 10072A -2.47 10074A -3.35 100283 10080A .045 10081A -.005 100283 10086A -.018 10087A -.112 100283 10091A -.017 10092A .021 100283 10093A .026 10124A .34 100283 10125A .1 10126A -.15 100283 10127A -.0027 10136A -.016 100283 10137A 4.65 10139A .013 100283 10140A 1.18 10144A .018 100283 10146A 5. 10207A .34 100283 10208A -1.15 100290 10016A -.026 10043A -.002 100290 10044A -.003 10045A -.006 100290 10046A -.006 10056A -.001 100290 10070A -.008 10072A -.14 100290 10073A -.011 10074A -2.08 100290 10084A .003 10085A .029 100290 10090A .003 10092A -.006 100290 10093A -.001 10124A -.09 100290 10125A -.05 10126A -.04 100290 10127A .0247 10136A .121 100290 10137A -1.47 10139A .067 100290 10140A -.74 10144A -.002 100290 10150A -.5 10207A -.09 100290 10208A -.08 100291 10016A -.245 10043A -.008 100291 10044A -.008 10045A -.008 100291 10046A -.015 10056A -.003 100291 10070A -.032 10072A 4.52 100291 10073A -.048 10074A -7.83 100291 10084A .019 10085A .17 100291 10090A -.059 10092A -.025 100291 10093A -.012 10098A .001 100291 10124A -.08 10125A -.07 100291 10126A .13 10127A .0128 100291 10136A -.107 10137A -2.77 100291 10139A .015 10140A -1.54 100291 10144A -.014 10149A -5. 100291 10207A -.08 10208A 2.29 100292 10016A .245 10043A .008 100292 10044A .008 10045A .008 100292 10046A .015 10056A .003 100292 10070A .032 10072A -4.52 100292 10073A .048 10074A 7.83 100292 10084A -.019 10085A -.17 100292 10090A .059 10092A .025 100292 10093A .012 10098A -.001 100292 10124A .08 10125A .07 100292 10126A -.13 10127A -.0128 100292 10136A .107 10137A 2.77 100292 10139A -.015 10140A 1.54 100292 10144A .014 10149A 5. 100292 10207A .08 10208A -2.29 100293 10016A .026 10043A .002 100293 10044A .003 10045A .006 100293 10046A .006 10056A .001 100293 10070A .008 10072A .14 100293 10073A .011 10074A 2.08 100293 10084A -.003 10085A -.029 100293 10090A -.003 10092A .006 100293 10093A .001 10124A .09 100293 10125A .05 10126A .04 100293 10127A -.0247 10136A -.121 100293 10137A 1.47 10139A -.067 100293 10140A .74 10144A .002 100293 10150A .5 10207A .09 100293 10208A .08 100400 10043A .098 10044A .033 100400 10045A .022 10052A -1. 100400 10056A .44 10106A .838 100400 10144A .078 10168A 1. 100401 10043A .105 10044A .037 100401 10045A .024 10052A -1. 100401 10056A .44 10107A .821 100401 10144A .08 10168A 1. 100402 10043A .044 10044A -.33 100402 10045A .294 10056A .49 100402 10089A 1. 10144A .031 100402 10168A 2.5 100403 10023A 1. 10043A .098 100403 10044A .033 10045A .022 100403 10052A -1. 10056A .4 100403 10106A .838 10144A .062 100404 10023A 1. 10043A .105 100404 10044A .037 10045A .024 100404 10052A -1. 10056A .4 100404 10107A .821 10144A .063 100405 10023A 1. 10043A .116 100405 10044A .043 10045A .029 100405 10052A -1. 10056A .4 100405 10108A .798 10144A .065 100410 10024A 1. 10043A .098 100410 10044A .033 10045A .022 100410 10052A -1. 10056A .11 100410 10106A .838 10144A .067 100411 10024A 1. 10043A .105 100411 10044A .037 10045A .024 100411 10052A -1. 10056A .11 100411 10107A .821 10144A .068 100412 10024A 1. 10043A .116 100412 10044A .043 10045A .029 100412 10052A -1. 10056A .11 100412 10108A .798 10144A .07 100413 10024A 1. 10043A .1 100413 10044A .033 10045A .022 100413 10049A -.33 10052A -.67 100413 10056A .11 10106A .832 100413 10125A .33 10126A 1.16 100413 10144A .067 100414 10024A 1. 10043A .107 100414 10044A .037 10045A .025 100414 10049A -.33 10052A -.67 100414 10056A .11 10107A .815 100414 10125A .33 10126A 1.06 100414 10144A .068 100415 10024A 1. 10043A .119 100415 10044A .043 10045A .03 100415 10049A -.33 10052A -.67 100415 10056A .11 10108A .793 100415 10125A .24 10126A .63 100415 10144A .07 100440 10050A -1. 10052A 1. 100441 10051A -1. 10052A 1. 100500 10019A 1. 10022A .067 100500 10043A .053 10044A .009 100500 10045A .002 10046A .007 100500 10056A .25 10057A -1. 100500 10095A .039 10097A .148 100500 10102A .523 10105A .067 100500 10144A .058 100502 10019A 1. 10022A .06 100502 10043A .056 10044A .011 100502 10045A .002 10046A .009 100502 10056A .24 10068A -1. 100502 10095A .052 10096A .19 100502 10101A .515 10104A .06 100502 10144A .06 100503 10020A 1. 10021A .06 100503 10043A .056 10044A .011 100503 10045A .002 10046A .009 100503 10056A .19 10068A -1. 100503 10095A .052 10096A .19 100503 10101A .515 10104A .06 100503 10144A .061 100505 10020A 1. 10021A .067 100505 10043A .053 10044A .009 100505 10045A .002 10046A .007 100505 10056A .2 10057A -1. 100505 10095A .039 10097A .148 100505 10102A .523 10105A .067 100505 10144A .059 100506 10019A 1. 10022A .009 100506 10042A 1. 10043A .008 100506 10044A .001 10046A .001 100506 10051A -.053 10053A -.096 100506 10054A -.078 10055A -.061 100506 10056A .07 10057A -.041 100506 10063A -.143 10065A -.164 100506 10066A -.054 10068A -.1 100506 10080A -.21 10095A .007 100506 10096A .195 10097A .093 100506 10101A .648 10102A .021 100506 10104A .006 10105A .003 100506 10144A .047 100600 10045A -1. 10116A 1. 100601 10046A -1. 10117A 1. 100602 10043A .625 10044A -.368 100602 10045A -.562 10046A -.241 100602 10118A .018 10119A .153 100602 10204A 1. 100700 10056A .76 10116A -.663 100700 10117A -.571 10120A 1. 100700 10144A .02 100702 10056A 1.56 10060A 1. 100702 10070A -.606 10116A -.606 100702 10120A 1. 10124A 1.6 100702 10125A -3.6 10126A -12.1 100702 10127A .024 10130A 13.7 100702 10131A 16.1 10132A -.3 100702 10133A -9.9 10144A .02 100702 10207A 1.2 100796 10056A .04 10076A -1. 100796 10123A 1. 10124A 12.9 100796 10125A 3.4 10126A -.5 100796 10127A .185 10128A 1. 100796 10207A 2. 100797 10056A .04 10123A 1. 100797 10124A 8.1 10125A 5.3 100797 10126A 5.4 10127A .019 100797 10128A 1. 10158A -1. 100797 10207A -3.4 100798 10056A .04 10071A -1. 100798 10123A 1. 10124A 20.4 100798 10125A 3.4 10126A -1. 100798 10127A .416 10128A 1. 100798 10207A 6.4 100799 10056A .04 10123A 1. 100799 10124A 10.4 10125A 5.4 100799 10126A 5.3 10127A .057 100799 10128A 1. 10156A -1. 100799 10207A -3.3 100800 10044A -1. 10123A 1. 100800 10124A -4.5 10125A 65. 100800 10126A 125. 10127A .01 100800 10128A 1. 10207A -1.4 100801 10116A -1. 10123A 1. 100801 10124A -22.2 10125A 87. 100801 10126A 125. 10127A .01 100801 10128A 1. 10207A -20.2 100802 10117A -1. 10123A 1. 100802 10124A -6.6 10125A 70. 100802 10126A 125. 10127A .01 100802 10128A 1. 10207A -16.5 100803 10118A -1. 10123A 1. 100803 10124A -22.2 10125A 87. 100803 10126A 125. 10127A .01 100803 10128A 1. 10207A -20.2 100804 10119A -1. 10123A 1. 100804 10124A -6.6 10125A 70. 100804 10126A 125. 10127A .01 100804 10128A 1. 10207A -16.5 100805 10047A -1. 10056A .02 100805 10123A 1. 10124A 49.3 100805 10125A 9.7 10126A 58.3 100805 10127A .051 10128A 1. 100805 10207A 58.6 100806 10056A .03 10070A -1. 100806 10123A 1. 10124A 9. 100806 10125A 12.5 10126A 70. 100806 10127A .05 10128A 1. 100806 10207A -6.5 100807 10056A .03 10095A -1. 100807 10123A 1. 10124A 55.5 100807 10125A 12.5 10126A 70. 100807 10127A .08 10128A 1. 100807 10207A 47.3 100810 10056A .04 10078A -1. 100810 10123A 1. 10124A 12.4 100810 10125A 4. 10126A 1.5 100810 10127A .094 10128A 1. 100810 10207A .7 100812 10056A .04 10080A -1. 100812 10123A 1. 10124A 10.4 100812 10125A 4.7 10126A 3.5 100812 10127A .047 10128A 1. 100812 10207A -1.6 100813 10056A .04 10081A -1. 100813 10123A 1. 10124A 76. 100813 10125A .5 10126A -3.6 100813 10127A .16 10128A 1. 100813 10207A 50.5 100814 10056A .04 10082A -1. 100814 10123A 1. 10124A -9.8 100814 10125A 9.4 10126A 9. 100814 10127A -.008 10128A 1. 100814 10207A -33.4 100815 10056A .04 10083A -1. 100815 10123A 1. 10124A 203.7 100815 10125A 6.8 10126A 26. 100815 10127A .564 10128A 1. 100815 10207A 176. 100818 10056A .04 10073A -1. 100818 10123A 1. 10124A 18.5 100818 10125A 4. 10126A 1.1 100818 10127A .212 10128A 1. 100818 10207A 4.1 100820 10056A .04 10075A -1. 100820 10123A 1. 10124A 14.9 100820 10125A 4.7 10126A 3.1 100820 10127A .111 10128A 1. 100820 10207A .4 100821 10056A .04 10096A -1. 100821 10123A 1. 10124A 129. 100821 10125A 6. 10126A -7.5 100821 10127A .2 10128A 1. 100821 10207A 125. 100822 10056A .04 10097A -1. 100822 10123A 1. 10124A 143. 100822 10125A 6. 10126A -7.5 100822 10127A .9 10128A 1. 100822 10207A 139. 100823 10056A .04 10098A -1. 100823 10123A 1. 10124A 81. 100823 10125A .5 10126A -2.7 100823 10127A .6 10128A 1. 100823 10207A 53. 100825 10106A -1. 10123A 1. 100825 10124A 7.2 10125A 3.1 100825 10126A 3.6 10128A 1. 100826 10107A -1. 10123A 1. 100826 10124A .5 10125A 3.4 100826 10126A 4.8 10128A 1. 100826 10207A -8.5 100827 10108A -1. 10123A 1. 100827 10124A -5.8 10125A 3.8 100827 10126A 6.8 10128A 1. 100827 10207A -18.3 100835 10120A -1. 10123A 1. 100835 10124A -11.1 10125A 2.7 100835 10126A 1.2 10127A .01 100835 10128A 1. 10207A -6.5 100836 10121A -1. 10123A 1. 100836 10124A 26.1 10125A .5 100836 10126A -6. 10127A .02 100836 10128A 1. 10207A 31.5 100838 10048A -1. 10056A .02 100838 10123A 1. 10124A 62.4 100838 10125A 6.4 10126A 36.1 100838 10127A .044 10128A 1. 100838 10207A 70.8 100839 10049A -1. 10056A .02 100839 10123A 1. 10124A 91.2 100839 10125A 1.8 10126A -5.1 100839 10127A .039 10128A 1. 100839 10207A 97.1 100840 10027A 1. 10056A .295 100840 10123A -1. 10124A -20.6 100840 10127A -.115 100841 10027A 1. 10056A .395 100841 10123A -1. 10124A -25.6 100841 10127A -.115 100842 10027A 1. 10056A .495 100842 10123A -1. 10124A -29.8 100842 10127A -.115 100843 10027A 1. 10056A .595 100843 10123A -1. 10124A -33.5 100843 10127A -.115 100845 10125A -11.3 10126A -33.2 100845 10128A -1. 100846 10125A -11.5 10126A -31.2 100846 10128A -1. 100847 10125A -11.7 10126A -27.2 100847 10128A -1. 100848 10025A 50. 10125A -12.85 100848 10126A -35.75 10128A -1. 100849 10025A 50. 10125A -12.85 100849 10126A -22. 10128A -1. 100850 10044A -1. 10129A 1. 100850 10130A 8.6 10131A 13.2 100850 10132A 65. 10133A 125. 100855 10047A -1. 10056A .02 100855 10129A 1. 10130A 78.7 100855 10131A 92.2 10132A 10.2 100855 10133A 54.7 100856 10056A .03 10070A -1. 100856 10129A 1. 10130A 43. 100856 10131A 24. 10132A 12.5 100856 10133A 70. 100857 10056A .02 10129A 1. 100857 10130A 92. 10131A 105.4 100857 10132A 5.1 10133A 24.2 100857 10151A -1. 100875 10106A -1. 10129A 1. 100875 10130A 34. 10131A 31.3 100875 10132A 3.1 10133A 3.6 100876 10107A -1. 10129A 1. 100876 10130A 26.5 10131A 21.5 100876 10132A 3.4 10133A 4.8 100877 10108A -1. 10129A 1. 100877 10130A 18.5 10131A 11.2 100877 10132A 3.8 10133A 6.8 100885 10120A -1. 10129A 1. 100885 10130A .5 10131A 9.2 100885 10132A 2.7 10133A 1.2 100886 10121A -1. 10129A 1. 100886 10130A 39.8 10131A 45.5 100886 10132A .5 10133A -6. 100890 10026A 1. 10056A .323 100890 10129A -1. 10130A -18.6 100890 10131A -21.1 10134A -1. 100891 10026A 1. 10056A .423 100891 10129A -1. 10130A -23.6 100891 10131A -26.1 10134A -1. 100892 10026A 1. 10056A .523 100892 10129A -1. 10130A -27.8 100892 10131A -30.3 10134A -1. 100893 10026A 1. 10056A .623 100893 10129A -1. 10130A -31.5 100893 10131A -34. 10134A -1. 100895 10132A -11.3 10133A -33.2 100895 10134A 1. 100896 10132A -11.5 10133A -31.2 100896 10134A 1. 100897 10132A -11.7 10133A -27.2 100897 10134A 1. 100898 10025A 50. 10132A -12.85 100898 10133A -35.2 10134A 1. 100899 10025A 50. 10132A -12.85 100899 10133A -22. 10134A 1. 100900 10028A 1. 10044A -.05 100900 10056A .89 10110A -.05 100900 10120A -.889 10121A .089 100900 10144A .02 10151A -.1 101000 10056A .03 10062A -.5 101000 10063A -.5 10152A 1. 101012 10029A 1. 10051A -.4 101012 10056A .27 10062A -.25 101012 10151A -.35 101013 10029A 1. 10056A .27 101013 10061A -.4 10062A -.25 101013 10151A -.35 101021 10030A 1. 10051A -.45 101021 10056A .05 10062A -.55 101099 10031A 1. 10051A -1. 101099 10056A .03 101100 10031A 1. 10056A .03 101100 10063A -1. 101101 10031A 1. 10053A -.15 101101 10056A .03 10063A -.85 101102 10032A 1. 10056A .04 101102 10063A -.8 10064A -.2 101103 10032A 1. 10053A -.12 101103 10056A .04 10063A -.68 101103 10064A -.2 101107 10034A 1. 10056A .03 101107 10084A -.67 10086A -.13 101107 10087A -.2 101108 10034A 1. 10056A .03 101108 10084A -.38 10085A -.29 101108 10086A -.17 10087A -.03 101108 10098A -.13 101109 10034A 1. 10056A .03 101109 10086A -.85 10087A -.15 101110 10063A -1. 10072A 54.1 101110 10074A -23.6 10135A 1. 101110 10136A .072 10137A -18. 101110 10208A 42.1 101111 10064A -1. 10072A 60.7 101111 10074A .7 10135A 1. 101111 10136A .217 10137A 61. 101111 10208A 35.7 101112 10053A -1. 10072A 48.9 101112 10074A -31. 10135A 1. 101112 10136A .61 10137A -29. 101112 10208A 40.3 101113 10072A 28.5 10074A -4.2 101113 10084A -1. 10135A 1. 101113 10136A 1.9 10137A -21. 101113 10208A 26.6 101114 10072A 36. 10074A 4.3 101114 10085A -1. 10135A 1. 101114 10136A 1.95 10137A 32. 101114 10208A 22.9 101115 10072A 30. 10074A 4.5 101115 10086A -1. 10135A 1. 101115 10136A .67 10137A -16. 101115 10208A 27.8 101116 10072A 41. 10074A 11. 101116 10087A -1. 10135A 1. 101116 10136A .71 10137A 54. 101116 10208A 25.4 101117 10058A -1. 10072A 50.3 101117 10074A -20.2 10135A 1. 101117 10136A .893 10137A -16. 101117 10208A 37.3 101118 10072A 58.9 10074A -6.2 101118 10135A 1. 10136A .185 101118 10137A 26. 10154A -1. 101118 10208A 37.3 101119 10061A -1. 10072A 50. 101119 10074A -30. 10135A 1. 101119 10136A .11 10137A -39. 101119 10208A 48.2 101120 10072A 31. 10074A -18.2 101120 10081A -1. 10135A 1. 101120 10136A .16 10137A -38. 101120 10208A 36.3 101121 10051A -1. 10072A 50. 101121 10074A -30. 10135A 1. 101121 10136A .11 10137A -40. 101121 10208A 48.7 101122 10072A 28. 10074A -8.7 101122 10084A -.728 10098A -.272 101122 10135A 1. 10136A 1.55 101122 10137A -26. 10208A 28.5 101123 10056A .02 10137A -5. 101123 10211A 1. 101124 10056A .04 10137A -10. 101124 10211A 1. 101125 10033A 1. 10056A .04 101125 10135A -1. 10136A -.65 101125 10137A 10. 10211A -1. 101126 10025A 50. 10033A 1. 101126 10056A .04 10135A -1. 101126 10136A -.65 10137A 13. 101126 10211A -1. 101API 10208A -1. 101201 10035A 1. 10084A -.245 101201 10086A -.272 10141A -.483 101202 10035A 1. 10084A -.154 101202 10085A -.124 10086A -.149 101202 10087A -.114 10141A -.459 101203 10036A 1. 10090A -.13 101203 10091A -.13 10141A -.74 101204 10037A 1. 10194A -1. 101204 10195A -1.05 10196A -60. 101206 10038A 1. 10141A -1. 101207 10035A 1. 10086A -.327 101207 10087A -.25 10141A -.423 101210 10057A -1. 10138A 1. 101210 10139A 4.14 10140A 96.9 101211 10068A -1. 10138A 1. 101211 10139A .939 10140A 89.2 101213 10090A -1. 10138A 1. 101213 10139A 2.3 10140A 8. 101214 10091A -1. 10138A 1. 101214 10139A .82 10140A 8. 101215 10085A -1. 10138A 1. 101215 10139A 1.95 10140A -2.1 101216 10086A -1. 10138A 1. 101216 10139A .71 10140A 4.6 101217 10084A -1. 10138A 1. 101217 10139A 1.9 10140A -10.6 101219 10138A -1. 10139A -2.8 101219 10140A -60. 10141A 1. 101220 10092A -1. 10142A .977 101220 10143A .977 101221 10040A 1. 10068A -1. 101221 10142A .972 10143A .972 101222 10025A 50. 10057A -.7 101222 10090A -.3 10142A .947 101222 10143A .947 101224 10090A -1. 10142A .918 101224 10143A .918 101225 10043A -1. 10142A 1. 101226 10093A -1. 10142A 1. 101227 10025A 6.21 10142A 1. 101227 10169A 1. 101228 10013A 1. 10025A 4.97 101228 10142A 1. 101229 10044A -1. 10142A .636 101230 10141A -1. 10142A .943 101230 10143A .943 101231 10142A .931 10143A .931 101231 10153A -1. 101232 10085A -.5 10090A -.5 101232 10142A .915 10143A .915 101234 10143A -1. 101235 10142A -1. 10144A -1. 101236 10068A -1. 10194A 1. 101236 10195A .939 10196A 89.2 101237 10091A -1. 10194A 1. 101237 10195A .82 10196A 8. 101238 10064A -1. 10194A 1. 101238 10195A .22 10196A -4.9 101239 10041A -1. 10092A -1. 101239 10194A 1. 10195A 1.26 101239 10196A 61.5 101300 10039A 1. 10051A -.016 101300 10056A .18 10062A -.005 101300 10065A -.325 10066A -.755 101300 10084A -.065 10085A -.054 101300 10144A .042 10147A .31 101300 10153A .22 101CET 10072A -1. 101400 10057A .75 10197A 1. 101400 10203A .25 101401 10066A .075 10068A .525 101401 10198A 1. 10203A .4 101402 10057A 1. 10199A 1. 101403 10066A .17 10068A .83 101403 10200A 1. 101404 10057A -.75 10203A -.25 101404 10209A 1. 101405 10066A -.075 10068A -.525 101405 10203A -.4 10210A 1. 101406 10057A -1. 10201A 1. 101407 10066A -.17 10068A -.83 101407 10202A 1. 101408 10051A -.47 10084A -.36 101408 10090A -.17 10203A 1. 101VIS 10074A 1. 101600 10025A -17.86 10105A -1. 101601 10025A -23.21 10104A -1. 101I93 10207A -1. 102000 10001A -1. 10025A 10.5 102000 10027A 1. 102001 10025A 15. 10026A 1. 102002 10025A 50. 10031A 1. 102003 10025A 50. 10033A 1. 102004 10025A 50. 10038A 1. 102006 10025A 20. 10110A 1. 102500 10027A -1. 102502 10031A -1. 102503 10033A -1. 102504 10038A -1. 102I93 10207A 1. 103000 10031A 1. 10170A 1. 103001 10033A 1. 10171A 1. 103002 10038A 1. 10172A 1. 103003 10037A 1. 10173A 1. 103005 10145A 1. 10146A 29. 103005 10147A .75 10175A 1. 103006 10148A 1. 10149A 26. 103006 10150A 2.1 10176A 1. 103007 10044A .25 10116A .3 103007 10117A .45 10177A 1. 104003 10215A 100. 104004 10038A -1. 10183A 1. 104004 10219A 100. 104030 10059A 1. 10090A -1. 104030 10183A 1. 10216A 100. 104120 10084A -1. 10190A 1. 104120 10193A 1. 10217A 100. 104171 10148A -1. 10149A -26. 104171 10150A -2.1 10191A 1. 104171 10192A 1. 10218A 100. 104191 10084A -.6 10085A -.4 104191 10191A 1. 10193A 1. 104191 10220A 100. RHS ZZZZ0001 10006A 132.5 10007A 87.5 ZZZZ0001 10008A 8.1 10009A 55. ZZZZ0001 10010A 45. 10011A 3. ZZZZ0001 10012A 2.6 10013A 2.6 ZZZZ0001 10014A 80. 10015A 52. ZZZZ0001 10016A 30. 10017A 65.6 ZZZZ0001 10018A 45. 10019A 12.5 ZZZZ0001 10020A 15. 10021A .834 ZZZZ0001 10022A .536 10024A 20.2 ZZZZ0001 10026A 21.4 10027A 65.6 ZZZZ0001 10028A 2. 10029A 5.7 ZZZZ0001 10030A 3.3 10031A 10.3 ZZZZ0001 10032A 9. 10033A 33. ZZZZ0001 10034A 3. 10035A 4.35 ZZZZ0001 10036A .65 10037A 4. ZZZZ0001 10038A 13.4 10039A 7.2 ZZZZ0001 10040A 1.5 10042A 4. ZZZZ0001 10043A 3.5 10060A .8 ZZZZ0001 10089A 5. 10094A .2 ZZZZ0001 10100A 2. 10143A 3.5 ZZZZ0001 10144A -6.8 10152A 1.7 ZZZZ0001 10159A .6 10160A 40. ZZZZ0001 10163A 8. 10164A 14. ZZZZ0001 10167A 5. 10168A 10.6 ZZZZ0001 10169A .9 10201A 2.9 ZZZZ0001 10202A 2.5 10204A 1.06 ZZZZ0001 10209A 2.1 10210A .5 ENDATA Vol-1.5.4/Data/Sample/spec_sections.mps0000644000175000017500000000405712235603020016766 0ustar sudipsudip*NAME Test *Author H.I. Gassmann *Date 08/Oct/2013 *Purpose This file tests the processing of the * CoinMpsIO subsystem --- it does not make * much sense as an optimization problem * but is useful to illustrate a fully loaded MPS file NAME ROWS N obj L c1 COLUMNS x0 obj 1 c1 1 INT 'MARKER' 'INTORG' x1 obj -1 c1 10 INT 'MARKER' 'INTEND' * S1 NAME1 'MARKER' 'SOSORG' x2 obj -9 c1 5 x3 obj -6 c1 8 * NAME1 'MARKER' 'SOSEND' x4 obj 1 c1 1 x5 obj -6 c1 8 x6 obj 1 c1 1 x7 obj 1 c1 1 x8 obj -6 c1 8 x9 obj -2 c1 1 x10 obj -3 c1 1 x11 obj -1 c1 -1 x12 obj -2 c1 1 x13 obj -3 c1 1 x14 obj -9 c1 5 RHS rhs c1 10000 RANGES range c1 2000 BOUNDS LI BOUND x1 2 UI BOUND x1 3 SOS S1 set1 x2 x3 S2 set2 x4 20 x5 40 QUADOBJ x6 x6 1 x6 x7 2 x7 x7 7 CSECTION cone1 0.0 QUAD x8 x9 x10 CSECTION cone2 0.0 RQUAD x11 x12 x13 x14 *BASIS * XU x6 c1 * BS x7 ENDATA Vol-1.5.4/Data/Sample/p0033.mps0000644000175000017500000001463310430174061014676 0ustar sudipsudip*NAME: p0033 *ROWS: 16 *COLUMNS: 33 *INTEGER: 33 *NONZERO: 98 *BEST SOLN: 3089 (opt) *LP SOLN: 2520.57 *SOURCE: Crowder-Johnson-Padberg test set * * E. Andrew Boyd (Rice University) *APPLICATION: unknown *COMMENTS: pure 0/1 IP * 5 SOS constraints * NAME P0033 ROWS N R100 L R114 L R115 L R116 L R117 L R118 L R119 L R120 L R121 L R122 L R123 L R124 L R125 L R126 L R127 L R128 L ZBESTROW COLUMNS MARK0000 'MARKER' 'INTORG' C157 R100 171 R114 1 C157 R122 -300 R123 -300 C158 R100 171 R114 1 C158 R126 -300 R127 -300 C159 R100 171 R114 1 C159 R119 300 R120 -300 C159 R123 -300 C160 R100 171 R114 1 C160 R119 300 R120 -300 C160 R121 -300 C161 R100 163 R115 1 C161 R119 285 R120 -285 C161 R124 -285 R125 -285 C162 R100 162 R115 1 C162 R119 285 R120 -285 C162 R122 -285 R123 -285 C163 R100 163 R115 1 C163 R128 -285 C164 R100 69 R116 1 C164 R119 265 R120 -265 C164 R124 -265 R125 -265 C165 R100 69 R116 1 C165 R119 265 R120 -265 C165 R122 -265 R123 -265 C166 R100 183 R117 1 C166 R118 -230 C167 R100 183 R117 1 C167 R124 -230 R125 -230 C168 R100 183 R117 1 C168 R119 230 R120 -230 C168 R125 -230 C169 R100 183 R117 1 C169 R119 230 R120 -230 C169 R123 -230 C170 R100 49 R119 190 C170 R120 -190 R122 -190 C170 R123 -190 C171 R100 183 R117 1 C172 R100 258 R118 -200 C173 R100 517 R118 -400 C174 R100 250 R126 -200 C174 R127 -200 C175 R100 500 R126 -400 C175 R127 -400 C176 R100 250 R127 -200 C177 R100 500 R127 -400 C178 R100 159 R119 200 C178 R120 -200 R124 -200 C178 R125 -200 C179 R100 318 R119 400 C179 R120 -400 R124 -400 C179 R125 -400 C180 R100 159 R119 200 C180 R120 -200 R125 -200 C181 R100 318 R119 400 C181 R120 -400 R125 -400 C182 R100 159 R119 200 C182 R120 -200 R122 -200 C182 R123 -200 C183 R100 318 R119 400 C183 R120 -400 R122 -400 C183 R123 -400 C184 R100 159 R119 200 C184 R120 -200 R123 -200 C185 R100 318 R119 400 C185 R120 -400 R123 -400 C186 R100 114 R119 200 C186 R120 -200 R121 -200 C187 R100 228 R119 400 C187 R120 -400 R121 -400 C188 R100 159 R128 -200 C189 R100 318 R128 -400 MARK0001 'MARKER' 'INTEND' RHS RHS R114 1 R115 1 RHS R116 1 R117 1 RHS R118 -5 R119 2700 RHS R120 -2600 R121 -100 RHS R122 -900 R123 -1656 RHS R124 -335 R125 -1026 RHS R126 -5 R127 -500 RHS R128 -270 BOUNDS UP ONE C157 1 UP ONE C158 1 UP ONE C159 1 UP ONE C160 1 UP ONE C161 1 UP ONE C162 1 UP ONE C163 1 UP ONE C164 1 UP ONE C165 1 UP ONE C166 1 UP ONE C167 1 UP ONE C168 1 UP ONE C169 1 UP ONE C170 1 UP ONE C171 1 UP ONE C172 1 UP ONE C173 1 UP ONE C174 1 UP ONE C175 1 UP ONE C176 1 UP ONE C177 1 UP ONE C178 1 UP ONE C179 1 UP ONE C180 1 UP ONE C181 1 UP ONE C182 1 UP ONE C183 1 UP ONE C184 1 UP ONE C185 1 UP ONE C186 1 UP ONE C187 1 UP ONE C188 1 UP ONE C189 1 ENDATA Vol-1.5.4/Data/Sample/ltmain.sh0000755000175000017500000057753011405216230015243 0ustar sudipsudip# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $mkdir "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` if eval $echo \"$deplib\" 2>/dev/null \ | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $absdir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes ; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then $show "${rm}r $gentop" $run ${rm}r "$gentop" fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ char * find_executable (const char* wrapper) { int has_slash = 0; const char* p; const char* p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char* concat_name; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char* path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char* q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR(*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); return NULL; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: Vol-1.5.4/Data/Sample/nw460.mps0000644000175000017500000000324710430174061015006 0ustar sudipsudip* * small test problem from Nemhauser and Wolsey, page 460. * * knapsack problem with violated minimal covers * NAME nwp460 ROWS N obj L knap1 L knap2 COLUMNS SET00001 'MARKER' 'INTORG' x1 obj -77.000000 x1 knap1 774.000000 x1 knap2 67.000000 x2 obj -6.000000 x2 knap1 76.000000 x2 knap2 27.000000 x3 obj -3.000000 x3 knap1 22.000000 x3 knap2 794.000000 x4 obj -6.000000 x4 knap1 42.000000 x4 knap2 53.000000 x5 obj -33.000000 x5 knap1 21.000000 x5 knap2 234.000000 x6 obj -13.000000 x6 knap1 760.000000 x6 knap2 32.000000 x7 obj -110.000000 x7 knap1 818.000000 x7 knap2 797.000000 x8 obj -21.000000 x8 knap1 62.000000 x8 knap2 97.000000 x9 obj -47.000000 x9 knap1 785.000000 x9 knap2 435.000000 RHS RHS knap1 1500.000000 RHS knap2 1500.000000 BOUNDS BV ONE x1 1.000000 BV ONE x2 1.000000 BV ONE x3 1.000000 BV ONE x4 1.000000 BV ONE x5 1.000000 BV ONE x6 1.000000 ENDATA Vol-1.5.4/Data/Sample/Makefile.in0000644000175000017500000005205513374040606015464 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ DIST_COMMON = $(am__configure_deps) $(srcdir)/BuildTools/Makemain.inc \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/coindatasample-uninstalled.pc.in \ $(srcdir)/coindatasample.pc.in $(top_srcdir)/configure \ config.guess config.sub depcomp install-sh ltmain.sh missing @HAVE_EXTERNALS_TRUE@am__append_1 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_2 = .Dependencies-stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = coindatasample.pc coindatasample-uninstalled.pc SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(datacoindir)" \ "$(DESTDIR)$(pkgconfiglibdir)" datacoinDATA_INSTALL = $(INSTALL_DATA) pkgconfiglibDATA_INSTALL = $(INSTALL_DATA) DATA = $(datacoin_DATA) $(pkgconfiglib_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CYGPATH_W = @CYGPATH_W@ DATASAMPLE_SVN_REV = @DATASAMPLE_SVN_REV@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXAMPLE_CLEAN_FILES = @EXAMPLE_CLEAN_FILES@ EXAMPLE_FILES = @EXAMPLE_FILES@ EXAMPLE_UNCOMPRESSED_FILES = @EXAMPLE_UNCOMPRESSED_FILES@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_ct_STRIP = @ac_ct_STRIP@ am__leading_dot = @am__leading_dot@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host_alias = @host_alias@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # List files that should be distributed # ######################################################################## EXTRA_DIST = $(EXAMPLE_FILES) $(am__append_1) DISTCLEANFILES = $(EXAMPLE_CLEAN_FILES) $(am__append_2) \ $(VPATH_DISTCLEANFILES) datacoindir = $(datadir)/coin/Data/Sample datacoin_DATA = $(EXAMPLE_FILES) pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = coindatasample.pc DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE all: all-am .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/BuildTools/Makemain.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) coindatasample.pc: $(top_builddir)/config.status $(srcdir)/coindatasample.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ coindatasample-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/coindatasample-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ uninstall-info-am: install-datacoinDATA: $(datacoin_DATA) @$(NORMAL_INSTALL) test -z "$(datacoindir)" || $(mkdir_p) "$(DESTDIR)$(datacoindir)" @list='$(datacoin_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(datacoinDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(datacoindir)/$$f'"; \ $(datacoinDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(datacoindir)/$$f"; \ done uninstall-datacoinDATA: @$(NORMAL_UNINSTALL) @list='$(datacoin_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(datacoindir)/$$f'"; \ rm -f "$(DESTDIR)$(datacoindir)/$$f"; \ done install-pkgconfiglibDATA: $(pkgconfiglib_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfiglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfiglibdir)" @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkgconfiglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ $(pkgconfiglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done uninstall-pkgconfiglibDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/. $(distdir)/BuildTools @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(datacoindir)" "$(DESTDIR)$(pkgconfiglibdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-datacoinDATA install-pkgconfiglibDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-datacoinDATA uninstall-info-am \ uninstall-pkgconfiglibDATA .PHONY: all all-am am--refresh check check-am clean clean-generic dist \ dist-all dist-bzip2 dist-gzip dist-shar dist-tarZ dist-zip \ distcheck distclean distclean-generic distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-datacoinDATA install-exec install-exec-am install-info \ install-info-am install-man install-pkgconfiglibDATA \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-datacoinDATA uninstall-info-am \ uninstall-pkgconfiglibDATA doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## # Make sure acinclude is using most recent coin.m4 @MAINTAINER_MODE_TRUE@$(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 @MAINTAINER_MODE_TRUE@ cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date @MAINTAINER_MODE_TRUE@$(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh @MAINTAINER_MODE_TRUE@ cp $< $@ # Take care of updating externals (if Dependencies file exists) @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@$(top_builddir)/Makefile: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@.Dependencies-stamp: $(srcdir)/Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); BuildTools/set_externals Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ touch .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@update-externals: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); svn update .PHONY: install-doc uninstall-doc update-externals test: @echo "No test available." # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Data/Sample/app0110.stoch0000755000175000017500000001170711015552002015531 0ustar sudipsudipNAME APP SCENARIOS DISCRETE ADD SC SCEN01 ROOT 0.111 STAGE-2 RHS D00102 -0.667 RHS D00202 -0.667 RHS D00302 -0.667 RHS D00402 -1.333 RHS D00103 0.333 RHS D00203 -1.000 RHS D00303 0.000 RHS D00403 -1.000 RHS D00104 1.333 RHS D00204 -1.667 RHS D00304 1.333 RHS D00404 -0.667 RHS D00105 2.333 RHS D00205 -1.333 RHS D00305 2.667 RHS D00405 -0.333 SC SCEN02 SCEN01 0.111 STAGE-3 RHS D00103 -0.667 RHS D00203 1.000 RHS D00303 0.000 RHS D00403 0.000 RHS D00104 -0.667 RHS D00204 -0.667 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -0.667 RHS D00205 -1.333 RHS D00305 -1.333 RHS D00405 0.667 SC SCEN03 SCEN01 0.111 STAGE-3 RHS D00103 0.333 RHS D00203 0.000 RHS D00303 0.000 RHS D00403 1.000 RHS D00104 -0.667 RHS D00204 2.333 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -1.667 RHS D00205 2.667 RHS D00305 -1.333 RHS D00405 -0.333 SC SCEN04 ROOT 0.111 STAGE-2 RHS D00102 -0.667 RHS D00202 0.333 RHS D00302 -0.667 RHS D00402 -0.333 RHS D00103 0.333 RHS D00203 -1.000 RHS D00303 0.000 RHS D00403 -1.000 RHS D00104 1.333 RHS D00204 -1.667 RHS D00304 1.333 RHS D00404 -0.667 RHS D00105 2.333 RHS D00205 -1.333 RHS D00305 2.667 RHS D00405 -0.333 SC SCEN05 SCEN04 0.111 STAGE-3 RHS D00103 -0.667 RHS D00203 1.000 RHS D00303 0.000 RHS D00403 0.000 RHS D00104 -0.667 RHS D00204 -0.667 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -0.667 RHS D00205 -1.333 RHS D00305 -1.333 RHS D00405 0.667 SC SCEN06 SCEN04 0.111 STAGE-3 RHS D00103 0.333 RHS D00203 0.000 RHS D00303 0.000 RHS D00403 1.000 RHS D00104 -0.667 RHS D00204 2.333 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -1.667 RHS D00205 2.667 RHS D00305 -1.333 RHS D00405 -0.333 SC SCEN07 ROOT 0.111 STAGE-2 RHS D00102 1.333 RHS D00202 0.333 RHS D00302 1.333 RHS D00402 1.667 RHS D00103 0.333 RHS D00203 -1.000 RHS D00303 0.000 RHS D00403 -1.000 RHS D00104 1.333 RHS D00204 -1.667 RHS D00304 1.333 RHS D00404 -0.667 RHS D00105 2.333 RHS D00205 -1.333 RHS D00305 2.667 RHS D00405 -0.333 SC SCEN08 SCEN07 0.111 STAGE-3 RHS D00103 -0.667 RHS D00203 1.000 RHS D00303 0.000 RHS D00403 0.000 RHS D00104 -0.667 RHS D00204 -0.667 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -0.667 RHS D00205 -1.333 RHS D00305 -1.333 RHS D00405 0.667 SC SCEN09 SCEN07 0.111 STAGE-3 RHS D00103 0.333 RHS D00203 0.000 RHS D00303 0.000 RHS D00403 1.000 RHS D00104 -0.667 RHS D00204 2.333 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -1.667 RHS D00205 2.667 RHS D00305 -1.333 RHS D00405 -0.333 ENDATA Vol-1.5.4/Data/Sample/e226.mps0000644000175000017500000026741310662211140014612 0ustar sudipsudipNAME E226 ROWS N ...000 L ...010 E ...011 L ...012 E ...013 E ...014 E ...015 E ...016 L ...017 L ...018 L ...019 L ...020 L ...021 L ...022 L ...023 L ...024 L ...025 E ...026 L ...027 E ...028 L ...029 L ...030 L ...031 E ...032 L ...033 L ...034 L ...035 L ...036 L ...037 L ...038 L ...039 L ...040 L ...041 L ...042 L ...043 L ...044 L ...045 E ...046 L ...047 L ...048 L ...049 L ...050 L ...051 L ...052 L ...053 L ...054 L ...055 L ...056 L ...057 L ...058 L ...059 L ...060 L ...120 L ...133 L ...134 L ...135 L ...136 L ...137 L ...138 L ...139 L ...140 L ...141 L ...142 L ...143 L ...144 L ...145 L ...146 E ...147 L ...148 L ...149 L ...150 L ...151 L ...152 L ...153 L ...154 L ...155 E ...156 E ...157 L ...158 L ...159 L ...160 L ...161 L ...162 L ...163 E ...164 E ...165 E ...166 L ...167 L ...168 L ...169 L ...170 L ...171 L ...172 L ...173 L ...174 L ...175 E ...176 E ...177 E ...178 L ...179 L ...180 E ...181 L ...182 L ...183 E ...184 L ...185 L ...186 E ...187 E ...188 L ...189 L ...190 G ...191 L ...192 L ...193 L ...194 L ...195 L ...196 L ...197 L ...198 L ...199 L ...200 G ...201 L ...202 G ...203 L ...204 L ...205 L ...206 L ...207 L ...208 L ...209 L ...210 L ...211 L ...212 L ...213 L ...214 L ...215 L ...216 L ...217 L ...218 L ...219 L ...220 L ...221 L ...222 L ...223 L ...224 L ...225 L ...226 L ...227 L ...228 L ...229 L ...230 L ...231 L ...232 L ...233 L ...234 L ...235 L ...236 L ...237 L ...238 L ...239 L ...240 L ...241 L ...242 L ...243 L ...244 L ...245 L ...246 L ...247 L ...248 L ...249 L ...250 E ...251 L ...252 L ...253 L ...254 L ...255 L ...256 L ...257 L ...258 L ...259 L ...260 L ...261 E ...262 L ...263 E ...264 L ...265 L ...267 L ...266 L ...268 E ...269 L ...270 L ...271 L ...272 L ...273 L ...274 L ...275 E ...276 E ...277 E ...278 E ...279 L ...280 L ...281 L ...282 L ...283 L ...284 L ...285 L ...286 L ...287 L ...288 E ...289 L ...290 L ...291 G ...292 L ...293 E ...294 L ...295 L ...296 G ...297 L ...298 E ...299 L ...300 L ...301 L ...302 L ...303 COLUMNS .ETHSD ...269 1. ...270 1. .ETHSD ...000 -10.1974 .BUDSD ...271 1. ...293 1. .BUDSD ...000 -29.1163 .HEPTS ...267 1. ...268 1. .HEPTS ...000 -12.8462 .M28IS ...032 1. ...055 1. .TF0SD ...300 1. ...301 .63 .TF0SD ...302 .37 ...000 -4.7113 .RKDIS ...028 1. ...055 1. .ADHD1 ...056 2.857 ...133 .984 .ADHD1 ...140 1. ...000 -3.9824 .PREHT ...289 1. ...290 1. .C4LPG ...169 1. ...173 1. .C4LPG ...174 1. ...000 -2.7214 .M28SL ...033 1. ...049 1. .M28SL ...045 -.4286 ...000 -6.5884 .HEPP0 ...267 1. ...274 -1. .RKSLD ...029 1. ...031 1. .RKSLD ...045 -.2195 ...000 -4.158 .UN010 ...010 -1. .XCAPY ...182 1. .REDBA ...294 .1 ...013 -.04 .TFVIS ...051 .362 ...052 1. .TFVIS ...053 .362 ...054 .829 .TFVIS ...056 2.127 ...000 -4.3557 .T0TMX ...168 1. ...170 -.25 .T0TMX ...171 .12 ...173 1. .T0TMX ...174 1. ...000 -3.103 .EGV0L ...000 -5.9898 ...211 1. .EGV0L ...212 1. .VNNF2 ...193 -.272 ...192 -.272 .VNNF2 ...194 -.272 ...195 -.272 .C5FDP ...181 1. ...183 -1. .C5FDP ...184 -.1614 ...185 1.1614 .C5FDP ...186 1.1614 .TFNS1 ...050 1. ...051 -1. .TFNS1 ...000 .0087 .CFMSU ...261 -2.9155 ...278 1. .VN4PH ...179 1. ...198 -1. .CFMSG ...279 1. ...285 .6526 .ERV0L ...233 1. ...234 1. .ERV0L ...000 -4.4497 .PKDIS ...026 1. ...055 1. .EEV0L ...000 -5.348 ...222 1. .EEV0L ...223 1. .CS1TP ...189 -1. ...191 1. .CS1TP ...190 1. ...000 .0078 .JP5DS ...046 1. ...047 -.5 .JP5DS ...048 1. ...050 1. .JP5DS ...000 -4.0337 .DMD0S ...144 1. ...145 1. .DMD0S ...000 -3.8202 .PKSLD ...027 1.25 ...030 1. .PKSLD ...045 -.25 ...000 -4.3425 .VNSW2 ...051 1. ...189 -1. .VNSW2 ...000 .015 .TGAS1 ...134 1. ...135 1. .TGAS1 ...137 -1.667 .TGAS2 ...137 -1.367 ...134 1. .TGAS2 ...136 1. .LD1EG ...219 5.2638 ...244 7.593 .LD1EG ...000 -1. .LD2EG ...219 15.7829 ...245 18.5185 .LD2EG ...000 -1. .JP1TF ...034 1. ...050 1. .JP1TF ...301 -1. .JP1DS ...034 1. ...035 1. .JP1DS ...036 -.2 ...050 1. .JP1DS ...000 -4.5066 .JP4DS ...038 1. ...041 1. .JP4DS ...050 1. ...000 -2.7704 .VN4DB ...051 1. ...179 1. .VN4DB ...204 2. ...281 1. .VN4DB ...000 -4.3739 .T5JP5 ...037 1. ...046 -1. .T5JP5 ...047 1. ...050 -1. .T5JP5 ...000 -.0087 .J4210 ...041 1. ...042 1.062 .J4210 ...044 .0638 ...050 1. .J4210 ...000 -3.0626 .T5JP1 ...034 -1. ...036 1. .T5JP1 ...037 1. ...050 -1. .T5JP1 ...000 -.0087 .TFCAT ...054 -11.055 ...156 24.476 .TFCAT ...157 1. ...281 -2.5386 .TFCAT ...282 10.0375 .VNSW1 ...050 1. ...189 -1. .VNSW1 ...000 .0087 .ETHRF ...264 -.42 ...269 1. .ETHRF ...000 1.35 .LD1ER ...241 75.9202 ...248 19.7239 .LD1ER ...000 -1. .LD2ER ...000 -1. ...241 151.8405 .LD2ER ...249 12.3305 .LD1EE ...000 -1. ...230 14.5377 .LD1EE ...246 14.1044 .LD2EE ...000 -1. ...230 25.3995 .LD2EE ...247 12.3305 .PC4TF ...264 -.66 ...265 .66 .PC4TF ...273 1. .C5TRF ...183 1. ...264 -.7 .C5TRF ...265 .7 .CCSRF ...156 17.372 ...157 1. .CCSRF ...264 -.9 ...266 1. .CCSRF ...000 -.2 .DGHDS ...137 8.33 ...138 1. .DGHDS ...139 1.483 ...262 -9.648 .DGHDS ...264 -.014 ...265 .014 .DGHDS ...000 -5.9218 .ADHDS ...133 .982 ...137 10. .ADHDS ...140 1. ...262 -9.648 .ADHDS ...000 -3.9942 ...264 -.0126 .ADHDS ...265 .0126 .VN4RF ...179 1. ...264 -.78 .VN4RF ...265 .78 .GWG0S ...142 1. ...143 1. .GWG0S ...000 -4.0195 .DGFDG ...139 -1. ...141 1. .DGFDG ...142 1. .ADFHD ...140 -1. ...142 .7763 .ADFHD ...156 4.401 ...157 .2237 .C4VIS ...173 -1. ...200 1. .CATFI ...147 -1. ...276 -6. .CATFI ...277 -3.3 ...278 -1.6 .CATFI ...279 -.916 ...000 3.2253 .C3LPG ...167 1. ...172 1. .C3LPG ...174 1. ...202 1. .C3LPG ...000 -2.7904 .PETCF ...147 -1. ...148 1. .PETCF ...276 -18.4 ...277 .462 .PETCF ...278 -4.2 ...279 -.966 .C3MIX ...170 1. ...171 -1. .C3MIX ...172 1. ...173 -1. .C3MIX ...202 1. .CB1H1 ...147 -1. ...158 1. .CB1H1 ...276 -5.4 ...277 -3.96 .CB1H1 ...278 -1.68 ...279 -.927 .CB1H3 ...147 -1. ...159 1. .CB1H3 ...276 -7.1 ...277 9.9 .CB1H3 ...278 -1.97 ...279 -.946 .PS1LF ...147 -1. ...149 1. .PS1LF ...276 -2.5 ...277 -20.46 .PS1LF ...278 -1.6 ...279 -.861 .PS1H1 ...147 -1. ...150 1. .PS1H1 ...276 -2.8 ...277 -14.685 .PS1H1 ...278 -2.6 ...279 -.892 .PS1H2 ...147 -1. ...151 1. .PS1H2 ...276 -3.7 ...277 3.135 .PS1H2 ...278 -2.8 ...279 -.915 .PS1H3 ...147 -1. ...152 1. .PS1H3 ...276 -3.4 ...277 9.735 .PS1H3 ...278 -3.1 ...279 -.942 .PS2LF ...147 -1. ...153 1. .PS2LF ...276 -1.1 ...277 -16.5 .PS2LF ...278 -1.74 ...279 -.862 .PS2HF ...147 -1. ...154 1. .PS2HF ...276 -3.9 ...277 -1.65 .PS2HF ...278 -2.71 ...279 -.894 .GTSGB ...175 1. ...260 1. .GTSGB ...000 -2.9662 .MD0CF ...145 1. ...147 -1. .MD0CF ...276 .3 ...277 -23.1 .MD0CF ...278 -1.25 ...279 -.845 .SPSU1 ...260 .00026 ...261 1. .SPSU1 ...263 1. ...000 -.00176 .SPSU2 ...260 .00026 ...262 1. .SPSU2 ...263 1. ...000 -.00176 .C3VRF ...202 1. ...264 -.56 .PS3HF ...147 -1. ...155 1. .PS3HF ...276 -1.1 ...277 -9.9 .PS3HF ...278 -2.15 ...279 -.878 .BF0SD ...164 1. ...165 1. .BF0SD ...000 -2.6143 .C4VRF ...200 1. ...264 -.66 .C4VRF ...265 .66 .CCSF6 ...157 1. ...164 -1. .CCSVF ...156 1. ...166 -1. .FCTEM ...260 -.0029 ...283 -.0007 .FCTEM ...284 .44 ...285 -.0459 .FCTEM ...286 1. ...289 -.78 .FCTEM ...000 -.00049 .VN0ER ...188 1. ...241 -1.125 .GASRF ...260 1. ...264 -1. .G0TCF ...142 1. ...147 -1. .G0TCF ...276 1.2 ...277 -23.1 .G0TCF ...278 -1. ...279 -.832 .PC4TG ...213 64. ...214 -66. .PC4TG ...215 73. ...216 -92. .PC4TG ...217 40. ...218 -50. .PC4TG ...220 317.5 ...221 -613.2 .PC4TG ...219 .24 ...211 -1. .PC4TG ...244 -1. ...245 -1. .PC4TG ...273 1. .P0LYG ...213 1. ...214 -3. .P0LYG ...215 -17. ...216 -2. .P0LYG ...217 -24. ...218 14. .P0LYG ...220 -5.1 ...221 -19.2 .P0LYG ...219 1.29 ...211 -1. .P0LYG ...244 -1. ...245 -1. .P0LYG ...274 1. .P90BG ...256 1. ...213 -9. .P90BG ...214 7. ...215 -52. .P90BG ...216 33. ...217 -70. .P90BG ...218 60. ...220 -81. .P90BG ...221 95.8 ...219 -.7 .P90BG ...211 -1. ...244 -1. .P90BG ...245 -1. ...000 .0023 .P93BG ...213 -9. ...214 7. .P93BG ...215 -52. ...216 33. .P93BG ...217 -69. ...218 59. .P93BG ...220 -80.6 ...221 95.8 .P93BG ...219 -3.23 ...211 -1. .P93BG ...244 -1. ...245 -1. .P93BG ...257 1. ...000 .0023 .P96BG ...213 -9. ...214 7. .P96BG ...215 -52. ...216 33. .P96BG ...217 -68. ...218 58. .P96BG ...220 -80.2 ...221 95.8 .P96BG ...219 -4.94 ...211 -1. .P96BG ...244 -1. ...245 -1. .P96BG ...258 1. ...000 .0023 .P990G ...213 1.1 ...214 -3.1 .P990G ...215 22. ...216 -41. .P990G ...217 49. ...218 -59. .P990G ...220 44. ...221 -59. .P990G ...219 7.48 ...211 -1. .P990G ...244 -1. ...245 -1. .P990G ...255 1. ...000 .0023 .P99BG ...213 -9. ...214 7. .P99BG ...215 -52. ...216 33. .P99BG ...217 -67. ...218 57. .P99BG ...220 -79.8 ...221 95.8 .P99BG ...219 -6.21 ...211 -1. .P99BG ...244 -1. ...245 -1. .P99BG ...259 1. ...000 .0023 .C5TEG ...213 4. ...214 -6. .C5TEG ...215 58. ...216 -77. .C5TEG ...217 40. ...218 -50. .C5TEG ...220 70. ...221 -118.2 .C5TEG ...219 10.99 ...211 -1. .C5TEG ...244 -1. ...245 -1. .C5TEG ...183 1. ...250 1. .C5TEG ...251 -1. .LCN0G ...213 1.5 ...214 -3.5 .LCN0G ...215 40. ...216 -59. .LCN0G ...217 38. ...218 -48. .LCN0G ...220 50.2 ...221 -80.2 .LCN0G ...219 2.98 ...211 -1. .LCN0G ...244 -1. ...245 -1. .LCN0G ...250 1. ...280 1. .LCN0G ...000 .0089 .FCREC ...156 -.7977 ...260 -.0071 .FCREC ...280 -.0059 ...281 -.0039 .FCREC ...282 -.0033 ...283 .0065 .FCREC ...284 -.09 ...285 -.0564 .FCREC ...287 1. ...289 -.925 .FCREC ...000 -.00123 .FCMAR ...260 -.0017 ...276 1. .FCMAR ...280 .0036 ...281 .0024 .FCMAR ...282 .002 ...283 .0011 .FCMAR ...284 .32 ...285 .0696 .FCMBR ...156 .152 ...277 1. .FCMBR ...283 -.0023 ...280 .0006 .FCMBR ...281 .0004 ...282 .00035 .FCMBR ...260 -.0005 ...284 .042 .FCC0N ...260 .0006 ...280 -.00112 .FCC0N ...281 -.00075 ...282 -.00063 .FCC0N ...283 -.039 ...284 1. .FCC0N ...285 .1969 ...288 1. .FCC0N ...289 2.375 ...156 .6075 .FCC0N ...157 .05 ...000 .00058 .VN1ER ...187 1. ...239 1. .VN1ER ...240 -1. ...242 .4 .FCTPT ...147 1. ...156 -7.383 .FCTPT ...157 -.4 ...260 -.04495 .FCTPT ...280 -.19654 ...281 -.13103 .FCTPT ...282 -.10919 ...283 -.22573 .FCTPT ...284 4.569 ...286 -6. .FCTPT ...287 -2. ...288 -2. .FCTPT ...289 1.49 ...290 -1.3 .FCTPT ...291 1. ...292 1. .FCTPT ...000 .0186 .VNRER ...235 1. ...236 -1. .VNRER ...242 4. ...243 -8. .VNRER ...177 1. .VN7ER ...237 1. ...238 -1. .VN7ER ...242 .5 ...243 -1. .VN7ER ...178 1. .C4VEG ...213 53. ...214 -55. .C4VEG ...215 73. ...216 -92. .C4VEG ...217 40. ...218 -50. .C4VEG ...220 273.5 ...221 -525.2 .C4VEG ...219 7.34 ...211 -1. .C4VEG ...244 -1. ...245 -1. .C4VEG ...200 1. .C3VEG ...213 169. ...214 -171. .C3VEG ...215 98. ...216 -117. .C3VEG ...217 70. ...218 -80. .C3VEG ...220 762. ...221 -1478.2 .C3VEG ...219 -2.56 ...211 -1. .C3VEG ...244 -1. ...245 -1. .C3VEG ...202 1. .G0IF6 ...164 -1. ...166 -20.051 .G0IF6 ...000 4.0021 .MD0IF ...164 -1. ...166 -15.911 .MD0IF ...000 3.7167 .CFIF6 ...164 -1. ...166 -5.395 .CFIF6 ...000 3.2253 .F1V0L ...160 1. ...164 1. .F1V0L ...166 7.925 ...000 -3.1011 .F2V0L ...161 1. ...164 1. .F2V0L ...166 3.117 ...000 -2.8049 .F3V0L ...162 1. ...164 1. .F3V0L ...166 1.954 ...000 -2.7235 .F4V0L ...163 1. ...164 1. .F4V0L ...166 -1.117 ...000 -2.8146 .PETF6 ...164 -1. ...148 1. .PETF6 ...166 -6.192 .KEBF6 ...044 1. ...164 -1. .KEBF6 ...166 -27.4598 .WKEF6 ...045 1. ...164 -1. .WKEF6 ...166 -28.869 .CB161 ...158 1. ...164 -1. .CB161 ...166 -6.248 .CB163 ...159 1. ...164 -1. .CB163 ...166 -2.346 .PS1L6 ...149 1. ...164 -1. .PS1L6 ...166 -15.619 .PS161 ...150 1. ...164 -1. .PS161 ...166 -9.972 .PS162 ...151 1. ...164 -1. .PS162 ...166 -5.883 .PS163 ...152 1. ...164 -1. .PS163 ...166 -.923 .PS2L6 ...153 1. ...164 -1. .PS2L6 ...166 -15.292 .PS2H6 ...154 1. ...164 -1. .PS2H6 ...166 -9.503 .MD0F6 ...145 1. ...164 -1. .MD0F6 ...166 -15.911 .PTF0E ...224 -2.5 ...225 .5 .PTF0E ...226 -14.32 ...227 -5.7 .PTF0E ...228 9. ...229 -19. .PTF0E ...231 -4.56 ...232 16.1 .PTF0E ...230 2.01 ...222 -1. .PTF0E ...246 -1. ...247 -1. .PTF0E ...303 1. .SCNTE ...224 -.2 ...225 -1.8 .SCNTE ...226 1.64 ...227 -21.6 .SCNTE ...228 30. ...229 -40. .SCNTE ...231 21.02 ...232 -18.2 .SCNTE ...230 6.61 ...222 -1. .SCNTE ...246 -1. ...247 -1. .SCNTE ...275 1. ...000 .0005 .SCNTR ...235 -.2 ...236 -1.8 .SCNTR ...237 9. ...238 -29. .SCNTR ...239 30. ...240 -40. .SCNTR ...242 24.7 ...243 -25.6 .SCNTR ...241 -2.38 ...233 -1. .SCNTR ...248 -1. ...249 -1. .SCNTR ...275 1. ...000 .0005 .PTF0R ...235 -2.5 ...236 .5 .PTF0R ...237 -12. ...238 -8. .PTF0R ...239 9. ...240 -19. .PTF0R ...242 -3.4 ...243 13.8 .PTF0R ...241 -6.93 ...233 -1. .PTF0R ...248 -1. ...249 -1. .PTF0R ...303 1. .PC4TE ...224 66. ...225 -68. .PC4TE ...226 51.8 ...227 -71.8 .PC4TE ...228 40. ...229 -50. .PC4TE ...231 314.9 ...232 -598. .PC4TE ...230 -3.78 ...222 -1. .PC4TE ...246 -1. ...247 -1. .PC4TE ...273 1. .P0LYE ...224 3. ...225 -5. .P0LYE ...226 -16.6 ...227 -3.4 .P0LYE ...228 -24. ...229 14. .P0LYE ...231 3.1 ...232 -25.6 .P0LYE ...230 -2.69 ...222 -1. .P0LYE ...246 -1. ...247 -1. .P0LYE ...274 1. .PC4TR ...273 1. ...235 66. .PC4TR ...236 -68. ...237 75. .PC4TR ...238 -95. ...239 40. .PC4TR ...240 -50. ...242 326.5 .PC4TR ...243 -621.2 ...241 -12.74 .PC4TR ...233 -1. ...248 -1. .PC4TR ...249 -1. .P0LYR ...235 3. ...236 -5. .P0LYR ...237 -15. ...238 -5. .P0LYR ...239 -24. ...240 14. .P0LYR ...242 3.9 ...243 -27.2 .P0LYR ...241 -6.68 ...233 -1. .P0LYR ...248 -1. ...249 -1. .P0LYR ...274 1. .P900E ...225 -2. ...226 -.64 .P900E ...227 -19.4 ...228 45. .P900E ...229 -55. ...231 26.68 .P900E ...232 -17.6 ...230 5.74 .P900E ...222 -1. ...246 -1. .P900E ...247 -1. ...252 1. .P900E ...000 .0023 .P930E ...224 1. ...225 -3. .P930E ...226 3.16 ...227 -23.2 .P930E ...228 46. ...229 -56. .P930E ...231 32.98 ...232 -29.4 .P930E ...230 5.55 ...222 -1. .P930E ...246 -1. ...247 -1. .P930E ...253 1. ...000 .0023 .P960E ...224 2. ...225 -4. .P960E ...226 6.96 ...227 -27. .P960E ...228 47. ...229 -57. .P960E ...231 39.28 ...232 -41.2 .P960E ...230 5.15 ...222 -1. .P960E ...246 -1. ...247 -1. .P960E ...254 1. ...000 .0023 .P900R ...236 -2. ...237 6. .P900R ...238 -26. ...239 45. .P900R ...240 -55. ...242 30. .P900R ...243 -24.2 ...241 -1.05 .P900R ...233 -1. ...248 -1. .P900R ...249 -1. ...252 1. .P900R ...000 .0023 .P930R ...235 1. ...236 -3. .P930R ...237 11. ...238 -31. .P930R ...239 46. ...240 -56. .P930R ...242 36.9 ...243 -37.2 .P930R ...241 -1.27 ...233 -1. .P930R ...248 -1. ...249 -1. .P930R ...253 1. ...000 .0023 .P960R ...235 2. ...236 -4. .P960R ...237 16. ...238 -36. .P960R ...239 47. ...240 -57. .P960R ...242 43.8 ...243 -50.2 .P960R ...241 -1.71 ...233 -1. .P960R ...248 -1. ...249 -1. .P960R ...254 1. ...000 .0023 .F0RFF ...164 1. ...264 -1. .F0RFF ...000 .3 .P90BE ...224 -7. ...225 5. .P90BE ...226 -43.2 ...227 23.2 .P90BE ...228 -70. ...229 60. .P90BE ...231 -68.6 ...232 81. .P90BE ...230 -3.65 ...222 -1. .P90BE ...246 -1. ...247 -1. .P90BE ...256 1. ...000 .0023 .P93BE ...224 -7. ...225 5. .P93BE ...226 -43.2 ...227 23.2 .P93BE ...228 -69. ...229 59. .P93BE ...231 -68.2 ...232 81. .P93BE ...230 -5.85 ...222 -1. .P93BE ...246 -1. ...247 -1. .P93BE ...257 1. ...000 .0023 .P96BE ...224 -7. ...225 5. .P96BE ...226 -43.2 ...227 23.2 .P96BE ...228 -68. ...229 58. .P96BE ...231 -67.8 ...232 81. .P96BE ...230 -7.63 ...222 -1. .P96BE ...246 -1. ...247 -1. .P96BE ...258 1. ...000 .0023 .P990E ...224 3.5 ...225 -5.5 .P990E ...226 13.04 ...227 -33. .P990E ...228 49. ...229 -59. .P990E ...231 49.12 ...232 -59.2 .P990E ...230 4.43 ...222 -1. .P990E ...246 -1. ...247 -1. .P990E ...255 1. ...000 .0023 .P99BE ...224 -7. ...225 5. .P99BE ...226 -43.2 ...227 23.2 .P99BE ...228 -67. ...229 57. .P99BE ...231 -67.4 ...232 81. .P99BE ...230 -8.38 ...222 -1. .P99BE ...246 -1. ...247 -1. .P99BE ...259 1. ...000 .0023 .P90BR ...235 -7. ...236 5. .P90BR ...237 -50. ...238 30. .P90BR ...239 -70. ...240 60. .P90BR ...242 -72. ...243 87.8 .P90BR ...241 -10.34 ...233 -1. .P90BR ...248 -1. ...249 -1. .P90BR ...256 1. ...000 .0023 .P93BR ...235 -7. ...236 5. .P93BR ...237 -50. ...238 30. .P93BR ...239 -69. ...240 59. .P93BR ...242 -71.6 ...243 87.8 .P93BR ...241 -12.38 ...233 -1. .P93BR ...248 -1. ...249 -1. .P93BR ...257 1. ...000 .0023 .P96BR ...235 -7. ...236 5. .P96BR ...237 -50. ...238 30. .P96BR ...239 -68. ...240 58. .P96BR ...242 -71.2 ...243 87.8 .P96BR ...241 -14.06 ...233 -1. .P96BR ...248 -1. ...249 -1. .P96BR ...258 1. ...000 .0023 .P990R ...235 3.5 ...236 -5.5 .P990R ...237 24. ...238 -44. .P990R ...239 49. ...240 -59. .P990R ...242 54.6 ...243 -70.2 .P990R ...241 -2.38 ...233 -1. .P990R ...248 -1. ...249 -1. .P990R ...255 1. ...000 .0023 .P99BR ...235 -7. ...236 5. .P99BR ...237 -50. ...238 30. .P99BR ...239 -67. ...240 57. .P99BR ...242 -70.8 ...243 87.8 .P99BR ...241 -14.97 ...233 -1. .P99BR ...248 -1. ...249 -1. .P99BR ...259 1. ...000 .0023 .PS3H6 ...155 1. ...164 -1. .PS3H6 ...166 -13.855 .HCNTE ...224 -6.5 ...225 4.5 .HCNTE ...226 -34.08 ...227 14.1 .HCNTE ...228 -50. ...229 40. .HCNTE ...231 -54.04 ...222 -1. .HCNTE ...246 -1. ...232 67.9 .HCNTE ...230 2.44 ...247 -1. .HCNTE ...282 1. .HCNTR ...235 -6.5 ...236 4.5 .HCNTR ...237 -38. ...240 40. .HCNTR ...242 -56. ...243 71.8 .HCNTR ...241 -6.68 ...233 -1. .HCNTR ...248 -1. ...238 18. .HCNTR ...239 -50. ...249 -1. .HCNTR ...282 1. .LCNBE ...224 -8. ...225 6. .LCNBE ...226 -29.52 ...227 21.7 .LCNBE ...228 -56. ...229 46. .LCNBE ...231 -60.16 ...232 87.5 .LCNBE ...230 1.92 ...222 -1. .LCNBE ...246 -1. ...247 -1. .LCNBE ...281 1. ...000 .0103 .LCNBR ...235 -8. ...236 6. .LCNBR ...237 -48. ...238 28. .LCNBR ...239 -56. ...240 46. .LCNBR ...242 -69.4 ...243 93.8 .LCNBR ...241 -7.02 ...233 -1. .LCNBR ...248 -1. ...249 -1. .LCNBR ...281 1. ...000 .0103 .C5TEE ...224 6. ...225 -8. .C5TEE ...226 40.4 ...227 -60.4 .C5TEE ...228 40. ...229 -50. .C5TEE ...231 69.2 ...232 -106.6 .C5TEE ...230 6.96 ...222 -1. .C5TEE ...246 -1. ...247 -1. .C5TEE ...183 1. ...250 1. .C5TEE ...251 .20083 .LCN0E ...224 3.5 ...225 -5.5 .LCN0E ...226 26.72 ...227 -46.7 .LCN0E ...228 38. ...229 -48. .LCN0E ...231 51.56 ...232 -72.9 .LCN0E ...230 -1.19 ...222 -1. .LCN0E ...246 -1. ...247 -1. .LCN0E ...250 1. ...280 1. .LCN0E ...000 .0089 .LCN0R ...235 3.5 ...236 -5.5 .LCN0R ...237 42. ...238 -62. .LCN0R ...239 38. ...240 -48. .LCN0R ...242 59.2 ...243 -88.2 .LCN0R ...241 -10.17 ...233 -1. .LCN0R ...248 -1. ...249 -1. .LCN0R ...250 1. ...280 1. .LCN0R ...000 .0089 .G0TF6 ...142 1. ...146 -1. .G0TF6 ...164 -1. ...166 -20.051 .DACFP ...120 2.63 ...147 -.33 .DACFP ...164 .33 ...166 .49 .DACFP ...276 -2.013 ...277 3.267 .DACFP ...278 -1.0164 ...279 -.3102 .DACFP ...000 .0311 .C4VEE ...200 1. ...224 55. .C4VEE ...225 -57. ...226 51.8 .C4VEE ...227 -71.8 ...228 40. .C4VEE ...229 -50. ...231 270.9 .C4VEE ...232 -510. ...230 3.25 .C4VEE ...222 -1. ...246 -1. .C4VEE ...247 -1. .C3VEE ...202 1. ...224 171. .C3VEE ...225 -173. ...226 70.8 .C3VEE ...227 -90.8 ...228 70. .C3VEE ...229 -80. ...231 756.4 .C3VEE ...232 -1457. ...230 -6.36 .C3VEE ...222 -1. ...246 -1. .C3VEE ...247 -1. .C4VER ...200 1. ...201 1. .C4VER ...235 55. ...236 -57. .C4VER ...237 75. ...238 -95. .C4VER ...239 40. ...240 -50. .C4VER ...242 282.5 ...243 -533.2 .C4VER ...241 -5.81 ...233 -1. .C4VER ...248 -1. ...249 -1. .C3VER ...202 1. ...203 1. .C3VER ...235 171. ...236 -173. .C3VER ...237 100. ...238 -120. .C3VER ...239 70. ...240 -80. .C3VER ...242 771. ...243 -1486.2 .C3VER ...241 -15.15 ...233 -1. .C3VER ...248 -1. ...249 -1. .SCSRT ...164 -.033 ...166 -.007 .SCSRT ...180 1. ...182 1. .SCSRT ...186 1. ...260 -.079 .SCSRT ...269 -.3351 ...271 -.0347 .SCSRT ...275 -.3769 .P0LYF ...164 -.0059 ...166 -.114 .P0LYF ...260 -.0802 ...267 -.0427 .P0LYF ...271 -.0586 ...273 -.1917 .P0LYF ...274 -.4058 ...283 1. .P0LYF ...000 .1273 .VNVER ...176 1. ...189 1. .VNVER ...235 -9. ...236 7. .VNVER ...237 -40. ...238 20. .VNVER ...239 -60. ...240 50. .VNVER ...242 -71. ...243 93.8 .VNVER ...241 65.12 ...233 -1. .VNVER ...248 -1. ...249 -1. .VN2PT ...134 -5.7 ...164 -.01 .VN2PT ...166 -.151 ...196 1. .VN2PT ...199 .4762 ...264 .085 .VN2PT ...260 -.315 ...302 -.198 .VN2PT ...303 -.462 .IMPP0 ...134 -5.05 ...164 -.005 .IMPP0 ...166 -.076 ...199 .4673 .IMPP0 ...252 -.34 ...256 -.413 .IMPP0 ...264 .085 ...260 -.219 .IMPP0 ...000 3.3169 .IMPP3 ...134 -5.38 ...164 -.005 .IMPP3 ...166 -.076 ...199 .4673 .IMPP3 ...253 -.316 ...260 -.259 .IMPP3 ...000 3.3201 ...257 -.401 .IMPP3 ...264 .085 .IMPP6 ...134 -5.7 ...164 -.01 .IMPP6 ...166 -.151 ...199 .657 .IMPP6 ...254 -.288 ...258 -.372 .IMPP6 ...264 .085 ...260 -.315 .IMPP6 ...000 3.3233 .IMPP9 ...134 -5.7 ...164 -.01 .IMPP9 ...166 -.151 ...199 1.2129 .IMPP9 ...255 -.235 ...259 -.349 .IMPP9 ...264 .085 ...260 -.395 .IMPP9 ...000 3.3305 .VN3P0 ...134 -5.47 ...164 -.005 .VN3P0 ...166 -.076 ...197 1. .VN3P0 ...199 .4673 ...252 -.209 .VN3P0 ...256 -.561 ...264 .085 .VN3P0 ...260 -.2 ...000 .0481 .VN3P3 ...134 -6.13 ...164 -.01 .VN3P3 ...166 -.151 ...197 1. .VN3P3 ...199 .4673 ...253 -.212 .VN3P3 ...257 -.521 ...264 .085 .VN3P3 ...260 -.235 ...000 .0513 .VN3P6 ...134 -6.79 ...164 -.01 .VN3P6 ...166 -.151 ...197 1. .VN3P6 ...199 .4932 ...254 -.222 .VN3P6 ...258 -.471 ...264 .085 .VN3P6 ...260 -.282 ...000 .0545 .VN4P0 ...134 -5.8 ...164 -.052 .VN4P0 ...166 -.786 ...198 1. .VN4P0 ...199 .4673 ...252 -.218 .VN4P0 ...256 -.538 ...264 .085 .VN4P0 ...260 -.167 ...000 .0481 .VN4P3 ...134 -6.51 ...164 -.057 .VN4P3 ...166 -.861 ...198 1. .VN4P3 ...199 .4673 ...253 -.231 .VN4P3 ...257 -.502 ...264 .085 .VN4P3 ...260 -.188 ...000 .0513 .VN4P6 ...134 -7.21 ...164 -.081 .VN4P6 ...166 -1.224 ...198 1. .VN4P6 ...199 .5055 ...254 -.231 .VN4P6 ...258 -.442 ...264 .085 .VN4P6 ...260 -.225 ...000 .0545 .VN2P0 ...134 -5.05 ...164 -.005 .VN2P0 ...166 -.076 ...196 1. .VN2P0 ...199 .4673 ...252 -.34 .VN2P0 ...256 -.413 ...264 .085 .VN2P0 ...260 -.219 ...000 .0481 .VN2P3 ...134 -5.38 ...164 -.005 .VN2P3 ...166 -.076 ...196 1. .VN2P3 ...199 .4673 ...253 -.316 .VN2P3 ...257 -.401 ...264 .085 .VN2P3 ...260 -.259 ...000 .0513 .VN2P6 ...134 -5.7 ...164 -.01 .VN2P6 ...166 -.151 ...196 1. .VN2P6 ...199 .657 ...254 -.288 .VN2P6 ...258 -.372 ...264 .085 .VN2P6 ...260 -.315 ...000 .0545 .VN3P9 ...134 -7.45 ...164 -.015 .VN3P9 ...166 -.227 ...197 1. .VN3P9 ...199 1.1306 ...255 -.216 .VN3P9 ...259 -.427 ...264 .085 .VN3P9 ...260 -.331 ...000 .0577 .VN4P9 ...134 -7.92 ...164 -.086 .VN4P9 ...166 -1.299 ...198 1. .VN4P9 ...199 .8789 ...255 -.23 .VN4P9 ...259 -.394 ...264 .085 .VN4P9 ...260 -.279 ...000 .0577 .VN2P9 ...134 -5.7 ...164 -.01 .VN2P9 ...166 -.151 ...196 1. .VN2P9 ...199 1.2129 ...255 -.235 .VN2P9 ...259 -.349 ...264 .085 .VN2P9 ...260 -.395 ...000 .0577 .NIMP1 ...176 -1. ...177 -8.5 .NIMP1 ...178 -62.5 ...187 -100. .NIMP1 ...188 -55.95 ...000 3.4736 .NIMP2 ...000 3.1736 ...176 -1. .NIMP2 ...177 -.9 ...178 16. .NIMP2 ...187 20. ...188 -46.04 .C4FVN ...176 1. ...177 64. .C4FVN ...178 115. ...184 1. .C4FVN ...187 100. ...188 64. .WSDIS ...023 .92 ...024 1. .WSDIS ...025 1. ...176 -.08 .WSDIS ...177 -.856 ...178 -3.72 .WSDIS ...187 -4.656 ...188 -4.4312 .WSDIS ...000 -4.663 .C5TVN ...176 -1. ...177 -15. .C5TVN ...178 -100. ...183 1. .C5TVN ...184 .1614 ...187 -100. .C5TVN ...188 -60.28 .ST13T ...043 1. ...044 -.7 .ST13T ...045 1. ...176 -.3 .ST13T ...178 6.3 ...187 6. .ST13T ...188 -19.314 ...000 .0177 .VN0SC ...176 1. ...177 8.5 .VN0SC ...178 62.5 ...180 -.62 .VN0SC ...181 -.38 ...187 100. .VN0SC ...188 55.95 ...193 .652 .VN0SC ...194 .652 ...000 .0005 .VN4VN ...176 -1. ...177 -.9 .VN4VN ...178 16. ...179 1. .VN4VN ...187 20. ...188 -46.04 .VN2PH ...176 1. ...177 2.2 .VN2PH ...178 -16. ...187 22.4 .VN2PH ...188 49.12 ...194 .43 .VN2PH ...195 .43 ...196 -1. .VN3PH ...176 1. ...177 1.1 .VN3PH ...178 -30. ...187 -7.4 .VN3PH ...188 48.08 ...192 .534 .VN3PH ...195 .534 ...197 -1. .VN1SC ...176 1. ...177 11. .VN1SC ...178 94. ...180 -.419 .VN1SC ...181 -.581 ...187 100. .VN1SC ...188 59. ...192 .742 .VN1SC ...193 .742 ...000 .0005 .C4TS2 ...176 1. ...177 64. .C4TS2 ...178 115. ...187 100. .C4TS2 ...188 64. ...189 1. .C4TS2 ...210 1. ...000 -2.8721 .C5TS2 ...176 1. ...177 15. .C5TS2 ...178 100. ...187 100. .C5TS2 ...188 60.28 ...189 1. .C5TS2 ...210 1. ...000 -2.8721 .VN2S2 ...176 1. ...177 2.2 .VN2S2 ...178 -16. ...187 22.4 .VN2S2 ...188 49.12 ...189 1. .VN2S2 ...210 1. ...000 -2.8721 .VN3S2 ...176 1. ...177 1.1 .VN3S2 ...178 -30. ...187 -7.4 .VN3S2 ...188 48.08 ...189 1. .VN3S2 ...210 1. ...000 -2.8721 .VN4S2 ...176 1. ...177 .9 .VN4S2 ...178 -16. ...187 -20. .VN4S2 ...188 46.04 ...189 1. .VN4S2 ...210 1. ...000 -2.8721 .VN0S2 ...176 1. ...177 8.5 .VN0S2 ...178 62.5 ...187 100. .VN0S2 ...188 55.95 ...189 1. .VN0S2 ...210 1. ...000 -2.8721 .VN1RF ...176 1. ...177 11. .VN1RF ...178 94. ...187 100. .VN1RF ...188 59. ...264 -.71 .VN1RF ...265 .71 .VN2RF ...176 1. ...177 2.2 .VN2RF ...178 -16. ...188 49.12 .VN2RF ...187 22.4 ...264 -.74 .VN2RF ...265 .74 .VN3RF ...176 1. ...177 1.1 .VN3RF ...178 -30. ...187 -7.4 .VN3RF ...188 48.08 ...264 -.75 .VN3RF ...265 .75 .VN0RF ...176 1. ...177 8.5 .VN0RF ...178 62.5 ...187 100. .VN0RF ...188 55.95 ...264 -.72 .VN0RF ...265 .72 .C4TS1 ...176 1. ...272 50.5 .C4TS1 ...177 64. ...178 115. .C4TS1 ...187 100. ...188 64. .C4TS1 ...189 1. ...205 1. .C4TS1 ...206 .096 ...207 -.126 .C4TS1 ...208 55. ...209 -50. .C4TS1 ...000 -2.8721 .C5TS1 ...176 1. ...177 15. .C5TS1 ...272 1.5 ...178 100. .C5TS1 ...187 100. ...188 60.28 .C5TS1 ...189 1. ...205 1. .C5TS1 ...206 .05 ...207 -.08 .C5TS1 ...208 50. ...209 -50. .C5TS1 ...000 -2.8721 .VN1S1 ...176 1. ...177 11. .VN1S1 ...178 94. ...187 100. .VN1S1 ...188 59. ...189 1. .VN1S1 ...205 1. ...206 .03 .VN1S1 ...207 -.06 ...208 47. .VN1S1 ...209 -50. ...272 -2.5 .VN1S1 ...000 -2.8721 .VN2S1 ...176 1. ...177 2.2 .VN2S1 ...178 -16. ...187 22.4 .VN2S1 ...188 49.12 ...189 1. .VN2S1 ...205 1. ...206 -.06 .VN2S1 ...207 .03 ...208 -50. .VN2S1 ...209 14. ...272 -11.3 .VN2S1 ...000 -2.8721 .VN3S1 ...176 1. ...177 1.1 .VN3S1 ...178 -30. ...187 -7.4 .VN3S1 ...188 48.08 ...189 1. .VN3S1 ...205 1. ...206 -.069 .VN3S1 ...207 .039 ...208 -73. .VN3S1 ...209 45. ...272 -12.4 .VN3S1 ...000 -2.8721 .VN4S1 ...176 1. ...177 .9 .VN4S1 ...178 -16. ...187 -20. .VN4S1 ...188 46.04 ...189 1. .VN4S1 ...205 1. ...206 -.083 .VN4S1 ...207 .053 ...208 -68. .VN4S1 ...209 60. ...272 -12.6 .VN4S1 ...000 -2.8721 .VN0S1 ...176 1. ...177 8.5 .VN0S1 ...178 62.5 ...187 100. .VN0S1 ...188 55.95 ...189 1. .VN0S1 ...205 1. ...206 .006 .VN0S1 ...207 -.036 ...208 15. .VN0S1 ...209 -50. ...272 -5. .VN0S1 ...000 -2.8721 .NJP46 ...039 3.6 ...040 -4.4 .NJP46 ...041 -1. ...050 -1. .NJP46 ...176 1. ...177 6. .NJP46 ...178 26. ...187 54. .NJP46 ...188 53.08 ...189 1. .NJP46 ...000 -.0087 .NJP47 ...039 4.6 ...040 -5.4 .NJP47 ...041 -1. ...050 -1. .NJP47 ...176 1. ...177 7. .NJP47 ...178 27.5 ...187 54.8 .NJP47 ...188 53.27 ...189 1. .NJP47 ...000 -.0087 .NJP48 ...039 5.6 ...040 -6.4 .NJP48 ...041 -1. ...050 -1. .NJP48 ...176 1. ...177 8. .NJP48 ...178 29. ...187 55.6 .NJP48 ...188 53.46 ...189 1. .NJP48 ...000 -.0087 .VNFEE ...224 1.7 ...225 -3.7 .VNFEE ...226 -.26 ...227 -19.7 .VNFEE ...228 -1.8 ...229 -8.2 .VNFEE ...231 14.95 ...232 -31.5 .VNFEE ...230 12.86 ...222 -1. .VNFEE ...246 -1. ...247 -1. .VNFEE ...176 1. ...177 10.7 .VNFEE ...178 46.5 ...187 58.2 .VNFEE ...188 55.39 ...189 1. .HNGWR ...014 1. ...021 1. .HNGWR ...142 -.34 ...164 -.366 .HNGWR ...166 -.091 ...176 -.2857 .HNGWR ...177 -1.9999 ...178 -5.3997 .HNGWR ...187 -11.5709 ...188 -15.105 .HNGWR ...200 -.0043 ...202 -.002 .HNGWR ...260 -.00112 ...000 2.8145 .INGNR ...013 1. ...021 1. .INGNR ...142 -.34 ...164 -.366 .INGNR ...166 -.9088 ...176 -.2856 .INGNR ...177 -1.9992 ...178 -5.3978 .INGNR ...187 -11.5382 ...188 -15.105 .INGNR ...200 -.0044 ...202 -.002 .INGNR ...260 -.00112 ...000 2.8317 .B1MW2 ...011 1. ...019 1. .B1MW2 ...034 -.135 ...145 -.266 .B1MW2 ...154 -.152 ...164 -.21 .B1MW2 ...166 1.4839 ...176 -.2018 .B1MW2 ...177 -1.4126 ...178 -3.814 .B1MW2 ...187 -11.7448 ...188 -10.7963 .B1MW2 ...200 -.0172 ...202 -.008 .B1MW2 ...260 -.00504 ...000 2.9089 .TNTWT ...017 .746 ...058 -.29 .TNTWT ...142 -.238 ...145 -.035 .TNTWT ...158 -.242 ...159 -.048 .TNTWT ...164 -.29 ...166 3.69 .TNTWT ...176 -.1292 ...177 -.9044 .TNTWT ...178 -2.1189 ...187 -5.5427 .TNTWT ...188 -7.2107 ...200 -.0058 .TNTWT ...202 -.006 ...260 -.00336 .TNTWT ...000 3.215 .TNBWT ...017 1.111 ...057 -.205 .TNBWT ...142 -.238 ...145 -.035 .TNBWT ...158 -.237 ...159 -.138 .TNBWT ...164 -.205 ...166 2.714 .TNBWT ...176 -.1292 ...177 -.9044 .TNBWT ...178 -2.1189 ...187 -5.5427 .TNBWT ...188 -7.2107 ...200 -.0058 .TNBWT ...202 -.006 ...260 -.00336 .TNBWT ...000 3.215 .KNGWR ...299 1. ...012 -1. .KNGWR ...021 1. ...142 -.28 .KNGWR ...164 -.467 ...166 .601 .KNGWR ...176 -.2321 ...177 -1.6247 .KNGWR ...178 -4.4099 ...187 -8.9823 .KNGWR ...188 -12.0181 ...200 -.0069 .KNGWR ...202 -.005 ...260 -.00504 .KNGWR ...000 2.6929 .KNGWC ...012 -1. ...299 1. .KNGWC ...022 1. ...142 -.28 .KNGWC ...146 .28 ...164 -.467 .KNGWC ...166 .601 ...176 -.2321 .KNGWC ...177 -1.6247 ...178 -4.4099 .KNGWC ...187 -8.9823 ...188 -12.0181 .KNGWC ...200 -.0069 ...202 -.005 .KNGWC ...260 -.00504 ...000 2.6957 .TNLWT ...017 .746 ...059 -.29 .TNLWT ...060 -.03 ...142 -.238 .TNLWT ...145 -.035 ...158 -.26 .TNLWT ...159 -.03 ...164 -.29 .TNLWT ...166 3.69 ...176 -.1292 .TNLWT ...177 -.9044 ...178 -2.1189 .TNLWT ...187 -5.5427 ...188 -7.2107 .TNLWT ...200 -.0058 ...202 -.006 .TNLWT ...260 -.00336 ...000 3.215 .A5MW3 ...010 1. ...020 .111 .A5MW3 ...046 -.126 ...145 -.222 .A5MW3 ...155 -.019 ...164 -.36 .A5MW3 ...166 .3341 ...176 -.2729 .A5MW3 ...177 -1.9103 ...178 -3.8479 .A5MW3 ...187 -8.9328 ...188 -13.9793 .A5MW3 ...200 .0039 ...202 -.001 .A5MW3 ...260 -.0017 ...000 2.8771 .B5MW3 ...011 1. ...020 .111 .B5MW3 ...046 -.116 ...145 -.16 .B5MW3 ...155 -.025 ...164 -.39 .B5MW3 ...166 .0148 ...176 -.2847 .B5MW3 ...177 -1.9929 ...178 -3.8435 .B5MW3 ...187 -10.9325 ...188 -14.8044 .B5MW3 ...200 -.0083 ...202 -.008 .B5MW3 ...260 -.00504 ...000 2.9066 .T5TWT ...017 .746 ...037 -.15 .T5TWT ...058 -.29 ...142 -.088 .T5TWT ...145 -.035 ...158 -.242 .T5TWT ...159 -.048 ...164 -.29 .T5TWT ...166 3.69 ...176 -.1292 .T5TWT ...177 -.9044 ...178 -2.1189 .T5TWT ...187 -5.5427 ...188 -7.2107 .T5TWT ...200 -.0058 ...202 -.006 .T5TWT ...260 -.00336 ...000 3.215 .T5BWT ...017 1.111 ...037 -.15 .T5BWT ...057 -.205 ...142 -.088 .T5BWT ...145 -.035 ...158 -.237 .T5BWT ...159 -.138 ...164 -.205 .T5BWT ...166 2.724 ...176 -.1292 .T5BWT ...177 -.9044 ...178 -2.1189 .T5BWT ...187 -5.5427 ...188 -7.2107 .T5BWT ...200 -.0058 ...202 -.006 .T5BWT ...260 -.00336 ...000 3.215 .T5LWT ...017 .746 ...037 -.15 .T5LWT ...059 -.29 ...060 -.03 .T5LWT ...142 -.088 ...145 -.035 .T5LWT ...158 -.26 ...159 -.03 .T5LWT ...164 -.29 ...166 3.69 .T5LWT ...176 -.1292 ...177 -.9044 .T5LWT ...178 -2.1189 ...187 -5.5427 .T5LWT ...188 -7.2107 ...200 -.0058 .T5LWT ...202 -.006 ...260 -.00336 .T5LWT ...000 3.215 .B1MN3 ...011 1. ...020 .111 .B1MN3 ...034 -.116 ...145 -.306 .B1MN3 ...164 -.342 ...166 .5595 .B1MN3 ...176 -.2018 ...177 -1.4126 .B1MN3 ...178 -3.814 ...187 -11.7448 .B1MN3 ...188 -10.7963 ...200 -.0172 .B1MN3 ...202 -.008 ...260 -.00504 .B1MN3 ...000 2.9061 .QKMW2 ...026 -.1343 ...016 1. .QKMW2 ...019 1. ...027 -.235 .QKMW2 ...145 -.115 ...153 -.062 .QKMW2 ...154 -.146 ...164 -.14 .QKMW2 ...166 .5247 ...176 -.2755 .QKMW2 ...177 -1.9285 ...178 -5.2345 .QKMW2 ...187 -6.9977 ...188 -14.5023 .QKMW2 ...200 -.0125 ...202 -.009 .QKMW2 ...260 -.0028 ...000 2.9969 .IKMW2 ...026 -.1293 ...013 1. .IKMW2 ...019 1. ...027 -.19 .IKMW2 ...145 -.19 ...153 -.037 .IKMW2 ...154 -.193 ...164 -.16 .IKMW2 ...166 1.589 ...176 -.2165 .IKMW2 ...177 -1.5155 ...178 -6.5167 .IKMW2 ...187 -13.8127 ...188 -11.6585 .IKMW2 ...200 -.0095 ...202 -.002 .IKMW2 ...260 -.00112 ...000 2.8409 .JNGW2 ...015 1. ...019 1. .JNGW2 ...142 -.299 ...153 -.05 .JNGW2 ...154 -.175 ...164 -.18 .JNGW2 ...166 1.787 ...176 -.1965 .JNGW2 ...177 -1.3755 ...178 -5.8164 .JNGW2 ...179 -.085 ...187 -12.3599 .JNGW2 ...188 -10.5776 ...200 -.0065 .JNGW2 ...202 -.004 ...260 -.00224 .JNGW2 ...000 2.8236 .AKMW2 ...026 -.1143 ...010 1. .AKMW2 ...019 1. ...027 -.2 .AKMW2 ...145 -.16 ...153 -.052 .AKMW2 ...154 -.2 ...164 -.16 .AKMW2 ...166 1.5197 ...176 -.2232 .AKMW2 ...177 -1.5624 ...178 -6.071 .AKMW2 ...187 -9.7315 ...188 -11.3765 .AKMW2 ...200 -.0008 ...202 -.001 .AKMW2 ...260 -.00168 ...000 2.8796 .KN8W3 ...012 -1. ...020 .132 .KN8W3 ...299 1. ...032 -.7 .KN8W3 ...033 -.196 ...155 -.06 .KN8W3 ...164 -.437 ...166 1.0927 .KN8W3 ...176 -.1429 ...177 -1.0003 .KN8W3 ...178 -4.2156 ...179 -.08 .KN8W3 ...187 -9.7029 ...188 -7.638 .KN8W3 ...200 -.0161 ...202 -.005 .KN8W3 ...260 -.00504 ...000 2.6992 .BKMW2 ...026 -.1086 ...011 1. .BKMW2 ...019 1. ...027 -.19 .BKMW2 ...145 -.14 ...153 -.042 .BKMW2 ...154 -.187 ...164 -.21 .BKMW2 ...166 1.484 ...176 -.1963 .BKMW2 ...177 -1.3741 ...178 -4.829 .BKMW2 ...187 -11.7976 ...188 -10.5256 .BKMW2 ...200 -.0177 ...202 -.008 .BKMW2 ...260 -.00504 ...000 2.9089 .KRMN2 ...299 1. ...028 -.0777 .KRMN2 ...012 -1. ...019 1. .KRMN2 ...029 -.11152 ...145 -.12 .KRMN2 ...153 -.08 ...154 -.182 .KRMN2 ...164 -.255 ...166 2.274 .KRMN2 ...176 -.2015 ...177 -1.4105 .KRMN2 ...178 -3.9091 ...187 -9.1481 .KRMN2 ...188 -10.4982 ...200 -.0115 .KRMN2 ...202 -.005 ...260 -.00504 .KRMN2 ...000 2.7023 .QKMN3 ...016 1. ...020 .118 .QKMN3 ...026 -.1229 ...027 -.215 .QKMN3 ...145 -.155 ...155 -.075 .QKMN3 ...164 -.253 ...166 -.3722 .QKMN3 ...176 -.2755 ...177 -1.9285 .QKMN3 ...178 -5.2345 ...187 -6.9977 .QKMN3 ...188 -14.5023 ...200 -.0125 .QKMN3 ...202 -.009 ...260 -.0028 .QKMN3 ...000 2.9941 .A1GW2 ...010 1. ...019 1. .A1GW2 ...034 -.141 ...142 -.212 .A1GW2 ...153 -.054 ...154 -.2 .A1GW2 ...164 -.16 ...166 1.5197 .A1GW2 ...176 -.2286 ...177 -1.6002 .A1GW2 ...178 -3.7033 ...187 -9.5326 .A1GW2 ...188 -11.8026 ...200 -.0004 .A1GW2 ...202 -.001 ...260 -.00168 .A1GW2 ...000 2.8797 .B1GW2 ...011 1. ...019 1. .B1GW2 ...034 -.135 ...142 -.216 .B1GW2 ...153 -.015 ...154 -.187 .B1GW2 ...164 -.21 ...166 1.4839 .B1GW2 ...176 -.2018 ...177 -1.4126 .B1GW2 ...178 -3.814 ...187 -11.7448 .B1GW2 ...188 -10.7963 ...200 -.0172 .B1GW2 ...202 -.008 ...260 -.00504 .B1GW2 ...000 2.9089 .IRGW3 ...028 -.1086 ...013 1. .IRGW3 ...020 .111 ...029 -.1558 .IRGW3 ...142 -.15 ...155 -.075 .IRGW3 ...164 -.355 ...166 .5765 .IRGW3 ...176 -.2165 ...177 -1.5155 .IRGW3 ...178 -6.6249 ...187 -13.8127 .IRGW3 ...188 -11.6585 ...200 -.0095 .IRGW3 ...202 -.002 ...260 -.00112 .IRGW3 ...000 2.8381 .IKMN3 ...013 1. ...020 .118 .IKMN3 ...026 -.0983 ...027 -.172 .IKMN3 ...145 -.216 ...155 -.035 .IKMN3 ...164 -.323 ...166 .435 .IKMN3 ...176 -.2424 ...177 -1.6968 .IKMN3 ...178 -6.3266 ...187 -13.2108 .IKMN3 ...188 -12.9563 ...200 -.0076 .IKMN3 ...202 -.002 ...260 -.00112 .IKMN3 ...000 2.8383 .IKMN4 ...013 1. ...020 .139 .IKMN4 ...026 -.0983 ...027 -.172 .IKMN4 ...145 -.216 ...155 -.118 .IKMN4 ...164 -.24 ...166 1.6186 .IKMN4 ...176 -.2421 ...177 -1.6947 .IKMN4 ...178 -6.3914 ...187 -13.1702 .IKMN4 ...188 -12.9378 ...200 -.0079 .IKMN4 ...202 -.002 ...260 -.00112 .IKMN4 ...000 2.8383 .AKMW3 ...010 1. ...020 .111 .AKMW3 ...026 -.1143 ...027 -.2 .AKMW3 ...145 -.16 ...155 -.052 .AKMW3 ...164 -.36 ...166 .3341 .AKMW3 ...176 -.2232 ...177 -1.5624 .AKMW3 ...178 -6.071 ...187 -9.7315 .AKMW3 ...188 -11.3765 ...200 -.0008 .AKMW3 ...202 -.001 ...260 -.00168 .AKMW3 ...000 2.8768 .CNGW3 ...294 1. ...020 .114 .CNGW3 ...142 -.252 ...155 -.081 .CNGW3 ...000 2.38 ...164 -.493 .CNGW3 ...166 3.436 ...176 -.1409 .CNGW3 ...177 -.9863 ...178 -2.8462 .CNGW3 ...179 -.026 ...187 -7.045 .CNGW3 ...188 -7.7143 ...200 -.0031 .CNGW3 ...202 -.003 ...260 -.00056 .A5GW3 ...010 1. ...020 .111 .A5GW3 ...046 -.126 ...142 -.164 .A5GW3 ...155 -.077 ...164 -.36 .A5GW3 ...166 .3341 ...176 -.2729 .A5GW3 ...177 -1.9103 ...178 -3.8479 .A5GW3 ...187 -8.9238 ...188 -13.9397 .A5GW3 ...200 .0039 ...202 -.001 .A5GW3 ...260 -.0017 ...000 2.8771 .B5GW3 ...011 1. ...020 .111 .B5GW3 ...046 -.116 ...142 -.11 .B5GW3 ...155 -.075 ...164 -.39 .B5GW3 ...166 .0148 ...176 -.2847 .B5GW3 ...177 -1.9929 ...178 -3.8435 .B5GW3 ...187 -10.9325 ...188 -14.8044 .B5GW3 ...200 -.0083 ...202 -.008 .B5GW3 ...260 -.00504 ...000 2.9066 .INGW3 ...013 1. ...020 .115 .INGW3 ...142 -.306 ...155 -.066 .INGW3 ...164 -.334 ...166 .346 .INGW3 ...176 -.1882 ...177 -1.3174 .INGW3 ...178 -6.7376 ...179 -.09 .INGW3 ...187 -14.2279 ...188 -10.2381 .INGW3 ...200 -.0118 ...202 -.002 .INGW3 ...260 -.00112 ...000 2.8379 .A1GW3 ...010 1. ...020 .111 .A1GW3 ...034 -.141 ...142 -.212 .A1GW3 ...155 -.054 ...164 -.36 .A1GW3 ...166 .3341 ...176 -.2286 .A1GW3 ...177 -1.6002 ...178 -3.7033 .A1GW3 ...187 -9.5326 ...188 -11.8026 .A1GW3 ...200 -.0004 ...202 -.001 .A1GW3 ...260 -.00168 ...000 2.8769 .B1GW3 ...011 1. ...020 .111 .B1GW3 ...034 -.135 ...142 -.216 .B1GW3 ...155 -.022 ...164 -.39 .B1GW3 ...166 .0148 ...176 -.2018 .B1GW3 ...177 -1.4126 ...178 -3.814 .B1GW3 ...187 -11.7448 ...188 -10.7963 .B1GW3 ...200 -.0172 ...202 -.008 .B1GW3 ...260 -.00504 ...000 2.9061 .KTGW1 ...299 1. ...012 -1. .KTGW1 ...018 1. ...053 -.152 .KTGW1 ...142 -.143 ...149 -.046 .KTGW1 ...150 -.105 ...151 -.065 .KTGW1 ...152 -.065 ...164 -.255 .KTGW1 ...166 2.274 ...176 -.1388 .KTGW1 ...177 -.9716 ...178 -4.2334 .KTGW1 ...187 -9.6882 ...188 -7.423 .KTGW1 ...200 -.0162 ...202 -.005 .KTGW1 ...260 -.00504 ...000 2.6988 .KWGW1 ...012 -1. ...299 1. .KWGW1 ...018 1. ...141 -.245 .KWGW1 ...142 -.245 ...150 -.1 .KWGW1 ...151 -.065 ...152 -.065 .KWGW1 ...164 -.255 ...166 2.274 .KWGW1 ...176 -.1938 ...177 -1.3566 .KWGW1 ...178 -3.9148 ...187 -9.1474 .KWGW1 ...188 -10.144 ...200 -.0122 .KWGW1 ...202 -.005 ...025 -.05 .KWGW1 ...260 -.00504 ...000 2.6992 .KKMN1 ...299 1. ...026 -.0777 .KKMN1 ...012 -1. ...018 1. .KKMN1 ...027 -.136 ...145 -.12 .KKMN1 ...149 -.027 ...150 -.105 .KKMN1 ...151 -.065 ...152 -.065 .KKMN1 ...164 -.255 ...166 2.274 .KKMN1 ...176 -.2015 ...177 -1.4105 .KKMN1 ...178 -3.9091 ...187 -9.1481 .KKMN1 ...188 -10.4982 ...200 -.0115 .KKMN1 ...202 -.005 ...260 -.00504 .KKMN1 ...000 2.6992 .K5GW1 ...299 1. ...012 -1. .K5GW1 ...018 1. ...046 -.1 .K5GW1 ...142 -.07 ...149 -.082 .K5GW1 ...150 -.105 ...151 -.065 .K5GW1 ...152 -.065 ...164 -.255 .K5GW1 ...166 2.274 ...176 -.2377 .K5GW1 ...177 -1.6639 ...178 -4.5638 .K5GW1 ...187 -8.9851 ...188 -12.2986 .K5GW1 ...200 -.0063 ...202 -.005 .K5GW1 ...260 -.00504 ...000 2.6994 .QKGW2 ...026 -.1343 ...016 1. .QKGW2 ...019 1. ...027 -.235 .QKGW2 ...142 -.09 ...153 -.087 .QKGW2 ...154 -.146 ...164 -.14 .QKGW2 ...166 .5247 ...176 -.2755 .QKGW2 ...177 -1.9285 ...178 -5.2345 .QKGW2 ...187 -6.9977 ...188 -14.5023 .QKGW2 ...200 -.0125 ...202 -.009 .QKGW2 ...260 -.0028 ...000 2.9969 .K1GW1 ...299 1. ...012 -1. .K1GW1 ...018 1. ...034 -.11 .K1GW1 ...142 -.129 ...149 -.052 .K1GW1 ...150 -.105 ...151 -.065 .K1GW1 ...152 -.065 ...164 -.255 .K1GW1 ...166 2.274 ...176 -.1928 .K1GW1 ...177 -1.3494 ...178 -3.8946 .K1GW1 ...187 -9.1474 ...188 -10.0719 .K1GW1 ...200 -.0122 ...202 -.005 .K1GW1 ...260 -.00504 ...000 2.6992 .IKGW2 ...026 -.1293 ...013 1. .IKGW2 ...019 1. ...027 -.19 .IKGW2 ...142 -.15 ...153 -.077 .IKGW2 ...154 -.193 ...164 -.16 .IKGW2 ...166 1.589 ...176 -.2165 .IKGW2 ...177 -1.5155 ...178 -6.5167 .IKGW2 ...187 -13.8127 ...188 -11.6585 .IKGW2 ...200 -.0095 ...202 -.002 .IKGW2 ...260 -.00112 ...000 2.8409 .KNGW1 ...299 1. ...012 -1. .KNGW1 ...018 1. ...142 -.28 .KNGW1 ...150 -.082 ...151 -.065 .KNGW1 ...152 -.065 ...164 -.255 .KNGW1 ...166 2.274 ...176 -.1429 .KNGW1 ...177 -1.0003 ...178 -4.2156 .KNGW1 ...179 -.08 ...187 -9.7029 .KNGW1 ...188 -7.638 ...200 -.0161 .KNGW1 ...202 -.005 ...260 -.00504 .KNGW1 ...000 2.6989 .A4GW2 ...010 1. ...019 1. .A4GW2 ...039 -.4248 ...040 .2832 .A4GW2 ...041 -.177 ...154 -.2 .A4GW2 ...164 -.16 ...166 1.5197 .A4GW2 ...176 -.1792 ...177 -1.2544 .A4GW2 ...178 -3.7811 ...187 -10.4474 .A4GW2 ...188 -9.3901 ...200 -.0048 .A4GW2 ...202 -.001 ...260 -.00168 .A4GW2 ...000 2.8794 .AKGW2 ...026 -.1143 ...010 1. .AKGW2 ...019 1. ...027 -.2 .AKGW2 ...142 -.104 ...153 -.108 .AKGW2 ...154 -.2 ...164 -.16 .AKGW2 ...166 1.52 ...176 -.2232 .AKGW2 ...177 -1.5624 ...178 -4.955 .AKGW2 ...187 -9.7315 ...188 -11.5484 .AKGW2 ...200 -.0008 ...202 -.001 .AKGW2 ...260 -.00168 ...000 2.8796 .BKGW2 ...026 -.1086 ...011 1. .BKGW2 ...019 1. ...027 -.19 .BKGW2 ...142 -.09 ...153 -.092 .BKGW2 ...154 -.187 ...164 -.21 .BKGW2 ...166 1.4839 ...176 -.1964 .BKGW2 ...177 -1.3748 ...178 -4.8511 .BKGW2 ...187 -11.8036 ...188 -10.531 .BKGW2 ...200 -.0176 ...202 -.008 .BKGW2 ...260 -.00504 ...000 2.9089 .B4GW2 ...011 1. ...019 1. .B4GW2 ...039 -.3984 ...040 .2656 .B4GW2 ...041 -.166 ...142 -.094 .B4GW2 ...153 -.045 ...154 -.283 .B4GW2 ...164 -.21 ...166 1.4839 .B4GW2 ...176 -.146 ...177 -1.022 .B4GW2 ...178 -6.5846 ...187 -12.2932 .B4GW2 ...188 -7.976 ...200 -.021 .B4GW2 ...202 -.008 ...260 -.00504 .B4GW2 ...000 2.9086 .C4GW3 ...294 1. ...020 .114 .C4GW3 ...000 2.38 ...039 -.3504 .C4GW3 ...040 .2336 ...041 -.146 .C4GW3 ...142 -.124 ...155 -.118 .C4GW3 ...164 -.493 ...166 3.436 .C4GW3 ...176 -.1089 ...177 -.7623 .C4GW3 ...178 -2.5918 ...187 -7.2527 .C4GW3 ...188 -6.0178 ...200 -.0061 .C4GW3 ...202 -.003 ...260 -.00056 .QKGW3 ...016 1. ...020 .118 .QKGW3 ...026 -.1343 ...027 -.235 .QKGW3 ...142 -.09 ...155 -.12 .QKGW3 ...164 -.253 ...166 -.28 .QKGW3 ...176 -.2756 ...177 -1.9292 .QKGW3 ...178 -5.264 ...187 -7.0278 .QKGW3 ...188 -14.5076 ...200 -.0124 .QKGW3 ...202 -.009 ...260 -.0028 .QKGW3 ...000 2.9941 .QKGW4 ...016 1. ...020 .139 .QKGW4 ...026 -.1343 ...027 -.235 .QKGW4 ...142 -.09 ...155 -.203 .QKGW4 ...164 -.17 ...166 .3468 .QKGW4 ...176 -.2755 ...177 -1.9285 .QKGW4 ...178 -4.408 ...187 -6.9977 .QKGW4 ...188 -14.5023 ...200 -.0125 .QKGW4 ...202 -.009 ...260 -.0028 .QKGW4 ...000 2.9941 .A4GW3 ...010 1. ...020 .111 .A4GW3 ...039 -.4248 ...040 .2832 .A4GW3 ...041 -.177 ...142 -.23 .A4GW3 ...155 -.045 ...164 -.36 .A4GW3 ...166 .3341 ...176 -.1792 .A4GW3 ...177 -1.2544 ...178 -3.7811 .A4GW3 ...187 -10.4474 ...188 -9.3901 .A4GW3 ...200 -.0048 ...202 -.001 .A4GW3 ...260 -.00168 ...000 2.8766 .BKGW3 ...011 1. ...020 .111 .BKGW3 ...026 -.1086 ...027 -.19 .BKGW3 ...142 -.09 ...155 -.099 .BKGW3 ...164 -.39 ...166 1.5031 .BKGW3 ...176 -.1964 ...177 -1.3748 .BKGW3 ...178 -4.8511 ...187 -11.8036 .BKGW3 ...188 -10.531 ...200 -.0176 .BKGW3 ...202 -.008 ...260 -.00504 .BKGW3 ...000 2.9061 .B4GW3 ...011 1. ...020 .111 .B4GW3 ...039 -.3984 ...040 .2656 .B4GW3 ...041 -.166 ...142 -.094 .B4GW3 ...155 -.148 ...164 -.39 .B4GW3 ...166 1.5031 ...176 -.146 .B4GW3 ...177 -1.022 ...178 -6.5846 .B4GW3 ...187 -12.2932 ...188 -7.976 .B4GW3 ...200 -.021 ...202 -.008 .B4GW3 ...260 -.00504 ...000 2.9058 .KNGW2 ...299 1. ...012 -1. .KNGW2 ...019 1. ...142 -.28 .KNGW2 ...154 -.212 ...164 -.255 .KNGW2 ...166 .2274 ...176 -.1429 .KNGW2 ...177 -1.0003 ...178 -4.2156 .KNGW2 ...179 -.08 ...187 -9.7029 .KNGW2 ...188 -7.638 ...200 -.0161 .KNGW2 ...202 -.005 ...260 -.00504 .KNGW2 ...000 2.702 .K5GW3 ...012 -1. ...020 .114 .K5GW3 ...299 1. ...046 -.1 .K5GW3 ...142 -.07 ...155 -.12 .K5GW3 ...164 -.452 ...166 .786 .K5GW3 ...176 -.2377 ...177 -1.6639 .K5GW3 ...178 -4.5638 ...187 -8.9851 .K5GW3 ...188 -12.2986 ...200 -.0063 .K5GW3 ...202 -.005 ...260 -.00504 .K5GW3 ...000 2.6997 .K5GW4 ...012 -1. ...020 .139 .K5GW4 ...299 1. ...046 -.1 .K5GW4 ...142 -.07 ...155 -.242 .K5GW4 ...164 -.33 ...166 2.897 .K5GW4 ...176 -.2377 ...177 -1.6639 .K5GW4 ...178 -4.5638 ...187 -8.9851 .K5GW4 ...188 -12.2986 ...200 -.0063 .K5GW4 ...202 -.005 ...260 -.00504 .K5GW4 ...000 2.6997 .K1GW3 ...012 -1. ...020 .116 .K1GW3 ...034 -.11 ...142 -.129 .K1GW3 ...155 -.142 ...164 -.4 .K1GW3 ...166 1.249 ...176 -.1928 .K1GW3 ...177 -1.3496 ...178 -3.8946 .K1GW3 ...187 -9.1474 ...188 -10.0719 .K1GW3 ...200 -.0122 ...202 -.005 .K1GW3 ...260 -.00504 ...000 2.6995 .K1GW3 ...299 1. .K1GW4 ...012 -1. ...020 .139 .K1GW4 ...299 1. ...034 -.11 .K1GW4 ...142 -.129 ...155 -.212 .K1GW4 ...164 -.33 ...166 2.897 .K1GW4 ...176 -.1928 ...177 -1.3496 .K1GW4 ...178 -3.8946 ...187 -9.1002 .K1GW4 ...188 -10.0719 ...200 -.0122 .K1GW4 ...202 -.005 ...260 -.00504 .K1GW4 ...000 2.6995 .KNGW3 ...012 -1. ...020 .118 .KNGW3 ...299 1. ...142 -.25 .KNGW3 ...155 -.06 ...164 -.437 .KNGW3 ...166 .955 ...176 -.1429 .KNGW3 ...177 -1.0003 ...178 -4.2156 .KNGW3 ...179 -.08 ...187 -9.7029 .KNGW3 ...188 -7.638 ...200 -.0161 .KNGW3 ...202 -.005 ...260 -.00504 .KNGW3 ...000 2.6992 .KNGW4 ...012 -1. ...020 .139 .KNGW4 ...299 1. ...142 -.25 .KNGW4 ...155 -.167 ...164 -.33 .KNGW4 ...166 2.897 ...176 -.1429 .KNGW4 ...177 -1.0003 ...178 -4.2156 .KNGW4 ...179 -.08 ...187 -9.7029 .KNGW4 ...188 -7.638 ...200 -.0161 .KNGW4 ...202 -.005 ...260 -.00504 .KNGW4 ...000 2.6992 .K4GW1 ...299 1. ...012 -1. .K4GW1 ...018 1. ...039 -.3648 .K4GW1 ...040 .2432 ...041 -.152 .K4GW1 ...142 -.143 ...149 -.046 .K4GW1 ...150 -.105 ...151 -.065 .K4GW1 ...152 -.065 ...164 -.255 .K4GW1 ...166 2.274 ...176 -.1388 .K4GW1 ...177 -.9716 ...178 -4.2334 .K4GW1 ...187 -9.6882 ...188 -7.43 .K4GW1 ...200 -.0162 ...202 -.005 .K4GW1 ...260 -.00504 ...000 2.6988 .K4GW2 ...299 1. ...012 -1. .K4GW2 ...019 1. ...039 -.3648 .K4GW2 ...040 .2432 ...041 -.152 .K4GW2 ...142 -.143 ...153 -.096 .K4GW2 ...154 -.185 ...164 -.255 .K4GW2 ...166 2.274 ...176 -.1388 .K4GW2 ...177 -.9716 ...178 -4.2334 .K4GW2 ...187 -9.6882 ...188 -7.43 .K4GW2 ...200 -.0162 ...202 -.005 .K4GW2 ...260 -.00504 ...000 2.7019 .K4GW3 ...012 -1. ...020 .114 .K4GW3 ...299 1. ...039 -.3648 .K4GW3 ...040 .2432 ...041 -.152 .K4GW3 ...142 -.143 ...155 -.12 .K4GW3 ...164 -.416 ...166 1.192 .K4GW3 ...176 -.1388 ...177 -.9716 .K4GW3 ...178 -4.2334 ...187 -9.6882 .K4GW3 ...188 -7.43 ...200 -.0162 .K4GW3 ...202 -.005 ...260 -.00504 .K4GW3 ...000 2.6991 .KKGN3 ...012 -1. ...020 .118 .KKGN3 ...299 1. ...026 -.0777 .KKGN3 ...027 -.136 ...142 -.117 .KKGN3 ...155 -.11 ...164 -.41 .KKGN3 ...166 1.216 ...176 -.2015 .KKGN3 ...177 -1.4105 ...178 -3.9091 .KKGN3 ...187 -9.1481 ...188 -10.4982 .KKGN3 ...202 -.005 ...200 -.0115 .KKGN3 ...260 -.00504 ...000 2.6995 .K4GW4 ...012 -1. ...020 .139 .K4GW4 ...299 1. ...039 -.3648 .K4GW4 ...040 .2432 ...041 -.152 .K4GW4 ...142 -.143 ...155 -.206 .K4GW4 ...164 -.33 ...166 2.897 .K4GW4 ...176 -.1388 ...177 -.9716 .K4GW4 ...178 -4.2334 ...187 -9.6882 .K4GW4 ...188 -7.43 ...200 -.0162 .K4GW4 ...202 -.005 ...260 -.00504 .K4GW4 ...000 2.6991 .KKGN4 ...012 -1. ...020 .139 .KKGN4 ...299 1. ...026 -.0777 .KKGN4 ...027 -.136 ...142 -.117 .KKGN4 ...155 -.19 ...164 -.33 .KKGN4 ...166 2.897 ...176 -.2015 .KKGN4 ...177 -1.4105 ...178 -3.9091 .KKGN4 ...187 -9.1481 ...188 -10.4982 .KKGN4 ...200 -.0115 ...202 -.005 .KKGN4 ...260 -.00504 ...000 2.6995 .VN3HF ...176 1. ...295 -1. .VN3HF ...177 1.1 ...178 -30. .VN3HF ...187 -7.4 ...188 48.08 .VN3HF ...192 .534 ...195 .534 .VNFHF ...000 .123 ...134 -1.25 .VNFHF ...164 -.03 ...166 -.4092 .VNFHF ...260 -.246 ...295 1. .VNFHF ...296 1. ...297 1. .VNFHF ...298 -.62 RHS ZZZZZZ01 ...000 -7.113 ...010 2.284 ZZZZZZ01 ...011 1.59 ...013 3.99 ZZZZZZ01 ...014 .109 ...015 .69 ZZZZZZ01 ...017 1. ...018 5.216 ZZZZZZ01 ...019 7.233 ...020 1. ZZZZZZ01 ...021 .65 ...023 .1395 ZZZZZZ01 ...024 .1805 ...030 1.3453 ZZZZZZ01 ...035 .4207 ...038 .6665 ZZZZZZ01 ...043 .5 ...048 .1019 ZZZZZZ01 ...050 .935 ...055 .96 ZZZZZZ01 ...057 -.0098 ...059 -.2662 ZZZZZZ01 ...060 -.0104 ...120 .099 ZZZZZZ01 ...133 1.6342 ...134 1.8 ZZZZZZ01 ...135 16.5 ...136 1.5 ZZZZZZ01 ...138 .1938 ...142 -.0637 ZZZZZZ01 ...143 .6344 ...144 .6045 ZZZZZZ01 ...147 .5789 ...148 .347 ZZZZZZ01 ...150 -.0459 ...151 -.1422 ZZZZZZ01 ...152 -.2448 ...156 -12.1938 ZZZZZZ01 ...157 -.6231 ...158 -.2857 ZZZZZZ01 ...159 -.033 ...160 .2314 ZZZZZZ01 ...161 .0675 ...163 4.3845 ZZZZZZ01 ...164 -.3658 ...165 3.8254 ZZZZZZ01 ...166 3.3851 ...167 .0327 ZZZZZZ01 ...168 .0487 ...169 .0775 ZZZZZZ01 ...172 .05 ...174 .205 ZZZZZZ01 ...175 .1375 ...176 .1692 ZZZZZZ01 ...177 1.8446 ...178 9.1385 ZZZZZZ01 ...179 .0495 ...182 .631 ZZZZZZ01 ...185 .5 ...186 1.05 ZZZZZZ01 ...187 10.8308 ...188 9.5531 ZZZZZZ01 ...189 .1692 ...190 2.952 ZZZZZZ01 ...191 1.302 ...192 1. ZZZZZZ01 ...193 1. ...194 1. ZZZZZZ01 ...195 1. ...196 .1181 ZZZZZZ01 ...197 .1181 ...199 1. ZZZZZZ01 ...202 -.0095 ...204 .1107 ZZZZZZ01 ...205 .3953 ...212 .3987 ZZZZZZ01 ...223 2.908 ...234 1.9642 ZZZZZZ01 ...250 1.7 ...261 2.799 ZZZZZZ01 ...263 56.92 ...264 -1.1958 ZZZZZZ01 ...265 .44 ...266 .5 ZZZZZZ01 ...268 .0425 ...270 .1984 ZZZZZZ01 ...276 1.5231 ...277 3.9475 ZZZZZZ01 ...278 1.2884 ...279 .5186 ZZZZZZ01 ...280 -.1901 ...281 .1275 ZZZZZZ01 ...284 42. ...285 3.8 ZZZZZZ01 ...291 4.68 ...292 2.4 ZZZZZZ01 ...293 .1114 ...294 2.264 ZZZZZZ01 ...299 10.57 ...300 .2137 ENDATA Vol-1.5.4/Data/Sample/conic.mps0000644000175000017500000000334312223473003015220 0ustar sudipsudipNAME ROWS N obj L c1 COLUMNS x0 obj 1 c1 1 INT 'MARKER' 'INTORG' x1 obj -1 c1 10 INT 'MARKER' 'INTEND' * S1 NAME1 'MARKER' 'SOSORG' x2 obj -9 c1 5 x3 obj -6 c1 8 * NAME1 'MARKER' 'SOSEND' x4 obj 1 c1 1 x5 obj -6 c1 8 x6 obj 1 c1 1 x7 obj 1 c1 1 x8 obj -6 c1 8 x9 obj -2 c1 1 x10 obj -3 c1 1 x11 obj -1 c1 -1 x12 obj -2 c1 1 x13 obj -3 c1 1 x14 obj -9 c1 5 RHS rhs c1 10000 RANGES range c1 2000 BOUNDS LI BOUND x1 2 UI BOUND x1 3 SOS S1 set1 x2 x3 S2 set2 x4 20 x5 40 QUADOBJ x6 x6 1 x6 x7 2 x7 x7 7 CSECTION cone1 0.0 QUAD x8 x9 x10 CSECTION cone2 0.0 RQUAD x11 x12 x13 x14 ENDATA Vol-1.5.4/Data/Sample/input.1300000644000175000017500000207141510430174061014777 0ustar sudipsudipBEGIN NETGEN PROBLEM 130 5000 NODES AND 12500 ARCS USER: 25440925 500 500 1 100 250000 DATA: 500 500 0 100 1 1000 SUPPLY 1 223 2 220 3 1103 4 75 5 800 6 392 7 132 8 622 9 309 10 145 11 113 12 206 13 427 14 480 15 797 16 963 17 339 18 865 19 826 20 1291 21 117 22 481 23 547 24 837 25 935 26 34 27 354 28 390 29 1016 30 934 31 693 32 411 33 137 34 800 35 48 36 854 37 817 38 756 39 523 40 1074 41 507 42 440 43 256 44 22 45 569 46 341 47 410 48 129 49 1269 50 570 51 456 52 320 53 415 54 105 55 445 56 863 57 104 58 620 59 300 60 286 61 435 62 87 63 97 64 435 65 773 66 137 67 99 68 792 69 544 70 558 71 275 72 467 73 350 74 477 75 1231 76 486 77 773 78 422 79 526 80 402 81 602 82 262 83 321 84 1135 85 459 86 915 87 505 88 193 89 1133 90 500 91 742 92 403 93 442 94 1077 95 552 96 398 97 292 98 1180 99 449 100 618 101 623 102 695 103 312 104 447 105 420 106 758 107 880 108 846 109 694 110 804 111 411 112 299 113 395 114 120 115 702 116 269 117 703 118 619 119 172 120 689 121 341 122 699 123 735 124 4 125 764 126 735 127 271 128 564 129 28 130 32 131 822 132 654 133 561 134 644 135 621 136 392 137 964 138 108 139 394 140 1149 141 284 142 433 143 346 144 168 145 982 146 790 147 469 148 287 149 427 150 763 151 407 152 323 153 776 154 1109 155 896 156 288 157 680 158 1632 159 385 160 364 161 1053 162 382 163 582 164 378 165 217 166 412 167 378 168 371 169 420 170 1017 171 719 172 24 173 476 174 692 175 334 176 426 177 26 178 71 179 45 180 97 181 619 182 803 183 236 184 293 185 571 186 497 187 390 188 451 189 545 190 524 191 27 192 402 193 468 194 721 195 497 196 584 197 630 198 755 199 308 200 853 201 1693 202 1352 203 224 204 247 205 688 206 585 207 334 208 526 209 399 210 270 211 826 212 150 213 472 214 545 215 275 216 732 217 675 218 351 219 897 220 572 221 270 222 68 223 843 224 352 225 395 226 584 227 192 228 379 229 325 230 843 231 105 232 978 233 446 234 102 235 315 236 368 237 293 238 391 239 816 240 456 241 490 242 123 243 146 244 498 245 595 246 229 247 761 248 520 249 1198 250 463 251 497 252 529 253 913 254 543 255 584 256 193 257 614 258 449 259 1 260 612 261 349 262 355 263 511 264 1586 265 383 266 192 267 92 268 842 269 601 270 39 271 276 272 363 273 371 274 53 275 486 276 348 277 407 278 647 279 417 280 1070 281 32 282 887 283 387 284 339 285 882 286 400 287 410 288 534 289 932 290 367 291 747 292 470 293 202 294 680 295 354 296 730 297 451 298 408 299 559 300 1159 301 153 302 260 303 689 304 914 305 83 306 256 307 52 308 194 309 1290 310 473 311 717 312 163 313 728 314 756 315 353 316 294 317 316 318 213 319 698 320 407 321 416 322 385 323 532 324 277 325 593 326 972 327 694 328 289 329 1387 330 296 331 922 332 184 333 535 334 1428 335 384 336 271 337 74 338 427 339 400 340 584 341 411 342 656 343 453 344 327 345 729 346 265 347 663 348 968 349 246 350 250 351 144 352 189 353 713 354 317 355 439 356 404 357 937 358 218 359 803 360 333 361 215 362 217 363 757 364 437 365 888 366 318 367 104 368 358 369 451 370 451 371 135 372 753 373 273 374 22 375 284 376 15 377 1020 378 326 379 436 380 360 381 389 382 949 383 311 384 990 385 75 386 563 387 481 388 546 389 455 390 356 391 496 392 525 393 682 394 215 395 632 396 339 397 91 398 326 399 8 400 413 401 448 402 597 403 854 404 227 405 337 406 326 407 402 408 212 409 265 410 415 411 239 412 659 413 603 414 827 415 28 416 309 417 384 418 115 419 386 420 342 421 523 422 309 423 204 424 264 425 632 426 692 427 930 428 648 429 404 430 264 431 1014 432 298 433 498 434 36 435 141 436 957 437 574 438 507 439 257 440 531 441 1178 442 689 443 445 444 422 445 1222 446 404 447 516 448 298 449 359 450 196 451 394 452 412 453 276 454 484 455 635 456 204 457 826 458 169 459 361 460 906 461 1143 462 484 463 670 464 248 465 94 466 109 467 506 468 718 469 381 470 1110 471 414 472 1002 473 327 474 452 475 379 476 315 477 1012 478 572 479 421 480 653 481 492 482 485 483 91 484 667 485 793 486 192 487 631 488 404 489 635 490 60 491 252 492 739 493 117 494 412 495 804 496 472 497 672 498 833 499 1251 500 638 ARCS 1 1890 47 223 1 1745 90 194 1 2252 68 612 505 3498 71 223 505 4707 94 223 505 2628 71 375 941 3285 33 223 941 649 1 308 941 1930 21 351 1730 2231 5 223 1730 2634 42 263 1730 167 50 156 1890 505 61 223 1890 1204 93 959 2231 4450 90 223 2231 1227 77 670 2231 2893 61 898 3285 1730 90 223 3285 2960 2 572 3285 2496 79 227 3498 941 63 223 3498 570 14 579 3498 3089 5 165 4450 4932 35 223 4450 2364 18 89 4450 1331 34 61 2 3149 96 220 2 4853 6 753 1256 3667 25 220 1256 4279 83 645 1256 3207 53 466 2358 4513 73 220 2358 202 63 151 2770 4472 36 220 2770 2837 91 401 3149 3856 15 220 3149 1948 55 604 3149 2839 94 172 3667 2358 69 220 3667 3172 12 305 3667 3591 70 846 3856 4243 52 220 3856 4684 33 220 3856 3273 39 430 4243 2770 30 220 4243 837 85 347 4243 4038 95 343 4472 1256 78 220 4472 2370 2 984 3 3225 42 1103 3 2531 61 326 3 433 2 3 2280 3684 82 1103 2280 715 53 919 2280 514 41 275 2608 3932 17 1103 2608 2138 64 293 2608 1694 49 504 3225 3734 36 1103 3225 3688 86 893 3365 2280 5 1103 3365 4245 17 654 3684 2608 99 1103 3684 4319 1 377 3684 1271 64 104 3734 3365 72 1103 3734 4578 94 1103 3734 3581 65 175 3734 484 57 539 3932 4774 95 1103 3932 820 31 479 3932 3144 36 30 4 3408 51 75 4 1634 14 68 4 4261 21 402 683 4122 86 75 683 4788 98 75 683 4142 75 57 683 1337 77 506 1857 2877 31 75 1857 2111 22 479 1857 1672 7 908 2160 683 89 75 2160 1842 56 797 2877 4822 46 75 2877 4887 67 45 3408 2160 24 75 3408 2475 7 705 3408 2044 30 727 4122 1857 35 75 4122 1102 23 480 5 2037 20 800 5 3900 58 72 5 4855 99 527 859 4848 37 800 859 2944 29 40 859 3611 46 806 864 859 51 800 864 1514 29 725 864 360 95 421 1516 4074 39 800 1516 878 3 910 1516 890 53 47 1950 864 16 800 1950 4648 80 800 1950 1965 76 897 2037 3311 71 800 2037 2166 99 478 3311 1516 44 800 3311 104 62 576 3311 4481 77 158 3786 1950 38 800 3786 159 38 685 3786 3893 27 47 4074 3786 24 800 4074 2348 71 720 6 1315 57 392 6 3193 78 763 521 2260 90 392 521 3029 27 210 1315 2412 30 392 1315 2691 77 852 1315 3526 24 565 2260 2737 62 392 2260 4233 61 486 2412 4019 99 392 2412 1325 75 322 2412 488 44 558 2641 4464 38 392 2641 4649 45 756 2641 1336 25 238 2737 2641 25 392 2737 3789 14 65 2737 378 43 616 2818 4008 20 392 2818 1081 19 814 2818 280 5 694 4008 521 1 392 4008 3922 48 516 4019 2818 83 392 4019 4776 12 392 4019 1938 65 532 4464 4634 88 392 4464 305 23 632 7 3805 73 132 7 2369 76 718 714 3037 87 132 714 1258 71 90 2715 4016 11 132 2715 4484 79 988 2715 1299 58 621 3037 4663 68 132 3037 3922 34 170 3037 2295 45 980 3733 2715 72 132 3733 1463 6 424 3805 4205 17 132 3805 4730 76 132 3805 3271 56 196 4016 714 24 132 4016 1210 69 380 4016 2371 61 209 4205 3733 90 132 4205 2075 10 677 4205 4365 95 361 8 2573 32 622 8 265 96 567 8 2946 23 597 1265 1299 50 622 1265 1230 18 451 1299 3374 13 622 1299 4280 61 408 1299 459 59 186 1326 4821 7 622 1326 4788 37 622 1326 1052 47 231 1326 1812 100 433 2573 3698 82 622 2573 1276 99 401 3374 1326 52 622 3374 4855 58 489 3698 1265 46 622 3698 653 41 113 9 2743 8 309 9 721 55 372 580 1398 98 309 580 4563 16 33 580 3738 66 973 1226 4640 45 309 1226 4243 80 667 1398 3675 94 309 1398 229 78 249 2203 2594 68 309 2203 4043 16 851 2203 857 37 514 2291 3081 63 309 2291 2627 94 252 2291 3559 89 982 2594 2291 34 309 2594 4656 12 309 2594 745 54 682 2602 2203 55 309 2602 3319 91 771 2743 580 13 309 2743 3750 42 94 3081 1226 65 309 3081 570 53 162 3675 2602 55 309 3675 1871 59 328 10 928 55 145 10 2851 51 732 10 2902 16 315 699 3326 64 145 699 4752 53 10 928 4458 11 145 928 4497 82 450 928 952 66 863 1663 3769 59 145 1663 576 49 256 3326 3817 47 145 3326 4344 69 141 3326 3536 30 702 3550 3867 34 145 3550 3793 41 534 3769 3550 82 145 3769 4795 92 145 3769 2302 9 817 3769 3809 88 349 3817 4596 68 145 3817 1627 100 326 3867 699 20 145 3867 2216 13 13 3867 1415 17 931 4458 1663 79 145 4458 3546 100 624 11 609 79 113 11 3674 75 260 11 4712 21 389 609 3975 63 113 609 2367 41 146 2190 2966 39 113 2190 3788 100 811 2190 4752 39 12 2748 3889 15 113 2748 2441 26 516 2748 3825 74 667 2832 3236 45 113 2832 4130 47 134 2832 447 34 941 2966 3963 54 113 2966 4560 94 189 3236 2748 40 113 3236 2307 22 333 3236 4629 41 916 3889 2190 35 113 3889 4118 48 172 3963 4524 42 113 3963 4739 30 113 3963 1077 38 589 3975 2832 7 113 3975 578 97 293 3975 4418 45 880 12 1959 7 206 12 321 43 854 12 586 28 298 1959 3989 66 206 1959 3783 74 508 2413 4730 1 206 2413 3221 5 206 2413 4688 34 37 2990 2413 32 206 2990 2386 68 56 2990 833 78 110 3039 4107 89 206 3039 4793 57 106 3039 328 60 358 3221 3484 4 206 3221 3605 4 179 3484 3760 86 206 3484 2298 80 497 3484 1964 55 761 3760 4518 38 206 3760 2698 94 508 3760 1927 66 694 3989 3039 30 206 3989 2577 34 305 4107 2990 48 206 4107 1964 22 218 4107 4722 21 276 13 3789 28 427 13 4977 8 84 741 2359 47 427 741 2114 26 351 741 1350 97 675 1090 4651 98 427 1090 2134 7 137 1090 1865 14 820 1551 3036 87 427 1551 1157 80 775 1551 3476 70 230 1885 1551 30 427 1885 4891 34 214 2359 3956 22 427 2359 3563 23 54 2799 741 11 427 2799 1066 32 84 2799 2255 33 447 3036 1090 9 427 3036 4640 52 427 3036 4898 55 884 3789 2799 23 427 3789 4552 85 207 3956 1885 16 427 3956 1336 53 744 3956 2873 20 242 14 2070 1 480 14 4783 56 820 14 2062 84 32 2053 3584 53 480 2053 2633 76 657 2070 3088 57 480 2070 3355 9 217 2070 1278 14 707 2092 4916 60 480 2092 3997 37 842 3088 4181 76 480 3088 2766 60 763 3584 2092 9 480 3584 422 26 69 4181 2053 99 480 4181 4874 11 480 4181 3870 26 759 4181 3938 20 814 15 3785 3 797 15 2265 67 471 15 1304 59 113 587 658 87 797 587 3791 23 185 658 4110 12 797 658 1445 65 69 658 4126 90 724 726 857 9 797 726 1085 60 104 726 4105 95 13 857 587 81 797 857 4974 45 797 857 1412 66 385 857 4441 20 230 1738 4242 8 797 1738 2194 82 647 2454 4965 57 797 2454 8 24 559 3785 726 58 797 3785 3286 34 208 3785 2162 81 681 4110 1738 99 797 4110 3466 16 607 4110 1027 9 4 4242 2454 55 797 4242 2802 81 214 16 2713 68 963 16 2425 2 2 541 4655 82 963 541 2793 33 963 541 1084 57 402 541 1056 35 72 681 3351 36 963 681 4280 82 741 681 2257 100 514 1130 2064 54 963 1130 3856 17 328 1130 2286 1 697 2064 3806 7 963 2064 4586 90 963 2064 2927 44 399 2083 681 81 963 2083 4034 14 781 2083 3692 17 329 2713 541 65 963 2713 2456 16 2 2793 3811 14 963 2793 912 39 559 3331 2083 60 963 3331 3700 95 148 3351 3658 7 963 3351 3122 29 810 3351 133 72 668 3658 4719 51 963 3658 1969 21 307 3658 1951 62 365 3806 4358 21 963 3806 2538 53 955 3811 1130 55 963 3811 1971 12 511 4358 3331 71 963 4358 3762 84 208 4358 2800 67 139 17 3009 71 339 17 2373 26 939 17 629 3 38 559 2633 38 339 559 4107 95 887 1610 3588 63 339 1610 1247 27 480 1610 1184 57 133 1694 2652 43 339 1694 4901 91 766 1694 4972 8 139 1864 4981 18 339 1864 4836 81 339 1864 339 33 138 2633 1694 99 339 2633 889 72 547 2633 315 93 255 2652 4133 24 339 2652 3483 42 711 2652 1340 68 19 2939 1864 81 339 2939 2101 39 359 2939 431 65 368 3009 559 39 339 3009 803 90 67 3588 2939 76 339 3588 2656 97 123 4133 1610 64 339 4133 4576 39 371 18 1662 78 865 18 3741 4 401 1155 4588 18 865 1155 3272 11 356 1662 4901 87 865 1662 4432 57 865 1662 4319 77 186 1676 3847 25 865 1676 3898 33 556 1911 2680 76 865 1911 177 35 495 2680 1676 99 865 2680 832 52 121 3847 4196 77 865 3847 3230 26 559 3847 3187 28 702 4196 1155 95 865 4196 2598 36 191 4196 2774 99 249 4432 1911 40 865 4432 180 58 30 4432 499 29 222 19 3610 77 826 19 3267 7 860 630 1214 86 826 630 4134 58 353 845 3372 59 826 845 2587 22 735 1101 4948 81 826 1101 630 80 826 1101 3243 90 434 1101 1994 98 356 1214 845 6 826 1214 4503 32 965 2693 3346 77 826 2693 2633 66 44 2693 4799 24 88 3346 3482 11 826 3346 2527 98 789 3372 4925 41 826 3372 1536 79 31 3372 2936 32 283 3482 1101 68 826 3482 289 67 875 3610 2693 88 826 3610 3190 94 4 3610 3966 43 734 20 3791 46 1291 20 2288 69 488 633 2383 12 1291 633 209 8 673 1309 1441 43 1291 1309 521 96 478 1441 3428 12 1291 1441 3278 15 224 1937 4987 69 1291 1937 3362 84 1291 1937 1364 33 214 2383 1937 23 1291 2383 702 95 467 3234 633 14 1291 3234 1150 14 269 3362 4651 97 1291 3362 184 1 27 3428 3234 6 1291 3428 1060 62 583 3428 3282 18 76 3791 1309 37 1291 3791 4565 10 757 3791 2018 42 773 21 3582 73 117 21 3167 62 463 990 2685 74 117 990 4158 96 572 1157 3155 69 117 1157 143 64 275 1157 4362 94 767 1473 4815 80 117 1473 105 40 383 1473 3025 98 348 1669 4590 75 117 1669 990 55 117 1669 2942 83 910 1669 4649 90 252 2522 1157 65 117 2522 2383 54 633 2685 4398 10 117 2685 4538 35 736 2685 1740 8 951 3155 1473 31 117 3155 1577 38 923 3155 1991 29 277 3412 2522 61 117 3412 2179 74 811 3582 4305 92 117 3582 2058 42 483 3582 4129 98 816 4305 1669 25 117 4305 303 92 414 4305 221 14 989 4398 3412 41 117 4398 2947 25 871 22 3778 14 481 22 900 48 461 803 4738 52 481 803 4571 53 481 803 2873 28 461 1216 2035 5 481 1216 4115 99 436 1216 4443 79 59 2035 2103 31 481 2035 2779 90 661 2084 4299 100 481 2084 1541 3 810 2103 2084 22 481 2103 3419 73 332 3048 803 64 481 3048 4506 52 655 3048 1767 85 482 3778 1216 41 481 3778 4603 41 897 3778 657 19 61 4299 3048 49 481 4299 1121 28 860 4299 1549 77 724 23 2534 69 547 23 1265 74 141 661 1053 21 547 661 504 47 897 1053 2735 41 547 1053 4992 41 15 1053 4483 100 523 1191 4867 59 547 1191 1193 12 547 1191 2700 13 928 1191 367 28 456 1193 3725 40 547 1193 945 7 373 1193 4005 59 850 1471 1191 2 547 1471 4584 88 595 1471 83 22 739 2534 1471 50 547 2534 3661 12 715 2735 4966 35 547 2735 1322 43 577 3725 661 48 547 3725 390 27 436 24 4457 47 837 24 4668 34 873 24 429 17 101 543 1437 18 837 543 4928 63 837 543 1307 70 824 1437 4866 97 837 1437 1758 36 524 2372 543 9 837 2372 4117 28 703 3264 4046 64 837 3264 873 81 406 3264 1517 55 135 3646 3731 88 837 3646 2221 30 246 3646 4595 20 494 3731 3264 71 837 3731 927 73 792 3731 2397 40 747 4046 2372 72 837 4046 634 36 861 4046 926 7 940 4457 3646 25 837 4457 1426 97 486 25 2894 36 935 25 809 2 584 1206 4932 38 935 1206 3131 1 935 1206 4086 70 875 1236 3393 13 935 1236 1195 72 363 1729 3141 13 935 1729 3841 67 468 1729 189 31 887 1770 1236 95 935 1770 2191 51 43 1770 4043 54 149 2342 3069 57 935 2342 4573 96 184 2342 3366 88 849 2843 4486 66 935 2843 1161 65 622 2894 1206 82 935 2894 4764 73 431 3069 4749 13 935 3069 3236 31 219 3131 1729 96 935 3131 4740 55 935 3131 3230 14 293 3131 143 6 848 3141 2843 13 935 3141 3303 4 85 3141 4616 93 1 3393 2342 55 935 3393 1114 24 672 4486 1770 20 935 4486 512 5 844 4486 2383 84 593 26 3964 23 34 26 88 89 25 26 3771 52 111 766 4431 99 34 766 4076 65 129 2115 2337 3 34 2115 1875 91 939 2115 102 71 353 2337 2765 11 34 2337 313 64 715 2337 1718 82 771 2765 4223 25 34 2765 4771 23 34 2765 1325 89 827 2765 4937 5 9 2789 766 18 34 2789 3674 98 648 3802 2789 29 34 3802 3973 99 625 3964 4203 11 34 3964 4253 67 942 3964 2583 47 275 4203 3802 97 34 4203 3843 16 197 4203 3364 99 239 4223 4916 55 34 4223 3397 62 977 4431 2115 15 34 4431 1414 69 985 27 3355 77 354 27 318 84 121 713 896 84 354 713 585 63 56 896 3314 31 354 896 1767 100 158 896 1772 71 441 1378 713 99 354 1378 4414 48 118 2209 1378 100 354 2209 1751 28 819 2209 4077 32 969 2842 2209 98 354 2842 4558 44 549 3314 4737 74 354 3314 4566 9 354 3314 3610 39 894 3314 4266 5 773 3355 2842 82 354 3355 2738 45 279 28 2340 50 390 28 1982 54 445 560 2334 91 390 560 1510 69 633 560 666 92 437 617 2686 36 390 617 2587 22 779 645 3807 37 390 645 1605 62 503 2122 617 53 390 2122 2762 61 59 2254 3154 17 390 2254 333 92 864 2254 3435 55 473 2316 2122 50 390 2316 2518 23 763 2334 2316 63 390 2334 4267 18 674 2340 2254 3 390 2340 3061 100 179 2340 4507 41 202 2686 645 1 390 2686 2929 79 826 3154 4610 12 390 3154 3538 37 390 3154 4792 92 390 3154 4611 27 271 3538 560 84 390 3538 4853 93 919 3538 1937 27 971 3807 4684 37 390 3807 3971 68 205 29 1844 11 1016 29 3884 99 824 563 3095 57 1016 563 3829 97 843 1453 563 15 1016 1453 3142 87 591 1844 2592 80 1016 1844 2843 6 110 1844 709 70 88 1928 4776 85 1016 1928 2803 69 1 1928 3326 31 604 2364 1928 98 1016 2364 4619 42 1016 2364 2473 71 126 2592 1453 72 1016 2592 4521 40 601 2592 2724 97 701 3095 2364 91 1016 3095 4927 98 568 30 1010 8 934 30 2846 60 424 30 150 26 269 738 1858 73 934 738 3868 12 68 738 4739 86 202 940 2759 71 934 940 1583 11 131 1010 3657 67 934 1010 2971 99 250 1010 2032 3 138 1202 940 18 934 1202 3707 54 977 1354 1202 50 934 1354 4869 46 402 1354 1572 70 15 1858 1884 21 934 1858 4829 60 934 1858 1583 33 228 1884 4777 63 934 1884 3888 38 554 1884 2302 45 475 2759 738 44 934 2759 186 46 16 2759 1726 68 458 3061 1354 69 934 3061 3047 70 388 3657 3061 29 934 3657 428 57 154 31 3585 56 693 31 2769 78 723 31 2254 90 998 1098 2549 46 693 1098 4765 15 654 1098 2717 34 551 1599 3521 54 693 1599 4951 60 351 2549 1599 46 693 2549 2542 49 814 2549 598 87 50 3359 4623 29 693 3359 394 39 846 3521 4389 29 693 3521 4017 20 64 3585 4683 33 693 3585 1098 12 693 3585 4715 12 895 3585 3642 83 718 4389 3359 43 693 4389 627 94 555 4389 4511 6 944 32 2825 46 411 32 2989 91 980 32 1897 68 9 1288 1615 24 411 1288 509 25 468 1288 2936 80 696 1615 3404 97 411 1615 3488 41 115 1615 3306 54 27 2133 1288 99 411 2133 4729 87 411 2133 3863 73 751 2133 4040 71 512 2825 3505 95 411 2825 4473 53 527 2825 3891 46 237 3404 4834 67 411 3404 3830 29 812 3404 2916 24 767 3505 2133 65 411 3505 4669 14 628 33 1176 8 137 33 4361 58 798 721 1294 31 137 721 4754 31 137 721 3277 97 408 1176 2038 82 137 1176 602 47 250 1294 1347 19 137 1294 125 98 413 1347 4647 79 137 1347 16 91 482 1347 2851 87 933 2038 2597 16 137 2038 669 70 798 2038 4531 67 123 2237 721 39 137 2237 123 69 216 2237 4967 81 591 2597 2237 3 137 2597 646 54 553 2597 406 92 542 34 2794 77 800 34 4830 9 908 1621 3767 20 800 1621 3714 67 28 1973 4244 45 800 1973 1898 75 241 2046 1973 9 800 2046 4724 1 863 2046 118 52 537 2227 4662 37 800 2227 4459 22 187 2227 3336 40 341 2794 2046 89 800 2794 2739 90 599 3157 1621 49 800 3157 3494 34 679 3767 2227 16 800 3767 4744 7 800 3767 4758 63 873 3767 108 74 694 4244 3157 30 800 4244 415 73 281 4244 4987 70 88 35 1564 72 48 35 782 20 274 35 4287 64 419 1037 1934 67 48 1037 4996 20 12 1037 1692 64 363 1491 3086 32 48 1491 2746 11 353 1491 3621 57 92 1564 3918 54 48 1564 3481 45 900 1564 4688 74 847 1934 4622 31 48 1934 2244 75 48 1934 3761 73 563 2055 1491 20 48 2055 201 21 38 2244 2055 2 48 2244 3991 51 879 2244 3475 70 551 3086 4611 70 48 3086 2405 47 654 3274 1037 9 48 3274 433 64 259 3918 3274 18 48 3918 2824 7 248 36 1696 4 854 36 2848 31 1 36 290 28 614 1148 2960 84 854 1148 3924 89 820 1496 1602 49 854 1496 3642 4 280 1602 3091 60 854 1602 4234 70 312 1696 1148 93 854 1696 3222 15 496 1696 1215 7 858 2960 1496 96 854 2960 4626 61 854 2960 698 43 688 2960 2782 32 372 3091 4894 91 854 3091 628 71 276 3091 251 86 953 37 2345 91 817 37 3013 51 683 1590 4423 14 817 1590 2464 8 613 1590 1745 7 503 1979 4828 7 817 1979 2257 23 35 1979 4348 83 120 2345 1590 46 817 2345 3215 14 872 2345 1180 76 400 2520 2682 49 817 2520 4436 50 295 2682 2970 93 817 2682 4471 51 731 2682 4480 27 149 2970 1979 57 817 2970 4300 64 61 4423 2520 63 817 4423 4892 68 817 4423 725 59 15 4423 4290 23 799 38 829 79 756 38 3503 67 779 746 2810 28 756 746 4212 67 550 746 54 84 390 829 2542 89 756 829 2095 15 630 829 382 24 86 1394 746 54 756 1394 2185 91 484 1394 3163 33 187 1896 4834 90 756 1896 4926 47 756 1896 428 59 433 1896 2645 95 507 2397 2598 69 756 2397 4720 12 42 2542 1394 19 756 2542 4653 36 898 2542 2690 14 265 2598 2965 34 756 2598 827 96 888 2810 2397 62 756 2810 4491 48 6 2810 1478 99 113 2965 1896 96 756 2965 845 75 851 2965 4859 48 396 39 2567 59 523 39 3648 49 726 39 3825 63 948 1054 3118 44 523 1054 1625 1 467 2567 3818 45 523 2567 2959 89 834 2567 1602 93 144 3118 3873 31 523 3118 4637 28 523 3118 3543 50 330 3118 4222 45 497 3818 1054 76 523 3818 4726 100 727 3818 98 70 6 3873 4970 91 523 3873 2000 95 380 3873 635 45 472 40 4274 99 1074 40 2809 28 357 725 4100 70 1074 725 4451 64 946 1654 2888 92 1074 1654 1221 24 529 1654 2703 58 368 2047 4607 100 1074 2047 3772 63 212 2047 4680 88 842 2888 2047 48 1074 2888 4876 3 623 2888 1160 22 191 3909 725 19 1074 3909 3232 1 840 4100 1654 88 1074 4100 4706 56 1074 4100 203 43 426 4100 1749 25 426 4274 3909 39 1074 4274 2248 63 485 41 3449 56 507 41 397 81 544 41 1861 20 632 1081 1616 4 507 1081 4 39 423 1106 4774 87 507 1106 3689 13 783 1106 1812 71 237 1483 1618 41 507 1483 890 28 476 1483 3393 73 447 1616 1752 9 507 1616 1551 61 983 1618 3105 35 507 1618 4080 7 261 1618 4920 57 111 1625 1982 62 507 1625 4272 65 195 1736 4597 94 507 1736 4516 7 507 1736 1625 52 507 1736 503 80 731 1736 3257 4 361 1752 1483 82 507 1752 3205 51 988 1752 3889 98 222 1982 2524 22 507 1982 4474 87 611 2524 1081 37 507 2524 389 35 262 2524 1375 34 833 3105 1106 81 507 3105 4638 20 238 3105 804 25 188 3449 1736 97 507 3449 2279 80 137 3449 1044 15 141 42 2077 67 440 42 4332 100 141 613 4919 27 440 613 1899 66 519 1681 4160 91 440 1681 3786 56 163 2077 2706 40 440 2077 959 30 200 2077 3667 35 424 2197 613 21 440 2197 4641 64 440 2197 4096 22 518 2706 1681 85 440 2706 2325 81 152 3106 2197 52 440 3106 1384 4 469 3106 2615 19 359 4160 3106 82 440 4160 2284 21 160 43 2021 87 256 43 1635 22 683 43 1329 26 210 823 2089 78 256 823 2676 33 796 1503 4794 79 256 1503 2656 65 256 1503 4115 14 196 1503 2627 64 743 2021 2915 9 256 2021 4760 25 425 2021 4047 75 325 2089 1503 96 256 2089 3708 89 189 2089 2977 15 488 2208 4700 55 256 2208 445 73 623 2208 303 37 855 2656 2208 66 256 2656 3339 96 872 2915 823 55 256 2915 4917 69 269 2915 1994 100 708 44 690 67 22 44 1066 29 199 44 3296 48 687 626 2181 71 22 626 4649 76 22 626 1886 27 838 690 626 82 22 690 3598 71 335 690 3316 1 596 1905 3323 3 22 1905 3004 1 985 1905 1010 23 51 2181 2343 2 22 2181 2100 89 716 2181 3750 62 955 2343 1905 50 22 2343 2871 89 974 2343 2443 38 573 3323 3702 59 22 3323 3031 95 425 3702 4206 93 22 3702 841 45 19 4206 4650 76 22 4206 1552 27 596 4206 2502 71 17 45 1079 52 569 45 922 37 300 592 4803 16 569 592 3624 25 48 592 3722 80 88 706 592 9 569 706 3615 46 729 768 4076 30 569 768 1924 18 215 768 2998 6 202 819 706 95 569 819 3972 72 985 819 4224 52 352 1079 4889 8 569 1079 768 87 569 1079 1151 79 131 1702 819 65 569 1702 3541 7 483 1887 2437 49 569 1887 3033 80 429 2437 1702 10 569 2437 3282 86 449 2437 4751 33 886 4076 1887 5 569 4076 2663 8 711 46 2891 93 341 46 4458 48 81 1022 4972 75 341 1022 1045 49 341 1022 2418 13 953 1045 3912 39 341 1045 1869 58 256 1493 3248 33 341 1493 4138 65 397 1787 1493 66 341 1787 3113 64 654 2891 3467 7 341 2891 1947 32 398 3248 4700 90 341 3248 4937 49 804 3248 4185 15 223 3467 1022 94 341 3467 3537 87 390 3467 536 28 396 3912 1787 55 341 3912 3383 6 358 47 2683 39 410 47 320 49 882 679 3860 94 410 679 1966 27 118 679 3483 57 990 1308 4580 34 410 1308 3612 16 410 1308 1960 24 827 1308 2161 52 838 2683 679 79 410 2683 3492 19 918 3001 1308 2 410 3001 3893 68 788 3612 4286 44 410 3612 4230 45 461 3612 4093 40 20 3674 4979 37 410 3674 896 44 524 3674 1309 41 196 3860 3001 38 410 3860 1443 87 266 3860 2255 66 81 4232 3674 67 410 4232 3687 59 364 4232 1782 10 109 4286 4232 15 410 4286 392 51 959 48 2385 11 129 48 707 31 118 729 3792 77 129 729 2665 82 588 729 4717 23 809 2385 3960 91 129 2385 769 58 905 2385 1296 84 628 2387 4887 70 129 2387 1475 92 175 2869 4168 20 129 2869 1753 77 91 2869 151 16 373 3503 2869 85 129 3503 650 94 423 3503 613 24 725 3792 2387 7 129 3792 2555 42 906 3960 4888 59 129 3960 4322 93 129 3960 4948 81 708 3960 2367 25 551 4036 3503 77 129 4036 2959 34 506 4168 729 95 129 4168 4034 33 89 4168 266 88 723 4322 4036 88 129 4322 3 21 160 4322 4094 48 418 49 831 52 1269 49 4763 79 982 49 112 59 271 518 1259 68 1269 518 617 70 841 518 1359 70 261 831 4098 33 1269 831 1415 41 93 1170 2605 6 1269 1170 3414 3 114 1182 518 28 1269 1182 4911 59 649 1259 1726 31 1269 1259 4868 38 770 1671 4705 51 1269 1671 4843 61 1269 1671 2219 63 741 1671 3913 49 816 1726 1170 83 1269 1726 279 41 235 1726 171 84 55 2605 1671 93 1269 2605 2151 56 170 4098 1182 23 1269 4098 3460 32 877 4098 1990 74 206 50 736 67 570 50 689 49 520 50 4628 87 256 736 1069 61 570 736 866 78 533 1041 4041 81 570 1041 4857 3 575 1041 4917 44 924 1069 1041 75 570 1069 2729 18 666 1983 2773 71 570 1983 4799 34 570 1983 4945 95 261 1983 905 11 965 2773 4754 15 570 2773 3892 38 182 4041 1983 6 570 4041 3488 52 471 4041 4606 45 649 51 4422 85 456 51 3598 3 180 51 4132 86 142 1513 3060 24 456 1513 3803 88 786 1608 4139 2 456 1608 846 37 403 2068 1608 26 456 2068 4811 36 456 2068 3222 9 730 3060 4999 23 456 3060 2524 56 227 3060 4274 33 767 4139 1513 74 456 4139 3143 96 624 4422 2068 74 456 4422 1284 66 479 4422 1505 42 635 52 3133 7 320 52 1910 43 481 52 811 21 836 1000 1865 59 320 1000 195 41 151 1000 1768 68 366 1529 1000 94 320 1529 610 85 990 1865 4715 61 320 1865 1574 38 4 2245 1529 65 320 2245 949 2 327 2769 2245 78 320 2769 814 11 339 2957 4485 10 320 2957 408 93 874 2957 655 40 584 3133 3524 12 320 3133 3451 75 611 3133 4482 57 50 3448 2957 5 320 3448 4934 48 320 3448 4273 29 268 3448 4348 19 797 3524 3448 40 320 3524 4545 42 788 4485 2769 98 320 4485 377 80 435 53 2073 98 415 53 3346 73 301 53 1342 48 348 739 3864 100 415 739 2868 60 828 739 39 58 677 814 4923 80 415 814 2812 4 678 1881 3361 31 415 1881 4213 2 866 2032 739 22 415 2032 3538 23 391 2073 4215 92 415 2073 2024 13 930 2073 712 17 366 2433 814 77 415 2433 1467 8 561 2433 2861 80 395 3361 4026 74 415 3361 4527 18 415 3361 4942 40 113 3361 1488 4 395 3864 2433 89 415 3864 3304 78 632 4026 2032 45 415 4026 2360 60 900 4215 1881 86 415 4215 4976 42 811 4215 4052 82 551 54 3488 82 105 54 3267 82 322 1637 4384 11 105 1637 502 55 571 1637 4616 96 636 1886 2130 48 105 1886 1918 49 536 1977 1637 10 105 1977 1861 20 902 2130 4820 64 105 2130 142 59 874 3488 4593 35 105 3488 1977 15 105 3488 2491 9 984 4384 1886 75 105 4384 3337 67 909 55 1163 96 445 55 1296 46 957 55 4058 17 439 603 2477 43 445 603 2582 98 323 603 2797 7 370 1126 603 15 445 1126 1352 28 458 1126 223 89 748 1163 3640 61 445 1163 739 20 289 1275 1126 64 445 1275 1885 53 343 1275 738 87 438 1283 3442 45 445 1283 2625 98 204 1584 4762 79 445 1584 4701 37 445 1584 1740 58 710 2477 1584 93 445 2477 3216 93 870 3442 1275 9 445 3442 3694 21 575 3489 1283 67 445 3489 4987 41 12 3489 2740 27 196 3640 3489 22 445 3640 1046 59 665 3640 3084 58 498 56 3594 78 863 56 2228 77 437 860 4304 98 863 860 4602 90 863 860 3131 74 416 860 3277 97 610 912 2752 78 863 912 4897 42 445 912 3106 99 23 2752 860 53 863 2752 1607 38 677 3003 4594 57 863 3003 3133 12 205 3003 4846 26 471 3349 912 96 863 3349 3759 54 971 3349 2706 97 660 3594 3349 81 863 3594 4409 40 36 3594 4462 88 261 4304 3003 57 863 4304 2786 24 430 4304 2732 100 468 57 4329 93 104 57 3653 23 686 57 369 55 298 1776 2666 82 104 1776 4366 49 624 1776 1710 8 400 1941 3161 72 104 1941 4800 10 104 1941 287 48 991 1941 1086 11 840 1952 1776 14 104 1952 714 72 62 2666 4734 36 104 2666 4359 3 261 3161 4342 78 104 3161 4778 30 960 3161 1180 21 761 3876 1952 44 104 3876 3034 70 104 3876 2921 92 133 4329 1941 30 104 4329 3528 74 872 4342 3876 11 104 4342 737 3 397 58 4273 55 620 58 66 85 33 58 3027 30 167 2097 3231 6 620 2097 1633 90 546 2097 1925 76 513 2488 2097 100 620 2488 3135 72 819 2488 3412 20 329 3089 3202 27 620 3089 2693 53 370 3089 4454 97 961 3202 3224 94 620 3202 3935 1 466 3224 4569 63 620 3224 1096 34 917 3224 3894 4 791 3231 3451 58 620 3231 4797 56 243 3231 2411 45 177 3451 4343 64 620 3451 4940 62 620 3451 2881 44 225 3451 1564 37 100 4273 2488 25 620 4273 1289 97 902 4343 3089 31 620 4343 1132 74 677 4343 2234 33 142 59 2523 21 300 59 4912 50 128 59 1419 19 300 1205 2110 3 300 1205 102 28 616 1305 2375 15 300 1305 4581 78 674 2110 4505 36 300 2110 1305 21 300 2110 4032 88 487 2375 4829 33 300 2375 1027 26 645 2523 1205 78 300 2523 4168 38 806 60 1061 97 286 60 2677 12 71 1061 3241 46 286 1061 199 19 311 1061 498 23 238 1832 2673 98 286 1832 2189 98 186 1832 4795 10 893 2257 1832 55 286 2257 72 87 587 2673 4720 48 286 2673 2709 75 498 2673 812 9 966 2852 4860 73 286 2852 3175 55 286 2852 1221 9 519 3175 4461 28 286 3175 4032 60 705 3241 2852 69 286 3241 2373 85 517 3241 4544 61 258 4461 2257 93 286 4461 770 90 63 61 1250 83 435 61 3215 52 624 853 1703 49 435 853 4587 76 435 853 4742 52 223 853 2132 7 837 1250 853 51 435 1250 2087 3 773 1642 1876 27 435 1642 476 86 887 1642 3153 81 22 1703 1642 51 435 1703 1191 76 648 1703 49 70 89 1840 4603 85 435 1840 2050 83 521 1876 1840 65 435 1876 2208 77 633 62 3309 9 87 62 1942 79 920 62 3568 53 381 608 2161 23 87 608 4530 50 822 869 1823 74 87 869 3054 90 511 1269 2117 7 87 1269 4954 77 941 1269 4888 12 115 1296 869 54 87 1296 4273 100 677 1823 3005 54 87 1823 1083 75 793 2117 3162 4 87 2117 2757 35 722 2161 4860 55 87 2161 3921 4 832 3005 1269 28 87 3005 4285 20 16 3005 4287 8 593 3162 608 90 87 3162 455 22 967 3162 3909 40 926 3309 1296 49 87 3309 4966 31 87 3309 782 53 985 3309 4448 88 294 63 3454 86 97 63 638 63 630 1403 3243 61 97 1403 1559 6 502 1820 3208 43 97 1820 559 78 466 2419 4796 27 97 2419 4603 61 97 2419 3740 11 470 2419 4129 38 45 3208 3302 77 97 3208 2553 36 354 3208 439 95 431 3243 1820 58 97 3243 3795 9 260 3302 2419 52 97 3302 2706 32 398 3302 4356 90 158 3454 4394 67 97 3454 1459 48 190 3454 565 91 112 4394 1403 1 97 4394 4806 92 587 64 1925 100 435 64 305 62 484 837 4637 99 435 837 4972 90 435 837 1592 25 557 1032 2365 87 435 1032 748 65 242 1032 4487 89 863 1925 3996 98 435 1925 612 63 423 2264 3514 13 435 2264 1353 17 411 2365 837 7 435 2365 2697 14 954 3514 1032 79 435 3514 3878 59 966 3996 2264 35 435 3996 262 31 909 65 2164 93 773 65 1415 53 502 65 2070 16 376 841 4400 1 773 841 1984 37 785 841 3727 28 374 893 3948 48 773 893 3871 37 777 893 4641 76 243 1036 3308 74 773 1036 4033 70 625 1036 4103 53 850 1812 4567 11 773 1812 3367 87 289 2164 841 24 773 2164 1199 86 255 3308 893 75 773 3308 2179 74 774 3308 708 99 202 3948 1812 70 773 3948 4554 41 773 3948 3541 34 928 4400 1036 34 773 4400 4887 93 405 4400 1783 46 65 66 3072 83 137 66 3650 87 350 66 1791 22 190 590 4593 92 137 590 2433 52 64 590 4904 74 151 2615 4126 23 137 2615 4509 55 259 2615 289 75 744 3072 3136 92 137 3072 2589 35 6 3136 3344 61 137 3136 1095 48 726 3344 4875 51 137 3344 3592 74 137 3344 3991 40 431 3592 4010 100 137 3592 2868 87 636 3592 1704 23 941 4010 2615 33 137 4010 2707 63 258 4126 590 6 137 4126 2656 93 897 67 3090 6 99 67 84 17 240 67 3155 62 118 1183 3743 90 99 1183 2073 69 980 2378 2824 79 99 2378 1857 45 773 2378 3229 44 126 2824 3581 70 99 2824 2975 68 257 2824 42 1 695 3090 2378 4 99 3090 92 47 815 3090 4016 26 584 3411 3961 7 99 3411 4708 42 99 3411 439 29 152 3411 587 41 59 3581 3411 45 99 3581 2234 22 470 3743 4733 97 99 3743 1519 2 793 3961 1183 92 99 3961 1054 34 250 68 1111 52 792 68 734 28 318 68 118 36 853 591 4388 20 792 591 2805 54 228 838 3038 57 792 838 97 78 544 861 2054 41 792 861 1963 37 996 861 1123 28 665 1111 3718 1 792 1111 1459 71 689 1111 592 17 290 1978 838 88 792 1978 762 32 884 1978 674 56 781 2054 1978 12 792 2054 1869 14 835 2054 4450 6 708 2314 4527 79 792 2314 3221 67 465 2314 3227 56 185 3038 591 59 792 3038 4955 70 792 3038 777 12 603 3038 2711 2 45 3718 861 8 792 3718 3504 68 528 4388 2314 42 792 4388 2991 26 849 4388 1894 24 105 69 751 81 544 69 3944 47 339 751 1333 24 544 751 22 81 656 751 2806 95 124 1310 3121 83 544 1310 3636 76 556 1333 3732 45 544 1333 4301 56 823 1333 360 35 655 2152 1310 5 544 2152 499 6 103 2152 94 15 174 2538 4520 44 544 2538 2906 81 544 2538 1297 41 185 2906 3209 49 544 2906 3993 60 657 3121 4549 13 544 3121 2815 16 951 3121 3812 7 523 3209 2152 56 544 3209 1089 48 475 3209 4396 23 766 3732 2538 31 544 3732 4575 95 410 3732 4807 54 534 70 3020 92 558 70 2643 28 138 576 3833 82 558 576 4608 94 646 680 4864 94 558 680 1614 6 558 680 2544 60 25 999 1991 45 558 999 4688 73 558 999 3409 96 835 999 324 20 534 1108 999 10 558 1108 1926 8 964 1108 2698 98 160 1189 2583 13 558 1189 1627 78 159 1189 4858 47 797 1588 4625 97 558 1588 438 69 735 1588 706 60 928 1614 576 30 558 1614 4896 65 945 1991 1189 22 558 1991 1443 56 873 2583 4017 86 558 2583 1043 24 678 2583 4064 25 393 3020 1108 13 558 3020 4924 68 646 3833 1588 33 558 3833 1509 10 440 4017 680 45 558 4017 1692 5 779 4017 3333 62 343 71 3590 78 275 71 1512 32 518 71 3566 55 276 971 1350 84 275 971 2908 18 125 1011 2849 4 275 1011 3385 17 722 1268 1011 40 275 1268 583 31 507 1268 1493 63 191 1350 1268 82 275 1350 4975 20 275 1350 4048 32 719 2543 4784 72 275 2543 2018 17 205 2849 2543 43 275 2849 1350 93 924 3240 971 63 275 3240 2980 51 965 3240 2638 59 331 3415 3240 24 275 3415 2088 21 438 3590 4092 64 275 3590 3998 69 935 4092 3415 70 275 4092 4350 88 751 72 1817 36 467 72 1927 31 60 795 4877 6 467 795 3051 97 442 1817 4529 20 467 1817 4247 83 467 1817 653 86 8 1817 4265 64 86 2667 795 22 467 2667 118 88 209 2667 1924 38 119 2911 2976 96 467 2911 218 88 726 2911 6 33 538 2976 2667 63 467 2976 2351 13 372 2976 1188 1 470 3999 2911 31 467 3999 435 5 512 4247 3999 91 467 4247 760 72 391 4247 881 41 911 73 1860 76 350 73 550 69 788 73 957 25 889 578 4355 45 350 578 544 28 866 1068 3881 7 350 1068 3793 5 129 1068 4257 46 192 1860 578 89 350 1860 4833 60 350 1860 2842 37 825 2075 1068 19 350 2075 2035 91 23 2646 4625 92 350 2646 97 11 977 2646 4851 18 499 2838 2075 35 350 2838 2389 61 682 3881 4495 8 350 3881 3367 13 121 4334 2646 88 350 4334 3033 32 691 4334 1914 56 676 4355 2838 63 350 4355 4316 29 331 4495 4334 64 350 4495 444 73 167 74 1293 3 477 74 2001 79 749 74 73 98 410 524 4730 53 477 524 4896 71 366 524 3647 48 716 1293 4350 43 477 1293 4609 7 537 1293 3988 84 852 1432 3030 4 477 1432 4616 86 884 2124 3850 36 477 2124 1651 39 638 2124 2499 75 831 3030 2124 16 477 3030 2488 51 132 3030 4990 59 679 3850 524 23 477 3850 4003 28 500 3850 1910 90 86 4350 1432 57 477 4350 4785 13 477 4350 1306 16 886 4350 4830 59 126 75 3613 48 1231 75 1858 10 886 75 2110 17 162 1153 2657 24 1231 1153 4470 34 591 1153 1279 71 708 1215 4933 28 1231 1215 1572 45 938 1457 1215 64 1231 1457 4897 11 368 1568 1690 82 1231 1568 3105 93 800 1690 1457 34 1231 1690 1454 92 186 2657 1568 32 1231 2657 4954 17 575 2657 2941 29 94 3613 3949 50 1231 3613 1747 53 757 3949 4411 32 1231 3949 4761 47 528 4411 1153 35 1231 4411 4868 81 1231 4411 2760 75 454 4411 1081 53 963 76 1468 11 486 76 650 39 678 791 3902 90 486 791 4226 36 985 791 2773 2 356 972 3556 50 486 972 695 32 173 972 2163 3 235 1369 972 33 486 1369 666 88 597 1396 791 100 486 1396 1051 67 905 1468 1396 80 486 1468 534 71 398 3556 3762 24 486 3556 2610 84 919 3556 4489 5 833 3762 4749 27 486 3762 4516 9 486 3762 2717 97 653 3902 4013 42 486 3902 2667 39 468 4013 1369 30 486 4013 272 67 749 77 3700 69 773 77 2638 66 273 77 3307 4 750 1469 2090 19 773 1469 1544 38 86 1469 965 42 690 1678 2577 3 773 1678 987 80 998 2090 2400 3 773 2090 4557 28 773 2090 3561 100 6 2090 1032 38 575 2400 2758 79 773 2400 2159 98 351 2577 2841 37 773 2577 3387 69 700 2758 3203 42 773 2758 4693 64 723 2758 552 57 811 2841 3637 71 773 2841 4068 59 106 2841 2948 67 830 3203 4587 25 773 3203 2169 97 486 3203 3487 23 856 3637 1469 54 773 3637 169 91 773 3637 4803 5 656 3700 1678 14 773 3700 4894 100 749 3700 3254 5 674 78 4195 37 422 78 2431 96 456 78 1292 25 432 637 3080 91 422 637 361 16 278 2287 4810 89 422 2287 4366 83 881 2287 2684 42 75 2977 2287 9 422 2977 3539 46 913 2977 3959 10 970 3080 4770 49 422 3080 2977 56 422 3080 3993 16 344 3080 3976 98 35 4195 637 73 422 4195 2336 77 837 79 3474 78 526 79 4411 1 145 79 399 97 616 1874 2949 39 526 1874 317 31 257 1874 2915 58 817 2949 4569 12 526 2949 166 35 134 2949 4792 72 924 3474 4057 50 526 3474 4597 20 526 3474 4563 20 94 3474 3032 78 434 3629 3803 56 526 3629 2282 54 710 3803 4289 48 526 3803 1246 87 997 4012 1874 53 526 4012 2941 54 652 4012 3666 39 471 4057 3629 90 526 4057 1023 39 876 4289 4012 42 526 4289 2646 67 205 4289 4670 72 21 80 2921 95 402 80 2138 7 282 1532 2135 73 402 1532 3684 21 760 1891 3908 63 402 1891 259 38 652 1891 1941 3 248 2135 4515 67 402 2135 3691 95 279 2141 3959 14 402 2141 341 28 309 2921 4198 45 402 2921 3242 72 376 3628 4492 9 402 3628 2332 61 715 3908 4011 60 402 3908 2677 85 525 3959 3628 14 402 3959 215 51 625 4011 1532 33 402 4011 3063 93 192 4198 2141 91 402 4198 4839 50 402 4198 1710 94 229 4198 3047 50 553 4492 1891 52 402 4492 2274 69 268 81 2434 6 602 81 4235 63 785 951 3027 53 602 951 3188 58 380 951 708 3 825 1026 2166 78 602 1026 1759 42 779 1822 3316 41 602 1822 451 10 517 2166 4572 35 602 2166 1001 19 234 2434 2636 55 602 2434 2924 58 924 2636 3298 64 602 2636 1171 34 755 2636 714 4 199 3027 4265 74 602 3027 1070 78 93 3298 951 91 602 3298 212 26 911 3298 3070 33 905 3316 4051 2 602 3316 4868 65 296 3316 2303 80 96 4051 1026 73 602 4051 48 32 377 4265 1822 77 602 4265 4840 89 602 4265 333 2 811 82 3207 87 262 82 2016 98 787 82 4323 23 472 2156 3102 41 262 2156 4856 43 262 2156 194 91 342 2156 4406 12 241 2282 2156 87 262 2282 3600 21 878 2282 2105 3 180 2902 4754 8 262 2902 188 2 596 2902 2611 63 49 3102 3922 97 262 3102 4150 64 565 3102 4750 97 446 3207 2282 12 262 3207 3378 88 279 3922 2902 19 262 3922 2040 45 500 83 2167 34 321 83 3772 54 32 554 2414 11 321 554 924 9 413 554 613 83 57 966 4272 91 321 966 4552 33 321 966 4564 56 797 966 4208 47 501 2167 3000 69 321 2167 4888 82 209 2167 3364 6 731 2171 2511 42 321 2171 1086 29 50 2296 2171 44 321 2296 4443 1 861 2296 4169 21 480 2351 2296 66 321 2351 2404 68 775 2351 2335 88 897 2414 966 34 321 2414 3381 71 435 2511 554 80 321 2511 67 17 398 3000 2351 63 321 3000 3369 54 444 3000 822 11 704 4272 4572 65 321 4272 4649 41 936 4272 922 10 679 84 2517 5 1135 84 3461 36 852 1073 2399 56 1135 1073 4178 75 920 1073 2453 84 839 1535 1073 19 1135 1535 3869 58 188 2399 3891 62 1135 2399 4528 98 855 2399 507 60 98 2517 4478 49 1135 2517 1570 85 993 3834 1535 36 1135 3834 1298 55 903 3834 4853 68 572 3891 4717 60 1135 3891 1586 72 318 3891 1121 94 954 4478 3834 28 1135 4478 4875 64 1135 4478 3712 34 959 4478 234 26 160 85 2828 6 459 85 2695 75 62 622 2427 33 459 622 4996 62 897 830 4765 48 459 830 4872 82 921 830 1500 35 109 1763 3735 12 459 1763 4070 78 274 2427 830 36 459 2427 4905 23 459 2427 3147 1 569 2427 421 19 618 2489 3755 83 459 2489 1477 94 293 2489 4960 89 480 2828 2489 14 459 2828 4961 64 644 2828 2108 24 513 3735 622 74 459 3735 4532 36 50 3735 58 65 672 3755 1763 34 459 3755 955 82 247 3755 216 99 975 86 3172 63 915 86 2576 5 971 974 3007 94 915 974 3226 30 773 1178 4784 12 915 1178 4710 94 915 1178 2987 36 508 2059 974 21 915 2059 4526 76 557 3007 1178 64 915 3007 4610 45 967 3172 3315 51 915 3172 1790 8 66 3315 2059 90 915 3315 3801 47 499 3315 2909 98 704 87 1958 92 505 87 2342 15 288 826 1629 34 505 826 2435 93 127 826 508 22 516 1272 1969 66 505 1272 127 96 585 1272 3733 90 796 1629 4035 58 505 1629 827 6 311 1629 2318 79 500 1958 4668 44 505 1958 1272 91 505 1958 4991 24 322 1969 2916 59 505 1969 992 56 723 1969 2053 72 260 2546 4815 11 505 2546 962 34 28 2916 826 37 505 2916 3974 97 202 4035 2546 6 505 4035 4988 15 268 88 957 70 193 88 4453 34 366 88 2187 93 135 957 3275 33 193 957 4735 79 193 957 4367 2 158 1474 2586 78 193 1474 1806 56 318 1474 1342 52 728 1747 2529 55 193 1747 948 13 955 1747 4244 43 745 2529 4468 95 193 2529 3203 98 350 2529 4454 45 919 2586 5000 32 193 2586 1293 79 987 3275 1747 74 193 3275 4297 8 884 3574 1474 46 193 3574 339 77 766 3574 997 41 384 4468 3574 7 193 4468 1611 60 173 4468 2428 46 43 89 3013 85 1133 89 3914 36 527 868 2491 88 1133 868 1531 28 467 868 2073 87 769 1102 1358 79 1133 1102 556 20 37 1102 575 3 956 1358 868 71 1133 1358 4483 83 798 1358 3712 11 50 2162 2350 14 1133 2162 690 11 222 2350 4544 40 1133 2350 4967 68 1133 2350 4682 39 920 2491 2162 68 1133 2491 3853 51 995 2491 2110 59 856 3013 1102 38 1133 3013 3523 71 167 3013 4563 3 313 90 1245 75 500 90 1680 96 485 90 4649 37 725 1121 3880 23 500 1121 1891 25 391 1121 948 78 448 1245 3043 40 500 1245 4679 83 89 1522 3570 99 500 1522 4310 5 416 1522 2656 94 363 2819 1522 62 500 2819 364 54 844 2819 76 55 366 3043 2819 10 500 3043 2593 27 516 3043 1101 13 674 3093 4559 39 500 3093 3399 17 746 3093 2913 56 943 3570 1121 82 500 3570 4712 98 500 3570 1172 76 522 3880 3093 84 500 3880 1111 7 690 91 3168 47 742 91 4704 57 882 781 4696 8 742 781 576 37 512 788 2622 17 742 788 3437 63 272 1772 2993 98 742 1772 2661 16 990 1772 2140 9 737 2622 3350 91 742 2622 3593 6 913 2993 4377 77 742 2993 371 47 668 3168 788 62 742 3168 255 71 602 3350 1772 78 742 3350 4117 63 355 3350 3346 66 779 4239 781 12 742 4239 3199 98 142 4377 4239 63 742 4377 4705 63 742 4377 896 46 419 92 3911 81 403 92 4815 47 696 696 2855 33 403 696 4512 92 403 696 3725 12 387 908 696 37 403 908 2771 45 110 2855 3616 33 403 2855 2413 8 439 2855 1667 63 520 2884 3185 81 403 2884 1845 28 715 2884 142 72 774 3185 908 100 403 3185 2943 72 437 3185 676 41 556 3616 4787 8 403 3616 4802 75 969 3911 2884 81 403 3911 2032 26 148 3911 3155 92 273 93 1285 13 442 93 1256 87 384 1085 4094 36 442 1085 3504 39 934 1285 2258 26 442 1285 3527 79 807 1285 2768 34 598 1442 1485 8 442 1442 915 6 951 1485 2654 64 442 1485 3834 80 555 1485 3994 82 761 1524 1085 67 442 1524 2940 59 917 1524 4380 67 454 2258 2506 49 442 2258 888 40 968 2258 980 67 841 2506 4121 61 442 2506 3016 83 650 2506 3243 39 246 2654 1524 38 442 2654 4535 30 722 2654 988 53 548 4094 4685 12 442 4094 4510 64 442 4094 1033 91 642 4094 4770 80 996 4121 1442 10 442 4121 2192 41 977 4121 4085 72 940 94 2229 77 1077 94 864 62 198 94 2522 67 40 880 1030 94 1077 880 1133 98 242 1030 2196 41 1077 1030 2607 30 569 1030 435 7 884 1064 2095 28 1077 1064 3483 14 555 2095 4002 9 1077 2095 1959 43 780 2095 1025 39 552 2196 1064 24 1077 2196 4604 60 1077 2196 4337 15 88 2196 349 100 413 2229 2555 86 1077 2229 3259 20 993 2555 880 4 1077 2555 1875 31 461 2555 1770 13 923 4002 4553 25 1077 4002 4973 4 739 4002 2160 63 399 95 1105 13 552 95 1626 85 155 95 4780 39 558 1105 2469 94 552 1105 4968 42 897 1105 4017 36 39 1499 4104 9 552 1499 4566 47 818 1656 4810 20 552 1656 1681 15 267 1660 1656 44 552 1660 4967 14 552 1660 4458 23 433 1796 3838 1 552 1796 1269 23 47 1796 2440 84 947 2469 4224 56 552 2469 4494 33 344 2469 1318 46 254 3838 1499 38 552 3838 863 68 932 3838 782 32 273 4104 1660 84 552 4104 2815 49 146 4104 384 12 65 4224 1796 64 552 4224 635 59 561 96 2831 40 398 96 360 76 538 547 4551 17 398 547 1488 19 398 547 4603 31 55 1488 3555 81 398 1488 2938 23 23 2831 3052 95 398 2831 899 82 38 2831 4748 86 300 3052 3437 46 398 3052 1237 7 945 3437 547 12 398 3437 4121 8 414 3555 4805 20 398 3555 3697 82 315 3555 1512 94 36 97 1262 55 292 97 4976 40 928 97 893 79 428 1262 4226 15 292 1262 2843 85 105 1430 2530 25 292 1430 764 7 449 1430 184 27 848 1708 4755 43 292 1708 4704 7 292 1708 4758 48 752 1708 3301 98 375 2034 2518 94 292 2034 1290 40 415 2034 4317 58 149 2328 1430 61 292 2328 660 86 174 2518 1708 29 292 2518 1002 64 215 2518 1546 19 458 2530 2034 78 292 2530 248 11 55 3405 2328 16 292 3405 4212 34 459 4226 3405 58 292 4226 2372 48 85 4226 1179 5 406 98 2206 11 1180 98 3981 19 359 1984 3801 60 1180 1984 4359 19 396 1984 3450 12 763 2206 3327 96 1180 2206 3614 67 34 3252 4910 24 1180 3252 1444 42 463 3252 2544 3 384 3327 4406 84 1180 3327 3531 4 797 3327 1981 6 795 3801 3252 2 1180 3801 4954 42 1180 3801 3455 84 818 3801 2733 58 253 4406 1984 50 1180 4406 1363 99 20 4406 4460 43 221 99 1426 5 449 99 3868 45 417 1033 1707 48 449 1033 4540 34 582 1033 4390 90 537 1426 1033 78 449 1426 1973 39 859 1707 3075 4 449 1707 340 77 364 1707 2656 45 407 1932 3458 38 449 1932 3174 52 401 1932 1745 10 567 3075 3507 61 449 3075 3216 81 904 3458 3826 95 449 3458 2361 3 445 3507 1932 53 449 3507 4667 64 449 3507 3187 15 596 3507 3053 56 624 3826 4596 82 449 3826 4735 85 173 100 2933 66 618 100 3283 61 752 2214 3465 33 618 2214 3105 74 368 2214 926 45 504 2232 2964 45 618 2232 2912 36 528 2232 4912 71 46 2330 2214 78 618 2330 2796 55 197 2330 218 27 27 2933 2232 39 618 2933 4575 75 595 2933 1473 100 380 2964 3977 38 618 2964 4738 66 618 2964 1513 88 211 3465 4825 68 618 3465 4019 41 614 3465 591 47 214 3492 3893 28 618 3492 934 35 584 3492 1613 20 543 3893 2330 20 618 3893 3425 71 204 3893 3098 31 885 3977 3492 8 618 3977 3337 12 273 3977 3129 20 758 101 4093 64 623 101 2346 8 300 101 44 7 833 581 4515 1 623 581 4648 40 623 581 3785 70 671 663 2620 53 623 663 4200 45 426 663 65 57 748 854 663 35 623 854 303 73 904 2620 3539 84 623 2620 3922 50 374 2668 4037 51 623 2668 1316 27 241 2668 3846 14 378 3539 3848 10 623 3539 2802 15 714 3848 2668 27 623 3848 2410 35 272 3848 4371 33 940 4037 581 52 623 4037 576 59 823 4037 1292 35 881 4093 854 82 623 4093 1696 56 733 102 3112 28 695 102 3029 38 598 102 2659 38 981 2175 3605 34 695 2175 2253 93 235 2753 4730 80 695 2753 3869 40 866 2798 2753 99 695 2798 3814 70 302 2798 4260 61 4 3112 4378 66 695 3112 2573 13 60 3112 3788 71 86 3605 4170 12 695 3605 2818 7 272 4170 2798 3 695 4170 871 90 79 4170 1376 9 36 4378 2175 26 695 4378 4797 22 695 4378 1485 9 200 4378 4627 45 690 103 3419 15 312 103 2244 64 796 103 2117 79 659 947 2066 83 312 947 3735 96 965 1948 3017 56 312 1948 2771 57 977 2066 1948 64 312 2066 4188 27 372 2066 4544 28 588 2112 3443 48 312 2112 1716 54 109 2112 4894 22 304 3017 4141 34 312 3017 4301 73 957 3419 947 67 312 3419 4750 34 312 3419 3115 100 96 3443 4657 46 312 3443 942 97 720 4141 2112 95 312 4141 1181 53 447 104 2878 76 447 104 4104 20 324 1954 4886 8 447 1954 4766 88 447 1954 2827 74 192 2294 4148 42 447 2294 1573 49 409 2294 4413 80 13 2391 1954 75 447 2391 1108 87 753 2756 4154 15 447 2756 2520 91 33 2756 2135 93 408 2878 3339 85 447 2878 4528 76 683 3339 2294 58 447 3339 4840 79 699 3339 4820 36 967 4148 4298 63 447 4148 791 1 923 4148 2585 20 422 4154 2391 75 447 4154 2537 20 355 4154 277 45 56 4298 2756 73 447 4298 2377 88 435 4298 4252 51 701 105 1001 71 420 105 2579 88 601 833 2678 76 420 833 1794 18 418 833 3106 63 31 994 4763 79 420 994 4061 63 81 1001 4216 92 420 1001 4109 33 335 1083 4536 60 420 1083 2547 16 420 1083 2002 79 132 1083 3648 77 215 2547 833 40 420 2547 4180 84 654 2678 994 62 420 2678 3643 5 149 2678 1533 37 43 3729 1083 24 420 3729 2255 53 328 4216 3729 45 420 4216 4242 39 204 4216 4976 93 602 106 3301 71 758 106 2686 44 985 106 199 88 235 1169 3067 79 758 1169 3709 96 789 1428 4660 62 758 1428 4888 14 636 1428 1697 39 813 1444 4367 62 758 1444 2320 9 838 1444 3097 7 274 3067 3795 71 758 3067 4295 59 590 3067 4706 29 278 3301 1169 90 758 3301 1202 78 441 3795 1444 99 758 3795 4829 100 758 3795 4709 16 476 3795 3983 67 935 4114 1428 21 758 4114 1864 41 593 4367 4114 40 758 4367 805 3 511 107 2540 86 880 107 2668 22 456 895 1987 75 880 895 2896 6 989 983 2551 67 880 983 4718 3 495 1512 895 53 880 1512 181 60 240 1512 2698 69 965 1570 983 22 880 1570 1900 73 724 1667 4916 85 880 1667 3330 59 880 1667 3571 43 110 1667 2116 81 807 1987 2581 93 880 1987 780 39 157 1987 4944 20 768 2540 1512 39 880 2540 2122 92 42 2551 4790 13 880 2551 2309 52 484 2581 1667 33 880 2581 871 83 442 3330 1570 17 880 3330 3209 88 945 108 3607 73 846 108 1800 86 435 1025 1773 28 846 1025 2608 23 157 1025 2268 47 965 1322 4862 35 846 1322 4583 43 846 1322 3588 96 849 1322 4764 23 146 1773 3946 34 846 1773 322 31 415 3607 1025 41 846 3607 4179 67 886 3607 2565 70 93 3946 1322 37 846 3946 756 32 706 109 1749 60 694 109 3051 11 184 109 2236 22 649 568 2613 61 694 568 255 53 590 568 374 53 803 1239 4856 55 694 1239 3194 100 694 1239 1299 92 291 1239 3546 34 740 1251 4172 42 694 1251 475 16 175 1251 4904 48 902 1544 4583 7 694 1544 4730 36 197 1544 1211 89 358 1620 1251 16 694 1620 4713 50 172 1622 1544 38 694 1622 3232 60 996 1749 1620 19 694 1749 618 1 254 1749 1726 16 968 1789 1239 26 694 1789 4819 63 757 1789 3838 47 153 2613 1622 75 694 2613 4476 1 813 2613 2275 6 969 3194 568 30 694 3194 4056 7 257 3194 1569 78 566 4172 1789 77 694 4172 426 45 737 110 1161 35 804 110 117 69 728 110 1036 10 858 703 4759 4 804 703 3335 76 757 703 4688 45 675 1161 3797 82 804 1161 4874 8 804 1161 3205 24 221 2890 703 12 804 2890 4144 76 835 3371 2890 15 804 3371 227 30 310 3513 3371 92 804 3513 1640 37 248 3513 3683 85 358 3797 3513 40 804 3797 4718 94 93 3797 2972 5 234 111 1888 14 411 111 2668 25 341 111 3079 95 760 1640 2502 26 411 1640 4795 10 662 1640 1519 82 70 1888 3608 70 411 1888 4742 50 411 1888 2482 93 513 2502 4534 58 411 2502 630 5 648 3608 4217 41 411 3608 2222 5 320 3608 4762 45 245 4217 1640 94 411 4217 1433 9 561 112 1346 53 299 112 298 83 310 654 2031 96 299 654 2253 15 433 654 1739 64 472 1222 2494 23 299 1222 4628 63 299 1222 4556 13 349 1346 2432 53 299 1346 1128 67 194 1346 543 9 705 2031 1222 57 299 2031 4374 62 700 2031 2103 14 325 2368 4477 56 299 2368 666 5 721 2432 3220 1 299 2432 2012 6 975 2432 4552 52 555 2494 4945 65 299 2494 2905 57 47 2494 4580 98 129 3220 4038 69 299 3220 4983 2 445 4038 2368 2 299 4038 3190 30 593 4477 654 45 299 4477 2949 61 947 113 754 93 395 113 1813 53 198 113 3854 25 26 515 3335 20 395 515 2833 21 615 515 1637 100 326 754 515 65 395 754 3831 24 626 754 1669 69 783 1057 3491 20 395 1057 897 51 407 1057 2162 96 537 3165 4968 37 395 3165 4577 18 395 3165 1797 99 665 3165 1336 26 534 3335 4059 46 395 3335 3208 40 330 3491 3165 82 395 3491 1163 29 187 3491 1744 94 974 4059 1057 2 395 4059 568 41 729 4059 2388 4 479 114 2310 33 120 114 3611 70 478 114 918 81 456 1223 4788 2 120 1223 1286 98 875 1223 1580 57 657 1899 3692 57 120 1899 2726 72 224 2310 4336 56 120 2310 1041 12 89 2310 2204 29 864 3044 1223 68 120 3044 2074 40 767 3692 4530 40 120 3692 3044 34 120 3692 2483 42 171 4336 1899 41 120 4336 643 98 207 4336 305 2 253 115 1859 32 702 115 3428 21 22 115 2699 93 499 704 2349 72 702 704 2259 49 540 704 3383 66 245 1219 704 57 702 1219 3454 5 850 1373 3500 61 702 1373 342 23 149 1859 1373 11 702 1859 1685 90 424 2349 4525 10 702 2349 4947 19 702 2349 3722 98 304 2349 4928 12 629 2402 1219 80 702 2402 669 69 560 2402 1028 21 286 3500 4347 17 702 3500 1162 92 7 4347 2402 32 702 4347 2493 68 41 4347 3658 77 500 116 3472 94 269 116 3011 21 963 956 4498 9 269 956 4617 74 147 2026 3303 4 269 2026 2098 15 78 3148 956 66 269 3148 552 91 938 3148 3512 35 688 3303 4301 38 269 3303 89 74 854 3303 1872 73 21 3472 2026 47 269 3472 672 87 889 3472 1741 57 527 4138 4649 37 269 4138 4543 7 269 4138 3018 44 628 4301 3148 36 269 4301 2178 25 181 4498 4138 72 269 4498 1577 72 975 4498 4183 5 827 117 4128 78 703 117 264 69 513 1699 4150 42 703 1699 2277 79 706 1794 4883 24 703 1794 1832 64 882 2498 1794 83 703 2498 1294 35 266 2498 2121 2 18 2512 4928 1 703 2512 3284 16 703 2512 1223 69 416 3277 2498 69 703 3277 4795 31 48 3277 1040 27 137 3284 3277 51 703 3284 3449 30 413 4128 1699 23 703 4128 2104 54 85 4150 2512 40 703 4150 1941 18 464 118 1609 88 619 118 4697 41 760 118 826 4 502 535 675 96 619 535 1075 79 479 675 1038 72 619 675 487 18 743 675 4320 33 362 1038 3824 6 619 1038 4386 71 518 1609 1647 89 619 1609 2067 34 627 1647 3466 92 619 1647 4522 57 619 1647 343 9 366 2367 3885 56 619 2367 3625 15 305 3466 2367 79 619 3466 1300 79 325 3466 2507 83 743 3824 4726 97 619 3824 2840 81 405 3824 4816 83 130 3885 535 86 619 3885 201 66 832 3885 2978 18 655 119 4219 12 172 119 1544 35 516 119 3889 43 710 512 1168 68 172 512 298 96 29 946 512 2 172 946 2531 64 33 1168 3651 15 172 1168 4770 28 172 1168 1233 54 295 1168 3464 75 267 1425 1679 88 172 1425 1241 97 379 1425 3227 73 1 1679 4496 92 172 1679 2097 51 872 1679 3031 37 688 1988 4042 55 172 1988 2769 82 381 1988 2698 17 471 2225 946 34 172 2225 2395 76 464 3398 2225 13 172 3398 4601 5 172 3398 4878 46 79 3651 1988 32 172 3651 1517 64 128 3651 4114 16 105 4042 1425 12 172 4042 4466 41 713 4219 3398 35 172 4219 441 13 574 4219 1796 45 690 4496 4810 19 172 4496 3296 39 98 120 4365 19 689 120 1075 25 988 120 2207 27 184 820 2807 35 689 820 2419 39 338 820 4397 96 963 1372 1975 15 689 1372 3149 90 680 1372 3700 73 292 1975 4043 41 689 1975 388 63 788 1975 2044 35 563 2188 2731 16 689 2188 4506 13 885 2188 3230 79 908 2731 4631 68 689 2731 207 2 314 2731 783 58 661 2807 2188 89 689 2807 606 90 393 4043 820 28 689 4043 4608 91 689 4043 1801 66 76 4043 4369 56 871 4365 1372 62 689 4365 1360 20 639 121 2262 5 341 121 3747 54 648 121 18 31 874 558 4135 59 341 558 795 65 37 558 3855 84 43 2094 3281 49 341 2094 559 72 785 2262 3360 16 341 2262 2799 10 419 2262 865 84 478 3281 4706 33 341 3281 3742 35 885 3360 3722 85 341 3360 3222 62 226 3722 4270 33 341 3722 4870 8 965 3722 1500 1 519 4135 2094 52 341 4135 3919 17 875 4270 558 26 341 4270 4602 67 341 4270 2459 98 811 4270 3188 58 73 122 3280 22 699 122 2561 51 773 122 2655 53 102 1351 1687 27 699 1351 1176 37 228 1687 3313 97 699 1687 3242 71 883 1687 2122 64 887 2216 4211 52 699 2216 3888 43 420 2216 644 54 304 3280 1351 43 699 3280 1340 56 864 3313 2216 69 699 3313 4701 100 699 3313 2388 50 175 3313 3213 33 388 4211 4924 19 699 4211 22 24 331 123 2475 78 735 123 2266 9 704 123 1573 74 424 1188 3606 80 735 1188 3915 8 68 1188 4877 69 945 1472 4876 57 735 1472 1916 12 964 1472 2662 37 68 2475 1188 19 735 2475 4078 11 427 2475 3127 20 517 2607 4844 79 735 2607 3433 61 735 2607 199 60 411 3433 1472 27 735 3433 4405 93 585 3606 4255 63 735 3606 4748 78 304 4255 2607 50 735 4255 325 77 991 4255 892 97 292 124 3596 64 4 124 4368 60 49 124 3217 77 289 847 3066 78 4 847 4912 36 430 1298 4667 36 4 1298 3310 99 4 1298 893 31 975 1744 3076 75 4 1744 1192 85 648 1818 1298 14 4 1818 3783 53 137 1818 1529 18 872 2284 3659 68 4 2284 1297 74 108 2783 1818 93 4 2783 4998 94 4 2783 1969 21 18 2783 4629 28 689 3066 1744 77 4 3066 2926 37 772 3066 332 97 136 3076 3223 7 4 3076 4141 97 22 3223 2783 30 4 3223 891 98 884 3223 3195 37 514 3310 4926 61 4 3310 4954 61 422 3596 2284 23 4 3596 1874 63 206 3659 847 76 4 3659 3640 22 32 125 1993 54 764 125 4987 76 870 125 3091 95 293 664 2548 41 764 664 637 13 835 1112 2531 72 764 1112 3485 25 449 1181 4049 65 764 1181 478 37 631 1181 2186 2 806 1993 1181 45 764 1993 2201 77 504 1993 1525 41 197 2531 4271 22 764 2531 1503 76 945 2531 4226 96 172 2548 3751 64 764 2548 489 35 981 3523 4409 55 764 3523 3440 95 732 3523 4523 40 738 3751 4879 11 764 3751 359 57 565 4049 3523 1 764 4049 4660 26 764 4049 4212 67 644 4271 664 53 764 4271 4598 79 155 4271 1712 20 722 4409 1112 24 764 4409 4155 80 476 126 4165 53 735 126 584 21 507 1438 4500 61 735 1438 4798 13 967 3139 1438 3 735 3139 4992 68 735 3139 1051 24 573 3648 4994 40 735 3648 2837 22 721 3648 1622 71 835 4165 4248 54 735 4165 147 71 593 4248 3139 88 735 4248 500 79 485 4248 4940 29 680 4500 3648 90 735 4500 4866 2 159 127 2147 34 271 127 4410 84 207 127 3844 82 943 1675 4806 38 271 1675 3433 52 132 2147 2952 17 271 2147 39 85 421 2147 4785 98 371 2952 4306 4 271 2952 2164 80 69 2952 986 95 186 3476 1675 75 271 3476 2737 16 898 3619 3476 35 271 3619 2258 80 9 4306 3619 47 271 4306 4771 18 271 4306 3907 56 556 128 2837 21 564 128 1928 27 887 598 3924 20 564 598 4518 82 915 2061 3167 61 564 2061 2424 26 941 2061 325 38 880 2651 598 45 564 2651 1699 88 20 2651 389 30 734 2837 2061 47 564 2837 4020 89 956 3113 2651 59 564 3113 2404 47 12 3113 2178 70 722 3167 3113 76 564 3167 4789 33 564 3167 3946 93 328 3167 994 21 841 3924 4853 77 564 3924 4269 86 725 3924 4869 97 877 129 3812 7 28 129 1562 38 294 903 2198 15 28 903 2683 28 412 1149 4897 90 28 1149 4884 48 28 1149 912 80 34 1149 1450 74 565 1582 903 12 28 1582 3299 27 628 1582 2590 36 999 2198 1149 43 28 2198 1144 20 556 2198 4263 96 112 3631 3992 20 28 3631 4895 85 483 3631 3912 37 279 3812 4222 61 28 3812 2515 28 262 3846 1582 51 28 3846 4482 41 499 3846 4056 67 564 3992 3846 31 28 3992 2691 83 408 3992 856 31 57 4222 3631 89 28 4222 2351 8 138 130 1565 64 32 130 3887 50 636 1091 2754 63 32 1091 57 15 30 1091 1758 1 487 1565 2201 89 32 1565 4254 99 150 1565 2314 13 227 2201 4595 37 32 2201 4112 85 32 2201 4874 30 499 2754 3965 55 32 2754 2253 45 309 2754 1120 63 529 2892 3387 37 32 2892 217 44 605 3387 1091 89 32 3387 4465 53 173 3387 1803 81 714 3445 2892 78 32 3445 4357 34 283 3445 169 77 960 3965 4767 84 32 3965 4426 34 600 4112 3445 19 32 4112 4597 3 79 4112 1924 94 58 131 1799 2 822 131 4556 21 673 131 4570 63 595 678 1021 64 822 678 4990 75 194 1021 3945 76 822 1021 4277 96 422 1040 3726 37 822 1040 3321 40 266 1040 4071 2 790 1799 4446 4 822 1799 4923 42 822 1799 2206 8 973 3726 4892 8 822 3726 2050 49 383 3945 4269 89 822 3945 228 85 205 3945 4522 19 388 4269 1040 29 822 4269 144 35 525 4446 678 64 822 4446 2143 53 862 4446 817 34 367 132 2525 51 654 132 1895 70 719 132 1168 18 831 629 4361 35 654 629 2976 76 284 629 359 57 794 1408 1648 10 654 1408 4244 23 285 1408 1535 92 408 1439 1701 67 654 1439 1550 50 471 1648 4556 94 654 1648 3997 100 654 1648 2672 48 568 1701 2868 34 654 1701 3380 20 511 2199 629 45 654 2199 339 19 189 2199 1600 76 691 2525 1408 65 654 2525 2053 2 219 2857 2199 75 654 2857 4895 49 654 2857 4005 72 960 2857 2821 39 448 2868 2908 21 654 2868 2080 18 558 2868 290 7 821 2908 4802 59 654 2908 3721 85 178 3997 2857 34 654 3997 2669 47 849 3997 580 35 590 4361 1439 75 654 4361 1403 86 684 4361 756 95 458 133 2497 100 561 133 1777 51 131 1139 4617 9 561 1139 211 56 613 2497 2956 93 561 2497 2803 17 814 2780 1139 27 561 2780 3344 1 445 2780 2169 83 175 2956 3019 46 561 2956 4965 72 413 3019 4060 37 561 3019 1628 18 115 3019 2506 32 15 3776 4117 45 561 3776 2299 45 517 3776 4820 70 606 4060 3776 11 561 4060 4715 82 561 4060 492 61 872 4060 4546 83 438 4075 2780 38 561 4075 831 33 946 4075 2563 94 837 4117 4075 10 561 4117 135 77 863 4117 63 79 713 134 660 6 644 134 1816 4 489 660 2303 41 644 660 2500 35 92 1459 1953 13 644 1459 1188 39 46 1459 2692 64 582 1834 2436 66 644 1834 1833 7 796 1953 1834 86 644 1953 3624 64 265 1953 251 82 647 1968 2007 26 644 1968 2195 58 730 2007 1459 11 644 2007 1715 32 750 2303 1968 20 644 2303 2988 24 205 2303 4063 39 107 2436 4895 95 644 2436 4746 61 644 2436 4240 18 67 2436 4684 95 715 135 3666 1 621 135 2190 15 452 135 4593 48 459 747 1463 70 621 747 2066 47 365 1463 3377 23 621 1463 1927 76 623 1463 431 51 453 2063 4767 32 621 2063 227 14 166 2411 2755 89 621 2411 4075 45 652 2411 2417 85 132 2755 3627 15 621 2755 4905 53 621 2755 3395 27 291 3377 2411 74 621 3377 1376 29 315 3627 2063 48 621 3627 4233 99 647 3666 747 16 621 3666 436 18 794 136 2134 65 392 136 3839 32 727 136 2365 89 308 783 4022 2 392 783 4956 62 167 783 2609 35 390 866 783 99 392 866 3016 42 306 938 2785 63 392 938 31 95 769 1352 1797 85 392 1352 2098 46 692 1797 866 78 392 1797 303 7 64 1797 1049 70 940 2134 938 37 392 2134 1379 17 3 2785 1352 21 392 2785 2756 24 440 2785 2882 67 86 2796 4893 56 392 2796 1810 10 388 4022 4252 25 392 4022 4600 4 392 4022 4796 86 128 4022 4685 37 214 4252 2796 42 392 4252 291 73 616 137 900 47 964 137 4185 47 824 137 2051 99 811 900 2204 20 964 900 1697 28 221 900 2493 49 451 1405 4069 19 964 1405 4465 89 773 1805 1405 35 964 1805 1453 52 900 1805 2929 3 90 1944 4996 74 964 1944 3144 7 937 2204 1805 77 964 2204 4904 22 964 2204 1203 60 280 2535 1944 78 964 2535 4303 88 810 2535 3415 7 211 4069 2535 83 964 4069 3519 3 206 4069 1305 1 96 138 4081 79 108 138 1075 15 988 138 4232 57 654 1114 2078 67 108 1114 2360 9 357 2078 4399 47 108 2078 4613 61 763 2078 1780 74 484 2527 1114 15 108 2527 1486 70 772 2527 693 83 281 2930 2527 83 108 2930 218 80 134 2930 931 55 838 3018 2930 16 108 3018 446 17 363 3018 2856 20 847 3974 3018 27 108 3974 4316 3 697 4081 3974 97 108 4081 1614 13 874 4399 4821 55 108 4399 4573 54 108 4399 2033 93 197 4399 3687 83 37 139 4335 46 394 139 792 20 410 139 4082 4 965 659 4860 61 394 659 2461 60 72 1525 1743 75 394 1525 138 27 864 1525 2743 4 163 1743 4158 77 394 1743 4046 35 812 1743 4592 97 977 1746 1525 71 394 1746 3023 28 569 2459 3092 2 394 2459 3152 89 788 2459 3837 24 167 3092 659 51 394 3092 1493 35 546 3238 4280 97 394 3238 3582 37 244 4158 2459 38 394 4158 4702 59 394 4158 1764 43 48 4280 1746 7 394 4280 3187 55 503 4280 544 14 130 4335 3238 51 394 4335 3847 2 516 4335 2380 67 335 140 2591 16 1149 140 4714 44 325 140 3703 74 9 982 1996 85 1149 982 3684 73 558 982 4080 20 64 1996 3034 29 1149 1996 4613 86 1149 1996 906 60 247 1996 4963 49 76 2591 4484 32 1149 2591 3792 93 524 3034 4976 98 1149 3034 3777 45 910 4341 982 91 1149 4341 1294 11 543 4484 4341 75 1149 4484 1347 7 996 4484 1123 55 290 141 3033 89 284 141 1191 92 26 552 3545 95 284 552 437 10 936 552 2653 60 705 1412 1824 2 284 1412 3981 9 278 1412 924 71 109 1824 4629 79 284 1824 4811 63 284 1824 4684 36 209 1824 4078 90 946 2467 552 67 284 2467 128 96 789 2467 673 89 398 2834 2467 85 284 2834 375 21 955 3033 2834 93 284 3033 4597 82 408 3033 4499 26 628 3545 4214 52 284 3545 3725 87 900 4214 1412 92 284 4214 2377 25 57 4214 1319 30 573 142 2604 62 433 142 4060 64 690 142 2123 90 783 566 4791 17 433 566 4567 34 737 566 4291 76 481 789 566 65 433 789 2826 61 487 789 6 47 257 1166 3096 43 433 1166 2782 96 645 1166 2808 62 680 2003 4841 7 433 2003 3914 33 433 2003 3193 33 376 2374 1166 42 433 2374 976 36 483 2374 571 9 338 2604 2003 14 433 2604 2912 39 98 3096 789 24 433 3096 682 8 402 3402 4240 20 433 3402 2935 26 43 3554 2374 21 433 3554 1113 97 364 3914 3402 71 433 3914 669 65 731 4240 3554 96 433 4240 1376 6 94 4240 900 66 397 143 844 34 346 143 91 45 771 143 2657 33 456 502 3245 92 346 502 2215 62 138 844 1889 19 346 844 2679 84 535 884 502 11 346 884 1377 23 30 884 4443 14 37 1889 3057 11 346 1889 1097 53 874 2645 4762 69 346 2645 1973 50 840 2645 2630 55 445 3057 4296 52 346 3057 4692 97 128 3245 4764 89 346 3245 4435 3 346 3245 510 99 5 3245 1963 55 928 4296 884 17 346 4296 896 53 294 4435 2645 1 346 4435 4081 62 73 144 2105 2 168 144 525 100 589 144 605 47 287 522 4872 12 168 522 1453 20 233 784 1915 23 168 784 4759 41 136 784 2463 92 518 1915 2423 5 168 1915 464 44 425 1915 2404 17 455 2105 4374 62 168 2105 3321 7 391 2105 1546 49 777 2217 3794 57 168 2217 966 3 621 2217 3056 60 880 2423 522 8 168 2423 4677 87 168 2423 951 24 636 2423 2368 69 610 2972 2217 51 168 2972 3811 50 855 3794 784 70 168 3794 1949 3 704 4374 2972 89 168 4374 2433 18 805 145 4444 66 982 145 3341 69 554 145 897 80 164 583 1174 81 982 583 1128 57 810 770 583 46 982 770 850 83 278 1174 4715 68 982 1174 3271 73 66 1174 2077 44 861 3062 4311 57 982 3062 4993 79 982 3062 4247 88 111 4311 770 82 982 4311 325 76 618 4444 3062 42 982 4444 4434 1 11 146 3260 67 790 146 1511 58 874 1587 3753 25 790 1587 2548 47 317 2074 4903 41 790 2074 4053 70 887 2074 719 100 432 3260 1587 38 790 3260 588 85 928 3260 4761 4 209 3753 4072 62 790 3753 369 50 245 3981 2074 25 790 3981 1852 73 578 3981 1754 28 257 4072 4179 83 790 4072 4601 64 790 4072 1505 2 676 4072 1326 71 403 4179 3981 81 790 4179 4802 5 309 4179 1935 32 694 147 3071 36 469 147 3942 11 241 147 2741 21 509 526 3369 7 469 526 3362 63 64 1260 3942 63 469 1260 4089 2 725 2914 4197 38 469 2914 1871 34 876 3071 2914 61 469 3071 1008 48 767 3258 3968 14 469 3258 4860 27 469 3258 355 98 132 3258 425 73 390 3369 4396 89 469 3369 2158 21 860 3942 526 94 469 3942 2620 51 865 3968 4576 42 469 3968 3473 84 917 4197 1260 54 469 4197 3690 95 623 4396 3258 91 469 4396 4110 50 387 148 865 36 287 148 3154 45 303 865 2948 96 287 865 4598 28 287 865 4387 3 739 865 4447 72 810 1670 2445 91 287 1670 1654 91 1000 1670 3422 16 340 2176 1670 44 287 2176 4864 83 580 2445 2509 10 287 2445 2282 72 329 2509 4931 13 287 2509 243 15 855 2509 3203 97 786 2948 2176 36 287 2948 3331 60 459 149 4364 83 427 149 2765 49 322 762 1727 73 427 762 4078 69 255 888 2111 64 427 888 311 57 42 1421 4118 50 427 1421 4582 14 761 1421 3259 54 416 1727 4101 44 427 1727 4283 9 601 1727 3345 19 193 2111 1421 77 427 2111 1061 64 339 2111 4690 28 27 2471 762 51 427 2471 4605 16 427 2471 1117 95 467 4101 4760 43 427 4101 3619 58 243 4118 2471 78 427 4118 4842 45 31 4364 888 57 427 4364 4082 45 883 150 3184 41 763 150 2928 66 501 589 777 67 763 589 3922 43 445 589 1237 31 632 777 1416 81 763 777 932 41 145 777 1917 53 950 1416 3430 95 763 1416 4977 28 763 1416 4483 28 23 3184 4202 31 763 3184 4900 19 902 3184 2263 19 95 3430 4647 55 763 3430 2094 99 224 3430 2603 31 332 4202 589 87 763 4202 3459 23 459 4202 1031 4 278 151 3389 79 407 151 3457 12 340 612 2040 64 407 612 3191 65 2 612 485 61 73 804 3662 43 407 804 4291 43 23 804 4394 62 35 1227 3497 75 407 1227 4827 76 816 2040 804 26 407 2040 1184 81 140 2805 1227 59 407 2805 2649 69 303 2805 756 44 685 3389 612 97 407 3389 3208 49 672 3497 4692 58 407 3497 4359 85 551 3662 3890 82 407 3662 4883 79 407 3662 2077 24 86 3662 4330 5 881 3890 2805 5 407 3890 3265 15 280 3890 3305 52 1 152 3586 62 323 152 3457 90 763 1552 2896 23 323 1552 3728 91 890 2029 3701 44 323 2029 3505 10 416 2873 2029 42 323 2873 3334 68 254 2896 3283 89 323 2896 1497 8 225 2896 76 87 68 3283 4359 94 323 3283 4637 11 323 3283 2985 98 761 3586 2873 34 323 3586 4702 74 413 3701 3825 27 323 3701 4964 82 295 3825 1552 96 323 3825 3781 23 724 3825 1772 61 276 4359 4829 64 323 4359 4296 58 681 153 4184 51 776 153 529 42 847 1076 4537 96 776 1076 3570 12 82 1076 4410 55 768 1931 1076 20 776 1931 1393 85 784 3796 4676 43 776 3796 1931 50 776 3796 448 52 367 3796 3715 62 314 4184 4393 33 776 4184 513 95 767 4393 3796 87 776 4393 1252 26 977 154 3599 19 1109 154 564 16 6 154 1947 60 285 810 1244 33 1109 810 4957 42 61 810 4467 52 730 1177 3232 78 1109 1177 671 43 469 1177 554 39 921 1244 4893 68 1109 1244 1856 40 362 1244 2133 83 922 2259 810 25 1109 2259 3132 2 40 2259 4765 8 586 3232 2259 97 1109 3232 4640 1 1109 3232 4985 95 927 3232 2464 26 81 3599 1177 63 1109 3599 2220 6 58 3599 2092 81 300 155 501 49 896 155 1905 92 377 501 1841 6 896 501 4621 67 896 501 1402 100 148 501 1863 64 988 827 2687 41 896 827 213 72 810 827 4248 67 647 1841 827 96 896 1841 1484 56 166 2687 3399 66 896 2687 898 28 566 3399 4726 78 896 3399 3934 70 786 3399 4651 3 600 156 1455 2 288 156 428 42 902 525 4583 53 288 525 2203 95 57 525 197 87 456 975 3844 62 288 975 1842 44 554 1118 525 40 288 1118 592 1 672 1118 1612 56 493 1345 3892 11 288 1345 2758 61 984 1345 1963 63 332 1455 4953 45 288 1455 4033 23 288 1455 3167 22 555 1455 3639 10 512 3844 1345 71 288 3844 4147 37 53 3892 1118 47 288 3892 680 56 539 3892 4073 4 591 4033 4354 3 288 4033 663 31 189 4033 201 72 973 4354 975 85 288 4354 2219 39 271 4354 1730 18 182 157 4237 35 680 157 2116 99 342 157 2488 78 412 1760 3744 85 680 1760 2328 64 291 1760 4646 100 50 2128 4417 35 680 2128 379 67 576 2312 4879 50 680 2312 2394 98 69 2728 3063 18 680 2728 708 83 589 2817 2728 23 680 2817 3789 23 145 2817 2960 65 649 3063 1760 1 680 3063 3149 73 591 3063 162 71 714 3744 2128 11 680 3744 3051 73 409 3947 4638 36 680 3947 2312 6 680 3947 2854 97 411 3947 4619 87 582 4237 2817 40 680 4237 2534 9 473 4417 3947 67 680 4417 3364 11 605 158 2428 84 1632 158 4403 51 450 910 3921 11 1632 910 4614 99 524 910 3175 32 220 939 2655 28 1632 939 4145 69 958 939 1357 82 594 1940 2670 99 1632 1940 4710 41 1632 1940 1307 69 260 2065 4660 37 1632 2065 4448 60 150 2428 1940 49 1632 2428 2600 90 127 2655 910 25 1632 2655 2257 84 622 2655 1462 37 407 2670 939 74 1632 2670 1810 65 333 3921 2065 73 1632 3921 1173 28 704 159 3672 75 385 159 3077 72 203 159 1473 26 511 579 3293 11 385 579 1752 78 135 579 4647 39 952 790 4750 13 385 790 681 90 967 1071 1160 41 385 1071 3135 37 535 1160 3366 67 385 1160 3628 34 957 1385 2751 21 385 1385 624 35 485 2751 3677 61 385 2751 4012 24 626 3293 1385 51 385 3293 2496 41 24 3293 467 84 484 3366 579 100 385 3366 2747 92 148 3672 1071 71 385 3672 4976 30 385 3672 3284 50 123 3672 2428 20 208 3677 790 35 385 3677 1577 26 867 160 3589 62 364 160 619 83 667 160 1778 89 801 881 1125 99 364 881 3647 89 342 1039 1856 29 364 1039 708 53 434 1039 3704 83 974 1125 2574 51 364 1125 4960 96 364 1125 4614 22 597 1125 910 1 90 1856 2982 95 364 1856 1195 85 106 1856 2441 40 135 1862 1039 29 364 1862 3931 32 549 2574 1862 86 364 2574 4154 32 936 2574 2115 6 169 2898 881 67 364 2898 815 39 336 2898 2146 87 414 2982 4581 15 364 2982 2350 22 211 2982 788 96 283 3589 2898 73 364 3589 3483 97 178 161 3887 58 1053 161 4993 55 503 673 1527 88 1053 673 837 25 554 822 4143 5 1053 822 4982 20 43 1527 2777 81 1053 1527 501 42 388 2366 4920 51 1053 2366 4828 27 1053 2366 1295 90 617 2777 4020 4 1053 2777 3193 45 97 2777 3024 6 508 2994 673 90 1053 2994 607 73 116 3887 2994 13 1053 3887 4893 19 281 3887 1589 97 244 4020 822 96 1053 4020 4904 91 360 4020 3773 61 861 4143 2366 94 1053 4143 469 86 879 162 2564 15 382 162 2026 70 338 1024 2750 38 382 1024 4735 14 382 1024 3907 84 7 1024 4638 13 426 1451 1024 58 382 1451 3725 99 754 2564 2918 11 382 2564 4072 81 293 2750 4649 99 382 2750 1607 46 645 2750 1888 9 686 2918 1451 34 382 2918 1403 93 762 163 2127 94 582 163 3987 45 308 163 391 57 704 1312 4005 63 582 1312 2082 39 41 1762 3417 1 582 1762 4672 81 582 1762 560 40 224 2127 3919 71 582 2127 4131 100 369 3417 1312 69 582 3417 3561 91 626 3919 1762 13 582 3919 1079 79 543 3919 2970 97 574 4005 4697 75 582 4005 1670 79 582 4005 3172 19 731 164 702 70 378 164 1795 70 625 692 4797 11 378 692 4695 16 378 692 2750 68 879 702 3553 71 378 702 3853 98 104 702 4604 74 207 3098 3257 55 378 3098 2757 17 127 3098 1537 72 828 3257 3682 9 378 3257 3627 56 603 3257 1553 62 450 3304 3098 92 378 3304 4956 48 117 3304 4657 26 198 3553 3304 83 378 3553 4400 2 401 3553 3770 26 400 3682 692 29 378 3682 784 12 192 165 961 49 217 165 1380 48 692 961 2784 74 217 961 2345 2 867 961 1756 55 253 1320 2420 51 217 1320 2368 12 648 1320 1715 55 632 1381 2306 90 217 1381 1271 2 747 1717 4922 25 217 1717 4773 60 973 1717 3259 86 878 2306 4264 85 217 2306 4614 52 294 2420 4667 3 217 2420 2771 20 217 2420 4577 75 330 2420 4412 35 896 2771 4208 46 217 2771 2495 82 293 2784 2882 6 217 2784 4701 52 235 2882 1320 73 217 2882 2780 6 457 4208 1381 14 217 4208 1141 15 811 4264 1717 9 217 4264 1573 100 459 166 3886 28 412 166 3909 77 439 1253 1997 25 412 1253 362 97 14 1997 4797 83 412 1997 1817 44 780 2009 1253 59 412 2009 3142 30 256 2309 2009 18 412 2309 815 82 985 2309 2355 62 464 3475 2309 55 412 3475 4606 26 412 3475 3507 92 66 3475 4006 10 312 3886 3475 43 412 3886 1791 89 136 3886 1869 78 179 167 4260 31 378 167 1040 11 157 167 2308 68 828 607 932 81 378 607 2639 83 513 932 3895 67 378 932 591 33 305 932 3264 33 537 2550 3198 7 378 2550 3578 54 538 2550 1683 72 993 2663 4748 25 378 2663 4895 47 378 2663 478 78 838 3198 2663 91 378 3198 89 48 122 3198 3062 27 370 3823 2550 42 378 3823 3836 83 347 3895 3823 20 378 3895 893 25 549 4260 607 22 378 4260 1714 70 39 4260 1038 19 777 168 2513 56 371 168 1425 90 794 168 253 18 388 562 3562 51 371 562 2570 75 189 562 376 52 318 616 4934 77 371 616 3055 46 371 616 294 41 299 616 1626 41 692 2513 3668 6 371 2513 423 2 621 2513 4207 23 345 2848 3580 54 371 2848 2368 47 885 2848 3362 64 921 3055 3099 76 371 3055 990 36 554 3055 4638 4 339 3099 562 27 371 3099 1711 69 233 3099 387 10 279 3562 3814 9 371 3562 2971 93 527 3562 2047 29 976 3580 3703 46 371 3580 413 74 246 3580 3272 75 443 3668 2848 77 371 3668 2764 67 886 3703 616 53 371 3703 2004 12 665 3814 4585 27 371 3814 1013 51 42 3814 4249 77 224 169 2409 28 420 169 4148 6 931 169 2556 93 512 1100 2069 99 420 1100 4926 71 423 1698 4633 16 420 1698 4590 48 769 1811 2584 75 420 1811 4612 62 356 1811 4810 92 113 2069 4757 83 420 2069 1811 8 420 2069 3603 72 504 2069 4393 69 267 2324 3436 38 420 2324 2885 81 937 2409 2324 45 420 2409 4553 92 513 2409 1120 5 497 2584 1698 49 420 2584 1322 24 785 2584 4061 86 532 3436 1100 36 420 3436 4956 76 114 170 1801 13 1017 170 3196 73 82 170 1505 86 258 665 779 76 1017 665 4306 53 648 779 4405 85 1017 779 4265 4 90 779 2909 89 796 992 665 22 1017 992 1103 16 27 992 1382 55 79 1361 2741 67 1017 1361 4816 74 639 1361 895 67 909 1801 4633 63 1017 1801 3782 47 1017 1801 3096 59 13 1801 2934 27 518 2741 4091 56 1017 2741 3436 3 95 3782 1361 87 1017 3782 4164 67 790 4091 4368 64 1017 4091 1943 59 981 4368 992 3 1017 4368 16 7 708 4368 2046 88 736 4405 4745 62 1017 4405 1958 31 740 4405 3636 2 15 171 2395 72 719 171 4135 8 921 171 4728 41 685 1539 1725 47 719 1539 2128 31 550 1725 2669 33 719 1725 2902 75 316 1725 2209 40 381 2395 2880 85 719 2395 340 80 728 2395 3890 98 842 2669 4856 36 719 2669 3716 99 1000 2880 3079 60 719 2880 1840 91 622 2880 2826 26 440 3079 1539 22 719 3079 4937 3 719 3079 1322 15 801 3079 3186 61 756 172 3420 64 24 172 3232 71 11 734 769 45 24 734 796 50 10 769 4587 57 24 769 4842 25 24 769 1449 39 378 769 2599 42 825 1237 2766 50 24 1237 4270 35 29 1237 2300 81 180 2766 734 77 24 2766 2336 66 702 2992 1237 13 24 2992 1015 80 141 2992 1181 35 165 3420 2992 42 24 3420 4916 53 307 173 3146 3 476 173 1662 76 798 173 1909 66 846 874 2664 39 476 874 310 3 27 1162 874 70 476 1162 3372 78 297 1162 4154 48 309 2576 3135 45 476 2576 1697 49 44 2664 4542 65 476 2664 3597 41 984 3135 4625 37 476 3135 1162 68 476 3135 4061 45 687 3135 448 33 998 3146 4161 44 476 3146 4004 100 869 4161 2576 35 476 4161 3684 68 389 174 3749 37 692 174 648 81 995 1115 4291 58 692 1115 651 93 580 1115 1010 15 590 2362 4390 52 692 2362 4509 24 692 2362 2951 80 384 2362 2630 59 259 3664 4880 68 692 3664 736 32 51 3664 1941 78 792 3749 1115 52 692 3749 3625 28 263 3749 4257 61 52 4291 2362 8 692 4291 4315 98 792 4390 3664 26 692 4390 96 81 366 175 1397 41 334 175 3617 58 252 1397 2585 38 334 1397 3031 92 532 1397 3842 88 45 2281 3473 11 334 2281 1676 8 392 2281 1692 65 60 2585 3986 41 334 2585 4850 68 334 2585 3478 35 115 2744 2281 67 334 2744 1271 47 504 2744 3945 39 205 2937 4604 72 334 2937 3410 77 176 3473 2937 99 334 3473 4767 98 951 3473 2713 37 463 3986 2744 4 334 3986 1060 15 589 176 763 44 426 176 1162 69 174 176 1775 36 536 763 2931 68 426 763 4340 93 254 763 913 66 791 2192 4963 13 426 2192 2310 56 623 2205 2967 4 426 2205 2795 77 389 2775 3542 24 426 2775 1707 98 178 2775 207 58 421 2931 2775 25 426 2931 4955 96 391 2931 658 91 440 2967 2192 97 426 2967 4342 41 273 3542 2205 62 426 3542 4929 61 426 3542 3761 70 771 3542 1640 48 943 177 1645 85 26 177 603 88 814 892 2625 94 26 892 2977 100 844 892 3419 60 435 1645 892 38 26 1645 4589 43 26 1645 3455 97 264 1645 1893 28 360 1956 4360 85 26 1956 1988 64 752 2625 4279 71 26 2625 4149 95 262 2625 470 35 946 2954 4671 13 26 2954 657 45 521 2954 4790 96 560 4279 1956 14 26 4279 4354 37 189 4279 3564 92 148 4360 2954 53 26 4360 2037 22 125 178 3808 67 71 178 1550 50 992 1447 4549 5 71 1447 4703 97 71 1447 4775 44 551 1447 4506 22 303 2472 2851 59 71 2472 232 72 775 2851 4385 14 71 2851 4944 77 94 3808 2472 93 71 3808 4641 79 893 3808 867 2 689 4385 1447 28 71 4385 4824 5 413 4385 1984 72 491 179 3687 6 45 179 3045 60 241 179 1887 87 890 1386 3401 50 45 1386 4981 29 45 1386 4034 98 58 1545 2709 51 45 1545 2715 38 360 1545 3227 7 926 2709 3875 72 45 2709 1212 80 603 2709 1553 97 486 3401 1545 41 45 3401 93 2 494 3401 1233 82 261 3687 1386 78 45 3687 1228 63 777 3875 4976 64 45 3875 4608 52 131 180 4366 16 97 180 778 79 317 978 3213 64 97 978 2071 33 507 978 2680 86 161 1146 4173 12 97 1146 862 40 616 1146 1724 75 36 1750 978 94 97 1750 1427 21 100 1750 3950 65 44 2361 1750 61 97 2361 4611 96 97 2361 3365 71 949 2361 4782 88 499 3201 4916 54 97 3201 4342 15 740 3201 2133 2 318 3213 1146 50 97 3213 1701 13 195 3213 1376 82 531 4173 3201 31 97 4173 4514 60 684 4173 4200 8 225 4366 2361 49 97 4366 416 74 668 4366 4407 50 424 181 1624 100 619 181 4493 3 842 181 3159 43 138 698 1400 49 619 698 37 66 273 698 906 44 583 1400 4791 11 619 1400 1392 29 229 1624 4082 12 619 1624 3987 60 688 2071 4645 83 619 2071 3756 49 619 2071 2811 63 767 2071 3371 58 625 3756 4474 41 619 3756 4684 30 985 3756 3183 14 369 4082 4178 99 619 4082 330 67 349 4178 2071 32 619 4178 4712 98 133 4474 698 39 619 4474 341 66 475 182 1137 74 803 182 1051 33 749 182 4160 10 103 1137 2881 13 803 1137 3651 81 734 1137 4082 58 906 1506 3819 13 803 1506 2014 66 851 1506 2967 18 223 2501 1506 40 803 2501 2538 6 920 2501 4541 82 424 2721 3717 61 803 2721 4305 32 461 2721 402 22 313 2738 4980 95 803 2738 4799 43 396 2738 3115 97 613 2881 2501 87 803 2881 1100 85 702 2973 2721 54 803 2973 4851 58 187 3623 2973 17 803 3623 4549 23 803 3623 3861 95 942 3717 2738 18 803 3717 3553 44 900 3819 3623 90 803 3819 2305 7 798 3819 1700 25 912 183 942 40 236 183 2355 60 227 879 3988 5 236 879 4347 39 953 942 2030 86 236 942 3270 54 729 1204 879 16 236 1204 4906 83 360 1204 2925 4 844 2030 1204 2 236 2030 4694 59 577 2288 2619 61 236 2288 4741 11 236 2288 3085 22 44 2288 1113 82 492 2619 4810 56 236 2619 828 48 925 3988 2288 88 236 3988 778 84 203 3988 633 5 478 184 2639 5 293 184 4235 15 317 184 1643 12 610 1639 4768 22 293 1639 1245 44 635 1639 4439 45 89 1980 3643 88 293 1980 379 88 764 2639 3669 49 293 2639 441 82 528 2639 329 69 484 3643 4386 24 293 3643 1004 96 488 3669 3931 8 293 3669 4260 90 771 3669 4080 30 625 3931 4707 72 293 3931 1980 83 293 3931 1462 40 897 3931 81 58 917 4386 1639 23 293 4386 3052 24 91 185 3085 69 571 185 822 8 423 1540 2320 20 571 1540 3318 64 728 1540 4718 48 284 1636 4608 57 571 1636 4604 13 571 1636 1188 62 169 1742 2804 33 571 1742 925 24 903 1742 1960 63 372 2159 1742 43 571 2159 3213 95 860 2320 1636 15 571 2320 3067 12 549 2390 1540 54 571 2390 3219 86 61 2390 4089 46 602 2804 2390 97 571 2804 1861 64 826 3085 2159 5 571 3085 4476 21 735 186 2448 36 497 186 3572 68 738 1129 1277 28 497 1129 4745 99 118 1277 4880 72 497 1277 2929 95 497 1277 4659 16 253 1633 2184 48 497 1633 4819 10 743 1633 2276 56 763 2184 3649 52 497 2184 823 92 576 2448 1633 65 497 2448 2484 44 522 2448 3462 37 267 2929 3152 63 497 2929 1203 8 387 2929 963 62 984 3152 4578 20 497 3152 888 77 202 3152 2650 11 929 3649 1129 94 497 3649 1169 29 943 3649 3644 97 457 187 2599 68 390 187 446 8 782 187 2558 91 240 935 2346 50 390 935 113 26 881 2285 4328 26 390 2285 2952 74 654 2285 1792 77 301 2346 3758 33 390 2346 4961 95 276 2346 2275 83 478 2599 2285 46 390 2599 160 89 775 3153 4928 3 390 3153 250 93 468 3307 935 61 390 3307 4339 80 931 3307 1942 76 125 3758 3153 30 390 3758 4988 27 390 3758 3486 100 197 3758 4202 83 854 4328 3307 7 390 4328 1555 72 548 4328 44 70 385 188 3559 18 451 188 597 93 255 949 1080 10 451 949 1877 46 211 949 2423 39 250 1080 1739 27 451 1080 49 20 278 1080 780 15 892 1498 3501 100 451 1498 4541 57 451 1498 266 71 16 1498 1136 10 888 1739 1498 91 451 1739 1385 71 747 2017 4798 6 451 2017 3450 53 482 2017 4571 2 920 3490 949 58 451 3490 3951 37 903 3490 3240 88 764 3501 2017 69 451 3501 2400 29 977 3501 3957 52 126 3559 3490 85 451 3559 4500 49 594 189 708 95 545 189 4237 79 784 708 3906 24 545 708 4508 2 545 708 4311 3 854 708 3313 24 733 1974 2123 19 545 1974 3500 21 234 1974 2761 77 854 2123 2446 20 545 2123 4057 13 619 2123 4271 15 199 2426 3966 94 545 2426 3631 25 997 2426 1702 61 890 2446 4822 97 545 2446 3377 1 173 3906 2426 1 545 3906 2461 58 905 3966 1974 15 545 3966 2280 42 282 190 4116 8 524 190 2149 6 569 799 1919 74 524 799 2581 21 131 1591 799 93 524 1591 1192 36 263 1919 3515 76 524 1919 2717 40 511 1919 4008 98 793 2271 4759 88 524 2271 4846 96 524 2271 2784 24 253 2271 3431 80 561 3515 3913 84 524 3515 556 16 860 3913 2271 44 524 3913 4350 100 664 3913 2735 41 586 4116 4404 56 524 4116 205 67 943 4404 1591 70 524 4404 3045 4 607 191 1718 80 27 191 4569 63 388 191 1735 40 299 529 3508 97 27 529 1186 69 4 550 2493 79 27 550 945 35 87 1718 550 52 27 1718 4815 45 116 1740 4949 81 27 1740 203 28 97 1740 3514 74 816 2493 529 1 27 2493 4954 12 27 2493 1971 95 673 3508 1740 6 27 3508 2246 50 977 192 3267 42 402 192 3082 40 585 192 631 37 485 625 4540 94 402 625 4929 49 968 1353 1715 96 402 1353 1289 85 137 1695 4402 22 402 1695 3701 55 769 1715 4892 37 402 1715 2136 5 402 1715 4391 34 497 1715 4013 93 67 2136 1695 52 402 2136 3599 79 278 2136 243 32 885 2907 625 65 402 2907 2107 37 151 2907 3797 60 222 3267 3694 68 402 3267 1568 92 650 3694 1353 54 402 3694 4959 56 311 3694 4443 27 74 4402 2907 55 402 4402 250 50 394 193 730 97 468 193 4684 70 965 599 3532 10 468 599 3962 5 10 730 2570 63 468 730 4633 10 201 730 4033 38 991 1132 1930 58 468 1132 3687 24 525 1209 1132 70 468 1209 3351 57 278 1930 2450 7 468 1930 2914 38 791 1930 3853 41 420 2450 4954 70 468 2450 2052 5 518 2450 3252 92 845 2570 599 28 468 2570 4183 52 25 3532 1209 8 468 3532 4845 37 468 3532 1343 31 636 194 3540 60 721 194 3544 97 123 194 3036 63 566 570 2612 56 721 570 4479 98 16 570 3850 51 843 921 4833 11 721 921 1927 17 721 921 1565 50 441 1246 570 64 721 1246 2014 23 115 1246 1890 19 365 1682 2104 73 721 1682 2920 64 853 1927 4463 63 721 1927 4364 66 578 2104 1246 94 721 2104 4501 95 780 2104 4783 79 849 2612 4745 5 721 2612 167 22 568 2768 921 26 721 2768 450 38 135 2768 4139 40 253 3540 2768 48 721 3540 1320 2 63 3540 3259 5 568 4024 1682 87 721 4024 960 2 541 4463 4024 29 721 4463 1106 23 799 195 2711 36 497 195 3230 87 843 794 2545 25 497 794 295 9 192 1716 3597 84 497 1716 3373 44 812 2218 1716 63 497 2218 4578 8 993 2545 4227 2 497 2545 1233 64 931 2545 959 3 459 2587 2218 77 497 2587 4256 29 335 2711 794 60 497 2711 3525 85 764 3320 4687 33 497 3320 3378 18 497 3320 3381 58 423 3320 1556 10 109 3378 4987 36 497 3378 3623 94 702 3378 4903 2 613 3597 3320 26 497 3597 689 70 946 3597 2743 60 715 4227 2587 47 497 4227 4508 20 429 196 2108 41 584 196 340 61 440 196 179 7 603 1414 2919 93 584 1414 4394 50 863 1477 1414 1 584 1477 1630 32 81 1505 4984 37 584 1505 4694 97 584 1505 1176 37 268 1596 1477 96 584 1596 1394 76 267 1596 1046 55 775 2108 1596 18 584 2108 2935 22 71 2108 1895 40 39 2919 1505 10 584 2919 4841 45 932 2919 1614 55 327 197 3865 30 630 197 2580 77 448 719 4078 2 630 719 4869 43 630 719 3557 77 839 846 3600 45 630 846 4965 47 829 1435 2272 22 630 1435 3803 51 333 1803 1435 38 630 1803 2101 56 632 1803 565 69 632 2272 719 19 630 2272 3553 62 225 3600 4939 80 630 3600 3189 53 642 3865 1803 85 630 3865 2297 5 556 4078 846 11 630 4078 3392 55 136 4078 4389 36 238 198 1775 78 755 198 122 43 937 198 968 64 773 1330 3477 53 755 1330 2669 76 518 1330 4415 93 652 1775 4475 18 755 1775 3869 78 937 2662 3414 14 755 2662 1188 86 17 3414 1330 30 755 3414 2945 21 403 3414 1211 24 259 3477 4309 44 755 3477 4590 19 755 3477 80 25 235 3477 3222 74 669 3609 3630 62 755 3609 523 62 320 3609 2263 58 864 3630 2662 99 755 3630 3389 47 676 4309 4792 93 755 4309 1649 93 583 4309 270 31 386 4475 3609 49 755 4475 47 13 292 199 1295 52 308 199 2003 14 893 199 4091 44 551 1295 3424 9 308 1295 3754 89 668 1722 3357 44 308 1722 1572 3 931 2691 1722 73 308 2691 155 60 613 3357 4535 9 308 3357 3410 29 595 3407 2691 26 308 3407 1558 18 647 3407 463 69 651 3424 3407 92 308 3424 4957 84 308 3424 1850 65 27 3424 3258 43 272 200 4337 27 853 200 3348 82 747 943 4259 58 853 943 1484 98 695 1433 4066 19 853 1433 2212 20 522 2708 3291 3 853 2708 3517 82 868 2708 4620 11 917 3291 4176 45 853 3291 2920 3 486 3300 943 97 853 3300 172 4 899 3300 3999 85 450 3770 1433 57 853 3770 1800 84 918 3770 4044 94 510 4066 4863 96 853 4066 2745 93 593 4176 3770 30 853 4176 2159 38 412 4176 2898 47 669 4259 2708 19 853 4259 4742 16 853 4259 4599 22 676 4337 3300 25 853 4337 2383 51 80 201 3928 96 1693 201 4850 64 110 201 811 33 652 744 2455 38 1693 744 4007 36 753 1006 4516 83 1693 1006 4946 98 1693 1006 716 21 22 1893 4415 21 1693 1893 1070 45 729 2455 1893 15 1693 2455 4568 78 516 2455 4546 53 848 3928 744 47 1693 3928 1142 100 711 3928 944 29 401 4415 1006 88 1693 4415 1909 39 790 202 1955 66 1352 202 3407 45 665 202 2568 31 708 731 3421 26 1352 731 3 66 673 1764 731 97 1352 1764 4988 63 1352 1764 24 97 799 1955 2872 78 1352 1955 2330 50 263 2872 1764 60 1352 2872 4006 81 328 3050 4625 23 1352 3050 3838 73 932 3050 4545 56 794 3421 3951 19 1352 3421 4602 12 84 3951 3050 71 1352 3951 3775 76 125 203 3736 26 224 203 4225 99 405 203 4158 27 165 1806 2963 53 224 1806 1585 31 575 1806 4029 9 571 2800 3845 41 224 2800 854 28 904 2800 1961 2 341 2963 4839 91 224 2963 2800 9 224 2963 4641 81 4 3736 1806 99 224 3736 2942 50 728 3736 3037 50 374 3845 4755 26 224 3845 1338 33 894 3845 4345 46 885 204 2922 36 247 204 170 65 462 856 1992 99 247 856 1724 63 628 856 3776 23 178 871 998 46 247 871 3734 45 442 871 4449 25 557 998 3352 85 247 998 4770 42 148 998 164 19 316 1409 871 84 247 1409 2782 98 993 1547 4938 46 247 1547 4511 44 247 1547 2833 9 149 1986 2384 65 247 1986 3249 53 198 1992 1409 30 247 1992 2270 50 737 2384 1547 44 247 2384 2009 58 799 2922 856 81 247 2922 3810 15 517 2922 4178 86 906 3352 1986 54 247 3352 4995 55 31 3352 1840 31 510 205 1238 2 688 205 3823 58 369 1084 2701 42 688 1084 1645 1 855 1238 1084 70 688 1238 1789 29 371 2236 4659 36 688 2236 3472 95 587 2701 2943 6 688 2701 2551 3 392 2943 3006 49 688 2943 4369 70 996 3006 4445 84 688 3006 4538 55 688 3006 2708 52 192 3006 4497 84 223 4257 2236 20 688 4257 2776 56 248 4445 4257 21 688 4445 2834 90 689 206 3883 22 585 206 2943 10 322 551 2261 61 585 551 1742 34 649 601 2988 71 585 601 4949 66 585 601 1046 71 709 743 4212 62 585 743 934 34 725 2261 2867 7 585 2261 590 87 320 2867 601 42 585 2867 4725 55 997 2867 4892 13 362 2988 4642 73 585 2988 3793 44 80 3883 743 69 585 3883 802 72 370 3883 640 34 337 4212 551 51 585 4212 306 54 262 4212 1788 47 358 207 1327 25 334 207 1665 68 196 207 4224 73 311 1180 4253 32 334 1180 2630 90 327 1180 1749 15 155 1327 3233 33 334 1327 3285 54 811 1807 4531 15 334 1807 4180 38 334 1807 1990 33 347 3233 1180 68 334 3233 1631 26 315 3233 1890 50 861 4180 4672 3 334 4180 4800 6 76 4253 1807 78 334 4253 3433 27 789 4253 227 70 250 208 3041 6 526 208 2741 31 541 948 1399 92 526 948 3297 12 404 1159 3170 80 526 1159 2227 65 562 1159 692 5 340 1399 1159 3 526 1399 645 88 275 1877 4267 58 526 1877 2102 20 65 1877 163 3 274 2224 3907 63 526 2224 4084 2 285 3041 4662 34 526 3041 948 99 526 3041 4624 28 204 3170 1877 25 526 3170 3010 50 638 3170 502 10 271 3907 4914 90 526 3907 671 80 198 4267 2224 38 526 4267 4064 43 399 209 3971 39 399 209 4521 6 462 209 1163 79 548 1196 2812 4 399 1196 1855 2 499 1631 1196 8 399 1631 4274 100 383 1631 147 82 410 2000 4591 6 399 2000 4391 60 528 2812 2000 2 399 2812 4776 36 668 2812 3753 76 204 2833 1631 43 399 2833 4655 28 399 2833 4347 53 594 3971 2833 84 399 3971 1341 88 559 3971 3517 18 264 210 657 62 270 210 4827 16 359 657 3614 57 270 657 3216 95 65 767 4561 33 270 767 526 32 697 767 3044 92 989 1391 2980 11 270 1391 1113 31 62 1391 191 88 921 2980 3031 95 270 2980 4196 77 834 2980 1503 18 969 3031 767 34 270 3031 4934 32 681 3031 2102 71 85 3614 1391 47 270 3614 4734 84 270 3614 1122 18 786 211 3937 30 826 211 1230 12 252 574 2295 60 826 574 2625 84 714 1093 2355 41 826 1093 1048 89 335 1470 3453 46 826 1470 287 99 24 1470 746 83 422 1827 2293 23 826 1827 1541 6 597 2293 574 59 826 2293 1908 53 2 2293 722 9 687 2295 3534 19 826 2295 4355 72 133 2355 1827 34 826 2355 2583 94 775 3453 3622 45 826 3453 4355 58 640 3453 2875 72 205 3534 1470 72 826 3534 655 42 220 3622 3763 98 826 3622 3519 11 886 3763 4858 53 826 3763 4782 12 826 3763 4639 50 826 3763 2261 51 559 3937 1093 41 826 3937 2660 34 399 212 2559 42 150 212 1109 57 697 212 925 25 918 1786 4103 59 150 1786 4648 19 150 1786 3409 86 986 1786 2634 46 809 2157 2301 13 150 2157 4851 54 381 2157 2703 36 606 2301 3510 56 150 2301 3545 39 537 2301 1617 27 597 2559 3836 94 150 2559 2738 21 967 2559 1075 34 313 2776 1786 99 150 2776 3155 67 825 3510 2776 4 150 3510 2494 40 519 3510 4861 74 874 3836 2157 48 150 3836 3720 26 219 3836 1336 21 406 4103 4852 80 150 4103 806 93 360 213 4099 5 472 213 170 28 197 855 2822 45 472 855 1828 52 885 855 3707 5 728 934 3432 55 472 934 1882 20 958 934 1371 57 543 1028 1970 51 472 1028 2403 26 477 1028 143 75 173 1374 1028 13 472 1374 3507 24 711 1374 836 95 291 1970 4629 53 472 1970 2478 43 94 2822 4672 50 472 2822 934 45 472 2822 2410 49 984 2822 4399 37 462 3078 855 96 472 3078 591 97 679 3078 3812 4 702 3432 1374 79 472 3432 4976 10 400 3432 4085 30 973 4027 3078 17 472 4027 3276 39 758 4027 3232 47 341 4099 4027 35 472 4099 719 78 784 214 4034 81 545 214 589 87 380 214 3758 18 932 887 3544 96 545 887 4130 15 773 952 887 29 545 952 303 70 556 952 1367 44 405 1097 1110 35 545 1097 849 1 261 1110 952 58 545 1110 2489 92 389 1110 901 16 298 1829 4807 12 545 1829 3118 81 506 1829 3107 85 98 3544 1829 33 545 3544 4834 61 545 3544 3117 86 942 4034 1097 52 545 4034 1089 23 147 4034 1889 61 347 215 2045 57 275 215 4995 30 86 215 4506 78 342 1487 4896 3 275 1487 4984 3 275 1487 126 64 185 1487 2774 67 918 1578 1487 7 275 1578 1786 5 649 1828 3464 26 275 1828 2898 52 50 1828 898 90 22 2045 1828 99 275 2045 4782 28 170 2045 4018 85 940 3464 4136 92 275 3464 2447 8 322 3464 153 63 518 4136 4459 72 275 4136 829 87 582 4136 1426 44 24 4459 1578 70 275 4459 1762 29 331 4459 4683 57 128 216 2403 42 732 216 3159 72 244 1404 2801 7 732 1404 2272 81 949 1404 4511 64 231 2321 3049 42 732 2321 4547 90 732 2321 825 45 831 2403 2321 77 732 2403 2438 59 506 2561 1404 39 732 2561 1430 48 416 2801 4810 86 732 2801 361 64 481 2801 1073 6 554 3049 3084 48 732 3049 3652 35 509 3084 2561 95 732 3084 2578 40 882 3084 2549 74 152 217 1816 78 675 217 3882 43 533 217 4007 33 252 917 4725 98 675 917 2612 60 906 1500 4433 70 675 1500 2298 16 126 1500 3395 42 166 1689 917 73 675 1689 4090 66 389 1816 3219 41 675 1816 4951 4 618 1816 2436 41 41 3219 1500 45 675 3219 2162 41 66 3329 1689 85 675 3329 2603 47 498 3329 3829 91 424 3635 3329 8 675 3635 4752 88 675 3635 2550 9 917 4433 3635 55 675 4433 1716 24 356 218 1088 25 351 218 3638 76 823 1016 3788 62 351 1016 1467 18 355 1016 972 78 194 1088 3288 71 351 1088 4996 91 351 1088 3287 18 920 2859 2861 91 351 2859 2429 57 418 2861 1016 61 351 2861 2172 85 949 3288 3593 68 351 3288 2625 6 640 3593 2859 35 351 3593 1702 38 610 3593 3730 78 168 3788 4882 21 351 3788 4861 20 144 219 4155 26 897 219 1102 33 424 219 4317 95 782 565 2360 36 897 565 2052 88 122 565 459 55 710 1593 2659 45 897 1593 4030 6 634 1593 4410 50 906 2325 4469 91 897 2325 3794 14 307 2360 4609 54 897 2360 4501 16 664 2360 923 86 249 2462 2325 78 897 2462 148 17 585 2659 565 20 897 2659 4645 19 897 2659 2946 74 983 4155 2462 86 897 4155 3746 30 334 4469 1593 5 897 4469 1841 85 596 4469 1428 12 661 220 3294 60 572 220 1290 17 806 516 929 32 572 516 4103 29 843 516 1995 62 622 724 2163 87 572 724 1676 34 862 839 1116 65 572 839 3193 33 768 929 4910 45 572 929 3531 23 572 929 91 43 982 929 3490 32 48 1012 724 75 572 1012 4315 75 551 1012 2168 49 318 1116 1165 10 572 1116 4030 36 767 1165 1012 20 572 1165 757 24 457 1165 1304 2 259 2163 516 94 572 2163 3775 32 594 3294 839 80 572 3294 4547 38 476 3531 4759 22 572 3531 13 21 67 221 4235 56 270 221 2474 31 10 1627 3306 42 270 1627 3943 17 173 1627 4681 17 152 3306 4714 6 270 3306 1392 93 78 3306 4969 10 560 3328 4070 89 270 3328 3611 14 278 3328 650 5 157 4070 4418 85 270 4070 4983 8 270 4070 1841 82 312 4235 3328 57 270 4235 3358 35 171 4418 1627 48 270 4418 777 2 296 4418 3631 72 207 222 926 76 68 222 3995 35 917 926 4023 41 68 926 339 5 207 1957 4889 6 68 1957 4456 48 68 1957 4433 67 895 1957 3965 87 124 2036 3434 24 68 2036 674 22 444 2036 2825 20 611 3269 1957 20 68 3269 2400 19 548 3269 4469 78 847 3434 4694 7 68 3434 2473 36 312 3990 3269 55 68 3990 714 45 883 4023 3990 76 68 4023 364 29 326 4456 2036 53 68 4456 1976 21 579 223 2684 83 843 223 3028 91 829 648 3373 3 843 648 3209 81 596 648 995 45 563 1198 4958 63 843 1198 439 78 645 1198 775 32 248 1479 3688 45 843 1479 763 70 78 2684 648 40 843 2684 4535 99 940 2684 224 24 399 3045 3815 22 843 3045 4400 41 663 3373 3045 12 843 3373 201 84 981 3688 1198 53 843 3688 4177 66 193 3815 1479 86 843 3815 4694 89 843 3815 224 21 990 224 4319 50 352 224 595 28 950 1027 4958 53 352 1027 2502 15 148 2080 4950 17 352 2080 3341 73 352 2080 1422 35 263 2999 1027 82 352 2999 3991 45 384 3268 4045 44 352 3268 1148 75 342 3341 2999 45 352 3341 3744 92 284 3341 1419 22 999 4045 2080 17 352 4045 3774 44 812 4319 3268 10 352 4319 149 56 764 225 2644 8 395 225 3812 66 308 225 4158 26 410 1650 4685 1 395 1650 147 61 75 1880 1650 99 395 1880 3521 60 810 1880 2599 44 884 2424 3780 97 395 2424 905 49 735 2631 1880 93 395 2631 2462 56 339 2631 4630 65 682 2644 2808 65 395 2644 1033 39 4 2808 2424 96 395 2808 3638 54 1000 2808 556 75 149 3780 2631 100 395 3780 4609 33 395 3780 3862 41 507 226 1902 77 584 226 3564 41 863 745 4834 34 584 745 2704 61 142 817 4348 42 584 817 3488 85 435 873 2464 70 584 873 3897 15 237 873 1995 98 784 1561 817 67 584 1561 4667 88 528 1561 2742 7 74 1902 2588 56 584 1902 3248 99 77 2131 873 76 584 2131 3075 70 433 2464 745 29 584 2464 816 39 843 2464 2792 68 969 2588 1561 16 584 2588 4830 58 584 2588 1558 83 85 2588 3467 11 77 3525 2131 68 584 3525 1326 56 874 4348 3525 14 584 4348 72 10 876 227 3681 74 192 227 869 51 79 227 3365 57 384 2129 3116 94 192 2129 4914 10 192 2129 1700 6 349 2924 4531 66 192 2924 731 49 246 2924 3473 34 379 3116 3263 45 192 3116 2171 92 626 3116 2063 92 314 3263 2924 2 192 3263 3985 47 224 3276 2129 25 192 3276 2599 11 373 3276 4340 27 114 3681 3276 70 192 3681 1911 70 346 228 4230 43 379 228 4758 69 289 980 3193 58 379 980 4941 1 411 1291 1691 94 379 1291 4118 26 567 1691 2440 65 379 1691 4059 28 567 1691 1466 25 912 2276 3639 95 379 2276 2621 6 544 2276 2569 12 675 2440 3840 92 379 2440 4665 84 270 3193 2276 97 379 3193 2846 42 329 3639 1291 23 379 3639 4752 22 379 3639 3099 28 273 3639 2609 34 87 3840 4869 86 379 3840 3047 99 97 4230 980 89 379 4230 2500 82 415 4230 1724 36 97 229 2699 38 325 229 1075 86 358 229 4133 13 241 802 1611 95 325 802 1836 82 795 802 2372 67 499 851 802 6 325 851 465 28 778 851 3706 96 489 976 4869 18 325 976 1176 7 615 1611 976 70 325 1611 3777 31 957 1611 2416 2 153 2699 3456 2 325 2699 4523 16 325 2699 3671 12 541 3456 3463 82 325 3456 1624 47 446 3463 851 12 325 3463 4847 35 790 230 1951 64 843 230 3913 77 339 230 2007 75 435 1141 4009 39 843 1141 3344 17 486 1951 4189 76 843 1951 4667 87 469 1951 1986 7 91 2051 4146 79 843 2051 23 52 847 2621 4591 76 843 2621 3745 42 843 2621 963 10 62 2621 2814 46 330 3745 2051 69 843 3745 792 28 186 4009 2621 11 843 4009 4668 9 504 4146 4516 79 843 4146 4982 33 698 4146 3194 59 857 4186 1141 70 843 4186 3961 62 368 4186 3096 27 203 4189 4186 88 843 4189 109 72 372 4189 29 1 879 231 3218 45 105 231 1169 10 240 800 1935 56 105 800 4842 55 422 969 3784 86 105 969 3984 40 624 969 3992 82 723 1413 969 71 105 1413 4893 30 105 1413 4804 52 900 1935 2624 3 105 1935 3491 58 310 1935 2448 66 135 2624 3899 21 105 2624 3850 75 431 3218 800 80 105 3218 3875 17 609 3218 4677 48 546 3784 4684 93 105 3784 3221 97 654 3899 1413 88 105 3899 820 52 691 3899 4188 32 334 232 584 79 978 232 4487 51 377 232 4489 1 635 584 4294 24 978 584 1737 10 296 584 365 68 681 1140 3511 9 978 1140 420 46 760 1140 4568 53 906 2406 4580 17 978 2406 1350 59 100 2995 3985 51 978 2995 454 96 341 3511 2406 39 978 3511 2303 77 17 3511 2541 99 929 3985 1140 91 978 3985 1181 51 627 4231 4701 62 978 4231 2995 100 978 4231 645 28 383 4294 4231 81 978 4294 617 1 181 233 1049 41 446 233 1268 51 975 233 4940 71 383 968 3140 48 446 968 2661 72 988 1049 968 11 446 1049 1609 71 898 1049 929 83 152 3140 4297 26 446 3140 2279 88 626 3140 1332 31 655 3159 4600 44 446 3159 454 31 676 3159 903 44 82 3765 4164 74 446 3765 1284 38 137 3765 2646 56 354 4164 3159 86 446 4164 4194 50 465 4164 4466 40 967 4297 3765 74 446 4297 4782 77 446 4297 4859 57 499 4297 655 15 548 234 919 67 102 234 1052 46 486 843 3502 52 102 843 2196 75 382 843 3816 28 864 919 3024 19 102 919 4960 75 102 919 4932 69 844 919 2559 48 308 1344 3816 43 102 1344 3427 6 868 1344 3952 86 899 3024 3230 18 102 3024 234 21 10 3230 843 1 102 3230 676 13 158 3502 1344 55 102 3502 4769 47 974 3502 3338 60 390 3816 4755 3 102 3816 488 21 923 3816 3060 68 645 235 967 73 315 235 1606 40 290 967 1926 25 315 967 4187 63 219 1297 2700 10 315 1297 1854 31 692 1926 4085 80 315 1926 4475 57 424 2202 3278 93 315 2202 4149 41 510 2202 2195 12 35 2315 3661 53 315 2315 1941 69 271 2315 102 49 98 2560 4800 10 315 2560 4513 78 932 2560 3963 60 765 2700 2315 62 315 2700 1458 47 718 2700 1693 86 676 3278 2560 79 315 3278 3371 87 814 3278 1175 17 372 3661 2202 22 315 3661 3866 100 866 4085 4709 86 315 4085 4144 26 315 4085 1701 21 391 4085 2212 73 159 4144 1297 5 315 4144 3706 11 412 4144 2030 55 859 236 3740 51 368 236 262 54 438 236 1060 11 657 902 4715 94 368 902 844 22 566 2398 3634 49 368 2398 4129 88 593 2398 4652 53 61 2418 2398 63 368 2418 4581 22 303 2418 3563 69 5 3634 4312 26 368 3634 4753 65 368 3634 1090 41 998 3634 3367 42 43 3740 2418 99 368 3740 1383 72 457 4312 902 72 368 4312 3703 27 877 4312 1296 92 248 237 4000 14 293 237 207 44 707 695 4543 75 293 695 2375 78 712 2647 695 93 293 2647 1338 52 846 3706 4220 25 293 3706 3675 71 715 4000 3706 35 293 4000 1207 94 630 4220 2647 9 293 4220 4596 13 293 4220 4513 52 513 4220 3485 80 503 238 1029 91 391 238 2508 29 331 1029 4062 62 391 1029 1888 23 744 1029 2913 96 728 1424 3296 49 391 1424 2785 1 48 1628 1424 57 391 1628 727 98 739 1628 2940 34 614 1632 1628 42 391 1632 2664 5 765 1632 4902 97 487 1765 1632 13 391 1765 4575 100 391 1765 392 33 23 1765 2822 16 138 3296 4744 71 391 3296 4909 47 229 4062 1765 65 391 4062 3630 14 464 4062 3551 52 979 239 2048 81 816 239 3523 29 323 239 3648 52 672 870 3828 3 816 870 260 63 412 1674 2533 52 816 1674 4656 40 816 1674 2651 72 889 2048 4108 73 816 2048 2066 67 593 2048 884 70 414 2533 4975 86 816 2533 4483 85 815 2533 2116 64 985 3828 1674 24 816 3828 2613 20 823 4108 870 80 816 4108 2387 18 842 4108 458 41 904 240 3888 76 456 240 785 17 496 2185 3761 12 456 2185 3305 38 618 2928 4363 35 456 2928 2584 30 245 2928 4534 88 605 3132 2928 78 456 3132 922 86 105 3292 3132 9 456 3292 3590 32 710 3292 3400 9 615 3761 4838 63 456 3761 447 89 295 3888 4387 66 456 3888 219 95 714 4363 2185 25 456 4363 4045 78 222 4363 4473 100 515 4387 3292 46 456 4387 4930 25 456 4387 588 63 106 4387 671 79 94 241 1821 98 490 241 3717 33 386 241 846 2 129 1521 3345 28 490 1521 1633 29 436 1821 3558 42 490 1821 4863 17 827 1821 569 81 799 2274 1521 2 490 2274 1292 44 612 2274 4498 94 162 2515 2274 28 490 2515 1960 64 998 2515 2100 50 674 3345 3839 54 490 3345 4757 63 490 3345 3654 54 14 3345 1077 54 30 3558 4430 84 490 3558 2860 92 510 3558 1275 35 31 3839 4826 51 490 3839 4845 80 887 4430 2515 8 490 4430 493 39 763 4430 4019 23 825 242 2763 32 123 242 4406 3 318 877 3253 58 123 877 2018 60 918 1156 2088 73 123 1156 690 88 207 1156 4044 69 214 2088 4506 15 123 2088 4980 20 553 2088 2879 97 802 2465 877 72 123 2465 2351 6 454 2763 4083 40 123 2763 134 39 244 2883 1156 63 123 2883 3338 95 971 3253 3261 26 123 3253 4824 23 388 3261 4854 29 123 3261 2883 38 123 3261 1749 57 109 4083 2465 37 123 4083 4978 82 739 243 2220 42 146 243 3109 80 592 1559 1598 61 146 1559 4731 56 146 1559 2661 79 898 1576 4353 42 146 1576 1737 33 725 1576 3522 97 16 1598 1790 32 146 1598 1477 51 912 1598 4910 91 619 1668 2650 8 146 1668 4523 88 619 1790 1576 70 146 1790 1246 48 437 2220 1559 58 146 2220 2181 39 307 2220 3102 25 699 2650 4900 33 146 2650 2016 60 449 4353 1668 86 146 4353 3998 36 407 4353 4196 9 891 244 1641 63 498 244 2800 83 498 1017 1142 7 498 1017 1641 39 673 1142 2871 46 498 1142 1842 43 509 1395 1871 85 498 1395 3358 48 374 1641 1395 51 498 1641 178 86 552 1641 246 94 68 1728 2453 67 498 1728 4600 15 498 1728 1819 92 887 1871 1728 85 498 1871 3504 26 742 1871 980 5 979 2453 2786 97 498 2453 4099 20 987 2786 1017 41 498 2786 3790 86 654 2871 3016 85 498 2871 2740 100 566 2871 4614 78 863 3016 4741 25 498 3016 1142 23 1 3016 1952 88 220 245 883 76 595 245 225 23 134 245 2882 11 774 883 4152 64 595 883 239 85 961 883 3565 68 303 1383 3054 17 595 1383 878 55 231 1867 2143 21 595 1867 1903 22 630 2143 3799 3 595 2143 1249 13 75 3054 1867 100 595 3054 1521 16 341 3054 2723 3 951 3187 4102 30 595 3187 4831 48 595 3187 2597 29 967 3799 3187 88 595 3799 903 92 967 4063 1383 6 595 4063 3342 79 268 4102 4758 41 595 4102 538 24 983 4152 4063 42 595 4152 4943 44 543 246 787 61 229 246 890 65 56 246 105 91 685 787 4802 58 229 787 1768 36 229 787 3448 21 708 787 4336 5 610 1768 3270 72 229 1768 4574 75 371 1768 2262 50 20 1791 3940 58 229 1791 454 12 821 1791 4757 7 891 2228 3471 67 229 2228 3701 59 342 2228 4174 77 661 2327 4938 59 229 2327 449 25 381 2327 2620 58 775 2726 2327 97 229 2726 4333 68 345 2726 1496 88 203 3270 1791 22 229 3270 1048 66 15 3270 4979 76 859 3471 2726 38 229 3471 22 65 757 3940 2228 37 229 3940 1375 2 568 3940 4938 48 712 247 1693 57 761 247 3380 75 857 572 1961 27 761 572 4465 82 591 600 4953 14 761 600 1579 70 85 600 2345 2 664 1510 572 59 761 1510 4960 58 761 1510 582 51 594 1693 4096 24 761 1693 77 80 364 1693 3189 59 678 1961 4369 44 761 1961 2554 15 250 1961 966 11 485 1995 600 81 761 1995 1855 16 555 4096 4371 99 761 4096 1349 33 528 4369 1995 50 761 4369 4193 75 15 4369 1503 89 467 4371 1510 1 761 4371 260 11 275 248 3495 8 520 248 2414 85 388 631 915 29 520 631 3825 15 996 631 581 57 893 915 1848 82 520 915 1432 35 413 915 1939 54 969 1131 2986 9 520 1131 2642 31 246 1825 1936 51 520 1825 3859 49 493 1848 1131 83 520 1848 4183 12 646 1936 4671 83 520 1936 4734 75 520 1936 4903 58 636 2986 3379 20 520 2986 3404 4 514 3379 1825 21 520 3379 2725 5 372 3495 631 65 520 3495 4059 46 287 3495 2822 50 82 249 1179 60 1198 249 3700 41 737 249 546 77 643 931 2863 6 1198 931 4928 57 71 1179 2194 22 1198 1179 4774 41 1198 1179 1580 38 23 1563 4763 32 1198 1563 3557 2 595 2194 4482 11 1198 2194 4564 42 483 2194 150 99 907 2430 1563 66 1198 2430 3450 54 107 2863 2430 95 1198 2863 3873 66 699 4482 931 80 1198 4482 1783 5 784 4482 4806 12 928 250 1462 3 463 250 3952 14 483 1462 2920 60 463 1462 1796 22 350 1462 292 45 159 1504 4440 73 463 1504 1263 43 579 1504 1893 26 504 1813 4538 45 463 1813 1504 12 463 1813 2903 25 804 2118 4788 73 463 2118 2368 23 210 2920 4194 16 463 2920 232 97 843 2920 4620 20 548 3129 1813 49 463 3129 1256 93 524 3129 3955 84 443 3239 3129 30 463 3239 609 23 657 3239 1753 39 769 3438 3239 80 463 3438 4804 45 959 4194 3438 68 463 4194 463 66 719 4194 284 55 478 4440 2118 19 463 4440 4239 79 63 4440 4474 47 149 251 1692 99 497 251 3642 86 285 540 2712 57 497 540 3744 97 474 689 4960 50 497 689 1375 23 363 773 689 26 497 773 2016 94 658 773 2304 74 212 1692 3774 66 497 1692 4795 10 497 1692 2371 82 529 1692 4970 30 217 2339 2593 25 497 2339 2396 15 968 2339 17 90 177 2593 3191 77 497 2593 2271 50 325 2593 3615 19 337 2712 2339 32 497 2712 1823 97 898 2764 773 74 497 2764 581 85 561 2971 540 75 497 2971 1510 54 535 2971 1054 73 322 3070 4657 28 497 3070 2764 26 497 3070 4066 6 957 3070 1915 57 42 3191 3070 31 497 3191 4096 29 237 3774 2971 12 497 3774 3399 44 625 252 988 3 529 252 1350 71 463 252 406 95 663 655 3738 26 529 655 2414 14 496 655 3589 21 462 988 2694 45 529 988 4634 13 52 1249 1603 64 529 1249 4532 78 366 1249 1714 30 349 1603 2019 99 529 1603 3494 5 659 2019 655 35 529 2019 1354 51 486 2694 1249 77 529 2694 4587 69 529 2694 26 61 681 2694 1751 52 441 3738 4690 72 529 3738 4684 99 122 3738 4449 66 160 253 1966 92 913 253 636 33 275 761 3025 68 913 761 2291 11 840 761 3077 73 449 1107 4302 36 913 1107 3975 32 617 1966 4316 57 913 1966 1381 3 876 1966 4255 43 44 3025 4476 3 913 3025 930 89 451 3025 3265 37 87 3591 4509 41 913 3591 1200 49 356 3936 3591 34 913 3936 64 7 370 4302 3936 67 913 4302 1432 69 901 4302 3987 28 642 4316 761 29 913 4316 4314 30 398 4476 1107 82 913 4476 4620 60 913 4476 2452 90 346 4476 4972 15 576 254 3083 62 543 254 1824 56 746 2132 2554 3 543 2132 3771 91 141 2132 1444 12 260 2487 2132 61 543 2487 3435 69 394 2487 1184 59 982 2554 2978 59 543 2554 2412 6 458 2978 4119 17 543 2978 1069 84 593 3083 2487 20 543 3083 4560 62 543 3083 1102 18 821 3246 4709 85 543 3246 3023 99 115 4119 4175 54 543 4119 1879 63 626 4119 4358 80 159 4175 3246 86 543 4175 183 77 40 4175 1021 6 615 255 4420 20 584 255 133 55 598 255 1365 82 50 878 3265 41 584 878 4899 56 897 1086 1464 15 584 1086 4518 69 319 1464 3752 56 584 1464 1404 52 156 3265 3853 54 584 3265 142 60 476 3265 1668 83 745 3752 878 71 584 3752 4515 8 584 3752 1200 45 36 3752 146 25 796 3853 4809 66 584 3853 2247 6 902 3853 430 6 168 4420 1086 99 584 4420 123 61 439 256 735 9 193 256 4601 44 807 667 1075 69 193 667 3097 69 598 735 4127 18 193 735 3254 15 260 818 4928 90 193 818 54 70 905 818 3718 91 49 1046 3615 70 193 1046 2515 19 995 1046 4769 53 562 1075 2969 37 193 1075 80 13 487 1075 2474 84 780 1733 4532 82 193 1733 818 77 193 1733 2435 31 111 1733 237 82 660 2689 1733 6 193 2689 332 100 44 2969 2689 13 193 2969 2169 53 260 3615 667 43 193 3615 4062 32 593 4127 1046 63 193 4127 2696 59 695 257 1078 91 614 257 1771 8 49 624 4606 92 614 624 4894 25 614 624 2384 28 135 624 4024 86 429 984 2876 82 614 984 3626 18 494 1078 3998 29 614 1078 1700 21 298 1144 984 82 614 1144 4826 90 614 1144 3394 49 832 1144 1250 19 45 1555 1851 15 614 1555 2712 58 685 1555 3117 43 52 1851 4193 85 614 1851 3639 28 780 1851 1469 10 86 2001 624 49 614 2001 2669 94 455 2001 1666 37 137 2823 2001 99 614 2823 4343 12 285 2876 1555 68 614 2876 2253 50 42 3097 1144 93 614 3097 4106 24 527 3998 3097 67 614 3998 2264 59 987 4193 2823 27 614 4193 875 31 147 258 2806 1 449 258 3451 70 110 749 4693 61 449 749 170 22 735 1314 3930 28 449 1314 3492 51 622 1338 2846 93 449 1338 1021 54 37 1338 311 50 698 2148 2938 86 449 2148 1924 72 211 2519 749 21 449 2519 4932 75 449 2519 3877 80 487 2519 3260 25 200 2806 1314 17 449 2806 209 78 442 2846 3535 9 449 2846 1194 77 364 2938 1338 86 449 2938 4949 94 978 3186 4149 52 449 3186 2698 95 580 3535 3186 75 449 3535 1498 47 674 3535 2102 78 41 3930 2148 89 449 3930 757 11 714 3930 4396 54 79 4149 2519 20 449 4149 4512 32 449 4149 3468 70 465 259 3124 22 1 259 2540 61 415 1077 1849 2 1 1077 709 21 480 1077 2337 33 43 1774 1077 85 1 1774 4718 42 255 1849 2816 89 1 1849 4822 78 58 1849 2953 79 223 2571 4593 100 1 2571 4944 23 1 2571 247 13 908 2571 3861 95 277 2816 3403 62 1 2816 2348 17 590 3124 4123 81 1 3124 313 47 419 3403 3878 1 1 3403 4162 92 635 3878 2571 93 1 3878 1809 35 494 3878 1816 69 706 4123 1774 98 1 4123 2126 7 251 260 4183 35 612 260 4784 64 218 260 2371 28 247 727 4916 49 612 727 3764 1 612 727 786 74 368 1478 4538 68 612 1478 4134 36 112 1478 4123 95 548 1557 727 49 612 1557 2208 38 137 3764 3855 89 612 3764 1382 22 451 3855 1478 44 612 3855 1992 10 23 4183 4479 8 612 4183 2116 82 567 4183 1494 97 615 4479 1557 67 612 4479 4161 5 998 261 2642 50 349 261 2663 11 763 530 4761 76 349 530 765 79 464 530 435 26 953 1087 2482 88 349 1087 1405 2 128 1185 530 74 349 1185 296 39 530 1723 1087 80 349 1723 1245 72 864 2213 1723 93 349 2213 4786 87 349 2213 3689 10 1000 2213 3766 94 321 2482 1185 70 349 2482 752 18 694 2642 2213 84 349 2642 632 72 210 2642 3593 69 958 262 1704 100 355 262 323 99 206 716 2242 62 355 716 1520 96 809 891 716 20 355 891 1311 42 163 996 4508 56 355 996 3836 17 654 1704 3697 12 355 1704 1133 47 542 1704 1776 38 305 2242 996 96 355 2242 3935 29 489 2242 59 92 647 3697 891 90 355 3697 4868 42 355 3697 2282 19 679 3697 1858 96 197 263 2844 49 511 263 1082 8 162 1560 1754 74 511 1560 3827 44 186 1560 3266 13 498 1735 2661 71 511 1735 3848 12 598 1754 4419 2 511 1754 4564 67 185 1754 3435 72 647 2191 1560 96 511 2191 1388 58 853 2318 4694 18 511 2318 3744 37 848 2661 4163 89 511 2661 1945 63 641 2844 2961 93 511 2844 2987 10 891 2936 2191 53 511 2936 2432 16 92 2961 1735 85 511 2961 2504 95 159 2961 528 4 612 4163 4668 13 511 4163 2936 13 511 4163 4676 19 338 4163 3896 95 605 4419 2318 55 511 4419 4681 57 185 4419 1112 83 232 264 1878 76 1586 264 1256 87 161 264 1483 80 875 793 1407 61 1586 793 2598 64 263 1290 3642 20 1586 1290 1995 44 697 1290 2662 67 691 1407 4654 83 1586 1407 3645 37 1586 1407 906 37 400 1784 3577 40 1586 1784 829 24 858 1784 958 10 235 1878 793 81 1586 1878 3798 7 375 1878 4843 70 981 3145 4307 45 1586 3145 234 9 587 3214 4790 47 1586 3214 1887 55 168 3214 4544 73 389 3217 4849 2 1586 3217 3145 82 1586 3217 1214 21 628 3577 3217 99 1586 3577 4306 6 683 3642 3214 25 1586 3642 2833 82 116 3645 1784 41 1586 3645 4753 3 338 3645 4609 65 882 4307 1290 85 1586 4307 3244 88 977 265 1316 36 383 265 1788 95 887 815 3380 31 383 815 3446 76 463 815 3126 25 467 1060 3130 40 383 1060 4530 7 383 1060 3372 18 16 1316 4483 24 383 1316 3744 48 349 1461 3915 52 383 1461 1512 28 683 1461 2986 80 785 2474 1461 50 383 2474 2110 86 779 2474 1560 8 769 3130 815 74 383 3130 2717 10 304 3130 4319 45 272 3250 1060 35 383 3250 3377 18 465 3380 2474 84 383 3380 3680 16 704 3380 2304 87 812 3915 4847 90 383 3915 2688 77 791 4483 3250 59 383 4483 3692 94 995 266 619 97 192 266 4688 30 661 266 721 88 832 545 3952 21 192 545 1016 11 733 545 3775 19 335 619 3858 31 192 619 19 92 313 641 3775 13 192 641 3947 33 640 641 3571 25 196 682 641 76 192 682 4735 53 192 682 2994 34 176 682 4822 27 743 1466 545 19 192 1466 1039 11 505 3775 4018 36 192 3775 1162 49 977 3775 3955 16 547 3858 682 26 192 3858 3952 74 106 3858 2446 1 179 3952 4602 30 192 3952 3897 12 683 3952 2477 79 340 4018 1466 27 192 4018 2062 46 231 267 2537 73 92 267 2596 56 656 267 995 80 335 671 3541 29 92 671 1002 21 145 671 3792 67 271 707 3548 30 92 707 3516 74 96 2067 3690 5 92 2067 1516 43 95 2067 1421 46 587 2307 4804 20 92 2307 2699 69 314 2537 4330 25 92 2537 380 37 625 3541 2067 76 92 3541 2008 38 392 3548 2307 91 92 3548 1521 95 124 3690 707 11 92 3690 1371 91 874 4330 671 49 92 4330 4993 87 92 4330 18 57 105 4330 3518 23 750 268 2072 21 842 268 3731 35 216 646 4266 34 842 646 1774 99 816 646 2274 99 220 669 4357 91 842 669 1253 5 633 669 4999 72 364 1167 1371 75 842 1167 1584 82 632 1371 669 94 842 1371 1847 41 905 2072 4564 22 842 2072 4317 46 842 2072 2889 41 18 2072 3822 90 241 4030 4826 62 842 4030 2682 93 578 4266 4030 99 842 4266 285 74 182 4266 732 86 335 4317 1167 14 842 4317 3279 70 497 4357 646 32 842 4357 1454 28 286 4357 3239 71 700 269 4134 58 601 269 395 69 300 269 1841 98 555 1173 2243 23 601 1173 4186 45 221 1173 3505 33 375 1657 3576 15 601 1657 2815 80 39 1666 2925 7 601 1666 616 19 890 2243 4453 52 601 2243 3018 92 967 2243 4568 73 946 2925 4771 12 601 2925 4831 92 160 3249 1173 21 601 3249 2724 86 330 3249 3990 82 449 3576 4996 98 601 3576 4229 90 601 3576 3883 23 774 4134 1657 52 601 4134 3816 44 164 4134 4252 21 75 4229 3249 37 601 4229 1951 73 221 4229 2987 100 953 4453 1666 65 601 4453 4690 22 447 270 1661 83 39 270 1388 93 762 511 4748 15 39 511 1970 100 133 511 4921 34 800 717 2575 92 39 717 3205 3 24 1661 4499 55 39 1661 1889 58 432 2052 511 22 39 2052 4838 74 39 2052 4603 6 239 2052 2116 75 841 2575 2052 93 39 2575 4287 33 684 2609 3216 15 39 2609 2314 89 952 2609 1874 65 23 2820 2609 85 39 2820 2553 11 351 3156 2820 100 39 3156 2083 59 563 3156 1384 47 527 3216 717 87 39 3216 41 70 962 3686 3156 38 39 3686 2431 75 856 4499 3686 96 39 4499 3037 7 960 271 3506 40 276 271 592 88 628 670 2425 99 276 670 171 92 362 670 3738 63 984 914 2299 47 276 914 885 2 50 1706 1947 81 276 1706 1710 54 867 1947 2606 89 276 1947 3419 62 227 1947 3746 63 600 2299 1706 50 276 2299 417 76 890 2425 914 27 276 2425 2974 10 793 2425 4166 48 993 2606 3663 99 276 2606 4743 85 276 2606 4239 38 435 3506 670 56 276 3506 3888 24 914 3506 3747 90 120 3663 4898 19 276 3663 1417 31 839 3663 4095 83 79 272 1467 17 363 272 3815 90 140 715 4113 65 363 715 3382 30 978 1467 1943 75 363 1467 3217 46 820 1467 325 14 910 1830 715 9 363 1830 1366 94 388 1943 1830 59 363 1943 3362 67 497 1943 4006 14 657 2893 4372 62 363 2893 641 51 523 4113 4421 76 363 4113 1072 100 556 4113 4457 21 864 4372 4833 27 363 4372 4718 66 363 4372 843 53 742 4372 3161 60 564 4421 2893 45 363 4421 4721 71 695 273 2634 6 371 273 25 16 547 514 2354 98 371 514 4981 57 803 1460 4803 14 371 1460 1476 8 371 1460 2452 77 21 1460 3766 8 902 1476 514 34 371 1476 3936 94 871 2354 3647 33 371 2354 650 15 649 2634 4015 12 371 2634 1643 95 926 3647 4740 24 371 3647 2340 43 155 4015 1460 3 371 4015 406 75 383 4015 1438 22 362 274 4397 86 53 274 401 96 28 274 3190 20 62 1043 4667 42 53 1043 3026 94 53 1043 3080 78 312 1517 3367 26 53 1517 4209 13 469 1845 3695 69 53 1845 1814 88 369 2761 3683 51 53 2761 4437 83 957 2761 2240 83 25 2934 1845 27 53 2934 4659 33 654 2996 1517 37 53 2996 134 19 287 3026 2934 90 53 3026 1757 2 150 3367 2761 1 53 3367 3308 60 650 3683 4974 14 53 3683 2285 40 932 3683 2165 49 76 3695 2996 3 53 3695 1411 64 402 4397 1043 25 53 4397 1426 11 384 275 3676 9 486 275 484 89 844 275 710 16 357 809 1753 98 486 809 2762 81 236 809 2029 60 335 1062 2566 100 486 1062 3092 100 384 1062 542 97 234 1089 2747 85 486 1089 2321 47 730 1533 3984 45 486 1533 4774 34 538 1753 1757 84 486 1753 3312 50 325 1753 2802 58 824 1757 4548 58 486 1757 4922 25 486 1757 1459 70 630 1757 2124 49 142 1923 1062 28 486 1923 4008 50 684 2566 1089 22 486 2566 2391 49 455 2566 3540 69 938 2747 3127 96 486 2747 1894 25 482 3127 809 51 486 3127 947 43 817 3676 4951 41 486 3676 1533 39 486 3676 2354 25 80 3984 1923 12 486 3984 4794 14 979 3984 2573 21 755 276 993 32 348 276 4462 4 844 276 2644 58 738 993 3358 64 348 993 4715 91 348 993 1460 89 650 993 780 12 726 1261 4147 32 348 1261 2399 18 804 1920 4710 58 348 1920 2118 63 346 3358 1261 41 348 3358 998 19 597 3358 176 80 812 4147 4467 63 348 4147 216 53 938 4467 1920 82 348 4467 1807 85 213 277 4300 31 407 277 1245 51 180 277 3369 82 665 555 3679 75 407 555 977 99 918 555 1190 94 643 1008 4835 82 407 1008 3579 57 407 1008 391 49 376 1558 1008 56 407 1558 3784 54 101 1558 837 34 59 1589 2912 17 407 1589 4505 30 407 1589 2636 7 825 2091 1589 33 407 2091 2921 98 717 2091 4397 76 428 2508 2091 73 407 2508 1568 90 225 2508 1330 10 519 2589 1558 20 407 2589 1010 15 289 2589 1746 31 196 2610 4677 1 407 2610 4553 97 768 2912 2589 54 407 2912 3610 38 361 3579 2610 63 407 3579 2131 90 419 3579 4826 71 345 3679 2508 79 407 3679 984 30 590 4300 555 57 407 4300 1485 61 524 278 4278 77 647 278 1401 73 713 653 1534 75 647 653 350 85 251 653 4765 30 724 1337 1793 32 647 1337 4129 11 1000 1337 2035 49 789 1534 4589 90 647 1534 377 51 83 1534 1798 96 160 1709 4086 32 647 1709 4528 83 647 1709 2496 98 656 1709 2431 31 337 1793 4190 22 647 1793 2343 84 506 3337 1337 39 647 3337 4645 78 74 3337 3263 28 811 4086 3337 25 647 4086 3774 11 363 4086 3148 51 510 4190 653 79 647 4190 823 41 326 4190 3186 14 541 4278 1709 15 647 4278 2290 16 609 4278 2734 20 15 279 674 18 417 279 990 60 282 656 2579 62 417 656 4550 79 613 674 2637 83 417 674 4393 32 984 890 1367 10 417 890 4694 13 116 890 180 90 581 1367 4816 94 417 1367 1819 44 643 2579 4471 7 417 2579 1749 81 578 2637 656 2 417 2637 1634 97 6 3318 4958 38 417 3318 890 28 417 3318 4676 52 509 3318 348 93 572 4471 3318 25 417 4471 859 90 258 280 1745 55 1070 280 665 100 143 1511 4351 76 1070 1511 4406 100 416 1713 3188 55 1070 1713 2292 59 503 1745 2681 32 1070 1745 4765 57 134 2096 3205 92 1070 2096 3670 64 405 2096 1232 87 591 2178 1713 16 1070 2178 3477 98 738 2681 2178 40 1070 2681 2772 92 97 2681 1215 2 631 3188 1511 57 1070 3188 4025 57 438 3205 4504 15 1070 3205 4045 82 301 3205 918 12 850 4351 2096 43 1070 4351 4731 10 1070 4351 879 33 704 281 3422 36 32 281 3113 7 995 1128 2638 73 32 1128 2796 57 795 1128 2739 33 441 2297 1128 1 32 2297 1272 9 373 2297 4313 73 677 2638 2998 24 32 2638 4672 97 32 2638 3345 2 741 2998 4826 86 32 2998 4992 28 459 2998 778 54 273 3422 2297 34 32 3422 4316 64 828 282 811 40 887 282 358 42 739 282 4225 91 164 811 2802 87 887 811 4961 10 887 811 1999 39 523 1673 4512 83 887 1673 3797 37 897 1673 3243 31 184 2353 4131 37 887 2353 344 40 477 2802 3656 34 887 2802 1451 77 733 3656 4321 72 887 3656 4241 78 620 3656 1839 72 668 4131 1673 4 887 4131 264 44 371 4131 4514 38 889 4321 2353 62 887 4321 1474 90 181 283 1257 39 387 283 291 79 733 759 3117 36 387 759 2103 8 191 1117 759 34 387 1117 250 98 899 1257 2486 10 387 1257 4978 53 519 1257 2889 36 507 1484 2811 95 387 1484 4598 24 387 1484 536 28 717 1484 2395 50 218 2027 2120 33 387 2027 1754 49 626 2027 4210 39 815 2120 4004 45 387 2120 4693 64 387 2120 4392 14 719 2120 4282 67 50 2486 1484 92 387 2486 2950 44 490 2811 1117 62 387 2811 1695 51 836 2811 4554 100 539 3117 2027 23 387 3117 3690 64 331 3117 4616 69 638 3813 4909 28 387 3813 2823 18 620 3813 400 7 102 4004 4376 98 387 4004 4894 39 53 4004 202 62 436 4376 3813 44 387 4376 1321 7 719 4376 722 49 502 284 3279 66 339 284 1049 76 96 284 4340 21 904 1683 4413 82 339 1683 358 70 940 2404 4657 93 339 2404 4119 84 245 2404 2343 15 55 2710 2404 70 339 2710 1734 99 531 3279 4251 59 339 3279 3648 2 78 3279 4216 71 485 3493 2710 44 339 3493 3180 86 475 3493 231 48 85 3665 4530 91 339 3665 1683 13 339 3665 4543 1 33 4251 3665 98 339 4251 4918 6 77 4251 1117 75 865 4413 3493 24 339 4413 30 90 955 285 1147 54 882 285 3609 59 774 701 1145 15 882 701 723 8 570 701 1408 22 426 1145 1519 43 882 1145 4057 100 194 1145 548 87 825 1147 701 57 882 1147 481 97 740 1147 2138 55 975 1519 2452 79 882 1519 3952 72 904 2174 3251 99 882 2174 4629 8 882 2174 3033 14 435 2174 3371 27 484 2298 2174 93 882 2298 2277 8 287 2452 2792 61 882 2452 44 74 263 2792 3242 11 882 2792 4986 68 73 3242 2298 69 882 3242 575 61 70 3242 1143 95 169 3251 4684 79 882 3251 769 52 530 286 4303 31 400 286 1041 82 678 286 4841 81 931 1201 1389 26 400 1201 4991 38 739 1375 1201 36 400 1375 693 92 427 1375 2942 83 867 1389 2495 41 400 1389 4698 10 244 1389 2191 4 1000 1548 3487 14 400 1548 4643 19 622 1548 1751 53 133 1875 1548 22 400 1875 4619 2 400 1875 3637 36 808 1875 4168 49 298 2140 1375 63 400 2140 4815 73 899 2495 4856 24 400 2495 584 96 559 3376 1875 76 400 3376 4783 7 604 3376 4847 17 308 3487 2140 77 400 3487 4985 27 799 4249 3376 53 400 4249 193 74 471 4249 757 23 752 4303 4249 25 400 4303 246 32 999 4303 615 83 346 287 4029 78 410 287 3554 14 440 287 2555 91 435 556 848 96 410 556 346 16 358 848 2885 2 410 848 2419 54 950 848 4282 58 342 2447 3435 26 410 2447 1635 73 361 2885 4288 95 410 2885 4731 99 410 2885 3122 52 778 2955 3455 58 410 2955 635 61 866 3435 2955 18 410 3435 1436 23 301 3435 2607 66 435 3455 556 12 410 3455 1407 81 560 4029 2447 39 410 4029 1998 21 430 4029 1302 55 378 4288 4770 38 410 4288 4746 82 508 4288 4401 12 994 288 3125 12 534 288 459 76 866 672 4922 15 534 672 1277 81 793 672 4763 89 982 987 2665 86 534 987 1711 10 101 987 342 98 367 1450 2044 87 534 1450 3110 16 875 1450 1876 48 266 1604 672 97 534 1604 2756 53 181 1604 2836 29 823 1839 4891 36 534 1839 1450 5 534 1839 1511 35 437 1839 4487 66 769 1910 3877 9 534 1910 2454 18 6 1910 581 76 856 2044 1910 67 534 2044 1291 69 229 2044 3589 77 988 2356 3370 39 534 2356 4509 37 534 2356 2916 9 577 2356 4430 53 825 2665 2356 63 534 2665 4856 97 884 3125 987 27 534 3125 1727 39 525 3370 1839 68 534 3370 4911 51 323 3877 1604 16 534 3877 4057 99 534 289 3962 17 932 289 813 60 307 289 2110 6 64 963 4375 56 932 963 727 78 746 963 851 48 212 1051 1592 66 932 1051 4800 84 932 1051 1815 60 826 1501 1741 61 932 1501 755 33 1 1592 4766 10 932 1592 4930 26 288 1592 2554 54 313 1741 963 86 932 1741 1637 41 427 2357 1051 99 932 2357 1858 92 147 2357 3210 51 650 3962 1501 36 932 3962 2318 96 368 4375 2357 92 932 4375 2755 98 537 290 3479 55 367 290 3686 85 78 290 789 95 939 2169 2947 2 367 2169 3409 56 37 2169 3126 10 706 2484 3804 49 367 2484 2673 47 847 2484 1874 42 6 2947 3189 13 367 2947 1148 17 93 2947 4748 8 824 3189 4068 8 367 3189 2915 37 553 3418 4947 24 367 3418 662 42 19 3418 4749 71 440 3479 2484 19 367 3479 4560 66 464 3804 2169 73 367 3804 873 91 72 4068 3418 79 367 4068 4932 83 367 4068 3704 39 422 291 4254 25 747 291 2018 97 145 291 3167 28 629 586 4089 28 747 586 2680 80 816 1569 4961 74 747 1569 4627 3 747 1569 3489 57 724 1569 1398 48 640 2180 586 31 747 2180 4085 84 437 4089 4356 65 747 4089 885 36 740 4254 4491 16 747 4254 3763 61 320 4356 1569 71 747 4356 2586 16 481 4356 3751 39 405 4491 2180 88 747 4491 4221 25 381 4491 1200 27 660 292 3820 76 470 292 64 70 101 292 2612 63 413 537 2085 90 470 537 278 8 749 981 4512 49 470 981 752 77 247 1972 2989 34 470 1972 3900 58 331 1972 4315 3 940 2085 1972 71 470 2085 3232 1 12 2085 202 34 668 2989 981 53 470 2989 4135 61 682 3757 537 16 470 3757 4292 67 853 3757 1098 27 551 3820 3757 58 470 3820 4766 11 470 3820 1722 31 810 293 954 95 202 293 491 83 717 293 2886 91 944 954 997 68 202 954 623 45 134 997 1838 29 202 997 4801 51 93 997 4336 49 925 1013 4789 18 202 1013 3096 2 149 1838 2510 86 202 1838 1039 48 570 2510 4345 6 202 2510 1717 59 320 2510 3246 83 36 4345 1013 8 202 4345 4625 19 202 4345 3274 39 589 4345 69 99 36 294 882 91 680 294 3735 25 561 882 1092 67 680 882 1028 35 544 882 3148 70 142 1044 2720 31 680 1044 432 65 667 1092 4151 26 680 1092 1333 76 145 2720 4846 31 680 2720 3200 20 283 2720 715 13 172 2897 3111 43 680 2897 4506 11 680 2897 1800 80 842 2897 683 63 238 3111 1044 79 680 3111 4679 53 633 3111 1748 9 667 4151 2897 72 680 4151 4794 97 683 4151 1461 68 564 295 4275 9 354 295 4475 29 326 295 4538 33 9 548 2772 85 354 548 2749 9 298 652 4490 5 354 652 3291 96 615 652 3333 98 44 1384 4680 67 354 1384 2504 74 143 1653 2717 18 354 1653 2709 32 139 1653 1969 99 295 1879 652 77 354 1879 2538 13 523 2012 1653 42 354 2012 1954 51 799 2012 70 53 686 2717 1384 100 354 2717 3774 76 676 2772 4542 53 354 2772 4182 31 354 2772 494 34 691 4182 2012 32 354 4182 2517 9 86 4182 4318 69 124 4275 1879 58 354 4275 1207 48 124 4275 1335 36 527 4490 548 3 354 4490 1088 93 174 4490 624 53 600 296 3716 18 730 296 1419 75 781 296 3413 29 623 904 3322 2 730 904 3470 7 967 904 4370 29 230 1229 3518 96 730 1229 3507 48 785 1229 2254 61 593 1509 1815 37 730 1509 4130 41 233 1815 4513 65 730 1815 4748 33 730 1815 4417 73 509 1815 4465 68 761 3322 1229 58 730 3322 2661 12 888 3322 3001 25 653 3496 1509 4 730 3496 6 22 296 3496 943 59 981 3518 4047 43 730 3518 4393 61 719 3518 2245 41 223 3716 904 48 730 3716 1043 52 939 3716 890 30 54 4047 3496 61 730 4047 3144 11 832 297 643 94 451 297 446 100 861 297 2259 99 248 643 3011 2 451 643 1181 75 130 1266 3671 31 451 1266 1769 98 928 1843 1266 8 451 1843 3082 51 994 2381 3262 81 451 2381 4741 4 451 2381 266 34 650 2381 3030 40 664 3011 1843 94 451 3011 1445 49 177 3011 4317 68 567 3262 4669 59 451 3262 4403 36 448 3262 4027 17 748 3671 4185 22 451 3671 30 96 243 4185 2381 52 451 4185 739 85 602 298 3809 36 408 298 35 82 975 298 3738 67 242 1573 4705 12 408 1573 2865 43 408 1573 544 80 308 1945 2189 88 408 1945 3996 55 294 2189 4382 2 408 2189 1085 35 131 2865 3827 49 408 2865 3037 96 33 2865 4242 76 389 3572 4106 55 408 3572 1419 97 426 3572 3004 14 214 3809 1945 6 408 3809 4547 47 508 3809 526 38 447 3827 4518 43 408 3827 4034 2 992 3827 948 62 505 4106 1573 7 408 4106 2372 25 20 4382 3572 48 408 4382 803 91 651 4382 2601 99 880 299 757 33 559 299 4995 33 494 299 200 7 839 757 1520 64 559 757 3872 74 781 757 196 70 475 1307 4588 98 559 1307 301 46 410 1307 327 60 919 1520 2745 88 559 1520 2052 53 562 1520 4721 45 578 2371 4442 56 559 2371 1233 5 567 2371 3728 77 977 2745 3022 95 559 2745 4827 6 702 3022 2371 76 559 3022 4986 2 127 3022 3379 40 36 3529 3861 43 559 3529 4797 87 421 3529 2134 72 96 3551 1307 8 559 3551 3286 42 133 3551 1615 15 931 3861 3551 28 559 3861 2594 16 875 4442 3529 60 559 4442 4613 66 559 4442 3985 57 350 300 2049 20 1159 300 3666 8 114 2049 2240 53 1159 2049 1517 75 435 2240 2813 66 1159 2240 4833 6 1159 2240 2994 31 776 2267 3440 46 1159 2267 3048 64 720 2313 3955 32 1159 2313 3271 20 340 2813 2267 97 1159 2813 4977 43 440 2813 3486 18 484 3440 2313 11 1159 3440 3193 21 243 3440 1393 66 28 3955 4427 84 1159 3955 2747 48 832 4427 4968 83 1159 4427 4157 1 881 4427 2341 67 491 301 812 85 153 301 2132 7 363 301 3919 15 486 812 3517 8 153 812 4266 2 888 1325 3993 96 153 1325 391 85 214 1393 4707 8 153 1393 3068 72 153 1393 743 61 766 1393 3361 78 758 1546 4890 57 153 1546 747 66 755 1546 3799 1 634 2081 1546 41 153 2081 4737 85 217 2081 2481 33 180 2974 2081 89 153 2974 1418 20 816 2974 2758 39 456 3068 2974 89 153 3068 1913 51 304 3068 1230 26 32 3517 1325 93 153 3517 4400 6 28 3993 1393 21 153 3993 2215 88 673 3993 1508 89 420 302 3854 58 260 302 3386 51 514 1714 2539 62 260 1714 3765 28 757 1714 4617 40 426 1897 4157 37 260 1897 3497 35 348 2079 1897 77 260 2079 1715 43 317 2079 2759 59 745 2444 3122 71 260 2444 799 49 653 2473 4979 93 260 2473 2444 8 260 2473 1897 43 734 2473 3072 92 741 2539 2079 87 260 2539 3572 50 76 2539 2673 10 208 3122 1714 23 260 3122 2407 88 538 3122 1287 36 790 3854 2473 94 260 3854 1713 59 614 4084 4429 11 260 4084 268 35 476 4157 4084 65 260 4157 371 67 672 4157 1360 7 112 4429 4781 80 260 4429 2761 59 576 4429 149 29 720 303 1918 48 689 303 4081 42 166 875 1113 57 689 875 1763 79 739 875 851 4 80 1113 1712 3 689 1113 1881 88 142 1712 4661 19 689 1712 3316 96 383 1712 4570 26 291 1918 3053 31 689 1918 3398 76 525 1918 2224 47 701 2086 2210 84 689 2086 1090 3 821 2210 3900 67 689 2210 2756 23 483 3053 2086 28 689 3053 535 27 268 3053 2036 38 319 3900 875 17 689 3900 4666 71 689 3900 2354 19 587 3900 4205 41 235 304 3259 69 914 304 3667 62 7 748 2945 52 914 748 4215 99 428 1854 4503 66 914 1854 3830 17 914 1854 1196 20 840 2004 3109 21 914 2004 4102 24 666 2004 707 43 508 2215 2449 42 914 2215 4391 8 61 2215 2673 6 585 2449 4623 42 914 2449 4376 4 845 2945 1854 1 914 2945 223 35 158 2945 3691 48 140 2946 2004 58 914 2946 1158 76 104 3109 2215 81 914 3109 180 47 601 3109 1092 99 866 3259 4381 9 914 3259 3186 93 305 3830 2946 50 914 3830 1838 11 623 3830 3092 56 794 4381 748 10 914 4381 4003 41 552 4381 1142 6 89 305 3604 41 83 305 3154 70 608 305 4420 49 335 977 2716 44 83 977 4317 37 332 977 1751 59 519 1301 2099 6 83 1301 2396 20 237 1301 1038 7 335 1579 977 83 83 1579 3126 76 828 1579 1725 39 615 1600 2595 68 83 1600 2892 6 626 1705 4949 22 83 1705 2695 57 992 2008 1579 77 83 2008 3396 18 381 2099 1600 86 83 2099 4583 73 83 2099 4550 7 360 2116 1705 100 83 2116 4515 68 113 2595 2008 87 83 2595 4942 98 83 2595 1661 81 209 2716 3382 10 83 2716 2135 51 24 2716 3199 88 376 3382 2116 46 83 3382 234 55 682 3382 1952 56 560 3604 1301 28 83 3604 4268 100 86 306 2514 96 256 306 3235 33 909 306 3932 57 807 758 1836 23 256 758 1663 18 563 1440 1863 11 256 1440 851 84 577 1613 1440 42 256 1613 3004 100 909 1836 1613 28 256 1836 1769 34 983 1863 4648 71 256 1863 4994 94 256 1863 3514 81 534 2431 758 96 256 2431 3247 53 486 2431 2667 37 759 2514 2431 25 256 2514 3104 95 216 307 2601 31 52 307 233 26 813 1377 4976 50 52 1377 2233 73 52 1377 99 81 813 1553 4434 15 52 1553 2430 64 214 1553 1069 4 931 1804 1377 44 52 1804 3311 35 109 2233 3520 56 52 2233 3810 90 575 2601 3282 39 52 2601 196 47 19 2601 172 63 728 3282 4489 64 52 3282 3781 44 149 3282 666 54 272 3520 1553 57 52 3520 2624 21 599 4434 4796 71 52 4434 3458 68 821 4489 1804 55 52 4489 302 19 99 308 3598 98 194 308 291 76 609 634 4989 6 194 634 2102 87 194 634 647 62 590 1136 4742 13 194 1136 3880 16 148 2102 1136 38 194 2102 676 66 202 2139 634 70 194 2139 3687 72 835 2139 1756 80 975 3598 3783 15 194 3598 4699 66 929 3598 4647 78 352 3783 2139 93 194 3783 854 82 177 309 4284 96 1290 309 1790 26 78 309 4580 83 456 508 4579 53 1290 508 3170 90 647 508 1557 23 595 1034 508 82 1290 1034 4697 45 217 1034 4837 42 666 1597 2552 78 1290 1597 4016 53 244 1597 3370 10 315 2552 1034 100 1290 2552 418 47 331 2552 2025 65 964 4263 1597 74 1290 4263 4654 54 1290 4263 2169 13 187 4263 3316 11 874 4284 4426 55 1290 4284 2774 57 544 4426 4263 24 1290 4426 1293 29 415 4426 1231 66 85 310 1274 58 473 310 3545 6 767 825 2466 32 473 825 4941 48 265 1274 825 33 473 1274 4763 28 473 1274 2298 44 401 1274 1681 41 524 1883 2879 51 473 1883 635 42 711 1883 1526 69 654 1998 1883 91 473 1998 749 45 538 1998 3760 68 216 2268 1998 55 473 2268 3547 20 277 2466 4025 94 473 2466 4362 72 981 2466 220 96 188 2879 4508 60 473 2879 3287 44 41 4025 2268 9 473 4025 4039 67 250 311 3938 42 717 311 4002 62 283 311 2995 10 540 662 4979 3 717 662 128 9 966 662 1194 15 390 862 3934 57 717 862 4886 60 717 862 4811 8 195 862 2920 44 931 1781 662 5 717 1781 22 74 477 2439 4156 91 717 2439 1332 37 601 3934 2439 62 717 3934 583 4 760 3938 4145 80 717 3938 3536 90 729 4145 862 72 717 4145 1672 33 660 4145 3177 16 650 4156 1781 53 717 4156 4023 21 970 312 2840 34 163 312 3786 53 525 1341 3779 90 163 1341 2288 53 930 1990 2421 13 163 1990 2998 81 514 1990 4607 31 832 2394 1341 87 163 2394 2059 84 6 2421 4087 76 163 2421 4408 62 999 2421 2322 72 504 2840 1990 78 163 2840 2343 98 312 2840 1542 84 861 3779 4742 17 163 3779 4969 64 163 3779 4486 28 659 4087 2394 26 163 4087 4510 80 803 313 2503 6 728 313 3690 20 189 313 1243 92 605 611 2821 59 728 611 3971 27 921 710 4428 55 728 710 3442 38 832 1542 611 70 728 1542 53 20 532 1542 2111 35 975 2279 3462 100 728 2279 1263 50 987 2503 710 33 728 2503 2985 76 116 2503 4920 11 559 2821 4584 71 728 2821 2279 70 728 2821 1743 3 717 2821 989 73 987 3462 4682 75 728 3462 2639 86 749 4428 1542 64 728 4428 4531 98 943 4428 524 83 352 314 3512 17 756 314 3235 31 964 573 3494 96 756 573 174 98 874 573 2010 69 162 916 2249 97 756 916 4741 84 756 916 3010 47 665 1186 916 27 756 1186 1633 22 113 1186 2455 42 901 2249 573 63 756 2249 850 27 984 2249 4565 5 158 3494 4691 73 756 3494 1579 36 602 3512 1186 57 756 3512 1151 59 700 315 2082 46 353 315 551 35 417 513 3567 2 353 513 2390 56 385 513 3148 92 913 1419 2815 65 353 1419 391 3 985 1419 3826 83 59 1536 3058 65 353 1536 2849 11 705 1720 3837 40 353 1720 1864 82 712 1720 3918 29 187 1967 4890 72 353 1967 1720 64 353 1967 2487 100 974 1967 283 18 549 2082 513 25 353 2082 4962 57 353 2082 1971 96 248 2815 4541 61 353 2815 1583 42 790 2815 1217 1 616 3058 3957 98 353 3058 3856 54 525 3058 1256 72 199 3567 4283 80 353 3567 1032 7 89 3567 265 90 24 3837 1536 32 353 3837 390 81 253 3957 1419 43 353 3957 4438 37 821 4109 1967 25 353 4109 1313 100 908 4109 1827 63 364 4283 4109 3 353 4283 2576 67 857 4283 3397 83 26 316 1009 10 294 316 4747 11 372 316 4770 1 521 894 4750 99 294 894 4937 76 294 894 3222 34 986 1009 2909 96 294 1009 950 7 966 1009 3138 43 370 1248 2170 62 294 1248 3302 86 374 2170 894 95 294 2170 912 58 45 2170 2088 8 285 2909 1248 99 294 2909 3557 66 346 2909 4505 73 677 317 2932 2 316 317 4149 14 922 317 1570 29 687 546 4690 65 316 546 3229 76 316 546 1214 76 552 546 3183 18 178 2932 3200 43 316 2932 1767 30 377 2932 2621 3 806 3200 3863 45 316 3200 762 43 90 3229 4040 76 316 3229 1000 77 708 3229 838 14 104 3746 4877 91 316 3746 4554 18 301 3863 546 25 316 3863 2356 54 743 3863 2706 40 849 4040 3746 22 316 4040 1090 100 499 4040 3554 25 519 318 557 8 213 318 38 24 281 318 592 18 956 523 4645 18 213 523 1358 30 199 523 3522 28 656 549 911 35 213 549 1511 12 188 549 392 49 754 557 3388 99 213 557 2800 52 857 557 451 78 514 911 523 39 213 911 3427 63 474 1528 549 48 213 1528 4888 81 213 1528 4545 87 389 1528 4236 35 158 1761 1528 20 213 1761 2539 28 290 1761 673 53 30 2596 1761 24 213 2596 2419 82 245 3388 2596 4 213 3388 1882 47 939 3388 2597 63 229 319 2630 31 698 319 3985 49 852 319 630 24 614 650 3004 73 698 650 2592 7 388 842 2935 26 698 842 1684 92 795 1917 650 87 698 1917 1665 32 331 2005 3741 26 698 2005 1032 58 107 2005 34 85 332 2630 3721 74 698 2630 4926 77 38 2630 2382 33 330 2697 1917 35 698 2697 4537 73 654 2697 3595 99 804 2935 4527 30 698 2935 2697 23 698 2935 3675 59 554 3004 4692 26 698 3004 3735 44 711 3721 2005 98 698 3721 1681 53 98 3721 760 77 855 3741 842 8 698 3741 2342 96 330 3741 1771 35 840 320 506 89 407 320 3938 40 274 506 1537 70 407 506 2372 54 112 1258 4686 78 407 1258 1994 78 713 1258 1362 78 584 1328 3884 82 407 1328 485 28 881 1328 1116 53 368 1537 2643 42 407 1537 2351 80 255 1846 1258 22 407 1846 2945 17 832 1846 4995 42 739 2643 1328 46 407 2643 3989 87 391 2643 664 51 64 3074 3926 47 407 3074 209 22 7 3884 3074 35 407 3884 1684 81 22 3884 1064 91 886 3926 1846 47 407 3926 4755 13 407 3926 2784 32 609 321 897 23 416 321 72 37 180 321 304 75 496 694 2238 44 416 694 3970 75 160 694 513 88 666 897 1697 67 416 897 1198 31 445 1697 2632 23 416 1697 4862 67 416 1697 3054 32 67 2238 2410 26 416 2238 176 60 112 2410 3447 56 416 2410 1269 29 484 2632 694 87 416 2632 196 38 787 2632 881 97 925 3447 4904 92 416 3447 3988 57 62 322 3114 82 385 322 2243 47 600 1074 1685 29 385 1074 2136 42 459 1234 2101 9 385 1234 598 65 4 1242 1074 21 385 1242 502 58 496 1242 4074 6 354 1685 1234 44 385 1685 4738 17 80 2101 4848 77 385 2101 4014 11 245 3114 1242 97 385 3114 4716 12 385 3114 1038 45 934 323 4448 86 532 323 1422 24 805 323 812 93 190 764 1497 35 532 764 4956 97 532 764 4485 68 695 1212 4065 27 532 1212 2622 72 528 1212 3103 46 731 1497 1212 4 532 1497 3735 64 672 2950 764 52 532 2950 1663 83 990 2950 3947 4 781 4065 4614 21 532 4065 1251 67 669 4065 2299 71 239 4448 2950 55 532 4448 1896 59 900 324 2211 67 277 324 2739 81 52 324 3090 88 930 1014 4798 43 277 1014 4599 80 662 1489 2341 86 277 1489 1749 24 774 1489 357 39 312 2211 4315 5 277 2211 4547 70 277 2211 3152 93 287 2317 2326 25 277 2317 1398 17 276 2317 4477 13 115 2326 1014 39 277 2326 4617 43 616 2341 2317 36 277 2341 1154 6 925 2341 3362 43 420 4315 4318 18 277 4315 4312 14 999 4318 1489 1 277 4318 2545 27 569 325 1852 76 593 325 67 36 110 325 3376 24 796 632 3748 67 593 632 1434 82 28 1852 3522 29 593 1852 1785 71 515 1852 623 16 315 2981 4571 87 593 2981 3299 2 446 3522 632 47 593 3522 2607 4 870 3522 733 40 61 3711 4924 13 593 3711 2981 29 593 3711 4334 18 784 3711 2665 62 549 3748 3711 72 593 3748 3847 52 508 326 3499 48 972 326 828 83 444 326 1565 45 633 544 3759 38 972 544 4414 86 819 544 44 2 559 1349 3910 33 972 1349 826 71 672 1349 571 78 533 2393 4140 5 972 2393 1290 10 898 3325 4533 89 972 3325 2393 70 972 3325 1415 62 623 3499 544 64 972 3499 3808 87 162 3759 1349 10 972 3759 4467 16 669 3910 3325 2 972 3910 1411 2 276 3910 3142 36 368 3967 4914 84 972 3967 1466 72 853 4140 3967 53 972 4140 1531 9 374 4140 4187 76 557 327 3624 7 694 327 3428 100 248 327 4988 82 432 1225 3051 10 694 1225 1833 56 103 1225 4619 22 513 2382 4914 21 694 2382 4638 19 919 2382 153 60 938 2405 1225 61 694 2405 3607 29 619 3051 2382 27 694 3051 3850 14 767 3624 4941 20 694 3624 4115 38 694 3624 3527 78 6 4115 2405 65 694 4115 3431 36 331 4115 4640 92 745 328 3059 99 289 328 1350 64 434 328 1797 81 732 732 4137 99 289 732 3099 22 537 899 1187 54 289 899 1694 42 95 1187 1721 66 289 1187 4875 65 289 1187 154 31 200 1721 732 61 289 1721 1890 75 344 2942 899 46 289 2942 2631 80 929 2942 3459 51 51 3059 3206 64 289 3059 108 6 2 3059 3323 16 604 3206 2942 7 289 3206 2439 76 226 3206 587 49 295 4137 4928 10 289 4137 541 6 759 329 577 27 1387 329 4573 56 216 329 3796 76 154 577 3179 84 1387 577 574 71 178 577 2552 81 963 872 4722 79 1387 872 4538 22 211 872 1711 70 293 1318 2767 48 1387 1318 98 9 291 1318 4562 75 778 2376 4031 8 1387 2376 4387 79 476 2376 2672 57 470 2480 1318 77 1387 2480 2223 85 804 2480 33 10 309 2767 872 99 1387 2767 1933 19 786 3179 2376 9 1387 3179 3356 96 679 3179 4931 96 359 4031 2480 3 1387 4031 4709 99 1387 4031 3192 96 340 4031 4681 77 176 330 2458 54 296 330 52 76 175 561 4097 44 296 561 4512 10 291 1538 3446 61 296 1538 3224 7 623 1686 1771 96 296 1686 1524 85 245 1771 3015 42 296 1771 4939 33 282 1771 4602 25 106 2458 1686 86 296 2458 2586 97 749 3015 3983 55 296 3015 2116 42 99 3035 4708 90 296 3035 4551 60 296 3035 2226 43 558 3035 2693 9 380 3446 3035 73 296 3446 662 5 142 3446 2923 2 548 3983 4438 54 296 3983 957 59 935 4097 1538 46 296 4097 2983 16 902 4438 561 71 296 4438 168 22 513 331 2050 2 922 331 526 86 618 782 1566 52 922 782 4934 50 922 782 2977 79 913 1007 1921 84 922 1007 3597 54 2 1007 1882 22 503 1566 3903 13 922 1566 3891 37 393 1566 281 49 282 1921 3944 99 922 1921 4210 94 754 2050 3174 99 922 2050 1556 40 920 3174 1007 15 922 3174 1858 23 496 3903 4528 55 922 3903 808 41 810 3944 782 11 922 3944 1455 88 223 332 3334 32 184 332 2538 76 459 593 4523 85 184 593 2521 58 751 593 3038 19 994 1319 4579 64 184 1319 2719 17 184 1319 2068 66 55 2719 593 81 184 2719 3621 32 477 3334 4346 40 184 3334 3013 34 696 4346 1319 54 184 4346 3885 28 530 333 3356 73 535 333 1613 95 612 333 3147 1 57 636 4258 78 535 636 87 67 240 636 3801 11 838 2983 3573 93 535 2983 4335 16 967 3021 3082 55 535 3021 141 32 314 3021 3181 1 798 3082 636 45 535 3082 99 16 8 3082 1421 99 147 3356 3021 100 535 3356 4977 32 535 3356 2051 97 161 3356 4564 18 209 3573 4787 22 535 3573 4243 67 86 3573 4711 27 236 4073 2983 87 535 4073 2807 62 936 4177 4073 2 535 4177 4478 27 628 4177 1560 55 760 4258 4177 41 535 4258 4224 47 709 334 4245 65 1428 334 1409 17 172 334 3886 20 787 1254 3413 28 1428 1254 4214 42 766 1254 1510 81 578 2173 2905 36 1428 2173 4683 38 1428 2173 3880 15 700 2173 1950 52 553 2723 2173 16 1428 2723 4186 91 519 2723 2895 94 389 2905 1254 86 1428 2905 1232 41 78 3413 4665 84 1428 3413 2056 25 383 4245 2723 59 1428 4245 4979 18 713 4245 980 64 116 335 1894 66 384 335 994 1 620 335 1036 10 46 1042 4625 44 384 1042 43 72 509 1042 2674 94 140 1224 4132 1 384 1224 3426 94 704 1317 2628 95 384 1317 4730 54 384 1317 2514 69 585 1638 1317 31 384 1638 3243 18 241 1894 1224 7 384 1894 1256 19 95 2628 3150 27 384 2628 1951 74 359 2628 4899 78 53 3150 1042 46 384 3150 2027 74 613 4132 1638 42 384 4132 1642 58 242 4132 1842 43 687 336 1780 12 271 336 1340 2 373 336 2455 72 205 588 1486 97 271 588 467 7 689 588 871 42 439 1486 3181 28 271 1486 2066 64 521 1486 2055 87 831 1780 2109 3 271 1780 2933 75 787 1780 4038 33 17 2109 2528 59 271 2109 4483 58 727 2109 4251 71 842 2528 588 86 271 2528 3536 27 734 2528 1360 91 71 3181 4584 33 271 3181 4877 4 271 3181 4349 76 23 337 4218 39 74 337 2481 16 863 2093 3478 34 74 2093 1390 38 774 2392 4313 64 74 2392 4705 77 74 2392 4295 64 603 3375 2093 26 74 3375 4381 36 119 3478 4403 36 74 3478 2687 15 772 3478 1908 35 156 4218 3375 49 74 4218 55 91 325 4313 4924 34 74 4313 57 21 306 4403 2392 58 74 4403 1117 66 944 338 2835 73 427 338 3938 40 145 597 3750 67 427 597 4775 31 295 780 2457 23 427 780 1126 1 394 2457 597 94 427 2457 4727 40 427 2457 1625 95 648 2803 4003 77 427 2803 906 32 725 2835 2803 77 427 2835 4202 50 173 3486 780 53 427 3486 2971 86 923 3486 2496 36 560 3602 4414 59 427 3602 4477 66 540 3602 1126 77 425 3750 3602 54 427 3750 2191 18 606 4003 3486 56 427 4003 2871 75 511 4003 797 36 817 4414 4760 7 427 4414 1343 27 181 4414 4943 71 452 339 1913 81 400 339 4296 70 640 339 2699 80 355 1912 4683 58 400 1912 4204 51 877 1913 2114 62 400 1913 3685 50 500 2114 3450 95 400 2114 505 46 796 2114 943 68 322 2347 4576 94 400 2347 3587 30 400 2347 1270 6 366 2347 134 53 42 3450 2347 79 400 3450 3400 52 860 3587 3894 51 400 3587 1259 96 916 3894 1912 87 400 3894 887 53 554 340 1127 85 584 340 3969 66 139 775 2270 94 584 775 223 49 86 775 50 29 59 1127 1626 96 584 1127 2995 95 549 1127 4541 14 919 1207 3255 70 584 1207 4321 75 984 1207 2065 88 110 1431 2248 39 584 1431 3103 38 552 1431 4573 45 739 1626 1431 94 584 1626 4080 17 320 1626 3420 2 511 1861 2015 7 584 1861 3150 98 355 2015 775 2 584 2015 4682 45 584 2015 737 91 604 2248 1207 45 584 2248 510 28 672 2248 2943 91 29 2270 4776 29 584 2270 2419 85 292 2270 4192 78 467 3255 1861 41 584 3255 2991 6 382 3255 3947 75 467 341 1514 65 411 341 4750 1 753 341 2443 46 500 1514 3237 93 411 1514 4714 73 925 1550 3904 73 411 1550 4991 72 411 1550 4587 79 710 1550 721 59 75 3002 4290 60 411 3002 4409 45 305 3002 3867 2 280 3237 3002 51 411 3237 1915 80 501 3237 2422 67 882 3904 4810 49 411 3904 4510 37 378 4290 1550 91 411 4290 4818 83 666 342 1436 72 656 342 1545 87 221 342 3166 53 130 697 3338 2 656 697 4442 12 978 697 4362 3 13 1436 1855 90 656 1436 3191 76 715 1855 697 28 656 1855 4616 75 656 1855 1040 51 165 1855 1810 96 554 2056 3256 36 656 2056 152 91 769 3256 4765 82 656 3256 4453 6 654 3338 2056 97 656 3338 4626 84 939 343 2623 19 453 343 4213 58 971 343 623 24 867 1164 4052 71 453 1164 1678 61 143 1164 4802 68 194 1809 1164 88 453 1809 1242 88 568 1809 3193 90 453 1929 1809 52 453 1929 4534 97 864 1929 4495 39 543 2623 1929 35 453 2623 4574 65 453 2623 4652 75 525 2623 4789 55 144 3655 4277 20 453 3655 813 79 914 3655 2676 41 446 4052 4201 63 453 4052 1747 5 345 4052 2436 10 992 4201 3655 100 453 4201 2178 22 326 4201 3974 49 987 4277 4614 97 453 4277 1703 82 731 4277 1775 91 733 344 1909 59 327 344 154 60 81 886 4956 56 327 886 4887 88 327 886 4579 2 740 1454 2014 80 327 1454 4180 90 145 1800 1454 15 327 1800 2170 16 400 1800 1536 41 214 1909 4466 87 327 1909 2110 51 634 2014 3950 46 327 2014 3710 95 794 3516 886 81 327 3516 396 55 647 3516 442 13 179 3829 3516 94 327 3829 26 11 392 3829 657 2 243 3950 3829 18 327 3950 2647 33 444 3950 4433 54 640 4466 1800 28 327 4466 4859 85 999 4466 1114 45 111 345 1267 97 729 345 4640 100 944 925 4794 73 729 925 873 76 332 1267 2106 24 729 1267 3276 64 342 1267 29 55 837 1365 2558 16 729 1365 825 30 766 1541 925 29 729 1541 4789 73 729 1541 2175 8 2 1541 1142 85 78 2106 3254 67 729 2106 1665 21 629 2106 2048 5 810 2558 1541 79 729 2558 3766 17 736 2558 4867 67 154 3254 1365 54 729 3254 3099 69 909 346 4326 36 265 346 3471 100 922 1066 4999 8 265 1066 4918 88 683 1942 2724 6 265 1942 926 91 884 2438 3504 97 265 2438 2630 70 265 2438 2604 62 268 2724 2438 35 265 2724 2647 35 315 2856 3859 54 265 2856 4898 29 265 2856 2881 13 422 2856 4721 43 83 3504 2856 22 265 3504 784 12 803 3504 1962 30 348 3859 1066 24 265 3859 2158 45 905 3859 4927 16 661 4326 1942 70 265 4326 4244 8 808 4326 2038 24 858 347 691 54 663 347 2933 24 303 347 4336 81 314 691 1672 34 663 691 1848 68 187 691 154 74 302 760 1562 21 663 760 2586 89 554 1434 3363 49 663 1434 1776 53 712 1434 4747 69 868 1562 4700 56 663 1562 4952 18 663 1562 3625 44 893 1562 4263 48 386 1672 3617 17 663 1672 2691 93 480 1672 1448 45 264 1732 1434 47 663 1732 594 55 835 3363 3537 94 663 3363 551 38 342 3363 183 57 976 3537 760 7 663 3537 12 30 98 3537 1729 80 390 3617 1732 98 663 3617 1764 8 227 348 687 78 968 348 219 95 898 348 712 37 10 687 3709 83 968 687 1827 14 892 687 2231 48 110 959 3235 49 968 959 3231 77 511 959 1684 68 673 962 3429 23 968 962 2368 85 75 1119 1415 37 968 1119 2891 57 38 1119 1208 40 716 1143 959 2 968 1143 3383 98 980 1143 1405 16 163 1415 3995 43 968 1415 4995 97 968 1415 4472 97 184 2042 1119 97 968 2042 4793 21 968 2042 1545 33 33 2042 625 95 873 3235 962 100 968 3235 4404 31 524 3429 4557 29 968 3429 2178 50 534 3429 557 42 69 3709 3822 35 968 3709 3257 49 412 3822 2042 19 968 3822 1842 4 577 3822 3432 62 394 3995 1143 71 968 3995 4684 67 131 3995 1438 98 282 349 3192 93 246 349 36 41 516 2221 2887 39 246 2221 4735 76 89 2221 407 89 118 2703 4626 91 246 2703 4098 32 976 2703 50 2 153 2887 3685 58 246 2887 1954 53 46 2887 528 20 419 3142 2221 57 246 3142 4629 29 246 3142 3790 57 33 3142 3968 11 510 3192 3142 54 246 3192 3793 94 589 3685 2703 7 246 3685 3728 44 477 350 1737 62 250 350 2076 56 883 350 966 24 26 1035 2557 26 250 1035 4554 25 250 1035 1108 2 883 1737 1964 85 250 1737 779 91 833 1737 1841 41 308 1964 3543 62 250 1964 1374 60 311 1964 3415 2 629 2247 2676 42 250 2247 1325 8 144 2247 3232 5 720 2541 3673 78 250 2541 4151 6 181 2557 4963 82 250 2557 4267 36 543 2676 3101 10 250 2676 15 2 160 2676 518 33 386 3101 1035 10 250 3101 512 39 329 3273 2247 78 250 3273 493 5 180 3543 2541 98 250 3543 2081 57 405 3673 3273 29 250 3673 4491 49 643 3673 944 93 15 351 582 76 144 351 4378 70 566 351 4262 3 876 582 2435 31 144 582 1907 81 199 635 1356 87 144 635 3247 60 524 635 1975 61 361 651 3173 25 144 651 3837 63 86 651 4015 99 879 1356 3480 41 144 1356 486 33 72 1356 4674 61 759 2435 651 2 144 2435 369 7 48 2435 3642 15 419 2698 635 45 144 2698 4788 70 144 2698 2327 90 531 2698 101 22 433 3173 2698 30 144 3173 3110 12 267 3173 4298 32 556 3480 4805 10 144 3480 367 31 984 352 2223 94 189 352 2006 27 841 709 4600 33 189 709 2171 47 803 1976 4088 38 189 1976 1574 86 507 1976 1270 92 74 2223 4199 14 189 2223 981 85 768 2223 1609 95 391 2289 4840 27 189 2289 709 35 189 2289 1902 25 711 2289 2273 30 483 4088 2289 65 189 4088 1374 99 919 4088 4691 99 632 4199 1976 92 189 4199 3882 59 591 4199 4969 72 520 353 835 27 713 353 3652 25 882 835 4362 48 713 835 4127 96 355 898 1343 79 713 898 4542 56 685 898 4661 27 236 1343 4401 2 713 1343 2007 2 236 4362 898 6 713 4362 4069 94 174 4401 4601 22 713 4401 4637 11 713 4401 2825 34 995 354 1646 96 317 354 789 37 471 354 2060 48 577 792 1526 67 317 792 3412 31 164 792 1117 84 929 850 792 95 317 850 1153 39 210 1526 4513 9 317 1526 1330 75 146 1526 495 47 591 1646 2600 58 317 1646 255 68 1000 1646 2947 86 399 2600 2866 74 317 2600 1630 27 244 2600 2420 54 978 2866 3898 90 317 2866 4397 13 19 2866 4966 88 133 3898 850 17 317 3898 4570 10 317 3898 3033 50 386 3898 2722 58 893 355 1306 24 439 355 2183 51 909 355 4811 95 813 531 2874 21 439 531 979 65 661 1306 3557 63 439 1306 4318 58 576 1306 535 93 487 1355 2618 92 439 1355 4272 20 479 1355 3155 93 774 2618 4416 57 439 2618 4807 98 439 2618 3151 51 650 2874 1355 75 439 2874 4171 99 810 2874 2002 99 899 3557 531 97 439 3557 4761 66 227 3557 4109 4 285 4416 4542 6 439 4416 3569 64 599 4416 4118 22 94 356 936 9 404 356 1174 64 848 356 358 99 503 936 1850 20 404 936 4609 55 512 936 234 88 914 1390 3713 96 404 1390 3664 4 208 1390 1957 75 354 1850 3042 33 404 1850 1174 77 851 3042 1390 53 404 3042 4214 82 250 3042 590 14 843 3713 3800 73 404 3713 4824 66 404 3713 213 25 740 3800 4848 83 404 3800 2918 42 283 3800 3456 69 761 357 1655 97 937 357 1902 1 81 357 93 86 451 737 836 7 937 737 3022 23 188 836 1630 63 937 836 2642 78 179 836 147 79 291 1281 3754 11 937 1281 4867 27 51 1281 638 79 456 1339 4517 58 937 1339 3140 80 960 1339 1232 19 876 1630 4061 80 937 1630 4978 56 992 1655 1281 69 937 1655 4634 96 937 1655 431 3 729 1802 737 99 937 1802 2842 1 440 3754 1802 51 937 3754 3111 28 89 3754 1084 68 261 4061 1339 25 937 4061 3273 98 639 4061 2800 100 856 358 1417 35 218 358 3667 46 531 358 4882 28 242 1417 4210 84 218 1417 4629 84 218 1417 2373 83 493 3394 3979 55 218 3394 445 87 258 3394 858 100 218 3632 3866 89 218 3632 3505 57 936 3632 3229 79 246 3866 4053 8 218 3866 733 44 916 3866 202 85 209 3979 4597 21 218 3979 903 56 765 3979 98 56 284 4053 3394 17 218 4053 3418 71 632 4053 4065 45 682 4210 4241 15 218 4210 1320 80 792 4210 1040 99 623 4241 3632 70 218 4241 2023 61 280 4241 1910 22 629 359 2797 95 803 359 4335 44 982 359 3080 39 943 1748 4951 4 803 1748 1484 70 437 2041 4494 80 803 2041 4194 12 856 2797 3969 16 803 2797 1085 77 51 2797 1411 60 464 3483 4898 86 803 3483 1748 85 803 3483 163 26 741 3483 3024 49 923 3969 2041 25 803 3969 4263 52 616 4494 3483 14 803 4494 4326 5 348 4494 784 43 767 360 2658 72 333 360 1900 68 122 1103 1594 46 333 1103 3560 52 338 1594 4700 10 333 1594 3387 75 671 1594 4390 98 607 2266 4913 23 333 2266 1103 47 333 2266 761 65 210 2266 3704 58 45 2658 3336 72 333 2658 2459 87 762 3183 2266 76 333 3183 1421 44 18 3183 4819 68 190 3336 3183 26 333 3336 1437 37 351 3336 1855 19 841 361 1231 38 215 361 1161 5 403 361 914 77 715 534 3790 59 215 534 1441 80 982 534 2904 14 450 1231 2212 65 215 1231 4795 67 215 1231 3495 71 907 1231 2986 28 637 1523 534 23 215 1523 2883 25 477 1523 2072 55 582 1605 1523 18 215 1605 2349 27 668 1605 4272 63 150 2212 3571 34 215 2212 673 64 334 3571 1605 40 215 3571 3523 98 947 3790 4855 37 215 3790 4355 14 168 362 4209 13 217 362 2727 71 289 362 4696 41 759 1096 3340 48 217 1096 217 71 959 1096 1382 41 618 1531 4815 58 217 1531 2506 70 298 1531 1856 83 878 1758 1096 79 217 1758 1076 68 36 3340 4221 86 217 3340 2707 45 557 3340 2677 37 947 4209 1758 95 217 4209 2264 43 139 4209 4419 50 357 4221 1531 84 217 4221 4783 49 217 4221 2417 37 5 363 1448 51 757 363 4112 33 623 363 3321 45 463 538 3929 43 757 538 2771 89 878 538 1054 8 50 705 3295 26 757 705 4065 22 176 1448 2408 73 757 1448 214 84 92 1448 2588 24 76 2028 2422 50 757 2028 4978 13 76 2408 3459 2 757 2408 1788 68 923 2408 523 83 865 2422 4882 59 757 2422 2458 47 193 2864 538 3 757 2864 2557 12 713 3295 2864 96 757 3295 1448 22 113 3295 2742 59 596 3459 705 72 757 3459 4961 73 757 3459 859 52 961 3459 4099 91 703 3929 2028 73 757 3929 911 72 806 3929 2667 13 410 364 644 39 437 364 2131 9 511 571 965 64 437 571 3548 38 123 571 1116 46 876 644 1150 100 437 644 1649 9 968 644 4205 6 131 700 4548 14 437 700 1122 68 527 965 4535 95 437 965 1070 5 437 965 4662 37 437 965 2299 44 309 1070 3395 49 437 1070 908 76 863 1070 3670 2 892 1150 1882 21 437 1150 1053 90 551 1150 2291 26 811 1423 3104 39 437 1423 4854 94 54 1423 3225 51 338 1882 1423 96 437 1882 2076 54 585 2854 571 2 437 2854 4848 70 400 2854 362 47 84 2991 4028 84 437 2991 978 13 244 3104 2854 58 437 3104 2588 91 113 3104 2082 38 520 3353 700 26 437 3353 312 92 730 3395 2991 92 437 3395 3342 67 329 4028 3353 22 437 4028 4421 61 147 365 3103 98 888 365 3950 98 890 365 1103 7 508 1481 1495 46 888 1481 1367 76 915 1495 3444 86 888 1495 4025 68 953 3103 3390 82 888 3103 2339 49 21 3390 4324 37 888 3390 4454 45 298 3390 4584 80 487 3444 4886 53 888 3444 432 1 30 3444 3725 6 55 3869 1481 95 888 3869 4965 49 888 3869 1677 10 874 4324 3869 29 888 4324 3583 41 943 4324 4265 47 90 366 2997 75 318 366 1927 56 281 686 1651 51 318 686 4713 47 135 1556 4746 63 318 1556 3180 51 318 1556 299 17 457 1556 2877 30 828 1651 4920 8 318 1651 4019 17 187 1651 4865 61 946 2481 1556 22 318 2481 2225 71 410 2481 4087 1 85 2997 2481 65 318 2997 4506 16 328 3120 4171 55 318 3120 4564 37 383 3120 590 30 97 3180 3871 91 318 3180 2875 55 984 3871 3120 7 318 3871 2367 18 907 3871 2532 80 645 4171 686 75 318 4171 3886 55 866 4171 1118 64 281 367 1826 39 104 367 3744 23 483 776 3773 87 104 776 2619 65 685 776 4924 42 643 1172 2251 28 104 1172 2428 87 980 1172 1267 31 982 1387 776 39 104 1387 1421 34 848 1387 1968 77 464 1826 2018 9 104 1826 2752 57 197 2018 1172 78 104 2018 4940 6 947 2251 3014 80 104 2251 3482 35 265 2269 2456 96 104 2269 1544 47 328 2456 2953 29 104 2456 4721 61 104 2456 2198 24 488 2953 4861 80 104 2953 4838 29 104 2953 1373 26 677 2953 4629 85 330 3014 1387 86 104 3014 1078 76 245 3126 2269 58 104 3126 327 61 788 3126 815 58 920 3773 3126 30 104 3773 4657 2 370 3773 3786 62 996 368 1406 9 358 368 3565 66 772 368 4802 42 875 1406 1586 18 358 1406 3908 49 466 1406 1413 98 463 1586 2565 64 358 1586 482 19 240 1586 498 70 99 1985 4729 68 358 1985 445 46 580 2338 4837 3 358 2338 2582 33 358 2338 3834 73 440 2565 2338 74 358 2565 133 96 590 2582 3396 58 358 2582 2325 82 705 2582 4556 25 722 3396 1985 88 358 3396 4969 82 184 3396 1466 45 768 369 3470 22 451 369 198 40 175 594 4064 99 451 594 1830 10 335 1120 2377 14 451 1120 4833 51 632 1151 2496 83 451 1151 2864 67 385 1151 1037 72 764 1158 1151 29 451 1158 2829 95 653 1158 2619 55 133 1649 2718 73 451 1649 4672 88 451 1649 2267 59 944 2256 1158 62 451 2256 89 27 837 2256 3364 42 853 2377 1649 100 451 2377 3979 36 516 2377 268 78 111 2496 594 66 451 2496 2470 97 879 2496 2086 35 749 2718 2256 38 451 2718 2506 84 740 3222 4797 6 451 3222 1123 10 78 3222 2853 94 233 3470 4940 30 451 3470 1120 77 451 3470 1551 14 70 3470 512 86 703 4064 3222 93 451 4064 3363 66 404 370 840 14 451 370 852 52 705 840 3163 14 451 840 4131 79 369 991 4558 6 451 991 4982 57 451 991 2052 35 416 1783 991 46 451 1783 2864 17 212 2722 1783 81 451 2722 2794 38 154 2722 4072 5 625 3163 3793 95 451 3163 2466 70 314 3793 4379 32 451 3793 1937 84 88 4379 2722 30 451 4379 3459 63 842 371 3457 93 135 371 4349 35 867 371 1497 82 755 1058 2043 76 135 1058 4446 24 720 1058 2513 3 694 1230 1058 69 135 1230 3774 59 24 1230 912 17 496 1420 1465 21 135 1420 4132 41 844 1465 4436 95 135 1465 1444 38 142 2043 2302 23 135 2043 2736 5 348 2043 2263 5 484 2302 4581 41 135 2302 3351 28 403 3457 1420 48 135 3457 4144 3 724 3457 960 47 692 4436 1230 97 135 4436 4851 93 135 4436 42 41 474 4436 3792 15 605 372 3680 2 753 372 1770 68 642 372 580 22 486 778 2154 85 753 778 4587 54 904 2154 2675 92 753 2154 4600 7 906 2675 4380 75 753 2675 4977 29 512 2730 4981 32 753 2730 1120 1 739 3680 778 73 753 3680 4694 7 753 3680 2199 26 813 3972 2730 63 753 3972 3167 15 550 4380 3972 92 753 4380 711 39 934 4380 3980 93 803 373 3691 62 273 373 2713 16 458 373 1781 78 658 1050 4981 75 273 1050 2416 71 273 1050 4132 23 485 1050 503 93 862 1382 4911 30 273 1382 3533 6 312 1382 4485 13 774 1652 3787 90 273 1652 496 31 189 1652 2648 55 470 2013 3595 74 273 2013 4801 32 102 2416 1382 42 273 2416 1183 29 878 2416 333 95 329 3595 4125 76 273 3595 2259 54 631 3595 2764 80 775 3691 4014 61 273 3691 3660 41 346 3787 4349 88 273 3787 603 68 732 3787 4347 94 164 4014 2013 43 273 4014 4877 24 207 4125 1652 35 273 4125 4778 10 426 4349 1050 4 273 4349 394 16 55 374 1782 16 22 374 1534 99 734 374 2856 24 967 532 676 38 22 532 2702 78 957 676 4071 73 22 676 284 40 321 1782 3227 22 22 1782 1049 97 538 1904 4741 47 22 1904 532 63 22 1904 4079 43 604 2137 1904 9 22 2137 3482 36 212 2774 2137 17 22 2774 1186 50 72 2774 84 64 521 3227 3392 8 22 3227 3503 20 685 3227 242 48 593 3392 3708 84 22 3392 4490 28 831 3392 1008 95 344 3708 2774 21 22 3708 4830 39 813 3708 1607 65 468 4071 4987 97 22 4071 232 68 986 4071 842 78 510 375 510 90 284 375 3764 16 245 375 1704 61 616 510 3077 75 284 510 3005 44 606 510 1190 19 953 602 4077 52 284 602 3994 70 719 602 2434 59 451 927 4054 24 284 927 1722 38 849 927 3202 93 730 2060 2507 26 284 2060 4268 75 493 2060 754 37 324 2183 602 68 284 2183 1477 56 656 2183 851 76 298 2507 4733 92 284 2507 4529 30 284 2507 3338 27 946 2507 1004 55 184 3077 4310 98 284 3077 4731 6 175 4054 2060 63 284 4054 3894 90 271 4054 645 18 363 4077 927 53 284 4077 935 71 670 4077 2811 54 694 4310 2183 15 284 4310 3321 98 390 4310 619 45 829 376 2150 71 15 376 4556 24 657 376 4303 100 416 798 1004 73 15 798 640 30 195 824 1340 24 15 824 2399 81 663 1004 2913 62 15 1004 3267 2 303 1004 4201 17 122 1243 824 52 15 1243 255 4 9 1340 798 86 15 1340 760 97 401 1922 2572 86 15 1922 4962 22 15 1922 418 71 247 2150 1243 71 15 2150 3295 11 370 2572 4710 40 15 2572 2710 29 283 2572 863 100 923 2913 1922 38 15 2913 4582 74 833 2913 1635 100 245 377 4320 74 1020 377 4370 81 803 796 4169 9 1020 796 1283 7 797 796 3285 51 552 1065 3385 73 1020 1065 4467 80 927 1443 4983 11 1020 1443 3640 69 22 3385 796 71 1020 3385 3081 59 350 3385 272 25 451 4169 1443 5 1020 4169 2497 52 155 4169 3519 1 717 4320 1065 73 1020 4320 4544 33 1020 4320 574 70 242 4320 1573 41 81 378 1901 43 326 378 379 73 844 378 1798 5 597 924 1724 40 326 924 1445 99 159 924 2550 54 979 1724 3348 57 326 1724 3203 86 263 1724 1593 86 523 1901 3935 47 326 1901 3508 62 703 2010 2460 39 326 2010 4835 59 326 2010 4282 43 272 2460 3354 48 326 2460 3093 37 657 3348 4250 83 326 3348 819 43 875 3348 1573 67 99 3354 924 1 326 3354 1690 37 919 3354 4629 87 918 3935 2010 74 326 3935 3751 87 903 4250 4803 28 326 4250 2248 93 708 379 569 46 436 379 4819 47 463 379 807 67 459 569 2332 10 436 569 1716 54 219 1518 2886 52 436 1518 1011 60 125 1518 3261 1 54 1684 4236 88 436 1684 4964 36 70 2332 4373 9 436 2332 4675 37 436 2332 2709 39 668 2886 3704 17 436 2886 4248 20 305 2886 2146 50 360 3601 1518 33 436 3601 164 49 256 3601 4700 4 706 3704 4653 58 436 3704 2995 94 952 3704 4374 26 368 3714 3601 57 436 3714 2889 50 25 4236 3714 48 436 4236 2590 84 349 4373 1684 7 436 4373 32 57 435 4373 1333 76 814 380 2563 41 360 380 2761 12 159 677 3196 6 360 677 1448 14 906 1192 4120 26 360 1192 730 97 390 1577 677 83 360 1577 29 50 517 1577 4902 50 183 2563 1577 28 360 2563 3743 51 205 2563 3182 19 824 3196 1192 100 360 3196 4693 20 360 3196 4500 75 649 3196 389 86 557 4120 4564 33 360 4120 3762 83 638 4120 3526 20 516 381 4325 82 389 381 3303 1 726 2100 3923 15 389 2100 3153 77 210 2100 959 75 718 3073 2100 61 389 3073 4771 85 389 3073 1952 25 908 3536 4167 12 389 3536 1210 43 689 3603 3073 52 389 3603 330 46 128 3923 4609 83 389 3923 4181 92 5 4167 3603 72 389 4167 1300 80 989 4325 3536 76 389 4325 873 64 22 382 2344 42 949 382 1912 9 996 382 994 88 659 889 4544 2 949 889 4643 94 949 889 3987 39 907 909 2590 34 949 909 4455 23 760 1658 909 13 949 1658 1123 99 702 1658 3303 31 39 1680 1719 12 949 1680 562 55 605 1680 1692 54 181 1719 1778 89 949 1719 2586 39 629 1778 889 4 949 1778 632 6 406 2344 1658 21 949 2344 357 43 557 2344 719 13 451 2590 1680 62 949 2590 326 60 366 2590 3482 55 792 383 2979 74 311 383 625 71 780 383 968 98 679 1005 3137 40 311 1005 903 35 406 1255 4582 62 311 1255 1421 57 450 2352 3939 44 311 2352 2844 98 153 2483 4631 84 311 2483 2352 88 311 2483 584 27 242 2979 3032 79 311 2979 5000 1 649 2979 3402 49 609 3032 3215 10 311 3032 1105 78 387 3032 2354 99 989 3137 1255 19 311 3137 2328 96 917 3137 1037 92 964 3215 2483 39 311 3215 2723 38 435 3939 1005 17 311 3939 3280 45 30 3939 2025 72 89 384 3431 21 990 384 3698 23 489 384 4140 46 248 1278 3832 62 990 1278 1690 82 782 1422 4323 19 990 1422 295 78 266 1422 4784 4 556 3138 4830 52 990 3138 4968 30 990 3138 1076 34 499 3138 603 55 984 3147 3546 98 990 3147 3929 43 441 3147 4561 82 17 3431 3147 57 990 3431 2469 32 430 3431 2935 37 28 3546 3728 91 990 3546 2669 76 143 3728 1278 87 990 3728 4164 1 29 3832 1422 84 990 3832 2405 90 950 3832 1764 97 491 4323 3138 87 990 4323 2087 78 981 385 1279 41 75 385 869 38 962 1279 4333 93 75 1279 1742 10 258 2779 3290 6 75 2779 2393 77 90 2779 4930 98 427 3290 3917 52 75 3290 3154 71 582 3461 4497 96 75 3461 1103 23 462 3461 2757 57 487 3917 4451 26 75 3917 3797 88 584 3917 4912 47 69 4333 2779 14 75 4333 1628 17 850 4451 3461 54 75 4451 4780 71 75 4451 2610 67 223 4451 4718 84 469 4497 4610 5 75 4497 712 26 972 4497 3213 64 901 386 649 73 563 386 734 9 58 649 1711 35 563 649 561 46 39 1003 1492 73 563 1003 2423 68 824 1152 2578 12 563 1152 4780 98 563 1152 3704 71 976 1152 2249 74 261 1492 2526 38 563 1492 207 67 573 1492 3608 33 46 1711 1971 84 563 1711 796 72 404 1971 2959 59 563 1971 1230 17 351 2526 1152 5 563 2526 4873 74 629 2578 4556 46 563 2578 373 80 83 2578 75 66 408 2959 3178 40 563 2959 2915 65 878 3164 1003 100 563 3164 4282 17 857 3178 3164 82 563 3178 2449 88 546 387 2850 33 481 387 264 48 31 711 4510 57 481 711 2174 31 822 711 2141 39 462 1554 711 5 481 1554 898 22 394 1554 2711 91 31 1583 3879 41 481 1583 2385 90 453 2850 4615 62 481 2850 4130 11 481 2850 1588 29 330 2850 2201 45 290 3879 1554 22 481 3879 1228 28 766 3879 1463 82 360 4130 1583 7 481 4130 3235 43 976 388 4056 25 546 388 3304 61 512 807 1688 22 546 807 188 25 897 1235 4443 78 546 1235 731 8 779 1235 1875 3 666 1688 4789 51 546 1688 2391 63 839 1914 1235 63 546 1914 3907 84 31 2039 807 100 546 2039 4454 98 784 2521 1914 40 546 2521 2488 72 389 2521 3175 98 627 4056 4207 12 546 4056 1926 40 323 4207 2521 47 546 4207 3001 62 547 4225 2039 34 546 4225 4527 18 546 4225 3417 25 515 4443 4225 9 546 4443 4150 45 429 4443 3293 33 330 389 885 19 455 389 4326 84 914 885 1357 37 455 885 3657 57 493 1203 4992 57 455 1203 2417 75 220 1203 515 65 655 1357 4603 99 455 1357 4460 93 455 1357 892 53 724 1357 244 74 12 2158 3509 43 455 2158 532 88 947 2158 799 17 194 2853 3882 6 455 2853 3672 29 167 2853 2665 24 989 3509 4067 50 455 3509 1470 46 71 3509 1468 44 44 3882 4292 27 455 3882 3375 47 67 4067 1203 68 455 4067 2910 50 908 4292 2158 75 455 4292 4013 93 74 4460 4462 91 455 4460 2996 9 752 4462 2853 64 455 4462 3824 84 711 4462 1708 39 859 390 4105 59 356 390 2400 22 402 390 3138 5 780 816 2740 100 356 816 2979 4 525 1048 1677 67 356 1048 1261 81 335 1048 2265 17 831 1549 1048 26 356 1549 3993 73 12 1677 2380 84 356 1677 1085 97 58 1677 4156 32 908 2380 3441 74 356 2380 4315 63 193 2740 3730 25 356 2740 4961 60 742 2740 1262 27 726 3441 816 64 356 3441 4713 64 567 3730 4700 89 356 3730 2756 39 585 4105 1549 96 356 4105 4907 100 356 4105 1240 1 591 391 1376 38 496 391 69 38 533 964 4285 78 496 964 2500 5 526 964 2752 41 553 1376 4755 28 496 1376 2729 67 496 1376 535 58 183 1376 988 93 871 1916 2640 76 496 1916 1559 54 588 1916 3804 79 918 2151 4937 59 496 2151 4931 28 872 2500 1916 33 496 2500 2561 18 296 2500 3110 93 896 2640 964 64 496 2640 430 53 556 2640 226 31 800 2729 2500 38 496 2729 4623 55 400 4285 2151 48 496 4285 4598 87 881 4285 802 82 730 392 4268 57 525 392 480 35 16 623 797 23 525 623 1721 67 47 623 375 24 951 797 4261 71 525 797 4128 37 983 1020 4725 1 525 1020 2813 88 893 1020 2555 92 242 1052 623 5 525 1052 2768 94 752 1052 5 16 606 2727 3364 16 525 2727 4855 51 525 2727 4697 10 85 2727 828 35 261 3364 3857 91 525 3364 1071 63 18 3364 2853 73 612 3857 1020 47 525 3857 3695 56 200 4228 1052 100 525 4228 653 70 1 4261 2727 20 525 4261 4466 45 864 4268 4228 38 525 4268 2592 22 337 393 2504 30 682 393 4283 32 652 1280 4864 1 682 1280 2165 85 682 1280 308 10 506 1280 4202 48 230 1289 1280 95 682 1289 4837 75 249 1289 4142 37 796 1452 3439 64 682 1452 3231 91 471 1452 1521 36 617 2165 4191 91 682 2165 31 57 483 2386 3343 29 682 2386 1260 17 808 2504 2386 97 682 2504 1206 50 176 3343 1289 57 682 3343 4919 34 32 3343 4552 61 135 3439 4843 61 682 3439 2604 39 393 3439 3499 23 887 4191 1452 19 682 4191 1979 16 173 394 2331 14 215 394 2618 5 946 394 619 31 819 527 4558 2 215 527 4908 52 215 527 2845 76 235 953 3151 27 215 953 1482 72 949 1220 953 74 215 1220 3665 12 241 1220 2389 8 60 2331 1220 3 215 2331 769 53 239 2331 986 16 404 2441 2616 30 215 2441 315 1 562 2616 3271 65 215 2616 4736 20 468 2616 1441 100 720 3151 2441 42 215 3151 3801 74 622 3151 1241 34 73 3271 527 72 215 3271 4457 8 577 3271 3227 63 681 395 2336 32 632 395 598 62 456 395 2358 15 857 832 1837 35 632 832 4076 38 912 832 3239 16 27 1300 1792 43 632 1300 1846 40 180 1580 3771 69 632 1580 926 36 996 1580 2806 47 458 1792 3849 6 632 1792 1267 65 245 1837 1300 3 632 1837 4352 85 362 1837 1414 14 423 2336 1580 63 632 2336 3085 35 901 3481 832 31 632 3481 189 91 209 3583 3481 94 632 3583 4634 69 771 3583 2969 52 943 3771 3583 98 632 3771 976 90 845 3849 4911 21 632 3849 4697 48 632 3849 1939 34 517 396 1360 75 339 396 1692 87 499 973 4760 33 339 973 379 89 566 1360 3874 16 339 1360 2341 100 405 1360 3201 63 992 1853 2193 38 339 1853 4771 93 550 1853 4865 76 133 2193 4159 94 339 2193 1126 57 32 2193 1054 27 55 2253 4281 91 339 2253 4729 77 155 3874 2253 43 339 3874 4901 58 339 3874 4846 92 790 3874 3486 34 108 4159 973 33 339 4159 4106 48 428 4159 3081 77 265 4281 1853 46 339 4281 1232 36 202 4281 4690 46 919 397 1323 66 91 397 3119 77 45 397 3057 73 161 1323 3798 46 91 1323 4112 60 897 1585 2910 86 91 1585 341 60 539 1585 1105 89 469 2553 3547 47 91 2553 3022 90 963 2829 3468 29 91 2829 4765 78 91 2829 2982 54 583 2910 2829 93 91 2910 1201 66 123 2910 1817 18 243 3468 2553 9 91 3468 1383 2 67 3547 4784 21 91 3547 4507 99 348 3547 449 89 489 3798 1585 25 91 3798 1916 51 739 398 755 55 326 398 3184 88 482 398 4595 78 249 528 3552 27 326 528 386 96 199 755 528 78 326 755 4644 33 326 755 2791 19 354 755 3028 68 348 1379 4007 37 326 1379 1363 99 488 3552 1379 92 326 3552 1088 84 140 4007 4816 12 326 4007 548 60 292 4007 128 82 698 399 2611 38 8 399 832 89 188 399 1731 54 191 1247 2058 41 8 1247 1245 31 602 1247 4282 100 368 1359 1751 46 8 1359 4509 18 8 1359 710 48 840 1751 3400 79 8 1751 348 41 83 1751 4477 54 578 2058 4987 26 8 2058 616 78 879 2058 4516 19 583 2611 1359 46 8 2611 2427 37 56 2611 2678 63 460 3400 1247 28 8 3400 1961 33 39 3400 3807 17 296 400 922 44 413 400 2971 29 483 753 3176 37 413 753 4849 87 341 753 1831 12 52 922 1769 53 413 922 3604 51 471 1769 4338 71 413 1769 4946 42 413 1769 4436 64 721 3176 3696 100 413 3176 1857 35 299 3176 4607 77 123 3324 4761 95 413 3324 1012 30 975 3696 3324 40 413 3696 2864 42 734 3696 1379 65 19 4338 753 47 413 4338 1301 51 174 401 1938 92 448 401 3173 94 849 401 4047 18 566 1869 4649 79 448 1869 1655 96 189 1869 189 32 542 1938 1963 5 448 1938 3299 51 577 1938 3018 37 568 1963 3920 62 448 1963 2496 81 61 2142 4976 11 448 2142 3563 15 448 2142 4255 25 668 2142 3871 77 802 3563 3715 24 448 3563 4554 60 976 3715 1869 56 448 3715 2918 100 950 3920 2142 51 448 3920 1467 86 546 402 3171 38 597 402 2192 84 882 402 3855 69 90 2125 2858 79 597 2125 3193 32 516 2858 4383 46 597 2858 918 40 444 2858 2765 42 495 3171 3868 27 597 3171 4145 78 521 3868 2125 47 597 3868 4675 90 597 3868 4806 32 930 3868 4054 76 777 4383 4956 53 597 4383 4792 41 223 403 2900 42 854 403 546 51 229 403 1431 11 459 750 4545 55 854 750 4841 52 854 750 1007 81 958 1271 4001 97 854 1271 944 99 773 1623 3916 15 854 1623 936 63 32 1623 1364 57 487 1949 1623 8 854 1949 2706 64 431 2627 1949 18 854 2627 3645 34 483 2900 1271 96 854 2900 1270 68 958 3916 750 97 854 3916 3650 93 102 4001 2627 90 854 4001 2494 17 683 404 1962 35 227 404 2090 4 729 404 3234 84 559 1264 4395 71 227 1264 782 68 411 1264 1237 46 120 1962 2451 12 227 1962 4824 59 262 1962 1837 32 323 2076 4480 78 227 2076 3800 1 10 2076 2684 40 464 2451 2562 86 227 2451 4880 84 451 2562 1264 75 227 2562 3105 48 654 2562 1968 43 223 3065 4630 23 227 3065 194 84 423 3065 2165 59 539 3204 2076 65 227 3204 4412 17 594 3204 2492 100 16 4395 3204 65 227 4395 2480 89 581 4480 3065 37 227 4480 4972 16 227 4480 3924 95 606 4480 4499 13 616 405 2987 5 337 405 201 21 391 867 2113 51 337 867 1483 99 141 867 4932 48 330 2113 2707 3 337 2113 4403 72 5 2707 4965 11 337 2707 3591 89 281 2707 2775 71 308 2926 3195 71 337 2926 4510 57 51 2926 521 60 908 2987 2926 13 337 2987 1956 14 528 2987 1534 9 865 3195 867 13 337 3195 4916 3 337 3195 3030 15 319 406 1023 94 326 406 1736 28 13 1023 3028 77 326 1023 4696 39 326 1023 1908 56 200 1023 1821 54 766 2335 3896 5 326 2335 2740 54 946 2335 1191 30 272 3028 2335 59 326 3028 1583 84 22 3028 4744 34 528 3896 4553 84 326 3896 119 83 532 407 668 100 402 407 768 52 659 407 4505 84 935 668 2263 78 402 668 1020 42 607 945 1895 38 402 945 4705 51 172 1895 3087 13 402 1895 2498 38 857 1895 3231 26 68 2263 945 66 402 2263 2304 51 790 3087 3720 72 402 3087 4919 85 402 3087 289 4 891 3087 282 98 840 3720 4834 50 402 3720 2864 58 827 3720 3010 68 351 408 821 40 212 408 393 17 204 408 1466 89 501 740 4584 18 212 740 1541 28 222 740 4921 73 516 821 3660 59 212 821 2543 48 191 821 2493 10 149 1099 2239 23 212 1099 2143 80 459 1099 4072 16 677 2239 740 27 212 2239 2483 94 737 3530 4737 11 212 3530 1099 72 212 3530 4145 67 392 3660 3530 97 212 3660 3123 30 29 409 2839 69 265 409 1422 24 255 409 1368 40 874 536 4797 73 265 536 2819 64 547 728 3158 27 265 728 1432 62 892 728 1485 51 69 979 536 60 265 979 1477 58 148 979 1297 30 199 1055 2704 23 265 1055 1941 90 791 1055 618 5 191 2704 728 93 265 2704 1205 24 396 2839 1055 77 265 2839 4725 78 265 2839 13 83 837 2839 4698 18 495 3158 979 53 265 3158 4392 54 237 3158 2442 7 437 410 3197 54 415 410 2092 88 868 533 4811 77 415 533 805 54 799 533 992 57 221 849 2308 22 415 849 1054 55 335 1313 1456 50 415 1313 4687 56 415 1313 3569 25 298 1313 2378 1 176 1368 1313 51 415 1368 3322 21 48 1456 533 35 415 1456 2696 37 690 1456 519 89 424 2308 3177 93 415 2308 4977 81 708 2308 771 41 36 3177 1368 38 415 3177 4992 9 922 3177 349 75 59 3197 849 34 415 3197 2540 26 390 411 2250 34 239 411 2855 23 732 411 16 52 909 1232 1924 17 239 1232 2643 23 867 1429 1232 38 239 1429 4253 27 297 1429 4628 85 808 1924 2200 17 239 1924 1451 51 688 2168 1429 81 239 2168 635 93 648 2168 2206 27 342 2200 4838 93 239 2200 1889 34 341 2200 1169 93 85 2250 4810 17 239 2250 2749 36 239 2250 4392 94 422 2749 2168 45 239 2749 4741 95 377 2749 4404 75 620 412 1292 60 659 412 1801 77 143 412 2673 98 976 575 2705 38 659 575 2685 52 685 575 4980 89 662 907 4437 55 659 907 3897 34 380 907 1941 66 342 933 1380 33 659 933 3075 70 725 1217 933 50 659 1217 740 14 859 1292 907 69 659 1292 2586 57 101 1364 1217 68 659 1364 2406 78 763 1380 4895 19 659 1380 1798 30 469 1380 2935 19 430 2705 1364 62 659 2705 110 96 55 2705 2533 2 68 4437 575 6 659 4437 4737 24 659 4437 4501 10 922 4437 1983 45 540 413 3347 82 603 413 206 62 508 876 4640 89 603 876 4537 17 603 876 2106 61 550 876 2609 36 69 1635 876 17 603 1635 2738 81 181 1635 2929 76 703 3287 1635 24 603 3287 1694 51 220 3347 3739 15 603 3347 2744 32 508 3386 3287 75 603 3386 1612 96 869 3739 3386 45 603 3739 1869 83 680 3739 1050 32 660 414 3321 78 827 414 412 79 737 723 2006 58 827 723 1890 74 876 723 50 63 217 2006 3941 59 827 2006 209 75 429 2006 533 46 311 2505 4187 91 827 2505 2601 2 671 2505 2275 4 436 2649 723 68 827 2649 2547 74 786 3321 2505 59 827 3321 4869 58 827 3321 2533 65 58 3321 226 14 325 3941 4902 35 827 3941 1221 33 387 3941 656 43 694 4187 2649 8 827 4187 3910 88 688 415 4447 15 28 415 4347 66 705 415 4077 80 532 1363 4690 75 28 1363 4855 36 98 2492 1363 49 28 2492 4589 58 800 3210 3650 11 28 3210 2217 55 88 3210 2897 26 85 3333 2492 3 28 3333 2840 63 882 3650 3333 77 28 3650 4522 73 580 4447 3210 82 28 4447 4697 45 28 4447 1168 48 716 416 1575 33 309 416 3415 100 458 416 4499 89 882 693 4344 59 309 693 3800 79 904 1059 693 4 309 1059 2902 29 988 1575 2788 30 309 1575 1870 76 683 1575 63 50 344 1700 4856 90 309 1700 389 26 11 2788 4295 46 309 2788 706 56 42 2788 1608 80 868 4295 4828 87 309 4295 1059 52 309 4295 1714 38 63 4344 1700 64 309 4344 1288 71 268 417 828 33 384 417 1264 10 421 417 527 55 390 828 4392 4 384 828 3839 14 563 828 1551 63 982 1664 1873 12 384 1664 4746 68 593 1664 2159 9 203 1873 3094 80 384 1873 4611 90 384 1873 509 58 358 1873 2880 39 371 2787 1664 76 384 2787 4427 86 77 2904 4048 99 384 2904 4076 10 666 2904 4995 1 898 3094 2904 25 384 3094 3446 75 725 3772 2787 18 384 3772 1142 69 504 3772 312 30 919 4048 4906 68 384 4048 3177 20 877 4392 3772 94 384 4392 1233 46 485 418 2087 20 115 418 1212 64 356 618 1304 22 115 618 2146 98 633 642 4757 49 115 642 331 6 262 1200 618 42 115 1200 1111 58 764 1211 1900 10 115 1211 3669 60 669 1304 1211 19 115 1304 1377 17 935 1304 1508 93 57 1900 642 60 115 1900 2940 40 259 2087 2968 30 115 2087 4182 75 242 2968 1200 55 115 2968 4719 7 115 2968 3512 58 894 2968 2553 67 636 419 4050 58 386 419 4171 18 29 1194 2516 6 386 1194 1033 20 649 1263 1194 38 386 1263 1564 31 844 1263 1745 82 444 1324 2975 26 386 1324 1628 28 228 1324 3326 75 692 2516 3119 23 386 2516 1529 12 523 2516 3231 3 908 2951 4994 92 386 2951 1263 29 386 2951 313 65 822 2975 2951 34 386 2975 4927 1 982 3119 4619 56 386 3119 2982 57 774 3119 2334 47 827 4050 1324 34 386 4050 3856 57 246 420 805 82 342 420 3945 48 664 805 3991 86 342 805 1198 93 391 805 1093 76 265 1056 2277 70 342 1056 611 24 677 1056 1179 1 503 1366 2011 8 342 1366 3687 81 491 1366 467 10 332 2011 4851 91 342 2011 1056 94 342 2011 1565 56 655 2277 3943 18 342 2277 565 12 314 3943 4753 80 342 3943 2199 53 546 3991 1366 76 342 3991 4172 89 667 3991 4264 28 954 421 1063 74 523 421 4589 73 933 606 1302 96 523 606 3904 98 789 1063 2746 57 523 1063 522 94 274 1302 4570 17 523 1302 1370 16 523 1302 1038 25 324 1370 4408 55 523 1370 1890 2 604 2322 606 64 523 2322 761 53 11 2746 3654 45 523 2746 4433 10 952 2746 2508 24 131 3654 2322 76 523 3654 2504 8 228 4408 4565 21 523 4408 887 89 683 422 2476 68 309 422 318 56 149 1273 4200 12 309 1273 537 43 291 1411 2062 14 309 1411 3918 60 596 1411 4720 72 960 1866 4803 37 309 1866 4141 36 711 1866 3677 86 752 1903 4502 36 309 1903 4166 80 309 1903 308 13 974 1903 3450 67 613 2062 1866 50 309 2062 2119 31 375 2476 1273 22 309 2476 2697 81 125 3299 1903 76 309 3299 19 42 974 3299 4445 85 488 4166 1411 99 309 4166 42 19 618 4166 210 72 561 4200 3299 55 309 4200 196 44 742 4200 1940 97 524 423 1392 45 204 423 2126 67 347 423 2610 48 815 960 3781 65 204 960 4928 49 110 1392 2241 48 204 1392 1061 1 32 2241 3980 12 204 2241 376 84 807 2241 3984 30 552 3047 4546 51 204 3047 4535 90 176 3781 3047 78 204 3781 4796 36 204 3781 3178 41 395 3781 1563 95 617 3980 960 40 204 3980 3379 99 163 424 1908 38 264 424 1245 27 774 666 4535 74 264 666 3489 5 335 666 1423 10 855 1490 4021 29 264 1490 799 13 813 1490 713 27 301 1798 666 28 264 1798 2610 71 774 1908 1490 100 264 1908 1266 14 577 1908 3556 31 854 4021 1798 41 264 4021 4626 15 264 4021 4221 23 778 425 742 79 632 425 283 92 794 610 3427 69 632 610 2266 78 496 610 4716 53 474 742 1898 78 632 742 2133 26 278 742 975 88 640 1303 2901 48 632 1303 185 6 944 1303 902 20 550 1898 4238 43 632 1898 4634 87 632 1898 1825 92 951 2827 2941 87 632 2827 3296 33 57 2901 4953 70 632 2901 4677 49 632 2901 4661 80 995 2901 3433 19 55 2941 1303 82 632 2941 621 36 245 2941 4479 34 673 3427 3976 14 632 3427 1414 5 83 3533 610 40 632 3533 925 100 186 3533 1917 70 800 3976 2827 72 632 3976 4160 81 240 4238 4331 50 632 4238 3282 33 223 4238 4356 45 878 4331 3533 24 632 4331 2401 98 179 4331 184 48 798 426 3933 24 692 426 1951 90 104 426 3461 46 108 604 4909 33 692 604 3853 82 639 604 3610 6 262 2246 4683 52 692 2246 2300 92 692 2246 3774 88 313 2300 604 72 692 2300 2074 82 633 3933 4339 69 692 3933 4004 5 609 3933 1143 8 313 4339 2246 63 692 4339 2946 81 578 427 3526 56 930 427 2645 60 376 2478 4623 35 930 2478 3954 70 930 2478 2649 65 121 2478 896 1 534 3289 4079 8 930 3289 965 9 588 3526 3289 49 930 3526 2068 79 76 3526 757 14 885 3633 3810 35 930 3633 2958 42 333 3633 3627 4 384 3810 4829 21 930 3810 4860 97 746 3954 3633 76 930 3954 2150 76 304 4079 2478 22 930 4079 4414 42 237 428 2461 31 648 428 4556 8 434 428 1608 34 549 2155 4576 71 648 2155 2407 36 648 2155 4521 47 107 2155 1981 11 180 2407 4913 43 648 2407 4557 97 279 2461 4142 32 648 2461 3834 72 311 4142 2155 60 648 4142 297 30 514 4142 3369 22 726 429 2304 61 404 429 1033 16 225 2187 3410 63 404 2187 2531 50 443 2304 3927 12 404 2304 4540 9 404 2304 1716 9 670 2304 899 33 84 2305 2187 60 404 2305 4270 59 607 2305 3425 63 808 2369 2305 27 404 2369 1094 95 23 2369 2972 2 930 2895 2369 5 404 2895 4314 12 795 2895 3988 36 459 3410 4624 89 404 3410 3446 79 498 3410 3536 39 5 3927 4090 23 404 3927 1334 23 888 4090 2895 90 404 4090 868 25 406 4090 1244 20 233 430 3342 21 264 430 933 33 242 621 4439 18 264 621 4852 2 877 621 3474 46 807 3266 4974 54 264 3266 2799 68 775 3266 3876 75 314 3342 3978 47 264 3342 4703 89 988 3342 1512 60 720 3978 4737 57 264 3978 621 10 264 3978 4006 15 317 4439 3266 38 264 4439 2888 38 135 431 1123 63 1014 431 2610 86 52 1082 3897 9 1014 1082 2593 36 704 1082 4390 11 787 1123 1643 49 1014 1123 765 13 105 1123 3548 54 673 1643 4493 38 1014 1643 2835 13 297 1643 2331 94 223 3008 3843 62 1014 3008 1050 87 25 3123 3008 32 1014 3123 3740 51 184 3123 4929 83 469 3843 4845 87 1014 3843 1082 31 1014 3843 4650 1 432 3897 4573 10 1014 3897 4243 81 158 4493 3123 21 1014 4493 680 46 693 432 1731 91 298 432 3089 94 816 432 3482 54 964 1731 3406 71 298 1731 2667 54 715 1767 2725 61 298 1767 2041 12 747 1767 2160 18 812 1933 1767 54 298 1933 4937 71 298 1933 19 3 874 1933 2477 75 123 2696 4757 19 298 2696 4213 92 57 2725 2696 41 298 2725 3001 40 348 3406 1933 1 298 3406 1612 44 329 3406 2186 21 836 433 2958 38 498 433 742 67 917 1606 3852 70 498 1606 4918 4 776 2177 1606 61 498 2177 4430 83 407 2177 1288 66 602 2688 2177 20 498 2688 4510 16 498 2688 1322 75 651 2791 2688 25 498 2791 3957 85 566 2791 1103 75 170 2958 2791 23 498 2958 4833 78 14 2958 4857 60 499 3742 4862 98 498 3742 517 22 974 3742 3183 96 765 3852 3742 5 498 3852 4919 98 344 434 1276 86 36 434 4871 90 531 434 1378 72 399 1072 3128 81 36 1072 4959 73 36 1072 4181 33 116 1072 1532 30 297 1276 1072 93 36 1276 3779 57 103 1276 4545 1 534 1401 4643 64 36 1401 3103 81 825 1892 2144 8 36 1892 1992 94 274 1892 4899 59 619 2144 1401 36 36 2144 1634 19 34 2144 3635 44 660 3128 3416 91 36 3128 2561 20 223 3128 4679 87 756 3416 1892 100 36 3416 3117 75 861 435 585 11 141 435 2795 67 117 435 1996 38 507 585 3611 46 141 585 1921 97 277 585 286 51 527 944 4908 29 141 944 288 91 270 1665 4838 23 141 1665 3012 76 141 1665 869 94 142 1665 4774 44 965 3012 3029 14 141 3012 1802 57 826 3012 250 2 107 3029 944 74 141 3029 1857 86 290 3611 1665 58 141 3611 321 37 269 436 1154 99 957 436 1409 93 395 436 434 17 925 906 1595 5 957 906 4542 39 957 906 164 2 47 906 1126 69 963 1154 1335 15 957 1154 4305 54 456 1184 906 48 957 1184 2088 21 443 1335 4282 20 957 1335 446 74 128 1595 4873 79 957 1595 2784 72 784 1595 1143 97 23 2149 1184 37 957 2149 3905 55 63 2149 710 68 621 4282 2149 89 957 4282 2523 17 959 437 1134 60 574 437 4496 10 304 1018 3272 83 574 1018 2980 96 162 1031 3064 54 574 1031 2816 73 426 1134 1018 30 574 1134 4530 29 574 1134 2018 67 593 1134 2387 96 401 1710 1031 45 574 1710 1988 16 29 1710 3546 1 549 3064 4526 41 574 3064 3919 16 732 3272 1710 90 574 3272 2440 58 446 438 4256 99 507 438 4889 74 409 958 4192 10 507 958 1754 10 883 1287 2532 42 507 1287 1303 24 390 1287 973 64 502 2286 958 55 507 2286 3023 29 298 2532 3618 37 507 2532 253 56 375 2532 1873 17 946 3319 2286 89 507 3319 780 60 60 3319 3704 43 527 3618 4800 5 507 3618 4683 90 507 3618 3879 54 807 3618 4379 55 760 4192 1287 52 507 4256 4332 62 507 4256 4300 73 774 4332 3319 84 507 4332 222 70 19 439 4095 14 257 439 2258 9 709 1480 2311 22 257 1480 4749 82 257 2023 4633 69 257 2023 596 42 242 2311 2870 100 257 2311 1675 57 224 2311 2088 91 113 2648 1480 72 257 2870 2023 55 257 2870 1869 53 768 4095 2648 81 257 4095 3689 80 703 440 1284 37 531 440 686 57 423 440 1740 74 566 627 3768 56 531 722 4640 99 531 722 1111 44 183 985 3561 32 531 985 291 37 594 1284 627 47 531 1284 500 54 11 1284 407 9 21 2025 722 87 531 3286 2025 47 531 3286 837 78 468 3561 3286 5 531 3561 3990 13 447 3561 138 65 515 3768 4327 51 531 3768 4778 45 531 4327 985 28 531 441 509 77 1178 441 2704 41 431 509 2022 31 1178 509 61 51 433 509 2606 51 543 647 3409 44 1178 1572 647 5 1178 1572 2098 90 345 2022 3381 83 1178 2022 4743 3 1178 2219 3485 6 1178 2219 4198 2 234 2415 2219 44 1178 2415 1742 28 284 2671 3107 41 1178 2671 4613 45 292 3107 4781 69 1178 3107 1289 17 273 3381 1572 22 1178 3381 4547 75 909 3381 1073 33 581 3409 3575 91 1178 3409 4733 69 1178 3485 2671 45 1178 3575 2415 19 1178 3575 688 2 855 442 2809 76 689 442 4350 73 576 442 3644 90 721 772 4246 92 689 1218 1311 71 689 1218 4301 99 526 1218 1448 31 497 1311 4487 75 689 1348 1810 49 689 1348 3360 58 333 1810 3644 38 689 1810 1634 61 310 1810 1967 88 275 2569 4830 36 689 2809 772 86 689 2809 4685 33 306 3644 1218 73 689 3644 1504 5 219 3644 2419 46 269 4246 1348 27 689 4487 2569 66 689 4487 4824 70 689 443 2278 90 445 443 738 89 376 443 101 88 290 918 2830 54 445 1135 4910 64 445 1135 2556 32 864 1321 1946 70 445 1321 94 50 682 1612 3747 54 445 1612 1007 4 76 1946 1135 60 445 1946 4129 91 583 1946 4158 80 602 2278 918 11 445 2278 4512 30 445 2544 1321 3 445 2830 1612 73 445 2830 2721 57 98 3747 2544 60 445 3747 4874 17 505 3747 725 84 618 444 1756 55 422 1410 4552 99 422 1410 3226 68 201 1659 1872 88 422 1659 2856 98 478 1659 3267 63 773 1756 1659 50 422 1872 3621 58 422 1872 522 40 693 2348 1410 99 422 2348 4564 75 422 3621 3678 21 422 3621 4337 87 167 3678 4111 36 422 3678 443 79 644 4111 2348 54 422 4111 1892 35 420 445 1755 17 1222 445 3943 13 601 445 2542 79 88 995 4584 85 1222 1329 995 69 1222 1329 2491 88 540 1329 3914 88 257 1755 2923 22 1222 1870 2739 9 1222 1870 1971 64 39 2121 4044 13 1222 2121 21 1 507 2146 2734 36 1222 2146 3343 63 562 2146 3549 21 39 2734 4948 18 1222 2734 1870 53 1222 2739 1329 28 1222 2923 2121 36 1222 2923 2184 30 786 4044 2146 43 1222 4044 381 44 687 446 3737 67 404 446 1920 41 526 446 2117 39 641 1795 4925 89 404 1795 4854 11 404 2172 3905 33 404 3723 1795 43 404 3723 1588 53 584 3737 2172 20 404 3737 3410 84 277 3737 804 26 719 3905 3723 54 404 447 4470 69 516 447 2609 86 728 950 4608 95 516 950 582 83 719 2429 3549 96 516 2429 1407 32 282 2429 3634 54 996 2795 3705 9 516 3549 2795 73 516 3549 3319 50 178 3705 950 81 516 3705 1788 55 860 3705 955 73 438 4470 2429 5 516 4470 4844 97 516 448 2826 45 298 955 1122 47 298 955 3479 32 363 1122 1171 59 298 1122 4643 96 298 1171 3312 12 298 1171 1826 28 767 1171 1545 64 428 1788 4986 27 298 2826 955 37 298 2826 578 46 526 2826 4940 22 287 3312 1788 62 298 449 1336 86 359 449 2178 62 946 628 4986 16 359 628 132 51 224 1210 4985 61 359 1210 1907 59 359 1336 1210 47 359 1336 785 44 447 1907 628 15 359 1907 1879 57 527 450 596 16 196 450 709 40 193 596 2845 55 196 596 3765 30 312 596 3339 74 79 858 3925 38 196 937 1252 50 196 937 4691 9 886 989 937 19 196 989 4990 32 196 1252 858 1 196 1252 372 77 975 2845 989 86 196 2845 4952 16 771 3925 4913 29 196 3925 4068 15 906 451 2536 80 394 451 680 94 499 1819 4823 68 394 1819 1728 4 791 1835 2033 45 394 1835 1863 85 329 1835 2619 33 731 2033 2463 93 394 2388 1835 74 394 2388 892 63 318 2463 1819 14 394 2463 4830 34 394 2536 2690 72 394 2536 657 13 768 2690 2388 8 394 2690 2830 99 924 2690 1269 63 717 452 3638 17 412 638 2222 55 412 638 4801 44 171 1342 1777 21 412 1342 294 12 584 1607 4352 5 412 1607 3073 72 449 1607 2195 45 548 1619 638 7 412 1777 4841 78 412 1777 1906 66 412 1906 2002 1 412 1906 3759 2 38 1906 1997 21 610 2002 4514 58 412 2222 1607 27 412 2222 625 81 3 3368 1619 4 412 3368 3415 25 706 3368 1243 55 315 3452 4645 22 412 3452 1342 27 412 3638 3368 50 412 4352 3452 8 412 4352 4706 16 255 4352 4834 4 734 453 1241 77 276 1241 2329 69 276 1241 3434 57 216 1241 1835 12 16 2329 2379 2 276 2379 3528 31 276 2379 261 65 592 3010 4907 71 276 3010 4066 42 880 3528 3565 20 276 3528 4509 37 276 3565 3010 50 276 3565 3356 53 883 3565 4845 18 491 454 2333 58 484 542 2145 93 484 542 1147 53 410 786 3641 43 484 786 1396 12 603 786 4512 13 819 2016 542 78 484 2145 3578 29 484 2145 3048 7 22 2333 4412 34 484 2333 4518 80 282 2333 4173 23 438 2417 4204 52 484 3578 786 34 484 3578 3466 14 625 3641 4913 3 484 3641 665 68 346 4204 2016 51 484 4204 4542 51 484 4412 2417 35 484 4412 294 28 624 4412 3289 61 230 455 2814 72 635 1785 2273 44 635 1785 2312 20 949 1808 1785 90 635 1808 4525 16 268 1808 2134 22 249 2273 2292 47 635 2292 4410 2 635 2292 1905 60 684 2732 4793 30 635 2732 3900 1 501 2732 1011 69 909 2814 1808 25 635 2984 2732 60 635 2984 1046 22 402 3620 2984 76 635 3620 4676 70 938 3620 3628 52 343 4410 3620 27 635 4410 4962 59 635 456 1508 72 204 1233 2672 45 204 1233 2614 53 411 1482 1233 21 204 1482 505 90 879 1508 2679 27 204 1508 1683 34 51 1508 4526 83 883 1574 4774 26 204 2226 1574 97 204 2226 3461 16 276 2672 2226 24 204 2672 1078 42 600 2672 4104 34 693 2679 1482 34 204 2679 4817 99 204 457 2057 25 826 1047 1960 67 826 1047 4884 76 826 1449 4473 3 826 1449 183 87 454 1960 3190 84 826 1960 1588 29 253 1960 733 83 682 2057 1047 56 826 3190 1449 75 826 3190 1834 25 684 3190 3429 95 857 4473 4554 1 826 458 688 33 169 458 3560 79 587 688 1332 38 169 688 4861 69 169 1332 2790 39 169 1332 2326 79 722 1332 4161 100 253 2790 3226 70 169 3226 4129 66 169 3226 1544 51 811 3226 1015 51 848 4129 4934 58 169 459 2778 19 361 459 1608 22 283 685 3625 72 361 685 3346 32 832 685 1369 28 607 1175 2614 69 361 1515 1530 38 361 1515 785 78 272 1515 4211 34 995 1530 4996 37 361 2614 4039 88 361 2614 4608 2 361 2778 3247 72 361 2778 2811 20 948 3247 685 67 361 3247 1998 2 10 3625 1175 11 361 3625 268 84 16 4039 1515 38 361 4039 1433 65 536 460 4032 61 906 460 1230 54 949 460 3942 76 972 923 2252 56 906 1240 3199 63 906 1240 3890 69 991 1240 4353 60 31 2252 4788 32 906 2252 4685 7 906 2695 4454 71 906 3199 2695 3 906 3199 1789 2 554 3519 923 19 906 3519 3083 31 675 3519 242 59 887 4032 4340 49 906 4340 1240 71 906 4340 3480 56 50 4454 3519 36 906 4454 863 13 97 461 3212 70 1143 461 284 36 253 461 4996 93 135 564 913 96 1143 863 4879 87 1143 863 4981 93 1143 913 2479 43 1143 913 1786 16 992 913 2453 69 42 1494 863 100 1143 2126 4233 43 1143 2126 4272 4 733 2126 3969 67 784 2479 3425 98 1143 3212 2126 46 1143 3212 4687 90 256 3212 2716 10 560 3425 1494 47 1143 4233 564 59 1143 4233 2357 70 201 462 3872 6 484 462 306 57 119 752 1213 29 484 752 633 80 560 852 4488 39 484 852 3620 74 832 852 4280 2 118 920 2195 21 484 1213 852 76 484 1213 2627 19 865 1213 3699 51 35 2098 920 87 484 2195 2674 14 484 2195 4642 42 484 2674 3821 43 484 2674 1082 43 985 2674 1188 87 323 3821 752 66 484 3872 2098 68 484 3872 3065 93 711 4488 4916 63 484 4488 3428 96 536 463 4308 23 670 463 2581 4 130 463 3574 76 36 503 2186 6 670 905 4631 39 670 905 4274 32 574 905 990 23 55 1221 905 67 670 2186 4945 15 670 2186 1221 39 670 4308 503 40 670 4308 806 24 833 464 3391 55 248 464 393 39 694 1507 4789 18 248 1507 1449 86 875 2207 1507 5 248 2207 2070 9 596 2207 570 20 944 2363 3636 66 248 3391 2363 19 248 3391 3834 28 661 3391 221 4 699 3636 2207 100 248 3636 4573 55 248 465 2499 92 94 756 2235 34 94 756 4026 19 753 756 3461 29 976 785 1067 7 94 1067 1133 98 94 1067 4528 88 13 1133 756 86 94 1133 701 7 185 1133 2571 60 911 1734 2875 84 94 2235 4838 22 94 2235 1763 20 810 2499 3831 75 94 2499 2136 1 854 2875 4635 87 94 2875 785 69 94 3831 1734 15 94 3831 1890 69 466 3831 2931 45 215 466 2677 23 109 640 3670 53 109 640 2159 35 920 1362 3169 91 109 1362 3500 25 202 2468 3397 47 109 2468 284 54 819 2677 1362 57 109 2677 3378 83 278 2677 2712 58 521 3169 2468 16 109 3397 3973 18 109 3397 4836 50 235 3670 4728 56 109 3670 4608 68 109 3973 640 50 109 3973 3295 78 137 3973 4064 36 764 467 4153 77 506 774 3305 4 506 774 4988 92 387 774 2008 46 403 1095 1994 41 506 1994 774 38 506 1994 4963 26 908 2138 2626 21 506 2138 836 75 514 2138 938 2 810 2626 4961 18 506 2626 1095 48 506 2860 4293 90 506 3305 2860 31 506 3305 117 21 660 4153 2138 78 506 4153 2631 62 917 4293 4769 4 506 4293 3075 88 838 468 615 42 718 468 2001 61 706 615 3693 16 718 615 3101 27 543 684 4668 3 718 684 3134 91 718 813 4681 47 718 813 731 47 115 2733 684 27 718 2733 3238 52 128 2733 1752 58 809 3134 813 57 718 3460 2733 100 718 3460 3551 2 729 3693 3460 64 718 3693 1545 58 176 3693 4703 30 558 469 1388 44 381 520 1402 85 381 520 3704 94 431 1388 2617 6 381 1388 1347 25 885 1402 4949 78 381 1402 403 83 83 2617 4649 9 381 2617 3707 78 381 2917 4213 16 381 2917 1651 75 703 3160 2917 32 381 3160 3488 17 708 3707 3160 57 381 3707 4925 77 958 3707 4892 85 547 4213 520 36 381 470 1019 29 1110 470 1900 96 388 519 733 73 1110 519 3056 78 105 733 4932 97 1110 733 3137 22 177 733 4724 80 753 1019 2944 96 1110 2568 519 43 1110 2568 1364 30 90 2944 4234 51 1110 2944 4630 91 1110 4124 2568 46 1110 4124 1272 24 671 4124 1291 45 125 4234 4124 18 1110 471 3228 4 414 471 809 23 33 517 4774 98 414 517 3400 76 520 517 881 75 401 1634 517 11 414 1634 4967 11 414 2443 1634 48 414 3228 3564 48 414 3228 1877 38 867 3228 4718 41 479 3564 2443 94 414 472 3182 1 1002 472 4334 61 17 1195 4424 21 1002 1195 644 45 89 3182 3211 61 1002 3182 1228 38 331 3182 2767 83 414 3211 3469 53 1002 3469 1195 59 1002 3469 4626 65 1002 4424 4855 29 1002 4424 4598 45 750 473 801 85 327 473 3783 22 467 801 3108 97 327 801 4465 98 235 801 990 10 255 1109 3297 47 327 2736 1109 7 327 2736 3667 14 728 2736 1953 57 838 3108 4276 2 327 3108 4643 68 327 3297 4287 10 327 4276 2736 41 327 4276 2372 13 232 4276 659 98 203 4287 4511 41 327 474 1759 71 452 474 1202 60 963 474 1947 1 278 1418 3689 29 452 1581 1779 34 452 1581 155 27 674 1581 1757 23 5 1759 2940 17 452 1779 2020 14 452 1779 1126 28 687 2020 1418 78 452 2020 3331 78 461 2940 1581 91 452 2940 3331 33 696 2940 932 89 994 3689 4601 24 452 3689 4656 84 452 475 3835 33 379 3046 4856 71 379 3046 3842 31 379 3244 4914 19 379 3244 2721 15 574 3244 755 89 504 3835 3046 66 379 3842 4391 33 379 3842 397 39 528 3842 4182 90 694 4391 3244 39 379 476 2847 50 315 476 1987 52 512 1766 4735 19 315 1766 3943 75 348 1766 1717 60 682 2119 4795 92 315 2119 1766 62 315 2847 2889 11 315 2889 2119 68 315 2889 645 62 246 477 2234 37 1012 477 3926 94 40 477 4325 96 37 901 4586 63 1012 2234 3699 4 1012 2234 2332 32 190 2603 2702 32 1012 2603 2682 67 578 2702 901 96 1012 2702 1231 45 546 3699 4481 40 1012 3699 2501 39 825 3699 651 76 225 4481 2603 17 1012 4481 4777 74 1012 478 1138 29 572 620 2442 87 572 620 4799 25 572 712 4314 79 572 712 330 13 806 712 1036 94 380 718 4867 79 572 1002 620 56 572 1002 320 79 189 1002 1845 37 413 1138 1002 25 572 1831 3982 61 572 1831 2423 47 660 1831 83 95 457 2442 1831 1 572 3982 712 13 572 3982 4008 60 951 3982 804 28 389 4314 718 70 572 479 3056 99 421 479 1720 48 494 479 2994 87 983 614 3110 28 421 1190 1999 61 421 1190 4183 14 467 1999 2490 46 421 1999 4752 55 421 2490 614 54 421 2490 2830 63 120 2490 509 88 457 3056 1190 39 421 3110 4917 19 421 3110 4719 72 770 480 1197 79 653 480 2349 3 855 567 3560 30 653 567 3864 28 397 1197 2782 80 653 1197 3207 84 798 1197 2835 51 23 2265 2323 5 653 2323 2401 81 653 2323 2111 89 443 2401 4900 35 653 2401 4779 95 712 2580 567 92 653 2580 347 9 911 2580 272 2 574 2782 4452 83 653 3560 4663 7 653 3560 2265 68 653 4452 2580 1 653 4452 109 68 866 481 3653 30 492 481 1158 54 611 481 4867 73 62 970 4807 72 492 970 4674 41 492 2107 4188 5 492 2692 970 67 492 2692 3213 50 988 2692 4241 50 605 2985 2692 23 492 3653 2107 89 492 3653 2628 70 350 3653 532 77 650 4188 2985 96 492 482 3115 32 485 482 2195 58 890 482 451 30 743 2290 3710 74 485 3115 4441 79 485 3115 3739 9 273 3115 148 94 4 3317 4370 97 485 3626 2290 26 485 3626 4861 91 319 3710 4518 95 485 3710 4031 11 58 4370 4449 3 485 4370 4956 4 563 4370 3800 6 925 4441 3317 42 485 4449 3626 63 485 4449 4831 19 485 483 2903 65 91 483 4926 11 69 1617 4630 39 91 1617 1306 2 85 2899 3994 99 91 2899 4943 13 804 2899 1864 23 903 2903 2899 82 91 3568 3958 71 91 3568 4676 80 265 3568 368 89 470 3958 1617 2 91 3994 3568 45 91 3994 4698 67 91 484 930 24 667 484 1368 56 873 504 4557 5 667 504 4526 83 667 930 1228 12 667 930 134 46 698 1208 1965 21 667 1208 3324 36 250 1228 2396 49 667 1228 2148 57 84 1228 4310 100 47 1965 504 77 667 2396 1208 19 667 2396 4818 43 661 2396 2734 39 612 485 2653 69 793 806 3143 80 793 806 2430 84 292 806 4140 98 277 1868 2283 47 793 1981 1868 63 793 1981 334 29 143 2283 4825 39 793 2283 4971 73 793 2653 806 76 793 2653 523 86 727 2653 459 17 92 3143 1981 100 793 486 808 61 192 486 1234 8 729 605 2757 4 192 605 1666 13 180 808 1334 27 192 808 4553 84 192 986 2660 94 192 986 4876 64 635 1334 2389 38 192 1334 992 17 160 1334 2674 87 897 2389 2760 19 192 2660 3851 74 192 2660 1535 44 24 2660 1109 23 732 2757 986 94 192 2760 605 32 192 2760 4233 65 308 2760 1939 32 817 3851 4080 68 192 4080 4670 47 192 4080 2428 50 321 487 3862 93 631 487 2662 87 672 2275 2962 88 631 2275 1263 60 511 2962 3527 90 631 2962 4840 55 568 2962 30 37 313 3527 4892 17 631 3862 4455 86 631 3862 2891 77 680 4055 4955 45 631 4055 2275 18 631 4455 4055 61 631 4455 4452 23 503 488 3724 29 404 488 1273 40 139 488 3989 86 350 553 1989 92 404 1094 4548 54 404 1094 4568 20 404 1989 2370 65 404 1989 1907 65 885 1989 2064 20 235 2370 1094 28 404 3724 553 18 404 3724 2427 49 523 3724 2598 8 273 489 1124 21 635 507 4763 4 635 507 818 46 445 1124 1842 100 635 1124 915 74 515 1124 127 11 220 1842 3901 48 635 2556 4879 61 635 2556 3426 65 635 3426 507 28 635 3426 3730 76 572 3426 3251 23 355 3901 3970 52 635 3970 2556 67 635 3970 522 23 772 3970 3556 63 386 490 1601 85 60 1502 4174 71 60 1502 2646 67 431 1601 1502 4 60 1601 2227 62 652 2153 4407 70 60 2153 2783 47 808 2153 103 24 669 2781 4577 99 60 3766 4058 53 60 3766 158 4 916 4058 2781 81 60 4058 4795 29 60 4174 2153 24 60 4174 604 51 600 4174 3813 26 45 4407 3766 11 60 491 3953 91 252 491 202 28 44 491 2189 90 337 1282 2714 42 252 2714 4425 95 252 2714 4780 47 811 3712 4656 84 252 3712 644 1 753 3841 1282 33 252 3841 4305 5 918 3870 3841 64 252 3870 2399 11 578 3870 1084 72 711 3953 3870 4 252 4425 3712 74 252 4425 4949 43 252 492 1543 5 739 492 4164 96 549 720 4679 96 739 720 2743 81 594 1199 4746 21 739 1199 2230 7 739 1543 2742 66 739 1543 3269 33 508 2230 720 78 739 2230 1507 75 372 2742 1199 11 739 2742 440 28 422 493 539 25 117 493 345 11 946 539 1104 97 117 539 4135 56 631 765 3727 56 117 765 418 51 106 765 4865 82 943 1104 1427 39 117 1270 765 72 117 1270 3572 40 20 1427 2024 64 117 1427 1394 52 839 2024 1270 27 117 2024 3528 97 202 2629 4825 16 117 2629 4642 24 117 3727 2629 57 117 3727 2758 74 902 494 3166 22 412 494 88 34 479 595 4527 82 412 595 2959 69 973 595 292 13 391 771 2927 71 412 771 4571 63 412 834 595 29 412 1567 834 48 412 1567 2405 38 32 1567 2417 27 501 2927 3719 62 412 3040 771 1 412 3040 3488 33 468 3040 372 17 136 3166 3040 35 412 3569 1567 89 412 3569 248 33 103 3569 184 70 422 3719 3569 4 412 495 639 61 804 495 303 11 66 495 3767 42 178 639 1814 32 804 1458 3332 76 804 1458 1653 56 518 1458 99 88 693 1475 4465 60 804 1475 4752 53 804 1814 4162 65 804 2470 1475 65 804 2470 4743 20 939 2470 1129 44 475 2635 1458 32 804 3332 4916 2 804 3332 3363 89 506 3332 2003 4 734 3987 2635 97 804 4162 2470 96 804 4162 1159 51 634 4465 3987 42 804 4465 3464 65 125 496 4006 4 472 496 1569 32 916 496 3329 15 557 1644 4895 12 472 2485 3384 25 472 2485 3921 14 548 2485 4800 78 850 3144 3777 68 472 3384 1644 84 472 3384 3095 24 410 3777 2485 96 472 3777 2263 6 983 4006 3144 70 472 4006 4843 21 472 497 3652 98 672 497 1880 13 988 497 4595 38 640 1286 2373 41 672 1331 1286 46 672 1331 4069 66 114 1445 1833 90 672 1445 1802 66 201 1445 4101 31 77 1833 2862 54 672 2373 3023 51 672 2373 4652 55 672 2862 4634 48 672 2862 1806 93 847 2862 3228 48 18 3023 1445 48 672 3652 1331 25 672 3652 3832 73 64 3652 915 43 261 498 2182 23 833 1571 1847 31 833 1571 3728 39 468 1571 3669 32 943 1847 4657 100 833 2182 2836 97 833 2182 1969 77 153 2319 1571 14 833 2319 2103 83 602 2836 2319 83 833 2836 4958 78 833 499 2255 49 1251 499 2214 85 522 499 1111 8 694 1939 4556 52 1251 2179 3423 44 1251 2179 4580 54 894 2179 4216 11 716 2255 3383 7 1251 3383 4689 69 1251 3383 2179 85 1251 3423 1939 67 1251 3423 3313 38 767 500 1446 59 638 500 1573 90 877 1015 4751 77 638 1015 4618 23 638 1015 4773 27 638 1015 4723 60 638 1015 2762 17 638 1015 4857 26 638 1015 4563 46 638 1015 4997 87 638 1015 4678 29 638 1015 4899 48 638 1015 4921 8 638 1015 4632 64 638 1015 4870 55 638 1015 4859 30 638 1446 3566 64 638 1446 4521 94 638 1446 4812 86 638 1446 4927 59 638 1446 4612 74 638 1446 4818 71 638 1446 4713 28 638 1446 4918 16 638 1446 4592 57 638 1446 4756 79 638 1446 4664 67 638 1446 4871 17 638 2762 4885 22 638 2762 4562 7 638 2762 4912 7 638 2762 4819 53 638 2762 4724 24 638 2762 4964 82 638 2762 4878 87 638 2762 4711 40 638 2762 4775 66 638 2762 4262 68 638 2762 4779 20 638 2762 4814 13 638 2762 4599 86 638 3100 4943 23 638 3100 4936 90 638 3100 4933 82 638 3100 4915 64 638 3100 4501 1 638 3100 4801 45 638 3100 4732 14 638 3100 1015 10 638 3100 4832 86 638 3100 4973 10 638 3100 4813 62 638 3566 4550 61 638 3566 3100 1 638 3566 4865 19 638 3566 4808 38 638 3566 4519 65 638 3566 4772 47 638 3566 4881 1 638 3566 4636 10 638 3566 4646 62 638 3566 4555 71 638 3566 4507 51 638 3566 4673 16 638 3566 4747 87 638 4262 4613 78 638 4262 4736 26 638 4262 4539 16 638 4262 4935 8 638 4262 4699 12 638 4262 4658 50 638 4262 4978 2 638 4262 4827 12 638 4530 1476 21 514 4531 56 19 39 4532 4910 61 239 4532 214 36 426 4533 3283 38 810 4534 1362 64 724 4534 4172 77 766 4535 1271 9 530 4536 4178 2 800 4536 757 98 704 4537 506 59 323 4537 4215 37 284 4538 1386 60 797 4539 3111 15 779 4540 668 61 370 4541 783 78 874 4541 775 12 557 4542 3521 11 457 4543 2472 80 263 4543 3930 7 277 4544 170 23 980 4544 1593 74 93 4545 2985 6 259 4546 3274 64 481 4547 1709 81 666 4548 259 33 229 4548 901 98 731 4549 4598 26 141 4550 2231 59 885 4550 1429 47 367 4551 1291 54 538 4552 4147 79 76 4552 398 35 796 4553 2267 31 739 4553 1604 29 9 4554 3596 3 94 4555 2884 75 209 4556 4588 19 782 4556 4796 76 997 4557 4850 53 545 4558 367 4 458 4558 4656 100 668 4559 196 60 94 4560 3611 98 30 4560 4675 88 261 4561 1494 31 824 4562 710 92 226 4563 481 58 543 4564 984 26 659 4565 4911 44 387 4565 846 38 938 4566 1760 92 868 4567 872 31 790 4568 3739 53 196 4568 301 11 449 4569 4888 47 431 4569 268 14 788 4570 3083 40 138 4570 91 5 712 4571 3271 13 314 4571 362 10 205 4572 845 83 442 4573 793 26 928 4574 3158 67 624 4574 4123 45 540 4575 4727 91 569 4575 2996 59 101 4576 3220 19 2 4576 23 7 824 4577 1186 26 331 4577 4258 99 194 4578 22 15 156 4578 3660 66 367 4579 3687 42 346 4579 403 8 987 4580 757 26 863 4581 4975 31 95 4582 4012 93 157 4583 2694 43 200 4583 3069 58 415 4584 2502 45 867 4584 3416 9 206 4585 566 9 177 4586 2454 48 237 4586 1401 3 121 4587 2844 43 561 4587 1869 52 219 4588 4144 65 51 4589 1703 50 345 4589 778 82 168 4590 512 76 406 4591 3201 15 847 4591 955 1 540 4592 2492 97 567 4592 2478 64 798 4593 2172 81 389 4593 3337 84 257 4594 2263 20 920 4594 1987 5 598 4595 826 39 985 4596 791 9 100 4597 3801 64 604 4597 4330 12 897 4598 4946 31 141 4598 450 57 219 4599 4677 39 668 4600 3861 14 48 4600 3193 70 567 4601 2431 78 878 4602 908 78 885 4602 931 90 807 4603 928 35 687 4603 2346 82 398 4604 1361 77 767 4605 4368 58 341 4606 3018 25 667 4606 4131 4 891 4607 4968 80 853 4607 801 12 693 4608 649 55 100 4608 4917 14 459 4609 2106 60 451 4609 4257 87 530 4610 4221 1 950 4611 1513 10 483 4612 1378 12 387 4612 4696 86 789 4613 3688 90 414 4614 3393 8 853 4614 4289 94 219 4615 3009 71 645 4616 2096 44 157 4617 4446 34 754 4618 4512 85 232 4619 4659 68 690 4619 2747 26 182 4620 3659 52 938 4621 2748 95 484 4622 259 31 883 4623 4010 86 738 4623 1650 29 323 4624 3549 48 652 4624 344 42 922 4625 4212 43 812 4626 1977 55 940 4627 157 68 74 4628 127 21 198 4628 1156 80 184 4629 4639 1 114 4629 1359 34 968 4630 606 37 751 4630 2762 39 57 4631 1303 3 677 4632 3641 20 400 4632 3792 71 66 4633 3868 45 604 4633 3950 81 574 4634 1330 41 898 4634 1770 18 149 4635 2733 96 720 4636 3973 51 800 4636 3685 98 815 4637 3033 45 429 4637 3067 83 37 4638 4278 23 322 4638 2012 25 364 4639 2314 18 851 4639 1303 58 821 4640 158 4 744 4640 1313 94 834 4641 4549 80 232 4641 1553 90 353 4642 1528 16 105 4643 1986 23 206 4644 2525 19 105 4644 4116 10 627 4645 1652 81 881 4646 3973 19 873 4647 3284 18 48 4647 562 98 976 4648 592 17 734 4648 1602 52 76 4649 708 35 394 4650 2174 14 810 4650 661 67 202 4651 875 41 368 4652 4766 92 585 4653 3090 2 840 4653 956 80 765 4654 2022 92 478 4655 4912 64 315 4656 2300 88 93 4656 640 87 167 4657 841 82 826 4657 4027 42 659 4658 2266 47 550 4658 3865 18 254 4659 1332 78 781 4660 1273 6 324 4661 4463 70 610 4662 27 99 201 4663 40 54 314 4663 1533 84 600 4664 2987 44 628 4665 2752 59 163 4665 1445 78 221 4666 2649 93 248 4666 2615 4 187 4667 3098 95 522 4668 768 45 449 4669 943 46 794 4669 450 36 45 4670 3525 40 249 4671 1657 53 357 4672 2496 63 458 4672 4698 51 547 4673 1729 38 169 4673 2717 56 353 4674 555 20 770 4675 4713 50 968 4675 1729 20 182 4676 4229 90 259 4676 3097 56 125 4677 2078 41 409 4677 4510 66 743 4678 62 97 859 4679 1613 40 602 4679 2665 14 471 4680 1197 81 55 4680 1585 17 996 4681 4118 71 419 4682 665 93 696 4683 3367 2 312 4684 4905 78 879 4684 4673 60 822 4685 3405 8 157 4686 2923 46 419 4686 4925 53 484 4687 2673 25 285 4688 4256 59 627 4688 2685 53 501 4689 3476 24 92 4690 1745 90 965 4690 4879 26 795 4691 3785 3 939 4691 4372 32 981 4692 1361 4 867 4693 4351 38 142 4693 4872 5 942 4694 1620 66 846 4695 3514 57 58 4696 4376 72 479 4697 4593 2 912 4697 4013 66 270 4698 4620 87 107 4699 1924 12 818 4699 1293 36 223 4700 3705 58 592 4701 1681 65 856 4702 2754 74 76 4702 1349 4 284 4703 1967 54 853 4703 713 100 532 4704 4571 36 30 4705 3854 58 367 4706 958 9 12 4706 2074 65 640 4707 4186 46 735 4708 2015 64 891 4709 4629 50 857 4709 2016 87 929 4710 3633 45 29 4710 1341 75 764 4711 2264 100 163 4712 2292 3 987 4712 2531 9 576 4713 308 27 864 4714 4363 1 47 4715 3969 5 661 4715 3246 57 513 4716 4027 84 454 4717 3459 69 375 4718 1657 17 473 4719 582 26 625 4720 2502 95 724 4721 1072 33 296 4721 4047 98 718 4722 1161 2 925 4722 2171 80 693 4723 2188 33 899 4723 353 87 211 4724 4661 75 351 4724 149 25 52 4725 4835 98 130 4726 674 99 338 4727 747 70 312 4728 3552 20 732 4728 2710 78 146 4729 4875 52 981 4729 588 73 298 4730 488 87 867 4730 3759 95 760 4731 2213 64 499 4732 3284 79 714 4733 1977 86 728 4734 3027 17 796 4734 241 45 555 4735 3009 25 730 4735 2708 70 545 4736 4062 83 606 4737 170 87 717 4738 2673 72 291 4739 332 48 3 4739 3614 22 719 4740 2019 94 274 4741 4711 68 667 4741 2979 97 561 4742 2610 98 402 4742 3733 81 721 4743 422 89 521 4744 4840 99 191 4745 3995 39 574 4745 4820 52 213 4746 4096 63 92 4747 2232 33 341 4747 1883 91 191 4748 4742 91 354 4748 2422 52 456 4749 359 76 690 4749 2935 40 695 4750 768 34 243 4750 216 46 269 4751 2415 53 877 4752 2603 100 277 4753 444 1 457 4753 4381 54 69 4754 2049 18 806 4755 4020 3 379 4755 4025 2 812 4756 807 1 573 4757 791 29 981 4757 3051 31 335 4758 4435 92 558 4759 2508 58 623 4759 1269 10 784 4760 4458 35 194 4761 1276 1 262 4762 1933 43 865 4763 3027 35 473 4763 3357 57 763 4764 2129 33 426 4764 1779 61 492 4765 1439 69 309 4766 3735 62 481 4767 290 61 87 4768 3468 30 381 4768 4764 71 336 4769 3174 4 894 4770 1548 46 997 4770 1880 6 383 4771 3178 45 292 4771 1391 17 246 4772 1018 88 461 4772 2981 20 287 4773 2308 26 795 4774 1318 56 294 4774 2971 23 329 4775 2779 8 36 4776 4112 70 67 4777 2427 39 798 4777 4820 10 391 4778 1183 43 224 4778 3692 74 919 4779 1397 33 442 4780 1435 21 285 4780 3217 6 171 4781 4538 15 152 4781 4739 62 567 4782 2485 86 628 4782 2650 19 841 4783 4364 47 381 4784 3134 53 749 4784 2008 16 400 4785 1288 22 295 4786 4460 33 789 4786 4068 1 416 4787 4462 38 50 4788 181 3 984 4788 2182 42 137 4789 378 62 786 4790 1337 14 916 4790 3097 11 52 4791 4632 37 949 4791 1446 97 27 4792 2441 77 984 4792 2691 94 796 4793 197 81 683 4794 618 73 534 4795 2931 57 867 4796 51 98 114 4796 289 5 982 4797 4885 40 736 4797 3879 63 308 4798 3205 39 985 4798 3994 80 799 4799 3525 35 226 4799 2566 36 338 4800 116 58 761 4800 2711 88 618 4801 348 10 931 4802 3915 33 266 4803 3149 6 622 4803 2932 74 255 4804 2219 95 354 4805 2768 33 675 4806 4942 81 956 4807 4341 47 509 4808 3147 43 458 4808 421 6 614 4809 90 19 330 4810 2901 11 914 4811 4607 36 817 4811 577 92 656 4812 3498 15 785 4812 4179 24 42 4813 4925 99 249 4814 3168 4 291 4815 2198 60 673 4815 4245 42 476 4816 1425 86 9 4816 1956 98 238 4817 4399 61 937 4818 4143 69 603 4819 1506 4 932 4819 809 63 9 4820 81 84 325 4820 2783 6 812 4821 686 37 704 4821 1006 55 591 4822 3896 30 428 4822 100 25 240 4823 3868 44 964 4824 3158 8 583 4824 3442 71 117 4825 451 91 899 4826 3955 79 584 4827 3181 83 466 4827 4499 87 387 4828 3449 90 158 4829 412 41 932 4830 409 72 829 4831 1715 44 345 4831 804 98 596 4832 2219 49 790 4832 3452 29 727 4833 11 27 43 4833 2348 47 218 4834 1701 70 32 4835 2067 96 554 4836 3940 31 587 4837 3810 6 896 4837 2985 2 508 4838 471 15 118 4838 2535 21 718 4839 2030 47 497 4839 4383 28 734 4840 877 22 520 4840 95 61 522 4841 4608 1 684 4841 1219 17 479 4842 3803 20 16 4843 4026 91 311 4843 778 60 911 4844 2047 27 658 4844 332 52 591 4845 136 87 466 4845 513 92 76 4846 2925 34 333 4846 1576 14 50 4847 1221 96 708 4847 198 1 953 4847 2218 55 70 4848 4738 36 474 4848 2336 93 65 4849 1302 72 977 4849 2039 58 449 4849 1851 35 140 4849 3412 89 798 4850 1737 92 726 4850 3178 46 366 4850 4388 62 796 4851 4048 51 146 4851 4246 7 573 4851 2394 73 228 4852 1136 72 689 4852 2551 30 556 4852 3371 75 844 4852 5 46 569 4853 2347 56 658 4854 3003 31 478 4854 4619 63 621 4854 3456 77 712 4854 3418 55 826 4855 600 82 500 4855 3040 69 543 4855 2470 44 83 4856 1244 13 789 4857 2603 74 549 4857 425 23 938 4857 2308 73 966 4857 2357 77 700 4858 2377 45 310 4858 955 39 507 4858 2854 95 789 4859 2490 42 918 4860 3414 48 810 4860 4042 9 121 4860 4105 82 41 4860 4637 88 753 4861 69 35 447 4862 1121 49 519 4862 2644 57 292 4862 1437 11 816 4862 2328 33 173 4863 4654 87 291 4863 933 26 304 4864 4907 58 443 4864 3143 85 8 4865 2056 48 567 4865 3866 84 80 4865 149 57 29 4865 3558 62 665 4866 1030 100 502 4866 931 68 784 4867 955 96 177 4867 1192 65 240 4867 2857 14 317 4868 1193 26 848 4868 3474 48 852 4868 2661 93 982 4869 4909 50 958 4869 4675 44 179 4869 34 44 597 4869 343 2 128 4870 25 93 419 4870 4605 30 553 4870 3756 1 463 4870 766 45 697 4871 1745 35 595 4871 4354 54 162 4872 571 56 539 4872 1574 15 383 4872 4251 88 112 4872 990 86 229 4873 2630 63 489 4873 690 46 817 4874 3352 26 678 4875 3758 41 153 4875 2338 64 803 4875 2811 67 196 4876 4 51 78 4876 1047 34 657 4877 807 12 42 4878 1808 50 398 4878 99 90 692 4879 2263 37 849 4879 2173 9 417 4879 3324 11 568 4880 2260 59 84 4880 2951 79 557 4880 2574 81 361 4880 2068 68 19 4881 3775 8 524 4881 4055 61 900 4882 2464 29 354 4882 986 61 24 4883 1389 34 991 4883 3138 62 659 4884 1594 27 186 4884 4229 95 483 4885 4544 60 20 4886 4021 37 514 4887 4565 92 77 4887 1490 2 711 4887 4745 2 556 4887 921 62 941 4888 1724 8 672 4888 2455 99 956 4888 4649 15 762 4888 2648 21 354 4889 3691 85 169 4890 238 4 644 4890 4651 61 734 4891 2464 71 461 4892 743 13 110 4892 4523 79 687 4893 83 90 464 4893 4276 89 172 4893 4860 53 63 4893 3447 81 728 4894 4481 33 46 4894 1995 11 472 4894 496 96 240 4894 1155 25 965 4895 1904 14 702 4895 4710 42 198 4895 2039 87 985 4896 1552 100 977 4896 1266 42 340 4897 2566 88 810 4897 474 95 273 4898 2809 48 781 4898 357 40 551 4899 3353 57 595 4899 3298 77 24 4900 3997 35 433 4900 271 80 355 4900 2285 44 821 4901 1509 9 274 4901 57 16 143 4902 577 30 910 4902 3591 85 848 4903 1032 53 2 4903 4016 98 746 4903 1795 45 741 4904 1862 22 759 4905 2646 90 910 4905 4603 92 815 4905 1409 78 570 4905 4914 70 468 4906 3472 82 172 4906 4494 63 20 4906 855 100 561 4906 1629 57 333 4907 2340 14 714 4908 3718 48 58 4908 2080 97 33 4909 1858 78 536 4909 2896 44 775 4910 182 50 127 4910 2602 58 429 4911 4466 68 406 4912 745 83 897 4913 562 19 815 4913 3213 36 965 4913 3535 30 815 4913 27 26 558 4914 2822 31 151 4914 3194 72 65 4914 4473 13 979 4915 1223 32 508 4916 1225 63 722 4916 4223 68 599 4917 1295 70 704 4917 692 41 748 4917 325 45 233 4918 1433 92 515 4918 4309 70 99 4919 4251 86 969 4920 1024 59 608 4920 2922 11 146 4920 411 59 13 4921 85 29 753 4921 889 29 244 4922 4258 50 167 4923 216 56 341 4924 4834 26 515 4924 362 51 372 4925 1249 21 294 4925 3098 73 132 4925 2168 6 90 4926 377 35 347 4927 3231 97 673 4928 2125 74 457 4928 4213 75 84 4929 2515 64 761 4930 4205 21 589 4931 4782 74 946 4931 2280 86 845 4931 1942 33 971 4932 380 73 498 4932 4165 59 346 4933 2839 81 36 4933 3209 4 143 4933 4789 48 142 4934 1171 4 747 4934 4190 73 353 4934 1298 52 163 4934 3297 48 275 4935 2907 7 919 4936 1284 3 138 4936 915 60 2 4936 1454 11 712 4936 690 67 782 4937 3599 39 876 4937 347 83 985 4937 2567 29 617 4937 3596 20 21 4938 2187 66 76 4938 2619 65 787 4939 3259 12 191 4939 3160 92 836 4940 98 31 590 4940 4649 46 625 4940 4570 56 757 4941 4612 51 718 4941 2776 66 665 4942 2294 36 810 4942 831 90 593 4942 1908 83 598 4943 266 80 719 4943 621 87 218 4943 1201 87 187 4943 598 16 245 4943 2074 29 477 4943 1189 46 487 4944 2072 71 98 4944 2204 57 458 4944 328 39 765 4945 509 93 792 4946 2197 16 455 4946 12 33 649 4946 4846 9 631 4946 4762 20 130 4946 4312 14 807 4947 2045 8 508 4947 3558 15 314 4947 4308 46 280 4947 90 6 360 4948 4384 69 456 4949 2198 5 369 4949 4790 60 443 4950 254 34 92 4950 3858 55 120 4950 469 82 606 4950 2233 22 729 4950 1012 26 450 4950 200 86 760 4951 4072 45 606 4951 4852 42 191 4951 1400 50 665 4951 81 21 329 4951 4263 96 94 4951 513 84 769 4952 668 41 914 4952 148 16 48 4952 417 49 59 4952 4483 78 355 4952 2041 48 573 4952 1087 61 781 4953 3711 55 102 4953 289 70 144 4953 4938 1 934 4953 3108 59 889 4954 1348 68 754 4954 2786 18 373 4954 2458 10 259 4954 3579 27 608 4954 4277 64 926 4955 2738 87 16 4955 1487 66 337 4955 888 96 963 4955 3910 16 664 4956 291 11 676 4956 1009 70 574 4957 2057 88 702 4957 4988 46 478 4957 1831 5 313 4957 3137 98 563 4957 3857 1 257 4957 4061 53 642 4958 3582 82 675 4958 862 66 53 4958 490 25 825 4958 776 57 173 4959 512 2 456 4960 4562 32 72 4960 2771 64 256 4960 4093 49 110 4960 809 49 585 4961 2283 38 113 4961 3036 68 435 4961 2222 5 678 4961 3 7 161 4961 305 100 753 4962 237 95 664 4963 2554 37 991 4963 862 65 939 4964 4630 11 211 4964 3311 95 354 4964 3669 22 798 4964 1097 9 294 4964 1872 20 722 4965 49 87 314 4965 3264 5 516 4965 440 85 117 4965 3561 51 200 4965 358 89 720 4965 1622 16 380 4966 1161 52 826 4966 751 31 5 4966 147 35 743 4966 2193 2 107 4966 4596 20 586 4967 1489 27 205 4967 294 99 199 4968 1976 93 889 4968 3284 47 255 4968 3479 31 538 4968 2487 65 233 4968 3998 88 677 4968 3645 12 165 4969 4191 20 832 4969 3700 20 180 4970 1983 74 978 4970 1820 63 841 4970 2301 81 508 4971 356 49 767 4972 2869 97 432 4972 1779 59 440 4972 1863 30 721 4972 478 61 685 4972 2717 19 875 4973 1467 50 43 4974 694 62 123 4974 898 80 262 4974 1660 50 397 4974 2919 81 750 4974 734 28 492 4975 68 42 973 4975 1124 11 439 4975 1985 39 527 4975 3420 33 667 4975 667 38 457 4975 1827 11 189 4976 1358 99 772 4977 4229 62 554 4977 1027 99 839 4977 437 18 265 4977 4104 10 451 4977 4686 92 416 4978 1321 50 471 4979 287 42 449 4979 499 58 29 4979 3565 27 573 4979 2454 27 954 4980 1180 65 415 4980 1399 9 101 4980 2282 37 613 4981 656 71 212 4981 1529 55 440 4982 4862 49 926 4982 3493 70 577 4983 2439 45 194 4983 2931 71 379 4983 4821 15 762 4983 349 13 209 4983 4898 19 453 4984 4473 12 803 4984 2327 96 591 4984 879 11 672 4985 4141 48 942 4985 3061 56 255 4985 1479 23 900 4985 4597 37 122 4985 2493 6 900 4985 702 55 344 4985 59 84 366 4986 1167 13 640 4986 4925 10 682 4986 2740 34 475 4987 27 84 826 4987 2071 20 261 4987 651 65 562 4987 3525 48 370 4988 108 41 222 4988 1414 53 287 4988 2533 8 106 4988 1369 100 880 4989 2128 35 661 4989 2035 50 532 4989 1380 46 553 4989 124 10 647 4990 2668 50 212 4990 4813 93 3 4990 166 73 517 4990 3247 96 207 4990 3672 66 371 4990 3954 81 951 4991 442 79 689 4991 776 88 899 4991 623 31 282 4992 4697 23 803 4992 1679 31 4 4992 3837 20 240 4992 4301 52 666 4992 2450 6 941 4992 2486 31 379 4992 4039 80 902 4992 3099 41 935 4993 2788 32 140 4993 3695 41 659 4993 3818 63 850 4993 2220 29 542 4993 4947 70 422 4993 1138 18 977 4993 4527 23 350 4994 2461 87 32 4994 1994 14 205 4994 3496 51 444 4994 3272 53 103 4994 119 50 608 4994 3680 87 167 4994 1391 45 176 4994 179 80 320 4995 521 71 322 4996 2229 51 221 4997 4620 76 382 4997 2967 75 729 4997 549 28 654 4997 2696 75 399 4997 3519 52 762 4997 3261 4 562 4998 2734 61 88 4998 2788 54 78 4998 1377 33 55 4998 858 45 411 4998 2349 68 165 4998 2497 47 155 4998 3671 33 789 4998 3096 52 971 4999 1557 14 710 4999 3386 15 339 4999 659 46 813 4999 985 72 672 5000 2885 15 816 5000 4900 49 879 5000 3070 83 269 5000 273 99 25 5000 509 48 345 5000 808 90 288 5000 2694 21 249 DEMAND 4501 4 4502 150 4503 668 4504 535 4505 285 4506 740 4507 8 4508 567 4509 1283 4510 961 4511 335 4512 586 4513 1085 4514 25 4515 877 4516 1882 4517 469 4518 661 4519 11 4520 464 4521 5 4522 309 4523 248 4524 87 4525 512 4526 620 4527 1261 4528 1070 4529 211 4530 630 4531 107 4532 96 4533 486 4534 357 4535 316 4536 295 4537 564 4538 750 4539 2 4540 500 4541 375 4542 1809 4543 266 4544 1552 4545 427 4546 136 4547 19 4548 313 4549 509 4550 15 4551 312 4552 269 4553 501 4554 1145 4555 5 4556 680 4557 1303 4558 302 4559 495 4560 213 4561 83 4562 5 4563 7 4564 669 4565 18 4566 286 4567 387 4568 393 4569 451 4570 562 4571 286 4572 411 4573 974 4574 120 4575 181 4576 693 4577 204 4578 1117 4579 376 4580 755 4581 466 4582 156 4583 1187 4584 709 4585 123 4586 1242 4587 704 4588 703 4589 51 4590 319 4591 476 4592 13 4593 72 4594 120 4595 28 4596 505 4597 373 4598 243 4599 1 4600 818 4601 1175 4602 1013 4603 662 4604 1058 4605 275 4606 400 4607 537 4608 926 4609 708 4610 124 4611 372 4612 5 4613 511 4614 595 4615 240 4616 328 4617 187 4618 20 4619 1109 4620 423 4621 210 4622 24 4623 1041 4624 40 4625 1668 4626 1592 4627 373 4628 149 4629 875 4630 760 4631 1163 4632 18 4633 1372 4634 1160 4635 91 4636 13 4637 922 4638 340 4639 504 4640 1460 4641 425 4642 586 4643 690 4644 112 4645 1332 4646 20 4647 268 4648 770 4649 839 4650 11 4651 737 4652 336 4653 66 4654 1849 4655 483 4656 853 4657 1214 4658 1 4659 592 4660 1574 4661 84 4662 806 4663 606 4664 9 4665 1301 4666 605 4667 382 4668 903 4669 295 4670 44 4671 474 4672 729 4673 4 4674 174 4675 632 4676 513 4677 553 4678 27 4679 336 4680 33 4681 143 4682 561 4683 1105 4684 939 4685 441 4686 109 4687 315 4688 187 4689 791 4690 520 4691 378 4692 1028 4693 619 4694 1623 4695 310 4696 625 4697 630 4698 23 4699 10 4700 1020 4701 664 4702 326 4703 43 4704 238 4705 1654 4706 753 4707 393 4708 244 4709 1164 4710 1917 4711 18 4712 5 4713 9 4714 237 4715 1083 4716 268 4717 130 4718 154 4719 416 4720 143 4721 34 4722 694 4723 6 4724 8 4725 669 4726 996 4727 266 4728 53 4729 400 4730 829 4731 798 4732 6 4733 817 4734 298 4735 442 4736 3 4737 861 4738 769 4739 26 4740 792 4741 962 4742 557 4743 539 4744 645 4745 442 4746 795 4747 6 4748 284 4749 667 4750 587 4751 16 4752 1663 4753 296 4754 569 4755 883 4756 3 4757 450 4758 258 4759 416 4760 551 4761 532 4762 568 4763 1450 4764 158 4765 584 4766 1087 4767 84 4768 147 4769 349 4770 456 4771 626 4772 7 4773 8 4774 1255 4775 8 4776 780 4777 710 4778 13 4779 11 4780 406 4781 438 4782 415 4783 52 4784 258 4785 238 4786 201 4787 296 4788 1360 4789 762 4790 936 4791 313 4792 598 4793 576 4794 915 4795 301 4796 135 4797 1025 4798 502 4799 776 4800 897 4801 15 4802 476 4803 759 4804 46 4805 271 4806 163 4807 883 4808 4 4809 292 4810 1850 4811 600 4812 3 4813 9 4814 13 4815 653 4816 423 4817 103 4818 4 4819 8 4820 67 4821 369 4822 205 4823 197 4824 700 4825 764 4826 982 4827 7 4828 1199 4829 1588 4830 1708 4831 579 4832 15 4833 1397 4834 1131 4835 264 4836 133 4837 179 4838 381 4839 340 4840 408 4841 893 4842 6 4843 569 4844 565 4845 223 4846 264 4847 87 4848 549 4849 231 4850 256 4851 247 4852 53 4853 529 4854 276 4855 1039 4856 1348 4857 4 4858 128 4859 10 4860 325 4861 98 4862 594 4863 427 4864 543 4865 6 4866 262 4867 211 4868 995 4869 1268 4870 1 4871 2 4872 108 4873 320 4874 1013 4875 1252 4876 428 4877 510 4878 13 4879 1459 4880 594 4881 20 4882 613 4883 560 4884 251 4885 12 4886 1023 4887 116 4888 186 4889 247 4890 100 4891 98 4892 1012 4893 1292 4894 138 4895 1555 4896 157 4897 13 4898 424 4899 17 4900 157 4901 707 4902 65 4903 364 4904 881 4905 770 4906 47 4907 314 4908 244 4909 706 4910 1571 4911 539 4912 6 4913 1057 4914 1669 4915 6 4916 1703 4917 30 4918 6 4919 406 4920 774 4921 10 4922 394 4923 716 4924 1055 4925 992 4926 380 4927 8 4928 1217 4929 36 4930 251 4931 217 4932 1274 4933 568 4934 958 4935 8 4936 1 4937 538 4938 204 4939 315 4940 713 4941 261 4942 15 4943 10 4944 1 4945 298 4946 875 4947 227 4948 1229 4949 712 4950 176 4951 985 4952 332 4953 484 4954 920 4955 581 4956 881 4957 154 4958 1138 4959 6 4960 789 4961 1528 4962 415 4963 471 4964 2 4965 1008 4966 361 4967 1049 4968 885 4969 151 4970 204 4971 396 4972 477 4973 11 4974 494 4975 514 4976 1155 4977 991 4978 12 4979 576 4980 402 4981 1074 4982 226 4983 543 4984 384 4985 228 4986 299 4987 919 4988 508 4989 129 4990 98 4991 205 4992 434 4993 853 4994 769 4995 314 4996 1138 4997 20 4998 1 4999 465 5000 121 END Vol-1.5.4/Data/Sample/wedding_16.block0000644000175000017500000000672512136243266016367 0ustar sudipsudip0 0 1 1 2 2 3 3 4 4 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 0 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 1 63 1 64 1 65 0 66 1 67 1 68 1 69 1 70 1 71 1 72 1 73 1 74 1 75 1 76 0 77 1 78 1 79 1 80 1 81 1 82 1 83 1 84 1 85 1 86 1 87 0 88 1 89 1 90 1 91 1 92 1 93 1 94 1 95 1 96 1 97 1 98 0 99 1 100 1 101 1 102 1 103 1 104 1 105 1 106 1 107 1 108 1 109 0 110 1 111 1 112 1 113 1 114 1 115 1 116 1 117 1 118 1 119 1 120 0 121 1 122 1 123 1 124 1 125 1 126 1 127 1 128 1 129 1 130 1 131 0 132 0 133 1 134 1 135 1 136 1 137 1 138 1 139 1 140 1 141 1 142 1 143 0 144 1 145 1 146 1 147 1 148 1 149 1 150 1 151 1 152 1 153 1 154 0 155 1 156 1 157 1 158 1 159 1 160 1 161 1 162 1 163 1 164 1 165 0 166 1 167 1 168 1 169 1 170 1 171 1 172 1 173 1 174 1 175 1 176 0 177 1 178 2 179 2 180 2 181 2 182 2 183 2 184 2 185 2 186 2 187 0 188 2 189 2 190 2 191 2 192 2 193 2 194 2 195 2 196 2 197 2 198 0 199 2 200 2 201 2 202 2 203 2 204 2 205 2 206 2 207 2 208 2 209 0 210 2 211 2 212 2 213 2 214 2 215 2 216 2 217 2 218 2 219 2 220 0 221 2 222 2 223 2 224 2 225 2 226 2 227 2 228 2 229 2 230 2 231 0 232 2 233 2 234 2 235 2 236 2 237 2 238 2 239 2 240 2 241 2 242 0 243 0 244 2 245 2 246 2 247 2 248 2 249 2 250 2 251 2 252 2 253 2 254 0 255 2 256 2 257 2 258 2 259 2 260 2 261 2 262 2 263 2 264 2 265 0 266 2 267 2 268 2 269 2 270 2 271 2 272 2 273 2 274 2 275 2 276 0 277 2 278 2 279 2 280 2 281 2 282 2 283 2 284 2 285 2 286 2 287 0 288 2 289 2 290 2 291 2 292 2 293 2 294 2 295 2 296 2 297 2 298 0 299 2 300 2 301 2 302 2 303 2 304 2 305 2 306 2 307 2 308 2 309 0 310 2 311 3 312 3 313 3 314 3 315 3 316 3 317 3 318 3 319 3 320 0 321 3 322 3 323 3 324 3 325 3 326 3 327 3 328 3 329 3 330 3 331 0 332 3 333 3 334 3 335 3 336 3 337 3 338 3 339 3 340 3 341 3 342 0 343 3 344 3 345 3 346 3 347 3 348 3 349 3 350 3 351 3 352 3 353 0 354 0 355 3 356 3 357 3 358 3 359 3 360 3 361 3 362 3 363 3 364 3 365 0 366 3 367 3 368 3 369 3 370 3 371 3 372 3 373 3 374 3 375 3 376 0 377 3 378 3 379 3 380 3 381 3 382 3 383 3 384 3 385 3 386 3 387 0 388 3 389 3 390 3 391 3 392 3 393 3 394 3 395 3 396 3 397 3 398 0 399 3 400 3 401 3 402 3 403 3 404 3 405 3 406 3 407 3 408 3 409 0 410 3 411 3 412 3 413 3 414 3 415 3 416 3 417 3 418 3 419 3 420 0 421 3 422 3 423 3 424 3 425 3 426 3 427 3 428 3 429 3 430 3 431 0 432 3 433 3 434 3 435 3 436 3 437 3 438 3 439 3 440 3 441 3 442 0 443 3 444 4 445 4 446 4 447 4 448 4 449 4 450 4 451 4 452 4 453 0 454 4 455 4 456 4 457 4 458 4 459 4 460 4 461 4 462 4 463 4 464 0 465 0 466 4 467 4 468 4 469 4 470 4 471 4 472 4 473 4 474 4 475 4 476 0 477 4 478 4 479 4 480 4 481 4 482 4 483 4 484 4 485 4 486 4 487 0 488 4 489 4 490 4 491 4 492 4 493 4 494 4 495 4 496 4 497 4 498 0 499 4 500 4 501 4 502 4 503 4 504 4 505 4 506 4 507 4 508 4 509 0 510 4 511 4 512 4 513 4 514 4 515 4 516 4 517 4 518 4 519 4 520 0 521 4 522 4 523 4 524 4 525 4 526 4 527 4 528 4 529 4 530 4 531 0 532 4 533 4 534 4 535 4 536 4 537 4 538 4 539 4 540 4 541 4 542 0 543 4 544 4 545 4 546 4 547 4 548 4 549 4 550 4 551 4 552 4 553 0 554 4 555 4 556 4 557 4 558 4 559 4 560 4 561 4 562 4 563 4 564 0 565 4 566 4 567 4 568 4 569 4 570 4 571 4 572 4 573 4 574 4 575 0 576 0 577 4 578 0 579 0 580 0 581 0 582 0 583 0 584 0 585 0 586 0 587 0 588 0 589 0 590 0 591 0 592 0 593 0 594 0 595 0 596 0 597 0 598 0 599 0 600 0 601 0 602 0 603 0 604 0 605 0 606 0 607 0 608 0 609 0 610 0 611 0 612 0 613 0 614 0 615 0 616 0 617 0 618 0 619 0 620 Vol-1.5.4/Data/Sample/scOneInt.mps0000644000175000017500000000210710430174061015644 0ustar sudipsudipNAME scOnInt ROWS N obj G row1 G row2 G row3 G scrow1 G scrow2 G scrow3 COLUMNS INT1 'MARKER' 'INTORG' x1 obj 24.000 scrow1 15.000 x2 obj 12.000 scrow2 20.000 x3 obj 16.000 scrow3 5.000 INT1END 'MARKER' 'INTEND' y1 obj 4.000 row1 1.000 y1 row2 1.000 row3 2.000 y1 scrow1 -1.000 y2 obj 2.000 row1 3.000 y2 row3 2.000 scrow2 -1.000 y3 obj 3.000 row2 2.000 y3 scrow3 -1.000 RHS RHS row1 15.000 RHS row2 10.000 RHS row3 20.000 RHS scrow1 0.000 RHS scrow2 0.000 RHS scrow3 0.000 BOUNDS UP intbnd x3 7.0 ENDATA Vol-1.5.4/Data/Sample/app0110R.time0000755000175000017500000000030011015552002015454 0ustar sudipsudipNAME MYSMPS PERIODS LP C0000001 R0000001 STG00001 C0000029 R0000010 STG00002 C0000037 R0000014 STG00003 ENDATA Vol-1.5.4/Data/Sample/p0548.mps0000644000175000017500000027063410430174061014716 0ustar sudipsudip*NAME: p0548 *ROWS: 176 *COLUMNS: 548 *INTEGER: 548 *NONZERO: 1711 *BEST SOLN: 8691 (opt) *LP SOLN: 315.29 *SOURCE: Crowder-Johnson-Padberg test set * Ellis L. Johnson (IBM) * E. Andrew Boyd (Rice University) *APPLICATION: unknown *COMMENTS: pure 0/1 IP * 82 SOS constraints * NAME P0548 ROWS N R1001 L R1002 L R1003 L R1004 L R1005 L R1006 L R1007 L R1008 L R1009 L R1010 L R1011 L R1012 L R1013 L R1014 L R1015 L R1016 L R1017 L R1018 L R1019 L R1020 L R1021 L R1022 L R1023 L R1024 L R1025 L R1026 L R1027 L R1028 L R1029 L R1030 L R1031 L R1032 L R1033 L R1034 L R1035 L R1036 L R1037 L R1038 L R1039 L R1040 L R1041 L R1042 L R1043 L R1044 L R1045 L R1046 L R1047 L R1048 L R1049 L R1050 L R1051 L R1052 L R1053 L R1054 L R1055 L R1056 L R1057 L R1058 L R1059 L R1060 L R1061 L R1062 L R1063 L R1064 L R1065 L R1066 L R1067 L R1068 L R1069 L R1070 L R1071 L R1072 L R1073 L R1074 L R1075 L R1076 L R1077 L R1078 L R1079 L R1080 L R1081 L R1082 L R1083 L R1084 L R1085 L R1086 L R1087 L R1088 L R1089 L R1090 L R1091 L R1092 L R1093 L R1094 L R1095 L R1096 L R1097 L R1098 L R1099 L R1100 L R1101 L R1102 L R1103 L R1104 L R1105 L R1106 L R1107 L R1108 L R1109 L R1110 L R1111 L R1112 L R1113 L R1114 L R1115 L R1116 L R1117 L R1118 L R1119 L R1120 L R1121 L R1122 L R1123 L R1124 L R1125 L R1126 L R1127 L R1128 L R1129 L R1130 L R1131 L R1132 L R1133 L R1134 L R1135 L R1136 L R1137 L R1138 L R1139 L R1140 L R1141 L R1142 L R1143 L R1144 L R1145 L R1146 L R1147 L R1148 L R1149 L R1150 L R1151 L R1152 L R1153 L R1154 L R1155 L R1156 L R1157 L R1158 L R1159 L R1160 L R1161 L R1162 L R1163 L R1164 L R1165 L R1166 L R1167 L R1168 L R1169 L R1170 L R1171 L R1172 L R1173 L R1174 L R1175 L R1176 L R1177 COLUMNS MARK0000 'MARKER' 'INTORG' C1001 R1001 169 R1002 -59 C1001 R1051 -59 R1101 20 C1002 R1001 10 R1002 -10 C1002 R1051 -10 R1173 1 C1003 R1001 235 R1002 -167 C1003 R1051 -167 R1100 -35 C1003 R1102 20 R1109 1 C1004 R1001 59 R1002 161 C1004 R1051 161 R1100 31 C1004 R1103 -19 R1109 -1 C1005 R1001 39 R1002 -35 C1005 R1051 -35 R1100 -32 C1005 R1104 20 R1109 1 C1006 R1002 -120 R1051 -120 C1006 R1110 1 C1007 R1002 -189 R1051 -189 C1007 R1110 1 C1008 R1001 118 R1002 -68 C1008 R1051 -68 R1174 1 C1009 R1002 -68 R1051 -68 C1009 R1105 20 C1010 R1001 29 R1002 -71 C1010 R1051 -71 R1106 20 C1011 R1001 186 R1003 -106 C1011 R1052 106 R1175 1 C1012 R1001 110 R1003 -59 C1012 R1052 59 R1101 13 C1013 R1001 6 R1003 -10 C1013 R1052 10 R1173 1 C1014 R1001 154 R1003 -167 C1014 R1052 167 R1100 -27 C1014 R1102 13 R1111 1 C1015 R1001 38 R1003 161 C1015 R1052 -161 R1100 24 C1015 R1103 -12 R1111 -1 C1016 R1001 26 R1003 -35 C1016 R1052 35 R1100 -25 C1016 R1104 13 R1111 1 C1017 R1003 -120 R1052 120 C1017 R1112 1 C1018 R1003 -189 R1052 189 C1018 R1112 1 C1019 R1001 77 R1003 -68 C1019 R1052 68 R1174 1 C1020 R1003 -68 R1052 68 C1020 R1105 13 C1021 R1001 19 R1003 -71 C1021 R1052 71 R1106 13 C1022 R1001 128 R1004 -59 C1022 R1053 -59 R1101 15 C1023 R1001 7 R1004 -10 C1023 R1053 -10 R1173 1 C1024 R1001 179 R1004 -167 C1024 R1053 -167 R1100 -26 C1024 R1102 15 R1113 1 C1025 R1001 45 R1004 161 C1025 R1053 161 R1100 23 C1025 R1103 -14 R1113 -1 C1026 R1001 30 R1004 -35 C1026 R1053 -35 R1100 -24 C1026 R1104 15 R1113 1 C1027 R1004 -120 R1053 -120 C1027 R1114 1 C1028 R1004 -189 R1053 -189 C1028 R1114 1 C1029 R1001 89 R1004 -68 C1029 R1053 -68 R1174 1 C1030 R1001 22 R1004 -71 C1030 R1053 -71 R1106 15 C1031 R1001 674 R1005 -59 C1031 R1054 59 R1101 78 C1032 R1001 39 R1005 -10 C1032 R1054 10 R1173 1 C1033 R1001 941 R1005 -167 C1033 R1054 167 R1100 -139 C1033 R1102 78 R1115 1 C1034 R1001 235 R1005 161 C1034 R1054 -161 R1100 127 C1034 R1103 -77 R1115 -1 C1035 R1001 157 R1005 -35 C1035 R1054 35 R1100 -128 C1035 R1104 78 R1115 1 C1036 R1005 -120 R1054 120 C1036 R1116 1 C1037 R1005 -189 R1054 189 C1037 R1116 1 C1038 R1001 470 R1005 -68 C1038 R1054 68 R1174 1 C1039 R1005 -68 R1054 68 C1039 R1105 78 C1040 R1001 118 R1005 -71 C1040 R1054 71 R1106 78 C1041 R1001 755 R1006 -106 C1041 R1055 106 R1175 1 C1042 R1001 445 R1006 -59 C1042 R1055 59 R1101 52 C1043 R1001 26 R1006 -10 C1043 R1055 10 R1173 1 C1044 R1001 622 R1006 -167 C1044 R1055 167 R1100 -109 C1044 R1102 52 R1117 1 C1045 R1001 155 R1006 161 C1045 R1055 -161 R1100 99 C1045 R1103 -51 R1117 -1 C1046 R1001 104 R1006 -35 C1046 R1055 35 R1100 -100 C1046 R1104 52 R1117 1 C1047 R1006 -120 R1055 120 C1047 R1118 1 C1048 R1006 -189 R1055 189 C1048 R1118 1 C1049 R1001 311 R1006 -68 C1049 R1055 68 R1174 1 C1050 R1006 -68 R1055 68 C1050 R1105 52 C1051 R1001 78 R1006 -71 C1051 R1055 71 R1106 52 C1052 R1001 159 R1007 -106 C1052 R1056 106 R1175 1 C1053 R1001 94 R1007 -59 C1053 R1056 59 R1101 11 C1054 R1001 5 R1007 -10 C1054 R1056 10 R1173 1 C1055 R1001 251 R1007 45 C1055 R1056 -45 R1107 -10 C1055 R1108 11 C1056 R1007 -120 R1056 120 C1056 R1119 1 C1057 R1007 -189 R1056 189 C1057 R1119 1 C1058 R1001 65 R1007 -68 C1058 R1056 68 R1174 1 C1059 R1007 -68 R1056 68 C1059 R1105 11 C1060 R1001 16 R1007 -71 C1060 R1056 71 R1106 11 C1061 R1001 6 R1008 -10 C1061 R1057 10 R1173 1 C1062 R1001 37 R1008 161 C1062 R1057 -161 R1100 25 C1062 R1103 -11 R1120 -1 C1063 R1001 25 R1008 -35 C1063 R1057 35 R1100 -26 C1063 R1104 12 R1120 1 C1064 R1001 74 R1008 -68 C1064 R1057 68 R1174 1 C1065 R1008 -68 R1057 68 C1065 R1105 12 C1066 R1001 18 R1008 -71 C1066 R1057 71 R1106 12 C1067 R1001 17 R1009 -10 C1067 R1058 10 R1173 1 C1068 R1001 101 R1009 161 C1068 R1058 -161 R1100 80 C1068 R1103 -33 R1121 -1 C1069 R1001 67 R1009 -35 C1069 R1058 35 R1100 -81 C1069 R1104 34 R1121 1 C1070 R1001 202 R1009 -68 C1070 R1058 68 R1174 1 C1071 R1009 -68 R1058 68 C1071 R1105 34 C1072 R1001 50 R1009 -71 C1072 R1058 71 R1106 34 C1073 R1001 74 R1010 -136 C1073 R1059 136 R1176 1 C1074 R1001 6 R1010 -10 C1074 R1059 10 R1173 1 C1075 R1001 37 R1010 161 C1075 R1059 -161 R1100 15 C1075 R1103 -11 R1122 -1 C1076 R1001 25 R1010 -35 C1076 R1059 35 R1100 -16 C1076 R1104 12 R1122 1 C1077 R1001 74 R1010 -68 C1077 R1059 68 R1174 1 C1078 R1010 -68 R1059 68 C1078 R1105 12 C1079 R1001 18 R1010 -71 C1079 R1059 71 R1106 12 C1080 R1001 265 R1011 -59 C1080 R1060 59 R1101 31 C1081 R1001 15 R1011 -10 C1081 R1060 10 R1173 1 C1082 R1001 370 R1011 -167 C1082 R1060 167 R1100 -58 C1082 R1102 31 R1123 1 C1083 R1001 92 R1011 161 C1083 R1060 -161 R1100 52 C1083 R1103 -30 R1123 -1 C1084 R1001 62 R1011 -35 C1084 R1060 35 R1100 -53 C1084 R1104 31 R1123 1 C1085 R1011 -120 R1060 120 C1085 R1124 1 C1086 R1011 -189 R1060 189 C1086 R1124 1 C1087 R1001 185 R1011 -68 C1087 R1060 68 R1174 1 C1088 R1011 -68 R1060 68 C1088 R1105 31 C1089 R1001 46 R1011 -71 C1089 R1060 71 R1106 31 C1090 R1001 296 R1012 -106 C1090 R1061 106 R1175 1 C1091 R1001 175 R1012 -59 C1091 R1061 59 R1101 20 C1092 R1001 10 R1012 -10 C1092 R1061 10 R1173 1 C1093 R1001 244 R1012 -167 C1093 R1061 167 R1100 -43 C1093 R1102 20 R1125 1 C1094 R1001 61 R1012 161 C1094 R1061 -161 R1100 38 C1094 R1103 -19 R1125 -1 C1095 R1001 41 R1012 -35 C1095 R1061 35 R1100 -39 C1095 R1104 20 R1125 1 C1096 R1012 -120 R1061 120 C1096 R1126 1 C1097 R1012 -189 R1061 189 C1097 R1126 1 C1098 R1001 122 R1012 -68 C1098 R1061 68 R1174 1 C1099 R1012 -68 R1061 68 C1099 R1105 20 C1100 R1001 30 R1012 -71 C1100 R1061 71 R1106 20 C1101 R1001 156 R1013 -59 C1101 R1062 59 R1101 18 C1102 R1001 9 R1013 -10 C1102 R1062 10 R1173 1 C1103 R1001 217 R1013 -167 C1103 R1062 167 R1100 -33 C1103 R1102 18 R1127 1 C1104 R1001 54 R1013 161 C1104 R1062 -161 R1100 30 C1104 R1103 -17 R1127 -1 C1105 R1001 36 R1013 -35 C1105 R1062 35 R1100 -31 C1105 R1104 18 R1127 1 C1106 R1013 -120 R1062 120 C1106 R1128 1 C1107 R1013 -189 R1062 189 C1107 R1128 1 C1108 R1001 109 R1013 -68 C1108 R1062 68 R1174 1 C1109 R1001 27 R1013 -71 C1109 R1062 71 R1106 18 C1110 R1001 819 R1014 -59 C1110 R1063 59 R1101 95 C1111 R1001 48 R1014 -10 C1111 R1063 10 R1173 1 C1112 R1001 1142 R1014 -167 C1112 R1063 167 R1100 -178 C1112 R1102 95 R1129 1 C1113 R1001 286 R1014 161 C1113 R1063 -161 R1100 163 C1113 R1103 -94 R1129 -1 C1114 R1001 190 R1014 -35 C1114 R1063 35 R1100 -164 C1114 R1104 95 R1129 1 C1115 R1014 -120 R1063 120 C1115 R1130 1 C1116 R1014 -189 R1063 189 C1116 R1130 1 C1117 R1001 571 R1014 -68 C1117 R1063 68 R1174 1 C1118 R1014 -68 R1063 68 C1118 R1105 95 C1119 R1001 143 R1014 -71 C1119 R1063 71 R1106 95 C1120 R1001 916 R1015 -106 C1120 R1064 106 R1175 1 C1121 R1001 541 R1015 -59 C1121 R1064 59 R1101 63 C1122 R1001 31 R1015 -10 C1122 R1064 10 R1173 1 C1123 R1001 755 R1015 -167 C1123 R1064 167 R1100 -132 C1123 R1102 63 R1131 1 C1124 R1001 189 R1015 161 C1124 R1064 -161 R1100 121 C1124 R1103 -62 R1131 -1 C1125 R1001 126 R1015 -35 C1125 R1064 35 R1100 -122 C1125 R1104 63 R1131 1 C1126 R1015 -120 R1064 120 C1126 R1132 1 C1127 R1015 -189 R1064 189 C1127 R1132 1 C1128 R1001 377 R1015 -68 C1128 R1064 68 R1174 1 C1129 R1015 -68 R1064 68 C1129 R1105 63 C1130 R1001 94 R1015 -71 C1130 R1064 71 R1106 63 C1131 R1001 194 R1016 -106 C1131 R1065 106 R1175 1 C1132 R1001 114 R1016 -59 C1132 R1065 59 R1101 13 C1133 R1001 7 R1016 -10 C1133 R1065 10 R1173 1 C1134 R1001 306 R1016 45 C1134 R1065 -45 R1107 -12 C1134 R1108 13 C1135 R1016 -120 R1065 120 C1135 R1133 1 C1136 R1016 -189 R1065 189 C1136 R1133 1 C1137 R1001 80 R1016 -68 C1137 R1065 68 R1174 1 C1138 R1016 -68 R1065 68 C1138 R1105 13 C1139 R1001 20 R1016 -71 C1139 R1065 71 R1106 13 C1140 R1001 5 R1017 -10 C1140 R1066 10 R1173 1 C1141 R1001 30 R1017 161 C1141 R1066 -161 R1100 21 C1141 R1103 -9 R1134 -1 C1142 R1001 20 R1017 -35 C1142 R1066 35 R1100 -22 C1142 R1104 10 R1134 1 C1143 R1001 61 R1017 -68 C1143 R1066 68 R1174 1 C1144 R1017 -68 R1066 68 C1144 R1105 10 C1145 R1001 15 R1017 -71 C1145 R1066 71 R1106 10 C1146 R1001 14 R1018 -10 C1146 R1067 10 R1173 1 C1147 R1001 83 R1018 161 C1147 R1067 -161 R1100 69 C1147 R1103 -27 R1135 -1 C1148 R1001 55 R1018 -35 C1148 R1067 35 R1100 -70 C1148 R1104 28 R1135 1 C1149 R1001 165 R1018 -68 C1149 R1067 68 R1174 1 C1150 R1018 -68 R1067 68 C1150 R1105 28 C1151 R1001 41 R1018 -71 C1151 R1067 71 R1106 28 C1152 R1001 60 R1019 -136 C1152 R1068 136 R1176 1 C1153 R1001 5 R1019 -10 C1153 R1068 10 R1173 1 C1154 R1001 30 R1019 161 C1154 R1068 -161 R1100 12 C1154 R1103 -9 R1136 -1 C1155 R1001 20 R1019 -35 C1155 R1068 35 R1100 -13 C1155 R1104 10 R1136 1 C1156 R1001 60 R1019 -68 C1156 R1068 68 R1174 1 C1157 R1019 -68 R1068 68 C1157 R1105 10 C1158 R1001 15 R1019 -71 C1158 R1068 71 R1106 10 C1159 R1001 192 R1020 -81 C1159 R1069 81 R1177 1 C1160 R1001 87 R1020 -59 C1160 R1069 59 R1101 10 C1161 R1001 5 R1020 -10 C1161 R1069 10 R1173 1 C1162 R1001 121 R1020 -167 C1162 R1069 167 R1100 -20 C1162 R1102 10 R1137 1 C1163 R1001 30 R1020 161 C1163 R1069 -161 R1100 17 C1163 R1103 -9 R1137 -1 C1164 R1001 20 R1020 -35 C1164 R1069 35 R1100 -18 C1164 R1104 10 R1137 1 C1165 R1020 -120 R1069 120 C1165 R1138 1 C1166 R1020 -189 R1069 189 C1166 R1138 1 C1167 R1001 61 R1020 -68 C1167 R1069 68 R1174 1 C1168 R1001 455 R1020 -149 C1168 R1069 149 C1169 R1001 69 R1020 -100 C1169 R1069 100 C1170 R1001 55 R1020 -77 C1170 R1069 77 C1171 R1001 15 R1020 -71 C1171 R1069 71 R1106 10 C1172 R1001 209 R1021 -81 C1172 R1070 81 R1177 1 C1173 R1001 95 R1021 -59 C1173 R1070 59 R1101 11 C1174 R1001 6 R1021 -10 C1174 R1070 10 R1173 1 C1175 R1001 33 R1021 161 C1175 R1070 -161 R1100 23 C1175 R1103 -10 R1139 -1 C1176 R1001 22 R1021 -35 C1176 R1070 35 R1100 -24 C1176 R1104 11 R1139 1 C1177 R1021 -120 R1070 120 C1177 R1140 1 C1178 R1021 -189 R1070 189 C1178 R1140 1 C1179 R1001 66 R1021 -68 C1179 R1070 68 R1174 1 C1180 R1001 495 R1021 -149 C1180 R1070 149 C1181 R1001 75 R1021 -100 C1181 R1070 100 C1182 R1001 59 R1021 -77 C1182 R1070 77 C1183 R1001 17 R1021 -71 C1183 R1070 71 R1106 11 C1184 R1001 234 R1022 -81 C1184 R1071 81 R1177 1 C1185 R1001 106 R1022 -59 C1185 R1071 59 R1101 12 C1186 R1001 6 R1022 -10 C1186 R1071 10 R1173 1 C1187 R1001 37 R1022 161 C1187 R1071 -161 R1100 26 C1187 R1103 -11 R1141 -1 C1188 R1001 25 R1022 -35 C1188 R1071 35 R1100 -27 C1188 R1104 12 R1141 1 C1189 R1022 -120 R1071 120 C1189 R1142 1 C1190 R1022 -189 R1071 189 C1190 R1142 1 C1191 R1001 74 R1022 -68 C1191 R1071 68 R1174 1 C1192 R1001 554 R1022 -149 C1192 R1071 149 C1193 R1001 84 R1022 -100 C1193 R1071 100 C1194 R1001 66 R1022 -77 C1194 R1071 77 C1195 R1001 18 R1022 -71 C1195 R1071 71 R1106 12 C1196 R1001 229 R1023 -93 C1196 R1072 -93 R1175 1 C1197 R1001 266 R1023 -81 C1197 R1072 -81 R1177 1 C1198 R1001 120 R1023 -59 C1198 R1072 -59 R1101 14 C1199 R1001 7 R1023 -10 C1199 R1072 -10 R1173 1 C1200 R1001 168 R1023 -167 C1200 R1072 -167 R1100 -32 C1200 R1102 14 R1143 1 C1201 R1001 42 R1023 161 C1201 R1072 161 R1100 29 C1201 R1103 -13 R1143 -1 C1202 R1001 28 R1023 -35 C1202 R1072 -35 R1100 -30 C1202 R1104 14 R1143 1 C1203 R1023 -120 R1072 -120 C1203 R1144 1 C1204 R1023 -189 R1072 -189 C1204 R1144 1 C1205 R1001 84 R1023 -68 C1205 R1072 -68 R1174 1 C1206 R1001 630 R1023 -149 C1206 R1072 -149 C1207 R1001 95 R1023 -100 C1207 R1072 -100 C1208 R1001 76 R1023 -77 C1208 R1072 -77 C1209 R1001 21 R1023 -71 C1209 R1072 -71 R1106 14 C1210 R1001 7 R1024 -10 C1210 R1073 10 R1173 1 C1211 R1001 44 R1024 161 C1211 R1073 -161 R1100 36 C1211 R1103 -14 R1145 -1 C1212 R1001 29 R1024 -35 C1212 R1073 35 R1100 -37 C1212 R1104 15 R1145 1 C1213 R1001 87 R1024 -68 C1213 R1073 68 R1174 1 C1214 R1001 653 R1024 -149 C1214 R1073 149 C1215 R1001 99 R1024 -100 C1215 R1073 100 C1216 R1001 22 R1024 -71 C1216 R1073 71 R1106 15 C1217 R1001 209 R1025 -81 C1217 R1074 81 R1177 1 C1218 R1001 95 R1025 -59 C1218 R1074 59 R1101 11 C1219 R1001 6 R1025 -10 C1219 R1074 10 R1173 1 C1220 R1001 33 R1025 161 C1220 R1074 -161 R1100 23 C1220 R1103 -10 R1146 -1 C1221 R1001 22 R1025 -35 C1221 R1074 35 R1100 -24 C1221 R1104 11 R1146 1 C1222 R1025 -120 R1074 120 C1222 R1147 1 C1223 R1025 -189 R1074 189 C1223 R1147 1 C1224 R1001 66 R1025 -68 C1224 R1074 68 R1174 1 C1225 R1001 495 R1025 -149 C1225 R1074 149 C1226 R1001 75 R1025 -100 C1226 R1074 100 C1227 R1001 59 R1025 -77 C1227 R1074 77 C1228 R1001 17 R1025 -71 C1228 R1074 71 R1106 11 C1229 R1001 494 R1026 -81 C1229 R1075 81 R1177 1 C1230 R1001 224 R1026 -59 C1230 R1075 59 R1101 26 C1231 R1001 13 R1026 -10 C1231 R1075 10 R1173 1 C1232 R1001 78 R1026 161 C1232 R1075 -161 R1100 56 C1232 R1103 -25 R1148 -1 C1233 R1001 52 R1026 -35 C1233 R1075 35 R1100 -57 C1233 R1104 26 R1148 1 C1234 R1026 -120 R1075 120 C1234 R1149 1 C1235 R1026 -189 R1075 189 C1235 R1149 1 C1236 R1001 156 R1026 -68 C1236 R1075 68 R1174 1 C1237 R1001 1170 R1026 -149 C1237 R1075 149 C1238 R1001 177 R1026 -100 C1238 R1075 100 C1239 R1001 140 R1026 -77 C1239 R1075 77 C1240 R1001 39 R1026 -71 C1240 R1075 71 R1106 26 C1241 R1001 208 R1027 -93 C1241 R1076 -93 R1175 1 C1242 R1001 241 R1027 -81 C1242 R1076 -81 R1177 1 C1243 R1001 109 R1027 -59 C1243 R1076 -59 R1101 13 C1244 R1001 76 R1027 -145 C1244 R1076 -145 C1245 R1001 6 R1027 -10 C1245 R1076 -10 R1173 1 C1246 R1001 292 R1027 45 C1246 R1076 45 R1107 -12 C1246 R1108 13 C1247 R1027 -120 R1076 -120 C1247 R1150 1 C1248 R1027 -189 R1076 -189 C1248 R1150 1 C1249 R1001 76 R1027 -68 C1249 R1076 -68 R1174 1 C1250 R1001 571 R1027 -149 C1250 R1076 -149 C1251 R1001 86 R1027 -100 C1251 R1076 -100 C1252 R1001 69 R1027 -77 C1252 R1076 -77 C1253 R1001 19 R1027 -71 C1253 R1076 -71 R1106 13 C1254 R1001 110 R1028 -59 C1254 R1077 59 R1101 13 C1255 R1001 77 R1028 -145 C1255 R1077 145 C1256 R1001 6 R1028 -10 C1256 R1077 10 R1173 1 C1257 R1001 154 R1028 -167 C1257 R1077 167 R1100 -28 C1257 R1102 13 R1151 1 C1258 R1001 38 R1028 161 C1258 R1077 -161 R1100 25 C1258 R1103 -12 R1151 -1 C1259 R1001 26 R1028 -35 C1259 R1077 35 R1100 -26 C1259 R1104 13 R1151 1 C1260 R1028 -120 R1077 120 C1260 R1152 1 C1261 R1028 -189 R1077 189 C1261 R1152 1 C1262 R1001 77 R1028 -68 C1262 R1077 68 R1174 1 C1263 R1001 261 R1028 -189 C1263 R1077 189 C1264 R1001 59 R1028 -104 C1264 R1077 104 C1265 R1001 51 R1028 -110 C1265 R1077 110 C1266 R1001 19 R1028 -71 C1266 R1077 71 R1106 13 C1267 R1001 583 R1029 -93 C1267 R1078 93 R1175 1 C1268 R1001 306 R1029 -59 C1268 R1078 59 R1101 36 C1269 R1001 214 R1029 -145 C1269 R1078 145 C1270 R1001 18 R1029 -10 C1270 R1078 10 R1173 1 C1271 R1001 427 R1029 -167 C1271 R1078 167 R1100 -77 C1271 R1102 36 R1153 1 C1272 R1001 107 R1029 161 C1272 R1078 -161 R1100 70 C1272 R1103 -35 R1153 -1 C1273 R1001 71 R1029 -35 C1273 R1078 35 R1100 -71 C1273 R1104 36 R1153 1 C1274 R1029 -120 R1078 120 C1274 R1154 1 C1275 R1029 -189 R1078 189 C1275 R1154 1 C1276 R1001 214 R1029 -68 C1276 R1078 68 R1174 1 C1277 R1001 725 R1029 -189 C1277 R1078 189 C1278 R1001 164 R1029 -104 C1278 R1078 104 C1279 R1001 142 R1029 -110 C1279 R1078 110 C1280 R1001 53 R1029 -71 C1280 R1078 71 R1106 36 C1281 R1001 144 R1030 -59 C1281 R1079 59 R1101 17 C1282 R1001 42 R1030 -155 C1282 R1079 155 C1283 R1001 8 R1030 -10 C1283 R1079 10 R1173 1 C1284 R1001 202 R1030 -167 C1284 R1079 167 R1100 -34 C1284 R1102 17 R1155 1 C1285 R1001 50 R1030 161 C1285 R1079 -161 R1100 31 C1285 R1103 -16 R1155 -1 C1286 R1001 34 R1030 -35 C1286 R1079 35 R1100 -32 C1286 R1104 17 R1155 1 C1287 R1030 -120 R1079 120 C1287 R1156 1 C1288 R1030 -189 R1079 189 C1288 R1156 1 C1289 R1001 101 R1030 -68 C1289 R1079 68 R1174 1 C1290 R1001 342 R1030 -189 C1290 R1079 189 C1291 R1001 77 R1030 -104 C1291 R1079 104 C1292 R1001 67 R1030 -110 C1292 R1079 110 C1293 R1001 25 R1030 -71 C1293 R1079 71 R1106 17 C1294 R1001 1193 R1031 -93 C1294 R1080 93 R1175 1 C1295 R1001 626 R1031 -59 C1295 R1080 59 R1101 73 C1296 R1001 437 R1031 -145 C1296 R1080 145 C1297 R1001 36 R1031 -10 C1297 R1080 10 R1173 1 C1298 R1001 874 R1031 -167 C1298 R1080 167 R1100 -158 C1298 R1102 73 R1157 1 C1299 R1001 218 R1031 161 C1299 R1080 -161 R1100 144 C1299 R1103 -72 R1157 -1 C1300 R1001 146 R1031 -35 C1300 R1080 35 R1100 -145 C1300 R1104 73 R1157 1 C1301 R1031 -120 R1080 120 C1301 R1158 1 C1302 R1031 -189 R1080 189 C1302 R1158 1 C1303 R1001 437 R1031 -68 C1303 R1080 68 R1174 1 C1304 R1001 1482 R1031 -189 C1304 R1080 189 C1305 R1001 335 R1031 -104 C1305 R1080 104 C1306 R1001 291 R1031 -110 C1306 R1080 110 C1307 R1001 109 R1031 -71 C1307 R1080 71 R1106 73 C1308 R1001 328 R1032 -93 C1308 R1081 93 R1175 1 C1309 R1001 172 R1032 -59 C1309 R1081 59 R1101 20 C1310 R1001 120 R1032 -136 C1310 R1081 136 R1176 1 C1311 R1001 10 R1032 -10 C1311 R1081 10 R1173 1 C1312 R1001 240 R1032 -167 C1312 R1081 167 R1100 -24 C1312 R1102 20 R1159 1 C1313 R1001 60 R1032 161 C1313 R1081 -161 R1100 21 C1313 R1103 -19 R1159 -1 C1314 R1001 40 R1032 -35 C1314 R1081 35 R1100 -22 C1314 R1104 20 R1159 1 C1315 R1032 -138 R1081 138 C1316 R1001 120 R1032 -68 C1316 R1081 68 R1174 1 C1317 R1001 407 R1032 -189 C1317 R1081 189 C1318 R1001 92 R1032 -104 C1318 R1081 104 C1319 R1001 80 R1032 -110 C1319 R1081 110 C1320 R1001 30 R1032 -71 C1320 R1081 71 R1106 20 C1321 R1001 164 R1033 -93 C1321 R1082 93 R1175 1 C1322 R1001 60 R1033 -145 C1322 R1082 145 C1323 R1001 5 R1033 -10 C1323 R1082 10 R1173 1 C1324 R1001 30 R1033 161 C1324 R1082 -161 R1100 22 C1324 R1103 -9 R1160 -1 C1325 R1001 20 R1033 -35 C1325 R1082 35 R1100 -23 C1325 R1104 10 R1160 1 C1326 R1001 60 R1033 -68 C1326 R1082 68 R1174 1 C1327 R1001 204 R1033 -189 C1327 R1082 189 C1328 R1001 46 R1033 -104 C1328 R1082 104 C1329 R1001 15 R1033 -71 C1329 R1082 71 R1106 10 C1330 R1001 220 R1034 -93 C1330 R1083 93 R1175 1 C1331 R1001 80 R1034 -145 C1331 R1083 145 C1332 R1001 7 R1034 -10 C1332 R1083 10 R1173 1 C1333 R1001 27 R1034 -35 C1333 R1083 35 R1100 -33 C1333 R1104 13 R1161 1 C1334 R1001 80 R1034 -68 C1334 R1083 68 R1174 1 C1335 R1001 273 R1034 -189 C1335 R1083 189 C1336 R1001 62 R1034 -104 C1336 R1083 104 C1337 R1001 20 R1034 -71 C1337 R1083 71 R1106 13 C1338 R1001 285 R1035 -93 C1338 R1084 93 R1175 1 C1339 R1001 104 R1035 -145 C1339 R1084 145 C1340 R1001 9 R1035 -10 C1340 R1084 10 R1173 1 C1341 R1035 -189 R1084 189 C1342 R1001 104 R1035 -68 C1342 R1084 68 R1174 1 C1343 R1001 354 R1035 -189 C1343 R1084 189 C1344 R1001 80 R1035 -104 C1344 R1084 104 C1345 R1001 70 R1035 -110 C1345 R1084 110 C1346 R1001 26 R1035 -71 C1346 R1084 71 R1106 17 C1347 R1001 918 R1036 -93 C1347 R1085 93 R1175 1 C1348 R1001 336 R1036 -145 C1348 R1085 145 C1349 R1001 28 R1036 -10 C1349 R1085 10 R1173 1 C1350 R1036 -189 R1085 189 C1351 R1001 336 R1036 -68 C1351 R1085 68 R1174 1 C1352 R1001 1140 R1036 -189 C1352 R1085 189 C1353 R1001 258 R1036 -104 C1353 R1085 104 C1354 R1001 224 R1036 -110 C1354 R1085 110 C1355 R1001 84 R1036 -71 C1355 R1085 71 R1106 56 C1356 R1001 256 R1037 -93 C1356 R1086 -93 R1175 1 C1357 R1001 94 R1037 -136 C1357 R1086 -136 R1176 1 C1358 R1001 8 R1037 -10 C1358 R1086 -10 R1173 1 C1359 R1001 187 R1037 -167 C1359 R1086 -167 R1100 -19 C1359 R1102 16 C1360 R1037 -138 R1086 -138 C1361 R1001 94 R1037 -68 C1361 R1086 -68 R1174 1 C1362 R1001 318 R1037 -189 C1362 R1086 -189 C1363 R1001 72 R1037 -104 C1363 R1086 -104 C1364 R1001 62 R1037 -110 C1364 R1086 -110 C1365 R1001 23 R1037 -71 C1365 R1086 -71 R1106 16 C1366 R1001 166 R1038 -93 C1366 R1087 93 R1175 1 C1367 R1001 87 R1038 -59 C1367 R1087 59 R1101 10 C1368 R1001 5 R1038 -10 C1368 R1087 10 R1173 1 C1369 R1001 121 R1038 -167 C1369 R1087 167 R1100 -23 C1369 R1102 10 R1162 1 C1370 R1001 30 R1038 161 C1370 R1087 -161 R1100 20 C1370 R1103 -9 R1162 -1 C1371 R1001 20 R1038 -35 C1371 R1087 35 R1100 -21 C1371 R1104 10 R1162 1 C1372 R1038 -120 R1087 120 C1372 R1163 1 C1373 R1038 -189 R1087 189 C1373 R1163 1 C1374 R1001 61 R1038 -68 C1374 R1087 68 R1174 1 C1375 R1001 273 R1038 -180 C1375 R1087 180 C1376 R1001 56 R1038 -120 C1376 R1087 120 C1377 R1001 45 R1038 -100 C1377 R1087 100 C1378 R1001 15 R1038 -71 C1378 R1087 71 R1106 10 C1379 R1001 229 R1039 -59 C1379 R1088 59 R1101 27 C1380 R1001 36 R1039 -34 C1380 R1088 34 C1381 R1001 13 R1039 -10 C1381 R1088 10 R1173 1 C1382 R1001 319 R1039 -167 C1382 R1088 167 R1100 -52 C1382 R1102 27 R1164 1 C1383 R1001 80 R1039 161 C1383 R1088 -161 R1100 47 C1383 R1103 -26 R1164 -1 C1384 R1001 53 R1039 -35 C1384 R1088 35 R1100 -48 C1384 R1104 27 R1164 1 C1385 R1039 -120 R1088 120 C1385 R1165 1 C1386 R1039 -189 R1088 189 C1386 R1165 1 C1387 R1001 160 R1039 -68 C1387 R1088 68 R1174 1 C1388 R1001 718 R1039 -180 C1388 R1088 180 C1389 R1001 146 R1039 -120 C1389 R1088 120 C1390 R1001 120 R1039 -100 C1390 R1088 100 C1391 R1001 40 R1039 -71 C1391 R1088 71 R1106 27 C1392 R1001 430 R1040 -59 C1392 R1089 59 R1101 50 C1393 R1001 25 R1040 -10 C1393 R1089 10 R1173 1 C1394 R1001 600 R1040 -167 C1394 R1089 167 R1100 -120 C1394 R1102 50 R1166 1 C1395 R1001 150 R1040 161 C1395 R1089 -161 R1100 109 C1395 R1103 -49 R1166 -1 C1396 R1001 100 R1040 -35 C1396 R1089 35 R1100 -110 C1396 R1104 50 R1166 1 C1397 R1040 -120 R1089 120 C1397 R1167 1 C1398 R1040 -189 R1089 189 C1398 R1167 1 C1399 R1001 300 R1040 -68 C1399 R1089 68 R1174 1 C1400 R1001 1350 R1040 -180 C1400 R1089 180 C1401 R1001 275 R1040 -120 C1401 R1089 120 C1402 R1001 225 R1040 -100 C1402 R1089 100 C1403 R1001 75 R1040 -71 C1403 R1089 71 R1106 50 C1404 R1001 356 R1041 -93 C1404 R1090 93 R1175 1 C1405 R1001 187 R1041 -59 C1405 R1090 59 R1101 22 C1406 R1001 11 R1041 -10 C1406 R1090 10 R1173 1 C1407 R1001 260 R1041 -167 C1407 R1090 167 R1100 -46 C1407 R1102 22 R1168 1 C1408 R1001 65 R1041 161 C1408 R1090 -161 R1100 41 C1408 R1103 -21 R1168 -1 C1409 R1001 43 R1041 -35 C1409 R1090 35 R1100 -42 C1409 R1104 22 R1168 1 C1410 R1041 -120 R1090 120 C1410 R1169 1 C1411 R1041 -189 R1090 189 C1411 R1169 1 C1412 R1001 130 R1041 -68 C1412 R1090 68 R1174 1 C1413 R1001 586 R1041 -180 C1413 R1090 180 C1414 R1001 119 R1041 -120 C1414 R1090 120 C1415 R1001 98 R1041 -100 C1415 R1090 100 C1416 R1001 33 R1041 -71 C1416 R1090 71 R1106 22 C1417 R1001 313 R1042 -93 C1417 R1091 93 R1175 1 C1418 R1001 26 R1042 -34 C1418 R1091 34 C1419 R1001 10 R1042 -10 C1419 R1091 10 R1173 1 C1420 R1001 229 R1042 -167 C1420 R1091 167 R1100 -42 C1420 R1102 19 R1170 1 C1421 R1001 57 R1042 161 C1421 R1091 -161 R1100 38 C1421 R1103 -18 R1170 -1 C1422 R1001 38 R1042 -35 C1422 R1091 35 R1100 -39 C1422 R1104 19 R1170 1 C1423 R1042 -120 R1091 120 C1423 R1171 1 C1424 R1042 -189 R1091 189 C1424 R1171 1 C1425 R1001 115 R1042 -68 C1425 R1091 68 R1174 1 C1426 R1001 516 R1042 -180 C1426 R1091 180 C1427 R1001 105 R1042 -120 C1427 R1091 120 C1428 R1001 86 R1042 -100 C1428 R1091 100 C1429 R1001 29 R1042 -71 C1429 R1091 71 R1106 19 C1430 R1001 6 R1043 -10 C1430 R1092 10 R1173 1 C1431 R1001 24 R1043 -35 C1431 R1092 35 R1100 -33 C1431 R1104 12 R1172 1 C1432 R1001 72 R1043 -68 C1432 R1092 68 R1174 1 C1433 R1001 324 R1043 -180 C1433 R1092 180 C1434 R1001 66 R1043 -120 C1434 R1092 120 C1435 R1001 18 R1043 -71 C1435 R1092 71 R1106 12 C1436 R1001 211 R1044 -93 C1436 R1093 93 R1175 1 C1437 R1001 17 R1044 -34 C1437 R1093 34 C1438 R1001 6 R1044 -10 C1438 R1093 10 R1173 1 C1439 R1001 39 R1044 161 C1439 R1093 -161 R1100 23 C1439 R1103 -12 C1440 R1044 -189 R1093 189 C1441 R1001 77 R1044 -68 C1441 R1093 68 R1174 1 C1442 R1001 348 R1044 -180 C1442 R1093 180 C1443 R1001 71 R1044 -120 C1443 R1093 120 C1444 R1001 58 R1044 -100 C1444 R1093 100 C1445 R1001 19 R1044 -71 C1445 R1093 71 R1106 13 C1446 R1001 285 R1045 -93 C1446 R1094 93 R1175 1 C1447 R1001 9 R1045 -10 C1447 R1094 10 R1173 1 C1448 R1045 -189 R1094 189 C1449 R1001 104 R1045 -68 C1449 R1094 68 R1174 1 C1450 R1001 470 R1045 -180 C1450 R1094 180 C1451 R1001 96 R1045 -120 C1451 R1094 120 C1452 R1001 78 R1045 -100 C1452 R1094 100 C1453 R1001 26 R1045 -71 C1453 R1094 71 R1106 17 C1454 R1001 1454 R1046 -93 C1454 R1095 93 R1175 1 C1455 R1001 44 R1046 -10 C1455 R1095 10 R1173 1 C1456 R1046 -189 R1095 189 C1457 R1001 532 R1046 -68 C1457 R1095 68 R1174 1 C1458 R1001 4435 R1046 -192 C1458 R1095 192 C1459 R1001 488 R1046 -120 C1459 R1095 120 C1460 R1001 399 R1046 -100 C1460 R1095 100 C1461 R1001 133 R1046 -71 C1461 R1095 71 R1106 89 C1462 R1001 295 R1047 -93 C1462 R1096 93 R1175 1 C1463 R1001 9 R1047 -10 C1463 R1096 10 R1173 1 C1464 R1047 -189 R1096 189 C1465 R1001 108 R1047 -68 C1465 R1096 68 R1174 1 C1466 R1001 900 R1047 -192 C1466 R1096 192 C1467 R1001 99 R1047 -120 C1467 R1096 120 C1468 R1001 81 R1047 -100 C1468 R1096 100 C1469 R1001 27 R1047 -71 C1469 R1096 71 R1106 18 C1470 R1001 164 R1048 -93 C1470 R1097 93 R1175 1 C1471 R1001 60 R1048 -136 C1471 R1097 136 R1176 1 C1472 R1001 5 R1048 -10 C1472 R1097 10 R1173 1 C1473 R1048 -138 R1097 138 C1474 R1001 60 R1048 -68 C1474 R1097 68 R1174 1 C1475 R1001 500 R1048 -192 C1475 R1097 192 C1476 R1001 55 R1048 -120 C1476 R1097 120 C1477 R1001 45 R1048 -100 C1477 R1097 100 C1478 R1001 15 R1048 -71 C1478 R1097 71 R1106 10 C1479 R1001 1165 R1049 -93 C1479 R1098 -93 R1175 1 C1480 R1001 36 R1049 -10 C1480 R1098 -10 R1173 1 C1481 R1049 -189 R1098 -189 C1482 R1001 427 R1049 -68 C1482 R1098 -68 R1174 1 C1483 R1001 3555 R1049 -192 C1483 R1098 -192 C1484 R1001 391 R1049 -120 C1484 R1098 -120 C1485 R1001 320 R1049 -100 C1485 R1098 -100 C1486 R1001 107 R1049 -71 C1486 R1098 -71 R1106 71 C1487 R1001 399 R1050 -106 C1487 R1099 106 R1175 1 C1488 R1001 14 R1050 -10 C1488 R1099 10 R1173 1 C1489 R1050 -189 R1099 189 C1490 R1001 164 R1050 -68 C1490 R1099 68 R1174 1 C1491 R1001 1370 R1050 -192 C1491 R1099 192 C1492 R1001 151 R1050 -120 C1492 R1099 120 C1493 R1001 123 R1050 -100 C1493 R1099 100 C1494 R1001 41 R1050 -71 C1494 R1099 71 R1106 27 C1495 R1001 100 R1173 -49 C1496 R1001 1000 R1174 -49 C1497 R1001 11000 R1175 -26 C1498 R1001 2000 R1176 -5 C1499 R1001 2600 R1177 -7 C1500 R1002 9999 R1051 -9999 C1500 R1100 -15 C1501 R1003 9999 R1052 -9999 C1501 R1100 -12 C1502 R1004 9999 R1053 -9999 C1502 R1100 -8 C1503 R1005 9999 R1054 -9999 C1503 R1100 -58 C1504 R1006 9999 R1055 -9999 C1504 R1100 -48 C1505 R1007 9999 R1056 -9999 C1505 R1100 -10 C1506 R1008 9999 R1057 -9999 C1506 R1100 -11 C1507 R1009 9999 R1058 -9999 C1507 R1100 -31 C1508 R1010 9999 R1059 -9999 C1508 R1100 -11 C1509 R1011 9999 R1060 -9999 C1509 R1100 -28 C1510 R1012 9999 R1061 -9999 C1510 R1100 -19 C1511 R1013 9999 R1062 -9999 C1511 R1100 -13 C1512 R1014 9999 R1063 -9999 C1512 R1100 -88 C1513 R1015 9999 R1064 -9999 C1513 R1100 -58 C1514 R1016 9999 R1065 -9999 C1514 R1100 -12 C1515 R1017 9999 R1066 -9999 C1515 R1100 -9 C1516 R1018 9999 R1067 -9999 C1516 R1100 -25 C1517 R1019 9999 R1068 -9999 C1517 R1100 -9 C1518 R1020 9999 R1069 -9999 C1518 R1100 -9 C1519 R1021 9999 R1070 -9999 C1519 R1100 -10 C1520 R1022 9999 R1071 -9999 C1520 R1100 -11 C1521 R1023 9999 R1072 -9999 C1521 R1100 -13 C1522 R1024 9999 R1073 -9999 C1522 R1100 -13 C1523 R1025 9999 R1074 -9999 C1523 R1100 -10 C1524 R1026 9999 R1075 -9999 C1524 R1100 -24 C1525 R1027 9999 R1076 -9999 C1525 R1100 -12 C1526 R1028 9999 R1077 -9999 C1526 R1100 -12 C1527 R1029 9999 R1078 -9999 C1527 R1100 -33 C1528 R1030 9999 R1079 -9999 C1528 R1100 -15 C1529 R1031 9999 R1080 -9999 C1529 R1100 -67 C1530 R1032 9999 R1081 -9999 C1530 R1100 -18 C1531 R1033 9999 R1082 -9999 C1531 R1100 -9 C1532 R1034 9999 R1083 -9999 C1532 R1100 -12 C1533 R1035 9999 R1084 -9999 C1533 R1100 -16 C1534 R1036 9999 R1085 -9999 C1534 R1100 -52 C1535 R1037 9999 R1086 -9999 C1535 R1100 -14 C1536 R1038 9999 R1087 -9999 C1536 R1100 -9 C1537 R1039 9999 R1088 -9999 C1537 R1100 -20 C1538 R1040 9999 R1089 -9999 C1538 R1100 -46 C1539 R1041 9999 R1090 -9999 C1539 R1100 -20 C1540 R1042 9999 R1091 -9999 C1540 R1100 -18 C1541 R1043 9999 R1092 -9999 C1541 R1100 -11 C1542 R1044 9999 R1093 -9999 C1542 R1100 -12 C1543 R1045 9999 R1094 -9999 C1543 R1100 -16 C1544 R1046 9999 R1095 -9999 C1544 R1100 -82 C1545 R1047 9999 R1096 -9999 C1545 R1100 -17 C1546 R1048 9999 R1097 -9999 C1546 R1100 -9 C1547 R1049 9999 R1098 -9999 C1547 R1100 -66 C1548 R1050 9999 R1099 -9999 C1548 R1100 -25 MARK0001 'MARKER' 'INTEND' RHS RHS R1002 9303 R1003 9901 RHS R1004 9509 R1005 9312 RHS R1006 9805 R1007 9330 RHS R1008 9446 R1009 9049 RHS R1010 9485 R1011 10045 RHS R1012 9740 R1013 9932 RHS R1014 10018 R1015 9680 RHS R1016 9240 R1017 9290 RHS R1018 10053 R1019 9365 RHS R1020 9826 R1021 9752 RHS R1022 9544 R1023 9003 RHS R1024 9827 R1025 9726 RHS R1026 9774 R1027 8864 RHS R1028 9910 R1029 9864 RHS R1030 9910 R1031 9665 RHS R1032 9653 R1033 9900 RHS R1034 9559 R1035 9893 RHS R1036 9605 R1037 8796 RHS R1038 9078 R1039 9478 RHS R1040 9647 R1041 10001 RHS R1042 9601 R1043 9557 RHS R1044 9729 R1045 9516 RHS R1046 9179 R1047 9125 RHS R1048 9723 R1049 8782 RHS R1050 9690 R1051 154 RHS R1052 -2 R1053 77 RHS R1054 587 R1055 94 RHS R1056 569 R1057 453 RHS R1058 850 R1059 414 RHS R1060 -146 R1061 159 RHS R1062 -33 R1063 -119 RHS R1064 219 R1065 659 RHS R1066 609 R1067 -154 RHS R1068 534 R1069 73 RHS R1070 147 R1071 355 RHS R1072 138 R1073 72 RHS R1074 173 R1075 125 RHS R1076 -1 R1077 -11 RHS R1078 35 R1079 -11 RHS R1080 234 R1081 246 RHS R1082 -1 R1083 340 RHS R1084 6 R1085 294 RHS R1086 -69 R1087 821 RHS R1088 421 R1089 252 RHS R1090 -102 R1091 298 RHS R1092 342 R1093 170 RHS R1094 383 R1095 720 RHS R1096 774 R1097 176 RHS R1098 -83 R1099 209 RHS R1100 -920 R1101 1200 RHS R1102 350 R1103 -104 RHS R1104 195 R1105 40 RHS R1106 1564 R1107 198 RHS R1110 1 R1112 1 RHS R1114 1 R1116 1 RHS R1118 1 R1119 1 RHS R1124 1 R1126 1 RHS R1128 1 R1130 1 RHS R1132 1 R1133 1 RHS R1138 1 R1140 1 RHS R1142 1 R1144 1 RHS R1147 1 R1149 1 RHS R1150 1 R1152 1 RHS R1154 1 R1156 1 RHS R1158 1 R1161 1 RHS R1163 1 R1165 1 RHS R1167 1 R1169 1 RHS R1171 1 R1172 1 BOUNDS UP ONE C1001 1 UP ONE C1002 1 UP ONE C1003 1 UP ONE C1004 1 UP ONE C1005 1 UP ONE C1006 1 UP ONE C1007 1 UP ONE C1008 1 UP ONE C1009 1 UP ONE C1010 1 UP ONE C1011 1 UP ONE C1012 1 UP ONE C1013 1 UP ONE C1014 1 UP ONE C1015 1 UP ONE C1016 1 UP ONE C1017 1 UP ONE C1018 1 UP ONE C1019 1 UP ONE C1020 1 UP ONE C1021 1 UP ONE C1022 1 UP ONE C1023 1 UP ONE C1024 1 UP ONE C1025 1 UP ONE C1026 1 UP ONE C1027 1 UP ONE C1028 1 UP ONE C1029 1 UP ONE C1030 1 UP ONE C1031 1 UP ONE C1032 1 UP ONE C1033 1 UP ONE C1034 1 UP ONE C1035 1 UP ONE C1036 1 UP ONE C1037 1 UP ONE C1038 1 UP ONE C1039 1 UP ONE C1040 1 UP ONE C1041 1 UP ONE C1042 1 UP ONE C1043 1 UP ONE C1044 1 UP ONE C1045 1 UP ONE C1046 1 UP ONE C1047 1 UP ONE C1048 1 UP ONE C1049 1 UP ONE C1050 1 UP ONE C1051 1 UP ONE C1052 1 UP ONE C1053 1 UP ONE C1054 1 UP ONE C1055 1 UP ONE C1056 1 UP ONE C1057 1 UP ONE C1058 1 UP ONE C1059 1 UP ONE C1060 1 UP ONE C1061 1 UP ONE C1062 1 UP ONE C1063 1 UP ONE C1064 1 UP ONE C1065 1 UP ONE C1066 1 UP ONE C1067 1 UP ONE C1068 1 UP ONE C1069 1 UP ONE C1070 1 UP ONE C1071 1 UP ONE C1072 1 UP ONE C1073 1 UP ONE C1074 1 UP ONE C1075 1 UP ONE C1076 1 UP ONE C1077 1 UP ONE C1078 1 UP ONE C1079 1 UP ONE C1080 1 UP ONE C1081 1 UP ONE C1082 1 UP ONE C1083 1 UP ONE C1084 1 UP ONE C1085 1 UP ONE C1086 1 UP ONE C1087 1 UP ONE C1088 1 UP ONE C1089 1 UP ONE C1090 1 UP ONE C1091 1 UP ONE C1092 1 UP ONE C1093 1 UP ONE C1094 1 UP ONE C1095 1 UP ONE C1096 1 UP ONE C1097 1 UP ONE C1098 1 UP ONE C1099 1 UP ONE C1100 1 UP ONE C1101 1 UP ONE C1102 1 UP ONE C1103 1 UP ONE C1104 1 UP ONE C1105 1 UP ONE C1106 1 UP ONE C1107 1 UP ONE C1108 1 UP ONE C1109 1 UP ONE C1110 1 UP ONE C1111 1 UP ONE C1112 1 UP ONE C1113 1 UP ONE C1114 1 UP ONE C1115 1 UP ONE C1116 1 UP ONE C1117 1 UP ONE C1118 1 UP ONE C1119 1 UP ONE C1120 1 UP ONE C1121 1 UP ONE C1122 1 UP ONE C1123 1 UP ONE C1124 1 UP ONE C1125 1 UP ONE C1126 1 UP ONE C1127 1 UP ONE C1128 1 UP ONE C1129 1 UP ONE C1130 1 UP ONE C1131 1 UP ONE C1132 1 UP ONE C1133 1 UP ONE C1134 1 UP ONE C1135 1 UP ONE C1136 1 UP ONE C1137 1 UP ONE C1138 1 UP ONE C1139 1 UP ONE C1140 1 UP ONE C1141 1 UP ONE C1142 1 UP ONE C1143 1 UP ONE C1144 1 UP ONE C1145 1 UP ONE C1146 1 UP ONE C1147 1 UP ONE C1148 1 UP ONE C1149 1 UP ONE C1150 1 UP ONE C1151 1 UP ONE C1152 1 UP ONE C1153 1 UP ONE C1154 1 UP ONE C1155 1 UP ONE C1156 1 UP ONE C1157 1 UP ONE C1158 1 UP ONE C1159 1 UP ONE C1160 1 UP ONE C1161 1 UP ONE C1162 1 UP ONE C1163 1 UP ONE C1164 1 UP ONE C1165 1 UP ONE C1166 1 UP ONE C1167 1 UP ONE C1168 1 UP ONE C1169 1 UP ONE C1170 1 UP ONE C1171 1 UP ONE C1172 1 UP ONE C1173 1 UP ONE C1174 1 UP ONE C1175 1 UP ONE C1176 1 UP ONE C1177 1 UP ONE C1178 1 UP ONE C1179 1 UP ONE C1180 1 UP ONE C1181 1 UP ONE C1182 1 UP ONE C1183 1 UP ONE C1184 1 UP ONE C1185 1 UP ONE C1186 1 UP ONE C1187 1 UP ONE C1188 1 UP ONE C1189 1 UP ONE C1190 1 UP ONE C1191 1 UP ONE C1192 1 UP ONE C1193 1 UP ONE C1194 1 UP ONE C1195 1 UP ONE C1196 1 UP ONE C1197 1 UP ONE C1198 1 UP ONE C1199 1 UP ONE C1200 1 UP ONE C1201 1 UP ONE C1202 1 UP ONE C1203 1 UP ONE C1204 1 UP ONE C1205 1 UP ONE C1206 1 UP ONE C1207 1 UP ONE C1208 1 UP ONE C1209 1 UP ONE C1210 1 UP ONE C1211 1 UP ONE C1212 1 UP ONE C1213 1 UP ONE C1214 1 UP ONE C1215 1 UP ONE C1216 1 UP ONE C1217 1 UP ONE C1218 1 UP ONE C1219 1 UP ONE C1220 1 UP ONE C1221 1 UP ONE C1222 1 UP ONE C1223 1 UP ONE C1224 1 UP ONE C1225 1 UP ONE C1226 1 UP ONE C1227 1 UP ONE C1228 1 UP ONE C1229 1 UP ONE C1230 1 UP ONE C1231 1 UP ONE C1232 1 UP ONE C1233 1 UP ONE C1234 1 UP ONE C1235 1 UP ONE C1236 1 UP ONE C1237 1 UP ONE C1238 1 UP ONE C1239 1 UP ONE C1240 1 UP ONE C1241 1 UP ONE C1242 1 UP ONE C1243 1 UP ONE C1244 1 UP ONE C1245 1 UP ONE C1246 1 UP ONE C1247 1 UP ONE C1248 1 UP ONE C1249 1 UP ONE C1250 1 UP ONE C1251 1 UP ONE C1252 1 UP ONE C1253 1 UP ONE C1254 1 UP ONE C1255 1 UP ONE C1256 1 UP ONE C1257 1 UP ONE C1258 1 UP ONE C1259 1 UP ONE C1260 1 UP ONE C1261 1 UP ONE C1262 1 UP ONE C1263 1 UP ONE C1264 1 UP ONE C1265 1 UP ONE C1266 1 UP ONE C1267 1 UP ONE C1268 1 UP ONE C1269 1 UP ONE C1270 1 UP ONE C1271 1 UP ONE C1272 1 UP ONE C1273 1 UP ONE C1274 1 UP ONE C1275 1 UP ONE C1276 1 UP ONE C1277 1 UP ONE C1278 1 UP ONE C1279 1 UP ONE C1280 1 UP ONE C1281 1 UP ONE C1282 1 UP ONE C1283 1 UP ONE C1284 1 UP ONE C1285 1 UP ONE C1286 1 UP ONE C1287 1 UP ONE C1288 1 UP ONE C1289 1 UP ONE C1290 1 UP ONE C1291 1 UP ONE C1292 1 UP ONE C1293 1 UP ONE C1294 1 UP ONE C1295 1 UP ONE C1296 1 UP ONE C1297 1 UP ONE C1298 1 UP ONE C1299 1 UP ONE C1300 1 UP ONE C1301 1 UP ONE C1302 1 UP ONE C1303 1 UP ONE C1304 1 UP ONE C1305 1 UP ONE C1306 1 UP ONE C1307 1 UP ONE C1308 1 UP ONE C1309 1 UP ONE C1310 1 UP ONE C1311 1 UP ONE C1312 1 UP ONE C1313 1 UP ONE C1314 1 UP ONE C1315 1 UP ONE C1316 1 UP ONE C1317 1 UP ONE C1318 1 UP ONE C1319 1 UP ONE C1320 1 UP ONE C1321 1 UP ONE C1322 1 UP ONE C1323 1 UP ONE C1324 1 UP ONE C1325 1 UP ONE C1326 1 UP ONE C1327 1 UP ONE C1328 1 UP ONE C1329 1 UP ONE C1330 1 UP ONE C1331 1 UP ONE C1332 1 UP ONE C1333 1 UP ONE C1334 1 UP ONE C1335 1 UP ONE C1336 1 UP ONE C1337 1 UP ONE C1338 1 UP ONE C1339 1 UP ONE C1340 1 UP ONE C1341 1 UP ONE C1342 1 UP ONE C1343 1 UP ONE C1344 1 UP ONE C1345 1 UP ONE C1346 1 UP ONE C1347 1 UP ONE C1348 1 UP ONE C1349 1 UP ONE C1350 1 UP ONE C1351 1 UP ONE C1352 1 UP ONE C1353 1 UP ONE C1354 1 UP ONE C1355 1 UP ONE C1356 1 UP ONE C1357 1 UP ONE C1358 1 UP ONE C1359 1 UP ONE C1360 1 UP ONE C1361 1 UP ONE C1362 1 UP ONE C1363 1 UP ONE C1364 1 UP ONE C1365 1 UP ONE C1366 1 UP ONE C1367 1 UP ONE C1368 1 UP ONE C1369 1 UP ONE C1370 1 UP ONE C1371 1 UP ONE C1372 1 UP ONE C1373 1 UP ONE C1374 1 UP ONE C1375 1 UP ONE C1376 1 UP ONE C1377 1 UP ONE C1378 1 UP ONE C1379 1 UP ONE C1380 1 UP ONE C1381 1 UP ONE C1382 1 UP ONE C1383 1 UP ONE C1384 1 UP ONE C1385 1 UP ONE C1386 1 UP ONE C1387 1 UP ONE C1388 1 UP ONE C1389 1 UP ONE C1390 1 UP ONE C1391 1 UP ONE C1392 1 UP ONE C1393 1 UP ONE C1394 1 UP ONE C1395 1 UP ONE C1396 1 UP ONE C1397 1 UP ONE C1398 1 UP ONE C1399 1 UP ONE C1400 1 UP ONE C1401 1 UP ONE C1402 1 UP ONE C1403 1 UP ONE C1404 1 UP ONE C1405 1 UP ONE C1406 1 UP ONE C1407 1 UP ONE C1408 1 UP ONE C1409 1 UP ONE C1410 1 UP ONE C1411 1 UP ONE C1412 1 UP ONE C1413 1 UP ONE C1414 1 UP ONE C1415 1 UP ONE C1416 1 UP ONE C1417 1 UP ONE C1418 1 UP ONE C1419 1 UP ONE C1420 1 UP ONE C1421 1 UP ONE C1422 1 UP ONE C1423 1 UP ONE C1424 1 UP ONE C1425 1 UP ONE C1426 1 UP ONE C1427 1 UP ONE C1428 1 UP ONE C1429 1 UP ONE C1430 1 UP ONE C1431 1 UP ONE C1432 1 UP ONE C1433 1 UP ONE C1434 1 UP ONE C1435 1 UP ONE C1436 1 UP ONE C1437 1 UP ONE C1438 1 UP ONE C1439 1 UP ONE C1440 1 UP ONE C1441 1 UP ONE C1442 1 UP ONE C1443 1 UP ONE C1444 1 UP ONE C1445 1 UP ONE C1446 1 UP ONE C1447 1 UP ONE C1448 1 UP ONE C1449 1 UP ONE C1450 1 UP ONE C1451 1 UP ONE C1452 1 UP ONE C1453 1 UP ONE C1454 1 UP ONE C1455 1 UP ONE C1456 1 UP ONE C1457 1 UP ONE C1458 1 UP ONE C1459 1 UP ONE C1460 1 UP ONE C1461 1 UP ONE C1462 1 UP ONE C1463 1 UP ONE C1464 1 UP ONE C1465 1 UP ONE C1466 1 UP ONE C1467 1 UP ONE C1468 1 UP ONE C1469 1 UP ONE C1470 1 UP ONE C1471 1 UP ONE C1472 1 UP ONE C1473 1 UP ONE C1474 1 UP ONE C1475 1 UP ONE C1476 1 UP ONE C1477 1 UP ONE C1478 1 UP ONE C1479 1 UP ONE C1480 1 UP ONE C1481 1 UP ONE C1482 1 UP ONE C1483 1 UP ONE C1484 1 UP ONE C1485 1 UP ONE C1486 1 UP ONE C1487 1 UP ONE C1488 1 UP ONE C1489 1 UP ONE C1490 1 UP ONE C1491 1 UP ONE C1492 1 UP ONE C1493 1 UP ONE C1494 1 UP ONE C1495 1 UP ONE C1496 1 UP ONE C1497 1 UP ONE C1498 1 UP ONE C1499 1 UP ONE C1500 1 UP ONE C1501 1 UP ONE C1502 1 UP ONE C1503 1 UP ONE C1504 1 UP ONE C1505 1 UP ONE C1506 1 UP ONE C1507 1 UP ONE C1508 1 UP ONE C1509 1 UP ONE C1510 1 UP ONE C1511 1 UP ONE C1512 1 UP ONE C1513 1 UP ONE C1514 1 UP ONE C1515 1 UP ONE C1516 1 UP ONE C1517 1 UP ONE C1518 1 UP ONE C1519 1 UP ONE C1520 1 UP ONE C1521 1 UP ONE C1522 1 UP ONE C1523 1 UP ONE C1524 1 UP ONE C1525 1 UP ONE C1526 1 UP ONE C1527 1 UP ONE C1528 1 UP ONE C1529 1 UP ONE C1530 1 UP ONE C1531 1 UP ONE C1532 1 UP ONE C1533 1 UP ONE C1534 1 UP ONE C1535 1 UP ONE C1536 1 UP ONE C1537 1 UP ONE C1538 1 UP ONE C1539 1 UP ONE C1540 1 UP ONE C1541 1 UP ONE C1542 1 UP ONE C1543 1 UP ONE C1544 1 UP ONE C1545 1 UP ONE C1546 1 UP ONE C1547 1 UP ONE C1548 1 ENDATA Vol-1.5.4/Data/Sample/atm_5_10_1.block0000644000175000017500000000172412136243266016157 0ustar sudipsudip0 52 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 1 52 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 2 52 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 3 52 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 4 52 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 Vol-1.5.4/Data/Sample/configure.ac0000644000175000017500000000464413374040606015706 0ustar sudipsudip# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 490 2018-11-17 16:27:50Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([DataSample],[1.2.11],[https://projects.coin-or.org/BuildTools/]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License.]) # List one file in the package so that the configure script can test # whether the package is actually there AC_CONFIG_SRCDIR(configure.ac) # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) AC_COIN_PROJECTDIR_INIT(DataSample,2:11:1) ############################################################################# # We only need automake to generate Makefiles for the distribution # ############################################################################# # Initialize automake AC_COIN_INIT_AUTOMAKE ############################################################################# #Find out what the data files are and create links if this is a VPATH config# ############################################################################# AC_COIN_EXAMPLE_FILES([*.mps]) AC_COIN_EXAMPLE_FILES([*.lp]) AC_COIN_EXAMPLE_FILES([*.block]) AC_COIN_EXAMPLE_FILES([*.dec]) AC_COIN_EXAMPLE_FILES([input.130]) AC_COIN_EXAMPLE_FILES([app0110.* app0110R.* bug.*]) ############################################################################## # Finishing up by writing all the output # ############################################################################## ABSBUILDDIR="`pwd`" AC_SUBST(ABSBUILDDIR) # Here list all the files that configure should create (except for the # configuration header file) AC_CONFIG_FILES([Makefile coindatasample.pc coindatasample-uninstalled.pc]) # Finally, we let configure write all the output... AC_COIN_FINALIZE Vol-1.5.4/Data/Sample/exmip1.lp0000755000175000017500000000077012167773507015173 0ustar sudipsudip\ENCODING=ISO-8859-1 \Problem name: exmip1.mps Minimize OBJ: COL01 + 2 COL05 - COL08 Subject To ROW01: 3 COL01 + COL02 - 2 COL04 - COL05 - COL08 >= 2.5 ROW02: 2 COL02 + 1.1 COL03 <= 2.1 ROW03: COL03 + COL06 = 4 ROW04: 2.8 COL04 - 1.2 COL07 - RgROW04 = 1.8 ROW05: 5.6 COL01 + COL05 + 1.9 COL08 - RgROW05 = 15 Bounds COL01 >= 2.5 0 <= COL02 <= 4.1 0 <= COL03 <= 1 0 <= COL04 <= 1 0.5 <= COL05 <= 4 0 <= COL08 <= 4.3 0 <= RgROW04 <= 3.2 -12 <= RgROW05 <= 0 Binaries COL03 COL04 End Vol-1.5.4/Data/Sample/galenetbnds.mps0000644000175000017500000000501711431323442016414 0ustar sudipsudip* Modified galenet with equalities converted to a pair of inequalities and * implicit bounds converted to explicit inequalities. All inequalities then * converted to less than. In other words, the classic canonical form for * conversion to dual, so that we can do an algebraic test of getDualRays * for solvers that don't return the column components. NAME galenetbnds ROWS L S1 L S2 L S3 L NODE4U L NODE4L L NODE5U L NODE5L L D6 L D7 L D8 L T14UB L T14LB L T24UB L T24LB L T25UB L T25LB L T35UB L T35LB L T46UB L T46LB L T47UB L T47LB L T57UB L T57LB L T58UB L T58LB N COST COLUMNS T14 S1 1. NODE4U 1. T14 NODE4L -1 T14 T14UB 1. T14LB -1. T24 S2 1. NODE4U 1. T24 NODE4L -1 T24 T24UB 1. T24LB -1. T25 S2 1. NODE5U 1. T25 NODE5L -1. T25 T25UB 1. T25LB -1. T35 S3 1. NODE5U 1. T35 NODE5L -1. T35 T35UB 1. T35LB -1. T46 D6 -1. NODE4U -1. T46 NODE4L 1 T46 T46UB 1. T46LB -1. T47 D7 -1. NODE4U -1. T47 NODE4L 1 T47 T47UB 1. T47LB -1. T57 D7 -1. NODE5U -1. T57 NODE5L 1. T57 T57UB 1. T57LB -1. T58 D8 -1. NODE5U -1. T58 NODE5L 1. T58 T58UB 1. T58LB -1. RHS RHS S1 20. S2 20. RHS S3 20. D6 -10. RHS D7 -20. D8 -30. RHS T14UB 30. RHS T24UB 20. RHS T25UB 10. RHS T35UB 10. RHS T46UB 10. RHS T47UB 2. RHS T57UB 20. RHS T58UB 30. BOUNDS FR BND T14 FR BND T24 FR BND T25 FR BND T35 FR BND T46 FR BND T47 FR BND T57 FR BND T58 ENDATA Vol-1.5.4/Data/Sample/tp5.mps0000644000175000017500000000233210430174061014632 0ustar sudipsudip* * small test problem - tp5.mps * * knapsack problem where the greedy cover cut * approach leads to a violated min. cover * NAME tp5 ROWS N obj L knap G r1 G r2 G r3 COLUMNS SET00001 'MARKER' 'INTORG' x1 knap 8.000000 x1 r1 1.000000 x2 knap 7.000000 x2 r2 1.000000 x3 knap 6.000000 x3 r3 1.000000 x4 knap 4.000000 x4 obj -1.000000 x5 knap 6.000000 x5 obj -100.000000 x6 knap 13.500000 x6 obj -10.000000 RHS RHS knap 22.000000 RHS r1 0.900000 RHS r2 0.900000 RHS r3 0.900000 BOUNDS BV ONE x1 1.000000 BV ONE x2 1.000000 BV ONE x3 1.000000 BV ONE x4 1.000000 BV ONE x5 1.000000 BV ONE x6 1.000000 ENDATA Vol-1.5.4/Data/Sample/tp4.mps0000644000175000017500000000232710430174061014635 0ustar sudipsudip* * small test problem - tp4.mps * * knapsack problem where lifted greedy cover cut * moves lp objective function value * NAME tp4 ROWS N obj L knap G r1 G r2 G r3 COLUMNS SET00001 'MARKER' 'INTORG' x1 knap 8.000000 x1 r1 1.000000 x2 knap 7.000000 x2 r2 1.000000 x3 knap 6.000000 x3 r3 1.000000 x4 knap 4.000000 x4 obj -1.000000 x5 knap 6.000000 x5 obj -100.000000 x6 knap 13.500000 x6 obj -100.000000 RHS RHS knap 22.000000 RHS r1 0.001000 RHS r2 0.001000 RHS r3 0.001000 BOUNDS BV ONE x1 1.000000 BV ONE x2 1.000000 BV ONE x3 1.000000 BV ONE x4 1.000000 BV ONE x5 1.000000 BV ONE x6 1.000000 ENDATA Vol-1.5.4/Data/Sample/block_milp.dec0000644000175000017500000000035312452373145016204 0ustar sudipsudipNBLOCKS 4 BLOCK 1 C_5.0_1.0 C_6.0_1.0 C_7.0_1.0 BLOCK 2 C_8.0_2.0 C_9.0_2.0 C_10.0_2.0 C_11.0_2.0 C_12.0_2.0 BLOCK 3 C_13.0_3.0 C_14.0_3.0 C_15.0_3.0 C_16.0_3.0 BLOCK 4 C_17.0_4.0 C_18.0_4.0 C_19.0_4.0 C_20.0_4.0 Vol-1.5.4/Data/Sample/pack1.mps0000644000175000017500000000312110430174061015116 0ustar sudipsudip************************************************************************ * * The data in this file represents a tiny covering problem: * * Minimize or maximize Z = x1 + x2 + x3 * * Subject to: * * 1.0 <= x1 + x2 * 1.0 <= x2 + x3 * 1.0 <= x1 x3 * * where all variables are binary. * ************************************************************************ NAME EXAMPLE ROWS N OBJ G ROW01 G ROW02 G ROW03 COLUMNS INT1 'MARKER' 'INTORG' COL01 OBJ 1.0 COL01 ROW01 1.0 ROW03 1.0 COL02 OBJ 1.0 COL02 ROW01 1.0 ROW02 1.0 COL03 OBJ 1.0 COL03 ROW02 1.0 ROW03 1.0 INT1END 'MARKER' 'INTEND' RHS RHS1 ROW01 1.0 RHS1 ROW02 1.0 RHS1 ROW03 1.0 ENDATA Vol-1.5.4/Data/Sample/config.sub0000755000175000017500000007772611405216230015405 0ustar sudipsudip#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Vol-1.5.4/Data/Sample/share2qp.mps0000644000175000017500000006224212550667616015677 0ustar sudipsudipNAME SHARE2B ROWS N 000000 L 000004 L 000005 L 000006 L 000007 L 000008 L 000009 L 000010 L 000011 L 000012 E 000013 L 000014 L 000015 L 000016 L 000017 L 000018 L 000019 L 000020 L 000021 L 000022 E 000023 L 000024 L 000025 L 000026 L 000027 L 000028 L 000029 L 000030 L 000031 L 000032 E 000033 L 000034 L 000035 L 000036 L 000037 L 000038 L 000039 L 000040 L 000041 L 000042 E 000043 L 000044 L 000045 L 000046 L 000047 L 000048 L 000049 L 000050 L 000051 L 000052 E 000053 L 000054 L 000055 L 000056 L 000057 L 000058 L 000059 L 000060 L 000061 L 000062 E 000063 L 000064 L 000065 L 000066 L 000067 L 000068 L 000069 L 000070 L 000071 L 000072 L 000073 L 000074 L 000075 L 000076 L 000077 L 000078 L 000079 L 000080 L 000081 E 000082 E 000083 E 000084 E 000085 E 000086 E 000087 L 000088 L 000089 L 000090 L 000091 L 000092 L 000093 L 000094 L 000095 L 000096 L 000097 L 000098 E 000099 COLUMNS 010101 000004 65. 000005 1. 010101 000006 -1. 000007 -1. 010101 000008 -97.4 000009 -99.9 010101 000010 -83.7 000011 -85. 010101 000013 1. 010102 000004 5.5 000005 .68 010102 000006 -.96 000007 -1. 010102 000008 -84. 000009 -88.1 010102 000010 -79.4 000011 -83.2 010102 000013 1. 000064 1. 010103 000004 .8 000007 -.78 010103 000008 -87.9 000009 -82.9 010103 000010 -74.6 000011 -80.6 010103 000013 1. 000065 1. 010104 000004 4.5 000005 .27 010104 000006 -.97 000007 -1. 010104 000008 -97.9 000009 -100.3 010104 000010 -95. 000011 -98. 010104 000013 1. 000088 1. 010105 000004 1.5 000005 .12 010105 000006 -.36 000007 -.95 010105 000008 -60.6 000009 -76.3 010105 000010 -68.6 000011 -76.8 010105 000013 1. 000066 1. 010106 000000 .03 000004 6. 010106 000005 .19 000006 -.35 010106 000007 -.89 000008 -94.8 010106 000009 -96.6 000010 -83.8 010106 000011 -86.8 000013 1. 010106 000066 1.1 010107 000000 .06 000004 3.3 010107 000005 .07 000006 -.29 010107 000007 -.97 000008 -97.9 010107 000009 -100.3 000010 -95. 010107 000011 -98. 000013 1. 010107 000066 1.2 010108 000004 5.8 000005 .5 010108 000006 -.62 000007 -.98 010108 000008 -96.5 000009 -98.1 010108 000010 -80.8 000011 -81.5 010108 000013 1. 000067 1. 010120 000000 .09 000008 -2.1 010120 000009 -.7 000010 -2.3 010120 000011 -1. 000012 1. 010131 000000 -3.8 000004 -11. 010131 000005 -.5 000006 .5 010131 000007 .9 000008 100. 010131 000009 100. 000010 90. 010131 000011 90. 000012 -3. 010131 000013 -1. 000082 1. 010132 000000 -3.7 000082 -1. 010132 000083 1. 010133 000000 -3.5 000082 -1. 010133 000084 1. 010201 000014 65. 000015 1. 010201 000016 -1. 000017 -1. 010201 000018 -97.4 000019 -99.9 010201 000020 -83.7 000021 -85. 010201 000023 1. 010202 000014 5.5 000015 .57 010202 000016 -1. 000017 -1. 010202 000018 -84. 000019 -88.1 010202 000020 -79.4 000021 -83.2 010202 000023 1. 000064 1. 010203 000014 .8 000016 -.01 010203 000017 -.98 000018 -87.9 010203 000019 -82.9 000020 -74.6 010203 000021 -80.6 000023 1. 010203 000065 1. 010204 000014 1.5 000015 .12 010204 000016 -.36 000017 -.95 010204 000018 -60.6 000019 -76.3 010204 000020 -68.6 000021 -76.8 010204 000023 1. 000066 1. 010205 000000 .1 000014 2.7 010205 000015 .13 000016 -.28 010205 000017 -.79 000018 -77.9 010205 000019 -81.4 000020 -70.6 010205 000021 -74. 000023 1. 010205 000069 1. 010206 000014 5.8 000015 .46 010206 000016 -.67 000017 -1. 010206 000018 -96.5 000019 -98.1 010206 000020 -80.8 000021 -81.5 010206 000023 1. 000067 1. 010220 000000 .09 000018 -3.5 010220 000019 -1.9 000020 -3.4 010220 000021 -1.8 000022 1. 010231 000000 -3. 000014 -11. 010231 000015 -.5 000016 .5 010231 000017 .9 000018 89. 010231 000019 89. 000020 82. 010231 000021 82. 000022 -3. 010231 000023 -1. 000085 1. 010231 000089 -.25 010301 000024 70. 000025 1. 010301 000026 -1. 000027 -1. 010301 000028 -97.8 000029 -102.3 010301 000030 -94.8 000031 -99.8 010301 000033 1. 010302 000024 9.5 000025 .7 010302 000026 -.83 000027 -1. 010302 000028 -89.1 000029 -92. 010302 000030 -77.4 000031 -80.1 010302 000033 1. 000068 1. 010303 000024 2.7 000025 .13 010303 000026 -.28 000027 -.79 010303 000028 -77.9 000029 -81.4 010303 000030 -70.6 000031 -74. 010303 000033 1. 000069 1. 010304 000024 10.8 000025 .97 010304 000026 -1. 000027 -1. 010304 000028 -84.6 000029 -89.7 010304 000030 -83.6 000031 -89.4 010304 000033 1. 000070 1. 010305 000024 1.5 000025 .12 010305 000026 -.36 000027 -.95 010305 000028 -60.6 000029 -76.3 010305 000030 -68.6 000031 -76.8 010305 000033 1. 000071 1. 010306 000000 .06 000024 6.2 010306 000025 .19 000026 -.35 010306 000027 -.89 000028 -95.9 010306 000029 -97.6 000030 -85.4 010306 000031 -87.8 000033 1. 010306 000071 1.2 010307 000000 .03 000024 6. 010307 000025 .19 000026 -.35 010307 000027 -.89 000028 -94.8 010307 000029 -96.6 000030 -83.8 010307 000031 -86.8 000033 1. 010307 000071 1.1 010308 000000 .1 000024 4.5 010308 000025 .27 000026 -.97 010308 000027 -1. 000028 -97.9 010308 000029 -100.3 000030 -95. 010308 000031 -98. 000033 1. 010308 000088 1. 010309 000000 .1 000024 5.5 010309 000025 .68 000026 -.96 010309 000027 -1. 000028 -84. 010309 000029 -88.1 000030 -79.4 010309 000031 -83.2 000033 1. 010309 000064 1. 010310 000000 .1 000024 6.5 010310 000025 .48 000026 -.56 010310 000027 -.97 000028 -96.5 010310 000029 -97.1 000030 -82.2 010310 000031 -83.3 000033 1. 010310 000067 1. 010320 000000 .09 000028 -1.9 010320 000029 -.9 000030 -2.4 010320 000031 -.9 000032 1. 010331 000000 -3.7 000024 -11. 010331 000025 -.5 000026 .5 010331 000027 .9 000028 100. 010331 000029 100. 000030 90. 010331 000031 90. 000033 -1. 010331 000032 -3. 000083 1. 010333 000000 -3.5 000083 -1. 010333 000084 1. 010401 000034 70. 000035 1. 010401 000036 -1. 000037 -1. 010401 000038 -97.8 000039 -102.3 010401 000040 -94.8 000041 -99.8 010401 000043 1. 010402 000034 9.5 000035 .68 010402 000036 -.9 000037 -1. 010402 000038 -89.1 000039 -92. 010402 000040 -77.4 000041 -80.1 010402 000043 1. 000068 1. 010403 000034 2.7 000035 .09 010403 000036 -.37 000037 -.92 010403 000038 -77.9 000039 -81.4 010403 000040 -70.6 000041 -74. 010403 000043 1. 000069 1. 010404 000034 10.8 000035 .93 010404 000036 -1. 000037 -1. 010404 000038 -84.6 000039 -89.7 010404 000040 -83.6 000041 -89.4 010404 000043 1. 000070 1. 010405 000000 .03 000034 6.2 010405 000035 .15 000036 -.45 010405 000037 -.98 000038 -95.9 010405 000039 -97.6 000040 -85.4 010405 000041 -87.8 000043 1. 010405 000071 1.1 010406 000000 .1 000034 6.5 010406 000035 .45 000036 -.63 010406 000037 -1. 000038 -96.5 010406 000039 -97.1 000040 -82.2 010406 000041 -83.3 000043 1. 010406 000067 1. 010407 000034 1.5 000035 .12 010407 000036 -.36 000037 -.95 010407 000038 -60.6 000039 -76.3 010407 000040 -68.6 000041 -76.8 010407 000043 1. 000071 1. 010408 000000 .1 000034 5.5 010408 000035 .68 000036 -.96 010408 000037 -1. 000038 -84. 010408 000039 -88.1 000040 -79.4 010408 000041 -83.2 000043 1. 010408 000064 1. 010420 000000 .09 000038 -3.9 010420 000039 -1.4 000040 -3.5 010420 000041 -1.3 000042 1. 010431 000000 -2.9 000034 -11. 010431 000035 -.5 000036 .5 010431 000037 .9 000038 89. 010431 000039 89. 000040 82. 010431 000041 82. 000042 -3. 010431 000043 -1. 000086 1. 010432 000000 -2.8 000085 1. 010432 000086 -1. 000089 .75 010501 000044 56. 000045 1. 010501 000046 -1. 000047 -1. 010501 000048 -99.4 000049 -103. 010501 000050 -96.7 000051 -101.2 010501 000053 1. 010502 000044 1.8 000047 -1. 010502 000048 -87.9 000049 -91.6 010502 000050 -88.1 000051 -92. 010502 000053 1. 000072 1. 010503 000044 1.4 000047 -.54 010503 000048 -86.2 000049 -90. 010503 000050 -88. 000051 -91.3 010503 000053 1. 000073 1. 010504 000044 10.6 000045 .68 010504 000046 -.87 000047 -1. 010504 000048 -99.9 000049 -100.4 010504 000050 -80.8 000051 -81.7 010504 000053 1. 000074 1. 010505 000044 2.5 000047 -.65 010505 000048 -89.6 000049 -91.7 010505 000050 -79.3 000051 -82.1 010505 000053 1. 000075 1. 010506 000044 11.5 000045 .77 010506 000046 -.93 000047 -1. 010506 000048 -79.5 000049 -85.1 010506 000050 -80.2 000051 -86.2 010506 000053 1. 000076 1. 010507 000044 1.5 000045 .12 010507 000046 -.36 000047 -.95 010507 000048 -60.6 000049 -76.3 010507 000050 -68.6 000051 -76.8 010507 000053 1. 000077 1. 010508 000000 .03 000044 4.2 010508 000045 .08 000046 -.3 010508 000047 -.91 000048 -99.5 010508 000049 -99.9 000050 -87.6 010508 000051 -89. 000053 1. 010508 000077 1.1 010509 000000 .06 000044 4.3 010509 000045 .07 000046 -.27 010509 000047 -.9 000048 -101.4 010509 000049 -101.5 000050 -89. 010509 000051 -90.2 000053 1. 010509 000077 1.2 010520 000000 .09 000048 -1.6 010520 000049 -.8 000050 -2. 010520 000051 -.8 000052 1. 010531 000000 -3.5 000044 -10. 010531 000045 -.5 000046 .5 010531 000047 .9 000048 101. 010531 000049 101. 000050 91. 010531 000051 91. 000052 -3. 010531 000053 -1. 000084 1. 010601 000054 56. 000055 1. 010601 000056 -1. 000057 -1. 010601 000058 -97.7 000059 -100.6 010601 000060 -94.5 000061 -98.5 010601 000063 1. 010602 000054 10.6 000055 .39 010602 000056 -1. 000057 -1. 010602 000058 -98.2 000059 -98. 010602 000060 -78.6 000061 -79. 010602 000063 1. 000074 1. 010603 000054 2.5 000057 -.87 010603 000058 -87.9 000059 -89.3 010603 000060 -77.1 000061 -79.4 010603 000063 1. 000075 1. 010604 000054 3.6 000055 .27 010604 000056 -1. 000057 -1. 010604 000058 -78.8 000059 -82.7 010604 000060 -75.1 000061 -80.5 010604 000063 1. 000078 1. 010605 000054 11.5 000055 .73 010605 000056 -.98 000057 -1. 010605 000058 -78.2 000059 -82.7 010605 000060 -78. 000061 -83.5 010605 000063 1. 000076 1. 010606 000054 2. 000056 -.38 010606 000057 -1. 000058 -66.9 010606 000059 -71.4 000060 -67.6 010606 000061 -73.8 000063 1. 010606 000079 1. 010607 000054 14.6 000055 1. 010607 000056 -1. 000057 -1. 010607 000058 -74.7 000059 -79.8 010607 000060 -77.3 000061 -83. 010607 000063 1. 000080 1. 010608 000054 6.1 000055 .33 010608 000056 -.65 000057 -1. 010608 000058 -70.7 000059 -75.9 010608 000060 -69.6 000061 -75.3 010608 000063 1. 000081 1. 010609 000000 .03 000054 4.2 010609 000055 .04 000056 -.36 010609 000057 -.98 000058 -97.8 010609 000059 -97.5 000060 -85.4 010609 000061 -86.3 000063 1. 010609 000077 1.1 010620 000000 .09 000058 -3.3 010620 000059 -1.6 000060 -4.2 010620 000061 -1.7 000062 1. 010631 000000 -2.7 000054 -11. 010631 000055 -.5 000056 .5 010631 000057 .9 000058 89. 010631 000059 89. 000060 82. 010631 000061 82. 000062 -3. 010631 000063 -1. 000087 1. 010632 000000 -2.7 000085 1. 010632 000087 -1. 000089 .75 010633 000000 -2.7 000086 1. 010633 000087 -1. 010701 000090 56. 000091 1. 010701 000092 -1. 000093 -1. 010701 000094 -97.7 000095 -100.6 010701 000096 -94.5 000097 -98.5 010701 000099 1. 010702 000074 1. 000090 10.6 010702 000091 .39 000092 -1. 010702 000093 -1. 000094 -98.2 010702 000095 -98. 000096 -78.6 010702 000097 -79. 000099 1. 010703 000075 1. 000090 2.5 010703 000093 -.87 000094 -87.9 010703 000095 -89.3 000096 -77.1 010703 000097 -79.4 000099 1. 010704 000078 1. 000090 3.6 010704 000091 .27 000092 -1. 010704 000093 -1. 000094 -78.8 010704 000095 -82.7 000096 -75.1 010704 000097 -80.5 000099 1. 010705 000076 1. 000090 11.5 010705 000091 .73 000092 -.98 010705 000093 -1. 000094 -78.2 010705 000095 -82.7 000096 -78. 010705 000097 -83.5 000099 1. 010706 000079 1. 000090 2. 010706 000092 -.38 000093 -1. 010706 000094 -66.9 000095 -71.4 010706 000096 -67.6 000097 -73.8 010706 000099 1. 010707 000080 1. 000090 14.6 010707 000091 1. 000092 -1. 010707 000093 -1. 000094 -74.7 010707 000095 -79.8 000096 -77.3 010707 000097 -83. 000099 1. 010708 000000 .03 000077 1.1 010708 000090 4.2 000091 .04 010708 000092 -.36 000093 -.98 010708 000094 -97.8 000095 -97.5 010708 000096 -85.4 000097 -86.3 010708 000099 1. 010709 000000 .07 000077 1.2 010709 000090 4.3 000091 .07 010709 000092 -.27 000093 -.9 010709 000094 -101.4 000095 -101.5 010709 000096 -89. 000097 -90.2 010709 000099 1. 010720 000000 .09 000094 -3.3 010720 000095 -1.6 000096 -4.2 010720 000097 -1.7 000098 1. 010731 000000 -2.7 000090 -10. 010731 000091 -.5 000092 .5 010731 000093 .9 000094 90. 010731 000095 90. 000096 83. 010731 000097 83. 000098 -3. 010731 000099 -1. RHS RHS 000064 7. 000065 7. RHS 000066 7. 000067 21. RHS 000068 3. 000069 3. RHS 000070 3. 000071 7. RHS 000072 1.5 000073 1.5 RHS 000074 10. 000075 10. RHS 000076 8.5 000077 13. RHS 000078 1.5 000079 1.5 RHS 000080 1. 000081 1. RHS 000082 15. 000083 15. RHS 000084 20. 000085 20. RHS 000086 15. 000088 1. ENDATA NAME SHARE2B *QSECTION QUADOBJ 010101 010101 0.8849E+01 010101 010105 0.6270E+01 010101 010408 0.5408E+01 010101 010509 0.6205E+01 010105 010101 0.6270E+01 010105 010105 0.2591E+02 010105 010408 0.7510E+01 010105 010509 0.1418E+02 010105 010704 0.5939E+01 010105 010705 0.5249E+01 010408 010101 0.5408E+01 010408 010105 0.7510E+01 010408 010408 0.1270E+02 010408 010509 0.7433E+01 010509 010101 0.6205E+01 010509 010105 0.1418E+02 010509 010408 0.7433E+01 010509 010509 0.2358E+02 010509 010704 0.5230E+01 010509 010705 0.4622E+01 010704 010105 0.5939E+01 010704 010509 0.5230E+01 010704 010704 0.7815E+01 010704 010705 0.4934E+01 010705 010105 0.5249E+01 010705 010509 0.4622E+01 010705 010704 0.4934E+01 010705 010705 0.6105E+01 ENDATA Vol-1.5.4/Data/Sample/exmip1.5.mps0000644000175000017500000001373510430174061015501 0ustar sudipsudip************************************************************************ * * The data in this file represents the following problem: * * Minimize or maximize Z = x1 + 2x5 - x8 * * Subject to: * * 2.5 <= 3x1 + x2 - 2x4 - x5 - x8 * 2x2 + 1.1x3 <= 2.1 * x3 + x6 = 4.0 * 1.8 <= 2.8x4 -1.2x7 <= 5.0 * 3.0 <= 5.6x1 + x5 + 1.9x8 <= 15.0 * 15x3 + 12x4 + x5 <= 6.8 * * where: * * 2.5 <= x1 * 0 <= x2 <= 4.1 * 0 <= x3 * 0 <= x4 * 0.5 <= x5 <= 4.0 * 0 <= x6 * 0 <= x7 <= 2.0 * 0 <= x8 <= 4.3 * * x3, x4 are 0,1 variables. * ************************************************************************ NAME EXAMPLE ROWS N OBJ G ROW01 L ROW02 E ROW03 G ROW04 L ROW05 L ROW06 COLUMNS COL01 OBJ 1.0 COL01 ROW01 3.0 ROW05 5.6 COL02 ROW01 1.0 ROW02 2.0 * * Mark COL03 and COL04 as integer variables. * INT1 'MARKER' 'INTORG' COL03 ROW02 1.1 ROW03 1.0 COL03 ROW06 15.0 COL04 ROW01 -2.0 ROW04 2.8 COL04 ROW06 12.0 INT1END 'MARKER' 'INTEND' * COL05 OBJ 2.0 COL05 ROW01 -1.0 ROW05 1.0 COL05 ROW06 1.0 COL06 ROW03 1.0 COL07 ROW04 -1.2 COL08 OBJ -1.0 COL08 ROW01 -1.0 ROW05 1.9 RHS RHS1 ROW01 2.5 RHS1 ROW02 2.1 RHS1 ROW03 4.0 RHS1 ROW04 1.8 RHS1 ROW05 15.0 RHS1 ROW06 6.8 RANGES RNG1 ROW04 3.2 RNG1 ROW05 12.0 BOUNDS LO BND1 COL01 2.5 UP BND1 COL02 4.1 LO BND1 COL05 0.5 UP BND1 COL05 4.0 UP BND1 COL07 2.0 UP BND1 COL08 4.3 ENDATA Vol-1.5.4/Data/Sample/retail3.mps0000644000175000017500000037277212136243266015520 0ustar sudipsudipNAME kohls3_ld1 ROWS N TotalCost E material_balance[Pack1] E material_balance[Pack2] E material_balance[Pack3] E demand_fit['71',S] E demand_fit['73',S] E demand_fit['86',S] E demand_fit['99',S] E demand_fit['103',S] E demand_fit['126',S] E demand_fit['221',S] E demand_fit['225',S] E demand_fit['251',S] E demand_fit['270',S] E demand_fit['272',S] E demand_fit['275',S] E demand_fit['276',S] E demand_fit['280',S] E demand_fit['282',S] E demand_fit['283',S] E demand_fit['293',S] E demand_fit['298',S] E demand_fit['299',S] E demand_fit['301',S] E demand_fit['309',S] E demand_fit['310',S] E demand_fit['375',S] E demand_fit['378',S] E demand_fit['379',S] E demand_fit['381',S] E demand_fit['383',S] E demand_fit['384',S] E demand_fit['386',S] E demand_fit['388',S] E demand_fit['389',S] E demand_fit['390',S] E demand_fit['397',S] E demand_fit['398',S] E demand_fit['403',S] E demand_fit['418',S] E demand_fit['430',S] E demand_fit['431',S] E demand_fit['479',S] E demand_fit['502',S] E demand_fit['504',S] E demand_fit['512',S] E demand_fit['528',S] E demand_fit['533',S] E demand_fit['538',S] E demand_fit['552',S] E demand_fit['621',S] E demand_fit['639',S] E demand_fit['712',S] E demand_fit['781',S] E demand_fit['71',M] E demand_fit['73',M] E demand_fit['86',M] E demand_fit['99',M] E demand_fit['103',M] E demand_fit['126',M] E demand_fit['221',M] E demand_fit['225',M] E demand_fit['251',M] E demand_fit['270',M] E demand_fit['272',M] E demand_fit['275',M] E demand_fit['276',M] E demand_fit['280',M] E demand_fit['282',M] E demand_fit['283',M] E demand_fit['293',M] E demand_fit['298',M] E demand_fit['299',M] E demand_fit['301',M] E demand_fit['309',M] E demand_fit['310',M] E demand_fit['375',M] E demand_fit['378',M] E demand_fit['379',M] E demand_fit['381',M] E demand_fit['383',M] E demand_fit['384',M] E demand_fit['386',M] E demand_fit['388',M] E demand_fit['389',M] E demand_fit['390',M] E demand_fit['397',M] E demand_fit['398',M] E demand_fit['403',M] E demand_fit['418',M] E demand_fit['430',M] E demand_fit['431',M] E demand_fit['479',M] E demand_fit['502',M] E demand_fit['504',M] E demand_fit['512',M] E demand_fit['528',M] E demand_fit['533',M] E demand_fit['538',M] E demand_fit['552',M] E demand_fit['621',M] E demand_fit['639',M] E demand_fit['712',M] E demand_fit['781',M] E demand_fit['71',L] E demand_fit['73',L] E demand_fit['86',L] E demand_fit['99',L] E demand_fit['103',L] E demand_fit['126',L] E demand_fit['221',L] E demand_fit['225',L] E demand_fit['251',L] E demand_fit['270',L] E demand_fit['272',L] E demand_fit['275',L] E demand_fit['276',L] E demand_fit['280',L] E demand_fit['282',L] E demand_fit['283',L] E demand_fit['293',L] E demand_fit['298',L] E demand_fit['299',L] E demand_fit['301',L] E demand_fit['309',L] E demand_fit['310',L] E demand_fit['375',L] E demand_fit['378',L] E demand_fit['379',L] E demand_fit['381',L] E demand_fit['383',L] E demand_fit['384',L] E demand_fit['386',L] E demand_fit['388',L] E demand_fit['389',L] E demand_fit['390',L] E demand_fit['397',L] E demand_fit['398',L] E demand_fit['403',L] E demand_fit['418',L] E demand_fit['430',L] E demand_fit['431',L] E demand_fit['479',L] E demand_fit['502',L] E demand_fit['504',L] E demand_fit['512',L] E demand_fit['528',L] E demand_fit['533',L] E demand_fit['538',L] E demand_fit['552',L] E demand_fit['621',L] E demand_fit['639',L] E demand_fit['712',L] E demand_fit['781',L] E demand_fit['71',XL] E demand_fit['73',XL] E demand_fit['86',XL] E demand_fit['99',XL] E demand_fit['103',XL] E demand_fit['126',XL] E demand_fit['221',XL] E demand_fit['225',XL] E demand_fit['251',XL] E demand_fit['270',XL] E demand_fit['272',XL] E demand_fit['275',XL] E demand_fit['276',XL] E demand_fit['280',XL] E demand_fit['282',XL] E demand_fit['283',XL] E demand_fit['293',XL] E demand_fit['298',XL] E demand_fit['299',XL] E demand_fit['301',XL] E demand_fit['309',XL] E demand_fit['310',XL] E demand_fit['375',XL] E demand_fit['378',XL] E demand_fit['379',XL] E demand_fit['381',XL] E demand_fit['383',XL] E demand_fit['384',XL] E demand_fit['386',XL] E demand_fit['388',XL] E demand_fit['389',XL] E demand_fit['390',XL] E demand_fit['397',XL] E demand_fit['398',XL] E demand_fit['403',XL] E demand_fit['418',XL] E demand_fit['430',XL] E demand_fit['431',XL] E demand_fit['479',XL] E demand_fit['502',XL] E demand_fit['504',XL] E demand_fit['512',XL] E demand_fit['528',XL] E demand_fit['533',XL] E demand_fit['538',XL] E demand_fit['552',XL] E demand_fit['621',XL] E demand_fit['639',XL] E demand_fit['712',XL] E demand_fit['781',XL] COLUMNS .MRK0000 'MARKER' 'INTORG' NumLooseInners['71',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['71',Pack1] demand_fit['71',S] 1 demand_fit['71',M] 3 NumLooseInners['71',Pack1] demand_fit['71',L] 4 demand_fit['71',XL] 4 NumLooseInners['73',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['73',Pack1] demand_fit['73',S] 1 demand_fit['73',M] 3 NumLooseInners['73',Pack1] demand_fit['73',L] 4 demand_fit['73',XL] 4 NumLooseInners['86',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['86',Pack1] demand_fit['86',S] 1 demand_fit['86',M] 3 NumLooseInners['86',Pack1] demand_fit['86',L] 4 demand_fit['86',XL] 4 NumLooseInners['99',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['99',Pack1] demand_fit['99',S] 1 demand_fit['99',M] 3 NumLooseInners['99',Pack1] demand_fit['99',L] 4 demand_fit['99',XL] 4 NumLooseInners['103',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['103',Pack1] demand_fit['103',S] 1 demand_fit['103',M] 3 NumLooseInners['103',Pack1] demand_fit['103',L] 4 demand_fit['103',XL] 4 NumLooseInners['126',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['126',Pack1] demand_fit['126',S] 1 demand_fit['126',M] 3 NumLooseInners['126',Pack1] demand_fit['126',L] 4 demand_fit['126',XL] 4 NumLooseInners['221',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['221',Pack1] demand_fit['221',S] 1 demand_fit['221',M] 3 NumLooseInners['221',Pack1] demand_fit['221',L] 4 demand_fit['221',XL] 4 NumLooseInners['225',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['225',Pack1] demand_fit['225',S] 1 demand_fit['225',M] 3 NumLooseInners['225',Pack1] demand_fit['225',L] 4 demand_fit['225',XL] 4 NumLooseInners['251',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['251',Pack1] demand_fit['251',S] 1 demand_fit['251',M] 3 NumLooseInners['251',Pack1] demand_fit['251',L] 4 demand_fit['251',XL] 4 NumLooseInners['270',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['270',Pack1] demand_fit['270',S] 1 demand_fit['270',M] 3 NumLooseInners['270',Pack1] demand_fit['270',L] 4 demand_fit['270',XL] 4 NumLooseInners['272',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['272',Pack1] demand_fit['272',S] 1 demand_fit['272',M] 3 NumLooseInners['272',Pack1] demand_fit['272',L] 4 demand_fit['272',XL] 4 NumLooseInners['275',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['275',Pack1] demand_fit['275',S] 1 demand_fit['275',M] 3 NumLooseInners['275',Pack1] demand_fit['275',L] 4 demand_fit['275',XL] 4 NumLooseInners['276',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['276',Pack1] demand_fit['276',S] 1 demand_fit['276',M] 3 NumLooseInners['276',Pack1] demand_fit['276',L] 4 demand_fit['276',XL] 4 NumLooseInners['280',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['280',Pack1] demand_fit['280',S] 1 demand_fit['280',M] 3 NumLooseInners['280',Pack1] demand_fit['280',L] 4 demand_fit['280',XL] 4 NumLooseInners['282',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['282',Pack1] demand_fit['282',S] 1 demand_fit['282',M] 3 NumLooseInners['282',Pack1] demand_fit['282',L] 4 demand_fit['282',XL] 4 NumLooseInners['283',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['283',Pack1] demand_fit['283',S] 1 demand_fit['283',M] 3 NumLooseInners['283',Pack1] demand_fit['283',L] 4 demand_fit['283',XL] 4 NumLooseInners['293',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['293',Pack1] demand_fit['293',S] 1 demand_fit['293',M] 3 NumLooseInners['293',Pack1] demand_fit['293',L] 4 demand_fit['293',XL] 4 NumLooseInners['298',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['298',Pack1] demand_fit['298',S] 1 demand_fit['298',M] 3 NumLooseInners['298',Pack1] demand_fit['298',L] 4 demand_fit['298',XL] 4 NumLooseInners['299',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['299',Pack1] demand_fit['299',S] 1 demand_fit['299',M] 3 NumLooseInners['299',Pack1] demand_fit['299',L] 4 demand_fit['299',XL] 4 NumLooseInners['301',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['301',Pack1] demand_fit['301',S] 1 demand_fit['301',M] 3 NumLooseInners['301',Pack1] demand_fit['301',L] 4 demand_fit['301',XL] 4 NumLooseInners['309',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['309',Pack1] demand_fit['309',S] 1 demand_fit['309',M] 3 NumLooseInners['309',Pack1] demand_fit['309',L] 4 demand_fit['309',XL] 4 NumLooseInners['310',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['310',Pack1] demand_fit['310',S] 1 demand_fit['310',M] 3 NumLooseInners['310',Pack1] demand_fit['310',L] 4 demand_fit['310',XL] 4 NumLooseInners['375',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['375',Pack1] demand_fit['375',S] 1 demand_fit['375',M] 3 NumLooseInners['375',Pack1] demand_fit['375',L] 4 demand_fit['375',XL] 4 NumLooseInners['378',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['378',Pack1] demand_fit['378',S] 1 demand_fit['378',M] 3 NumLooseInners['378',Pack1] demand_fit['378',L] 4 demand_fit['378',XL] 4 NumLooseInners['379',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['379',Pack1] demand_fit['379',S] 1 demand_fit['379',M] 3 NumLooseInners['379',Pack1] demand_fit['379',L] 4 demand_fit['379',XL] 4 NumLooseInners['381',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['381',Pack1] demand_fit['381',S] 1 demand_fit['381',M] 3 NumLooseInners['381',Pack1] demand_fit['381',L] 4 demand_fit['381',XL] 4 NumLooseInners['383',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['383',Pack1] demand_fit['383',S] 1 demand_fit['383',M] 3 NumLooseInners['383',Pack1] demand_fit['383',L] 4 demand_fit['383',XL] 4 NumLooseInners['384',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['384',Pack1] demand_fit['384',S] 1 demand_fit['384',M] 3 NumLooseInners['384',Pack1] demand_fit['384',L] 4 demand_fit['384',XL] 4 NumLooseInners['386',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['386',Pack1] demand_fit['386',S] 1 demand_fit['386',M] 3 NumLooseInners['386',Pack1] demand_fit['386',L] 4 demand_fit['386',XL] 4 NumLooseInners['388',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['388',Pack1] demand_fit['388',S] 1 demand_fit['388',M] 3 NumLooseInners['388',Pack1] demand_fit['388',L] 4 demand_fit['388',XL] 4 NumLooseInners['389',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['389',Pack1] demand_fit['389',S] 1 demand_fit['389',M] 3 NumLooseInners['389',Pack1] demand_fit['389',L] 4 demand_fit['389',XL] 4 NumLooseInners['390',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['390',Pack1] demand_fit['390',S] 1 demand_fit['390',M] 3 NumLooseInners['390',Pack1] demand_fit['390',L] 4 demand_fit['390',XL] 4 NumLooseInners['397',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['397',Pack1] demand_fit['397',S] 1 demand_fit['397',M] 3 NumLooseInners['397',Pack1] demand_fit['397',L] 4 demand_fit['397',XL] 4 NumLooseInners['398',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['398',Pack1] demand_fit['398',S] 1 demand_fit['398',M] 3 NumLooseInners['398',Pack1] demand_fit['398',L] 4 demand_fit['398',XL] 4 NumLooseInners['403',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['403',Pack1] demand_fit['403',S] 1 demand_fit['403',M] 3 NumLooseInners['403',Pack1] demand_fit['403',L] 4 demand_fit['403',XL] 4 NumLooseInners['418',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['418',Pack1] demand_fit['418',S] 1 demand_fit['418',M] 3 NumLooseInners['418',Pack1] demand_fit['418',L] 4 demand_fit['418',XL] 4 NumLooseInners['430',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['430',Pack1] demand_fit['430',S] 1 demand_fit['430',M] 3 NumLooseInners['430',Pack1] demand_fit['430',L] 4 demand_fit['430',XL] 4 NumLooseInners['431',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['431',Pack1] demand_fit['431',S] 1 demand_fit['431',M] 3 NumLooseInners['431',Pack1] demand_fit['431',L] 4 demand_fit['431',XL] 4 NumLooseInners['479',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['479',Pack1] demand_fit['479',S] 1 demand_fit['479',M] 3 NumLooseInners['479',Pack1] demand_fit['479',L] 4 demand_fit['479',XL] 4 NumLooseInners['502',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['502',Pack1] demand_fit['502',S] 1 demand_fit['502',M] 3 NumLooseInners['502',Pack1] demand_fit['502',L] 4 demand_fit['502',XL] 4 NumLooseInners['504',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['504',Pack1] demand_fit['504',S] 1 demand_fit['504',M] 3 NumLooseInners['504',Pack1] demand_fit['504',L] 4 demand_fit['504',XL] 4 NumLooseInners['512',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['512',Pack1] demand_fit['512',S] 1 demand_fit['512',M] 3 NumLooseInners['512',Pack1] demand_fit['512',L] 4 demand_fit['512',XL] 4 NumLooseInners['528',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['528',Pack1] demand_fit['528',S] 1 demand_fit['528',M] 3 NumLooseInners['528',Pack1] demand_fit['528',L] 4 demand_fit['528',XL] 4 NumLooseInners['533',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['533',Pack1] demand_fit['533',S] 1 demand_fit['533',M] 3 NumLooseInners['533',Pack1] demand_fit['533',L] 4 demand_fit['533',XL] 4 NumLooseInners['538',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['538',Pack1] demand_fit['538',S] 1 demand_fit['538',M] 3 NumLooseInners['538',Pack1] demand_fit['538',L] 4 demand_fit['538',XL] 4 NumLooseInners['552',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['552',Pack1] demand_fit['552',S] 1 demand_fit['552',M] 3 NumLooseInners['552',Pack1] demand_fit['552',L] 4 demand_fit['552',XL] 4 NumLooseInners['621',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['621',Pack1] demand_fit['621',S] 1 demand_fit['621',M] 3 NumLooseInners['621',Pack1] demand_fit['621',L] 4 demand_fit['621',XL] 4 NumLooseInners['639',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['639',Pack1] demand_fit['639',S] 1 demand_fit['639',M] 3 NumLooseInners['639',Pack1] demand_fit['639',L] 4 demand_fit['639',XL] 4 NumLooseInners['712',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['712',Pack1] demand_fit['712',S] 1 demand_fit['712',M] 3 NumLooseInners['712',Pack1] demand_fit['712',L] 4 demand_fit['712',XL] 4 NumLooseInners['781',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['781',Pack1] demand_fit['781',S] 1 demand_fit['781',M] 3 NumLooseInners['781',Pack1] demand_fit['781',L] 4 demand_fit['781',XL] 4 NumLooseInners['71',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['71',Pack2] demand_fit['71',S] 1 demand_fit['71',M] 2 NumLooseInners['71',Pack2] demand_fit['71',L] 4 demand_fit['71',XL] 5 NumLooseInners['73',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['73',Pack2] demand_fit['73',S] 1 demand_fit['73',M] 2 NumLooseInners['73',Pack2] demand_fit['73',L] 4 demand_fit['73',XL] 5 NumLooseInners['86',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['86',Pack2] demand_fit['86',S] 1 demand_fit['86',M] 2 NumLooseInners['86',Pack2] demand_fit['86',L] 4 demand_fit['86',XL] 5 NumLooseInners['99',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['99',Pack2] demand_fit['99',S] 1 demand_fit['99',M] 2 NumLooseInners['99',Pack2] demand_fit['99',L] 4 demand_fit['99',XL] 5 NumLooseInners['103',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['103',Pack2] demand_fit['103',S] 1 demand_fit['103',M] 2 NumLooseInners['103',Pack2] demand_fit['103',L] 4 demand_fit['103',XL] 5 NumLooseInners['126',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['126',Pack2] demand_fit['126',S] 1 demand_fit['126',M] 2 NumLooseInners['126',Pack2] demand_fit['126',L] 4 demand_fit['126',XL] 5 NumLooseInners['221',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['221',Pack2] demand_fit['221',S] 1 demand_fit['221',M] 2 NumLooseInners['221',Pack2] demand_fit['221',L] 4 demand_fit['221',XL] 5 NumLooseInners['225',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['225',Pack2] demand_fit['225',S] 1 demand_fit['225',M] 2 NumLooseInners['225',Pack2] demand_fit['225',L] 4 demand_fit['225',XL] 5 NumLooseInners['251',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['251',Pack2] demand_fit['251',S] 1 demand_fit['251',M] 2 NumLooseInners['251',Pack2] demand_fit['251',L] 4 demand_fit['251',XL] 5 NumLooseInners['270',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['270',Pack2] demand_fit['270',S] 1 demand_fit['270',M] 2 NumLooseInners['270',Pack2] demand_fit['270',L] 4 demand_fit['270',XL] 5 NumLooseInners['272',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['272',Pack2] demand_fit['272',S] 1 demand_fit['272',M] 2 NumLooseInners['272',Pack2] demand_fit['272',L] 4 demand_fit['272',XL] 5 NumLooseInners['275',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['275',Pack2] demand_fit['275',S] 1 demand_fit['275',M] 2 NumLooseInners['275',Pack2] demand_fit['275',L] 4 demand_fit['275',XL] 5 NumLooseInners['276',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['276',Pack2] demand_fit['276',S] 1 demand_fit['276',M] 2 NumLooseInners['276',Pack2] demand_fit['276',L] 4 demand_fit['276',XL] 5 NumLooseInners['280',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['280',Pack2] demand_fit['280',S] 1 demand_fit['280',M] 2 NumLooseInners['280',Pack2] demand_fit['280',L] 4 demand_fit['280',XL] 5 NumLooseInners['282',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['282',Pack2] demand_fit['282',S] 1 demand_fit['282',M] 2 NumLooseInners['282',Pack2] demand_fit['282',L] 4 demand_fit['282',XL] 5 NumLooseInners['283',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['283',Pack2] demand_fit['283',S] 1 demand_fit['283',M] 2 NumLooseInners['283',Pack2] demand_fit['283',L] 4 demand_fit['283',XL] 5 NumLooseInners['293',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['293',Pack2] demand_fit['293',S] 1 demand_fit['293',M] 2 NumLooseInners['293',Pack2] demand_fit['293',L] 4 demand_fit['293',XL] 5 NumLooseInners['298',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['298',Pack2] demand_fit['298',S] 1 demand_fit['298',M] 2 NumLooseInners['298',Pack2] demand_fit['298',L] 4 demand_fit['298',XL] 5 NumLooseInners['299',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['299',Pack2] demand_fit['299',S] 1 demand_fit['299',M] 2 NumLooseInners['299',Pack2] demand_fit['299',L] 4 demand_fit['299',XL] 5 NumLooseInners['301',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['301',Pack2] demand_fit['301',S] 1 demand_fit['301',M] 2 NumLooseInners['301',Pack2] demand_fit['301',L] 4 demand_fit['301',XL] 5 NumLooseInners['309',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['309',Pack2] demand_fit['309',S] 1 demand_fit['309',M] 2 NumLooseInners['309',Pack2] demand_fit['309',L] 4 demand_fit['309',XL] 5 NumLooseInners['310',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['310',Pack2] demand_fit['310',S] 1 demand_fit['310',M] 2 NumLooseInners['310',Pack2] demand_fit['310',L] 4 demand_fit['310',XL] 5 NumLooseInners['375',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['375',Pack2] demand_fit['375',S] 1 demand_fit['375',M] 2 NumLooseInners['375',Pack2] demand_fit['375',L] 4 demand_fit['375',XL] 5 NumLooseInners['378',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['378',Pack2] demand_fit['378',S] 1 demand_fit['378',M] 2 NumLooseInners['378',Pack2] demand_fit['378',L] 4 demand_fit['378',XL] 5 NumLooseInners['379',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['379',Pack2] demand_fit['379',S] 1 demand_fit['379',M] 2 NumLooseInners['379',Pack2] demand_fit['379',L] 4 demand_fit['379',XL] 5 NumLooseInners['381',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['381',Pack2] demand_fit['381',S] 1 demand_fit['381',M] 2 NumLooseInners['381',Pack2] demand_fit['381',L] 4 demand_fit['381',XL] 5 NumLooseInners['383',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['383',Pack2] demand_fit['383',S] 1 demand_fit['383',M] 2 NumLooseInners['383',Pack2] demand_fit['383',L] 4 demand_fit['383',XL] 5 NumLooseInners['384',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['384',Pack2] demand_fit['384',S] 1 demand_fit['384',M] 2 NumLooseInners['384',Pack2] demand_fit['384',L] 4 demand_fit['384',XL] 5 NumLooseInners['386',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['386',Pack2] demand_fit['386',S] 1 demand_fit['386',M] 2 NumLooseInners['386',Pack2] demand_fit['386',L] 4 demand_fit['386',XL] 5 NumLooseInners['388',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['388',Pack2] demand_fit['388',S] 1 demand_fit['388',M] 2 NumLooseInners['388',Pack2] demand_fit['388',L] 4 demand_fit['388',XL] 5 NumLooseInners['389',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['389',Pack2] demand_fit['389',S] 1 demand_fit['389',M] 2 NumLooseInners['389',Pack2] demand_fit['389',L] 4 demand_fit['389',XL] 5 NumLooseInners['390',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['390',Pack2] demand_fit['390',S] 1 demand_fit['390',M] 2 NumLooseInners['390',Pack2] demand_fit['390',L] 4 demand_fit['390',XL] 5 NumLooseInners['397',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['397',Pack2] demand_fit['397',S] 1 demand_fit['397',M] 2 NumLooseInners['397',Pack2] demand_fit['397',L] 4 demand_fit['397',XL] 5 NumLooseInners['398',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['398',Pack2] demand_fit['398',S] 1 demand_fit['398',M] 2 NumLooseInners['398',Pack2] demand_fit['398',L] 4 demand_fit['398',XL] 5 NumLooseInners['403',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['403',Pack2] demand_fit['403',S] 1 demand_fit['403',M] 2 NumLooseInners['403',Pack2] demand_fit['403',L] 4 demand_fit['403',XL] 5 NumLooseInners['418',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['418',Pack2] demand_fit['418',S] 1 demand_fit['418',M] 2 NumLooseInners['418',Pack2] demand_fit['418',L] 4 demand_fit['418',XL] 5 NumLooseInners['430',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['430',Pack2] demand_fit['430',S] 1 demand_fit['430',M] 2 NumLooseInners['430',Pack2] demand_fit['430',L] 4 demand_fit['430',XL] 5 NumLooseInners['431',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['431',Pack2] demand_fit['431',S] 1 demand_fit['431',M] 2 NumLooseInners['431',Pack2] demand_fit['431',L] 4 demand_fit['431',XL] 5 NumLooseInners['479',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['479',Pack2] demand_fit['479',S] 1 demand_fit['479',M] 2 NumLooseInners['479',Pack2] demand_fit['479',L] 4 demand_fit['479',XL] 5 NumLooseInners['502',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['502',Pack2] demand_fit['502',S] 1 demand_fit['502',M] 2 NumLooseInners['502',Pack2] demand_fit['502',L] 4 demand_fit['502',XL] 5 NumLooseInners['504',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['504',Pack2] demand_fit['504',S] 1 demand_fit['504',M] 2 NumLooseInners['504',Pack2] demand_fit['504',L] 4 demand_fit['504',XL] 5 NumLooseInners['512',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['512',Pack2] demand_fit['512',S] 1 demand_fit['512',M] 2 NumLooseInners['512',Pack2] demand_fit['512',L] 4 demand_fit['512',XL] 5 NumLooseInners['528',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['528',Pack2] demand_fit['528',S] 1 demand_fit['528',M] 2 NumLooseInners['528',Pack2] demand_fit['528',L] 4 demand_fit['528',XL] 5 NumLooseInners['533',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['533',Pack2] demand_fit['533',S] 1 demand_fit['533',M] 2 NumLooseInners['533',Pack2] demand_fit['533',L] 4 demand_fit['533',XL] 5 NumLooseInners['538',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['538',Pack2] demand_fit['538',S] 1 demand_fit['538',M] 2 NumLooseInners['538',Pack2] demand_fit['538',L] 4 demand_fit['538',XL] 5 NumLooseInners['552',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['552',Pack2] demand_fit['552',S] 1 demand_fit['552',M] 2 NumLooseInners['552',Pack2] demand_fit['552',L] 4 demand_fit['552',XL] 5 NumLooseInners['621',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['621',Pack2] demand_fit['621',S] 1 demand_fit['621',M] 2 NumLooseInners['621',Pack2] demand_fit['621',L] 4 demand_fit['621',XL] 5 NumLooseInners['639',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['639',Pack2] demand_fit['639',S] 1 demand_fit['639',M] 2 NumLooseInners['639',Pack2] demand_fit['639',L] 4 demand_fit['639',XL] 5 NumLooseInners['712',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['712',Pack2] demand_fit['712',S] 1 demand_fit['712',M] 2 NumLooseInners['712',Pack2] demand_fit['712',L] 4 demand_fit['712',XL] 5 NumLooseInners['781',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['781',Pack2] demand_fit['781',S] 1 demand_fit['781',M] 2 NumLooseInners['781',Pack2] demand_fit['781',L] 4 demand_fit['781',XL] 5 NumLooseInners['71',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['71',Pack3] demand_fit['71',S] 2 demand_fit['71',M] 4 NumLooseInners['71',Pack3] demand_fit['71',L] 3 demand_fit['71',XL] 3 NumLooseInners['73',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['73',Pack3] demand_fit['73',S] 2 demand_fit['73',M] 4 NumLooseInners['73',Pack3] demand_fit['73',L] 3 demand_fit['73',XL] 3 NumLooseInners['86',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['86',Pack3] demand_fit['86',S] 2 demand_fit['86',M] 4 NumLooseInners['86',Pack3] demand_fit['86',L] 3 demand_fit['86',XL] 3 NumLooseInners['99',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['99',Pack3] demand_fit['99',S] 2 demand_fit['99',M] 4 NumLooseInners['99',Pack3] demand_fit['99',L] 3 demand_fit['99',XL] 3 NumLooseInners['103',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['103',Pack3] demand_fit['103',S] 2 demand_fit['103',M] 4 NumLooseInners['103',Pack3] demand_fit['103',L] 3 demand_fit['103',XL] 3 NumLooseInners['126',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['126',Pack3] demand_fit['126',S] 2 demand_fit['126',M] 4 NumLooseInners['126',Pack3] demand_fit['126',L] 3 demand_fit['126',XL] 3 NumLooseInners['221',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['221',Pack3] demand_fit['221',S] 2 demand_fit['221',M] 4 NumLooseInners['221',Pack3] demand_fit['221',L] 3 demand_fit['221',XL] 3 NumLooseInners['225',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['225',Pack3] demand_fit['225',S] 2 demand_fit['225',M] 4 NumLooseInners['225',Pack3] demand_fit['225',L] 3 demand_fit['225',XL] 3 NumLooseInners['251',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['251',Pack3] demand_fit['251',S] 2 demand_fit['251',M] 4 NumLooseInners['251',Pack3] demand_fit['251',L] 3 demand_fit['251',XL] 3 NumLooseInners['270',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['270',Pack3] demand_fit['270',S] 2 demand_fit['270',M] 4 NumLooseInners['270',Pack3] demand_fit['270',L] 3 demand_fit['270',XL] 3 NumLooseInners['272',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['272',Pack3] demand_fit['272',S] 2 demand_fit['272',M] 4 NumLooseInners['272',Pack3] demand_fit['272',L] 3 demand_fit['272',XL] 3 NumLooseInners['275',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['275',Pack3] demand_fit['275',S] 2 demand_fit['275',M] 4 NumLooseInners['275',Pack3] demand_fit['275',L] 3 demand_fit['275',XL] 3 NumLooseInners['276',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['276',Pack3] demand_fit['276',S] 2 demand_fit['276',M] 4 NumLooseInners['276',Pack3] demand_fit['276',L] 3 demand_fit['276',XL] 3 NumLooseInners['280',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['280',Pack3] demand_fit['280',S] 2 demand_fit['280',M] 4 NumLooseInners['280',Pack3] demand_fit['280',L] 3 demand_fit['280',XL] 3 NumLooseInners['282',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['282',Pack3] demand_fit['282',S] 2 demand_fit['282',M] 4 NumLooseInners['282',Pack3] demand_fit['282',L] 3 demand_fit['282',XL] 3 NumLooseInners['283',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['283',Pack3] demand_fit['283',S] 2 demand_fit['283',M] 4 NumLooseInners['283',Pack3] demand_fit['283',L] 3 demand_fit['283',XL] 3 NumLooseInners['293',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['293',Pack3] demand_fit['293',S] 2 demand_fit['293',M] 4 NumLooseInners['293',Pack3] demand_fit['293',L] 3 demand_fit['293',XL] 3 NumLooseInners['298',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['298',Pack3] demand_fit['298',S] 2 demand_fit['298',M] 4 NumLooseInners['298',Pack3] demand_fit['298',L] 3 demand_fit['298',XL] 3 NumLooseInners['299',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['299',Pack3] demand_fit['299',S] 2 demand_fit['299',M] 4 NumLooseInners['299',Pack3] demand_fit['299',L] 3 demand_fit['299',XL] 3 NumLooseInners['301',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['301',Pack3] demand_fit['301',S] 2 demand_fit['301',M] 4 NumLooseInners['301',Pack3] demand_fit['301',L] 3 demand_fit['301',XL] 3 NumLooseInners['309',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['309',Pack3] demand_fit['309',S] 2 demand_fit['309',M] 4 NumLooseInners['309',Pack3] demand_fit['309',L] 3 demand_fit['309',XL] 3 NumLooseInners['310',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['310',Pack3] demand_fit['310',S] 2 demand_fit['310',M] 4 NumLooseInners['310',Pack3] demand_fit['310',L] 3 demand_fit['310',XL] 3 NumLooseInners['375',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['375',Pack3] demand_fit['375',S] 2 demand_fit['375',M] 4 NumLooseInners['375',Pack3] demand_fit['375',L] 3 demand_fit['375',XL] 3 NumLooseInners['378',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['378',Pack3] demand_fit['378',S] 2 demand_fit['378',M] 4 NumLooseInners['378',Pack3] demand_fit['378',L] 3 demand_fit['378',XL] 3 NumLooseInners['379',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['379',Pack3] demand_fit['379',S] 2 demand_fit['379',M] 4 NumLooseInners['379',Pack3] demand_fit['379',L] 3 demand_fit['379',XL] 3 NumLooseInners['381',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['381',Pack3] demand_fit['381',S] 2 demand_fit['381',M] 4 NumLooseInners['381',Pack3] demand_fit['381',L] 3 demand_fit['381',XL] 3 NumLooseInners['383',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['383',Pack3] demand_fit['383',S] 2 demand_fit['383',M] 4 NumLooseInners['383',Pack3] demand_fit['383',L] 3 demand_fit['383',XL] 3 NumLooseInners['384',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['384',Pack3] demand_fit['384',S] 2 demand_fit['384',M] 4 NumLooseInners['384',Pack3] demand_fit['384',L] 3 demand_fit['384',XL] 3 NumLooseInners['386',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['386',Pack3] demand_fit['386',S] 2 demand_fit['386',M] 4 NumLooseInners['386',Pack3] demand_fit['386',L] 3 demand_fit['386',XL] 3 NumLooseInners['388',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['388',Pack3] demand_fit['388',S] 2 demand_fit['388',M] 4 NumLooseInners['388',Pack3] demand_fit['388',L] 3 demand_fit['388',XL] 3 NumLooseInners['389',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['389',Pack3] demand_fit['389',S] 2 demand_fit['389',M] 4 NumLooseInners['389',Pack3] demand_fit['389',L] 3 demand_fit['389',XL] 3 NumLooseInners['390',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['390',Pack3] demand_fit['390',S] 2 demand_fit['390',M] 4 NumLooseInners['390',Pack3] demand_fit['390',L] 3 demand_fit['390',XL] 3 NumLooseInners['397',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['397',Pack3] demand_fit['397',S] 2 demand_fit['397',M] 4 NumLooseInners['397',Pack3] demand_fit['397',L] 3 demand_fit['397',XL] 3 NumLooseInners['398',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['398',Pack3] demand_fit['398',S] 2 demand_fit['398',M] 4 NumLooseInners['398',Pack3] demand_fit['398',L] 3 demand_fit['398',XL] 3 NumLooseInners['403',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['403',Pack3] demand_fit['403',S] 2 demand_fit['403',M] 4 NumLooseInners['403',Pack3] demand_fit['403',L] 3 demand_fit['403',XL] 3 NumLooseInners['418',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['418',Pack3] demand_fit['418',S] 2 demand_fit['418',M] 4 NumLooseInners['418',Pack3] demand_fit['418',L] 3 demand_fit['418',XL] 3 NumLooseInners['430',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['430',Pack3] demand_fit['430',S] 2 demand_fit['430',M] 4 NumLooseInners['430',Pack3] demand_fit['430',L] 3 demand_fit['430',XL] 3 NumLooseInners['431',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['431',Pack3] demand_fit['431',S] 2 demand_fit['431',M] 4 NumLooseInners['431',Pack3] demand_fit['431',L] 3 demand_fit['431',XL] 3 NumLooseInners['479',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['479',Pack3] demand_fit['479',S] 2 demand_fit['479',M] 4 NumLooseInners['479',Pack3] demand_fit['479',L] 3 demand_fit['479',XL] 3 NumLooseInners['502',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['502',Pack3] demand_fit['502',S] 2 demand_fit['502',M] 4 NumLooseInners['502',Pack3] demand_fit['502',L] 3 demand_fit['502',XL] 3 NumLooseInners['504',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['504',Pack3] demand_fit['504',S] 2 demand_fit['504',M] 4 NumLooseInners['504',Pack3] demand_fit['504',L] 3 demand_fit['504',XL] 3 NumLooseInners['512',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['512',Pack3] demand_fit['512',S] 2 demand_fit['512',M] 4 NumLooseInners['512',Pack3] demand_fit['512',L] 3 demand_fit['512',XL] 3 NumLooseInners['528',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['528',Pack3] demand_fit['528',S] 2 demand_fit['528',M] 4 NumLooseInners['528',Pack3] demand_fit['528',L] 3 demand_fit['528',XL] 3 NumLooseInners['533',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['533',Pack3] demand_fit['533',S] 2 demand_fit['533',M] 4 NumLooseInners['533',Pack3] demand_fit['533',L] 3 demand_fit['533',XL] 3 NumLooseInners['538',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['538',Pack3] demand_fit['538',S] 2 demand_fit['538',M] 4 NumLooseInners['538',Pack3] demand_fit['538',L] 3 demand_fit['538',XL] 3 NumLooseInners['552',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['552',Pack3] demand_fit['552',S] 2 demand_fit['552',M] 4 NumLooseInners['552',Pack3] demand_fit['552',L] 3 demand_fit['552',XL] 3 NumLooseInners['621',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['621',Pack3] demand_fit['621',S] 2 demand_fit['621',M] 4 NumLooseInners['621',Pack3] demand_fit['621',L] 3 demand_fit['621',XL] 3 NumLooseInners['639',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['639',Pack3] demand_fit['639',S] 2 demand_fit['639',M] 4 NumLooseInners['639',Pack3] demand_fit['639',L] 3 demand_fit['639',XL] 3 NumLooseInners['712',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['712',Pack3] demand_fit['712',S] 2 demand_fit['712',M] 4 NumLooseInners['712',Pack3] demand_fit['712',L] 3 demand_fit['712',XL] 3 NumLooseInners['781',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['781',Pack3] demand_fit['781',S] 2 demand_fit['781',M] 4 NumLooseInners['781',Pack3] demand_fit['781',L] 3 demand_fit['781',XL] 3 NumUnopenedOuters['71',Pack1] TotalCost 1 demand_fit['71',S] 1 NumUnopenedOuters['71',Pack1] demand_fit['71',M] 3 demand_fit['71',L] 4 NumUnopenedOuters['71',Pack1] demand_fit['71',XL] 4 NumUnopenedOuters['73',Pack1] TotalCost 1 demand_fit['73',S] 1 NumUnopenedOuters['73',Pack1] demand_fit['73',M] 3 demand_fit['73',L] 4 NumUnopenedOuters['73',Pack1] demand_fit['73',XL] 4 NumUnopenedOuters['86',Pack1] TotalCost 1 demand_fit['86',S] 1 NumUnopenedOuters['86',Pack1] demand_fit['86',M] 3 demand_fit['86',L] 4 NumUnopenedOuters['86',Pack1] demand_fit['86',XL] 4 NumUnopenedOuters['99',Pack1] TotalCost 1 demand_fit['99',S] 1 NumUnopenedOuters['99',Pack1] demand_fit['99',M] 3 demand_fit['99',L] 4 NumUnopenedOuters['99',Pack1] demand_fit['99',XL] 4 NumUnopenedOuters['103',Pack1] TotalCost 1 demand_fit['103',S] 1 NumUnopenedOuters['103',Pack1] demand_fit['103',M] 3 demand_fit['103',L] 4 NumUnopenedOuters['103',Pack1] demand_fit['103',XL] 4 NumUnopenedOuters['126',Pack1] TotalCost 1 demand_fit['126',S] 1 NumUnopenedOuters['126',Pack1] demand_fit['126',M] 3 demand_fit['126',L] 4 NumUnopenedOuters['126',Pack1] demand_fit['126',XL] 4 NumUnopenedOuters['221',Pack1] TotalCost 1 demand_fit['221',S] 1 NumUnopenedOuters['221',Pack1] demand_fit['221',M] 3 demand_fit['221',L] 4 NumUnopenedOuters['221',Pack1] demand_fit['221',XL] 4 NumUnopenedOuters['225',Pack1] TotalCost 1 demand_fit['225',S] 1 NumUnopenedOuters['225',Pack1] demand_fit['225',M] 3 demand_fit['225',L] 4 NumUnopenedOuters['225',Pack1] demand_fit['225',XL] 4 NumUnopenedOuters['251',Pack1] TotalCost 1 demand_fit['251',S] 1 NumUnopenedOuters['251',Pack1] demand_fit['251',M] 3 demand_fit['251',L] 4 NumUnopenedOuters['251',Pack1] demand_fit['251',XL] 4 NumUnopenedOuters['270',Pack1] TotalCost 1 demand_fit['270',S] 1 NumUnopenedOuters['270',Pack1] demand_fit['270',M] 3 demand_fit['270',L] 4 NumUnopenedOuters['270',Pack1] demand_fit['270',XL] 4 NumUnopenedOuters['272',Pack1] TotalCost 1 demand_fit['272',S] 1 NumUnopenedOuters['272',Pack1] demand_fit['272',M] 3 demand_fit['272',L] 4 NumUnopenedOuters['272',Pack1] demand_fit['272',XL] 4 NumUnopenedOuters['275',Pack1] TotalCost 1 demand_fit['275',S] 1 NumUnopenedOuters['275',Pack1] demand_fit['275',M] 3 demand_fit['275',L] 4 NumUnopenedOuters['275',Pack1] demand_fit['275',XL] 4 NumUnopenedOuters['276',Pack1] TotalCost 1 demand_fit['276',S] 1 NumUnopenedOuters['276',Pack1] demand_fit['276',M] 3 demand_fit['276',L] 4 NumUnopenedOuters['276',Pack1] demand_fit['276',XL] 4 NumUnopenedOuters['280',Pack1] TotalCost 1 demand_fit['280',S] 1 NumUnopenedOuters['280',Pack1] demand_fit['280',M] 3 demand_fit['280',L] 4 NumUnopenedOuters['280',Pack1] demand_fit['280',XL] 4 NumUnopenedOuters['282',Pack1] TotalCost 1 demand_fit['282',S] 1 NumUnopenedOuters['282',Pack1] demand_fit['282',M] 3 demand_fit['282',L] 4 NumUnopenedOuters['282',Pack1] demand_fit['282',XL] 4 NumUnopenedOuters['283',Pack1] TotalCost 1 demand_fit['283',S] 1 NumUnopenedOuters['283',Pack1] demand_fit['283',M] 3 demand_fit['283',L] 4 NumUnopenedOuters['283',Pack1] demand_fit['283',XL] 4 NumUnopenedOuters['293',Pack1] TotalCost 1 demand_fit['293',S] 1 NumUnopenedOuters['293',Pack1] demand_fit['293',M] 3 demand_fit['293',L] 4 NumUnopenedOuters['293',Pack1] demand_fit['293',XL] 4 NumUnopenedOuters['298',Pack1] TotalCost 1 demand_fit['298',S] 1 NumUnopenedOuters['298',Pack1] demand_fit['298',M] 3 demand_fit['298',L] 4 NumUnopenedOuters['298',Pack1] demand_fit['298',XL] 4 NumUnopenedOuters['299',Pack1] TotalCost 1 demand_fit['299',S] 1 NumUnopenedOuters['299',Pack1] demand_fit['299',M] 3 demand_fit['299',L] 4 NumUnopenedOuters['299',Pack1] demand_fit['299',XL] 4 NumUnopenedOuters['301',Pack1] TotalCost 1 demand_fit['301',S] 1 NumUnopenedOuters['301',Pack1] demand_fit['301',M] 3 demand_fit['301',L] 4 NumUnopenedOuters['301',Pack1] demand_fit['301',XL] 4 NumUnopenedOuters['309',Pack1] TotalCost 1 demand_fit['309',S] 1 NumUnopenedOuters['309',Pack1] demand_fit['309',M] 3 demand_fit['309',L] 4 NumUnopenedOuters['309',Pack1] demand_fit['309',XL] 4 NumUnopenedOuters['310',Pack1] TotalCost 1 demand_fit['310',S] 1 NumUnopenedOuters['310',Pack1] demand_fit['310',M] 3 demand_fit['310',L] 4 NumUnopenedOuters['310',Pack1] demand_fit['310',XL] 4 NumUnopenedOuters['375',Pack1] TotalCost 1 demand_fit['375',S] 1 NumUnopenedOuters['375',Pack1] demand_fit['375',M] 3 demand_fit['375',L] 4 NumUnopenedOuters['375',Pack1] demand_fit['375',XL] 4 NumUnopenedOuters['378',Pack1] TotalCost 1 demand_fit['378',S] 1 NumUnopenedOuters['378',Pack1] demand_fit['378',M] 3 demand_fit['378',L] 4 NumUnopenedOuters['378',Pack1] demand_fit['378',XL] 4 NumUnopenedOuters['379',Pack1] TotalCost 1 demand_fit['379',S] 1 NumUnopenedOuters['379',Pack1] demand_fit['379',M] 3 demand_fit['379',L] 4 NumUnopenedOuters['379',Pack1] demand_fit['379',XL] 4 NumUnopenedOuters['381',Pack1] TotalCost 1 demand_fit['381',S] 1 NumUnopenedOuters['381',Pack1] demand_fit['381',M] 3 demand_fit['381',L] 4 NumUnopenedOuters['381',Pack1] demand_fit['381',XL] 4 NumUnopenedOuters['383',Pack1] TotalCost 1 demand_fit['383',S] 1 NumUnopenedOuters['383',Pack1] demand_fit['383',M] 3 demand_fit['383',L] 4 NumUnopenedOuters['383',Pack1] demand_fit['383',XL] 4 NumUnopenedOuters['384',Pack1] TotalCost 1 demand_fit['384',S] 1 NumUnopenedOuters['384',Pack1] demand_fit['384',M] 3 demand_fit['384',L] 4 NumUnopenedOuters['384',Pack1] demand_fit['384',XL] 4 NumUnopenedOuters['386',Pack1] TotalCost 1 demand_fit['386',S] 1 NumUnopenedOuters['386',Pack1] demand_fit['386',M] 3 demand_fit['386',L] 4 NumUnopenedOuters['386',Pack1] demand_fit['386',XL] 4 NumUnopenedOuters['388',Pack1] TotalCost 1 demand_fit['388',S] 1 NumUnopenedOuters['388',Pack1] demand_fit['388',M] 3 demand_fit['388',L] 4 NumUnopenedOuters['388',Pack1] demand_fit['388',XL] 4 NumUnopenedOuters['389',Pack1] TotalCost 1 demand_fit['389',S] 1 NumUnopenedOuters['389',Pack1] demand_fit['389',M] 3 demand_fit['389',L] 4 NumUnopenedOuters['389',Pack1] demand_fit['389',XL] 4 NumUnopenedOuters['390',Pack1] TotalCost 1 demand_fit['390',S] 1 NumUnopenedOuters['390',Pack1] demand_fit['390',M] 3 demand_fit['390',L] 4 NumUnopenedOuters['390',Pack1] demand_fit['390',XL] 4 NumUnopenedOuters['397',Pack1] TotalCost 1 demand_fit['397',S] 1 NumUnopenedOuters['397',Pack1] demand_fit['397',M] 3 demand_fit['397',L] 4 NumUnopenedOuters['397',Pack1] demand_fit['397',XL] 4 NumUnopenedOuters['398',Pack1] TotalCost 1 demand_fit['398',S] 1 NumUnopenedOuters['398',Pack1] demand_fit['398',M] 3 demand_fit['398',L] 4 NumUnopenedOuters['398',Pack1] demand_fit['398',XL] 4 NumUnopenedOuters['403',Pack1] TotalCost 1 demand_fit['403',S] 1 NumUnopenedOuters['403',Pack1] demand_fit['403',M] 3 demand_fit['403',L] 4 NumUnopenedOuters['403',Pack1] demand_fit['403',XL] 4 NumUnopenedOuters['418',Pack1] TotalCost 1 demand_fit['418',S] 1 NumUnopenedOuters['418',Pack1] demand_fit['418',M] 3 demand_fit['418',L] 4 NumUnopenedOuters['418',Pack1] demand_fit['418',XL] 4 NumUnopenedOuters['430',Pack1] TotalCost 1 demand_fit['430',S] 1 NumUnopenedOuters['430',Pack1] demand_fit['430',M] 3 demand_fit['430',L] 4 NumUnopenedOuters['430',Pack1] demand_fit['430',XL] 4 NumUnopenedOuters['431',Pack1] TotalCost 1 demand_fit['431',S] 1 NumUnopenedOuters['431',Pack1] demand_fit['431',M] 3 demand_fit['431',L] 4 NumUnopenedOuters['431',Pack1] demand_fit['431',XL] 4 NumUnopenedOuters['479',Pack1] TotalCost 1 demand_fit['479',S] 1 NumUnopenedOuters['479',Pack1] demand_fit['479',M] 3 demand_fit['479',L] 4 NumUnopenedOuters['479',Pack1] demand_fit['479',XL] 4 NumUnopenedOuters['502',Pack1] TotalCost 1 demand_fit['502',S] 1 NumUnopenedOuters['502',Pack1] demand_fit['502',M] 3 demand_fit['502',L] 4 NumUnopenedOuters['502',Pack1] demand_fit['502',XL] 4 NumUnopenedOuters['504',Pack1] TotalCost 1 demand_fit['504',S] 1 NumUnopenedOuters['504',Pack1] demand_fit['504',M] 3 demand_fit['504',L] 4 NumUnopenedOuters['504',Pack1] demand_fit['504',XL] 4 NumUnopenedOuters['512',Pack1] TotalCost 1 demand_fit['512',S] 1 NumUnopenedOuters['512',Pack1] demand_fit['512',M] 3 demand_fit['512',L] 4 NumUnopenedOuters['512',Pack1] demand_fit['512',XL] 4 NumUnopenedOuters['528',Pack1] TotalCost 1 demand_fit['528',S] 1 NumUnopenedOuters['528',Pack1] demand_fit['528',M] 3 demand_fit['528',L] 4 NumUnopenedOuters['528',Pack1] demand_fit['528',XL] 4 NumUnopenedOuters['533',Pack1] TotalCost 1 demand_fit['533',S] 1 NumUnopenedOuters['533',Pack1] demand_fit['533',M] 3 demand_fit['533',L] 4 NumUnopenedOuters['533',Pack1] demand_fit['533',XL] 4 NumUnopenedOuters['538',Pack1] TotalCost 1 demand_fit['538',S] 1 NumUnopenedOuters['538',Pack1] demand_fit['538',M] 3 demand_fit['538',L] 4 NumUnopenedOuters['538',Pack1] demand_fit['538',XL] 4 NumUnopenedOuters['552',Pack1] TotalCost 1 demand_fit['552',S] 1 NumUnopenedOuters['552',Pack1] demand_fit['552',M] 3 demand_fit['552',L] 4 NumUnopenedOuters['552',Pack1] demand_fit['552',XL] 4 NumUnopenedOuters['621',Pack1] TotalCost 1 demand_fit['621',S] 1 NumUnopenedOuters['621',Pack1] demand_fit['621',M] 3 demand_fit['621',L] 4 NumUnopenedOuters['621',Pack1] demand_fit['621',XL] 4 NumUnopenedOuters['639',Pack1] TotalCost 1 demand_fit['639',S] 1 NumUnopenedOuters['639',Pack1] demand_fit['639',M] 3 demand_fit['639',L] 4 NumUnopenedOuters['639',Pack1] demand_fit['639',XL] 4 NumUnopenedOuters['712',Pack1] TotalCost 1 demand_fit['712',S] 1 NumUnopenedOuters['712',Pack1] demand_fit['712',M] 3 demand_fit['712',L] 4 NumUnopenedOuters['712',Pack1] demand_fit['712',XL] 4 NumUnopenedOuters['781',Pack1] TotalCost 1 demand_fit['781',S] 1 NumUnopenedOuters['781',Pack1] demand_fit['781',M] 3 demand_fit['781',L] 4 NumUnopenedOuters['781',Pack1] demand_fit['781',XL] 4 NumUnopenedOuters['71',Pack2] TotalCost 1.5 demand_fit['71',S] 1 NumUnopenedOuters['71',Pack2] demand_fit['71',M] 2 demand_fit['71',L] 4 NumUnopenedOuters['71',Pack2] demand_fit['71',XL] 5 NumUnopenedOuters['73',Pack2] TotalCost 1.5 demand_fit['73',S] 1 NumUnopenedOuters['73',Pack2] demand_fit['73',M] 2 demand_fit['73',L] 4 NumUnopenedOuters['73',Pack2] demand_fit['73',XL] 5 NumUnopenedOuters['86',Pack2] TotalCost 1.5 demand_fit['86',S] 1 NumUnopenedOuters['86',Pack2] demand_fit['86',M] 2 demand_fit['86',L] 4 NumUnopenedOuters['86',Pack2] demand_fit['86',XL] 5 NumUnopenedOuters['99',Pack2] TotalCost 1.5 demand_fit['99',S] 1 NumUnopenedOuters['99',Pack2] demand_fit['99',M] 2 demand_fit['99',L] 4 NumUnopenedOuters['99',Pack2] demand_fit['99',XL] 5 NumUnopenedOuters['103',Pack2] TotalCost 1.5 demand_fit['103',S] 1 NumUnopenedOuters['103',Pack2] demand_fit['103',M] 2 demand_fit['103',L] 4 NumUnopenedOuters['103',Pack2] demand_fit['103',XL] 5 NumUnopenedOuters['126',Pack2] TotalCost 1.5 demand_fit['126',S] 1 NumUnopenedOuters['126',Pack2] demand_fit['126',M] 2 demand_fit['126',L] 4 NumUnopenedOuters['126',Pack2] demand_fit['126',XL] 5 NumUnopenedOuters['221',Pack2] TotalCost 1.5 demand_fit['221',S] 1 NumUnopenedOuters['221',Pack2] demand_fit['221',M] 2 demand_fit['221',L] 4 NumUnopenedOuters['221',Pack2] demand_fit['221',XL] 5 NumUnopenedOuters['225',Pack2] TotalCost 1.5 demand_fit['225',S] 1 NumUnopenedOuters['225',Pack2] demand_fit['225',M] 2 demand_fit['225',L] 4 NumUnopenedOuters['225',Pack2] demand_fit['225',XL] 5 NumUnopenedOuters['251',Pack2] TotalCost 1.5 demand_fit['251',S] 1 NumUnopenedOuters['251',Pack2] demand_fit['251',M] 2 demand_fit['251',L] 4 NumUnopenedOuters['251',Pack2] demand_fit['251',XL] 5 NumUnopenedOuters['270',Pack2] TotalCost 1.5 demand_fit['270',S] 1 NumUnopenedOuters['270',Pack2] demand_fit['270',M] 2 demand_fit['270',L] 4 NumUnopenedOuters['270',Pack2] demand_fit['270',XL] 5 NumUnopenedOuters['272',Pack2] TotalCost 1.5 demand_fit['272',S] 1 NumUnopenedOuters['272',Pack2] demand_fit['272',M] 2 demand_fit['272',L] 4 NumUnopenedOuters['272',Pack2] demand_fit['272',XL] 5 NumUnopenedOuters['275',Pack2] TotalCost 1.5 demand_fit['275',S] 1 NumUnopenedOuters['275',Pack2] demand_fit['275',M] 2 demand_fit['275',L] 4 NumUnopenedOuters['275',Pack2] demand_fit['275',XL] 5 NumUnopenedOuters['276',Pack2] TotalCost 1.5 demand_fit['276',S] 1 NumUnopenedOuters['276',Pack2] demand_fit['276',M] 2 demand_fit['276',L] 4 NumUnopenedOuters['276',Pack2] demand_fit['276',XL] 5 NumUnopenedOuters['280',Pack2] TotalCost 1.5 demand_fit['280',S] 1 NumUnopenedOuters['280',Pack2] demand_fit['280',M] 2 demand_fit['280',L] 4 NumUnopenedOuters['280',Pack2] demand_fit['280',XL] 5 NumUnopenedOuters['282',Pack2] TotalCost 1.5 demand_fit['282',S] 1 NumUnopenedOuters['282',Pack2] demand_fit['282',M] 2 demand_fit['282',L] 4 NumUnopenedOuters['282',Pack2] demand_fit['282',XL] 5 NumUnopenedOuters['283',Pack2] TotalCost 1.5 demand_fit['283',S] 1 NumUnopenedOuters['283',Pack2] demand_fit['283',M] 2 demand_fit['283',L] 4 NumUnopenedOuters['283',Pack2] demand_fit['283',XL] 5 NumUnopenedOuters['293',Pack2] TotalCost 1.5 demand_fit['293',S] 1 NumUnopenedOuters['293',Pack2] demand_fit['293',M] 2 demand_fit['293',L] 4 NumUnopenedOuters['293',Pack2] demand_fit['293',XL] 5 NumUnopenedOuters['298',Pack2] TotalCost 1.5 demand_fit['298',S] 1 NumUnopenedOuters['298',Pack2] demand_fit['298',M] 2 demand_fit['298',L] 4 NumUnopenedOuters['298',Pack2] demand_fit['298',XL] 5 NumUnopenedOuters['299',Pack2] TotalCost 1.5 demand_fit['299',S] 1 NumUnopenedOuters['299',Pack2] demand_fit['299',M] 2 demand_fit['299',L] 4 NumUnopenedOuters['299',Pack2] demand_fit['299',XL] 5 NumUnopenedOuters['301',Pack2] TotalCost 1.5 demand_fit['301',S] 1 NumUnopenedOuters['301',Pack2] demand_fit['301',M] 2 demand_fit['301',L] 4 NumUnopenedOuters['301',Pack2] demand_fit['301',XL] 5 NumUnopenedOuters['309',Pack2] TotalCost 1.5 demand_fit['309',S] 1 NumUnopenedOuters['309',Pack2] demand_fit['309',M] 2 demand_fit['309',L] 4 NumUnopenedOuters['309',Pack2] demand_fit['309',XL] 5 NumUnopenedOuters['310',Pack2] TotalCost 1.5 demand_fit['310',S] 1 NumUnopenedOuters['310',Pack2] demand_fit['310',M] 2 demand_fit['310',L] 4 NumUnopenedOuters['310',Pack2] demand_fit['310',XL] 5 NumUnopenedOuters['375',Pack2] TotalCost 1.5 demand_fit['375',S] 1 NumUnopenedOuters['375',Pack2] demand_fit['375',M] 2 demand_fit['375',L] 4 NumUnopenedOuters['375',Pack2] demand_fit['375',XL] 5 NumUnopenedOuters['378',Pack2] TotalCost 1.5 demand_fit['378',S] 1 NumUnopenedOuters['378',Pack2] demand_fit['378',M] 2 demand_fit['378',L] 4 NumUnopenedOuters['378',Pack2] demand_fit['378',XL] 5 NumUnopenedOuters['379',Pack2] TotalCost 1.5 demand_fit['379',S] 1 NumUnopenedOuters['379',Pack2] demand_fit['379',M] 2 demand_fit['379',L] 4 NumUnopenedOuters['379',Pack2] demand_fit['379',XL] 5 NumUnopenedOuters['381',Pack2] TotalCost 1.5 demand_fit['381',S] 1 NumUnopenedOuters['381',Pack2] demand_fit['381',M] 2 demand_fit['381',L] 4 NumUnopenedOuters['381',Pack2] demand_fit['381',XL] 5 NumUnopenedOuters['383',Pack2] TotalCost 1.5 demand_fit['383',S] 1 NumUnopenedOuters['383',Pack2] demand_fit['383',M] 2 demand_fit['383',L] 4 NumUnopenedOuters['383',Pack2] demand_fit['383',XL] 5 NumUnopenedOuters['384',Pack2] TotalCost 1.5 demand_fit['384',S] 1 NumUnopenedOuters['384',Pack2] demand_fit['384',M] 2 demand_fit['384',L] 4 NumUnopenedOuters['384',Pack2] demand_fit['384',XL] 5 NumUnopenedOuters['386',Pack2] TotalCost 1.5 demand_fit['386',S] 1 NumUnopenedOuters['386',Pack2] demand_fit['386',M] 2 demand_fit['386',L] 4 NumUnopenedOuters['386',Pack2] demand_fit['386',XL] 5 NumUnopenedOuters['388',Pack2] TotalCost 1.5 demand_fit['388',S] 1 NumUnopenedOuters['388',Pack2] demand_fit['388',M] 2 demand_fit['388',L] 4 NumUnopenedOuters['388',Pack2] demand_fit['388',XL] 5 NumUnopenedOuters['389',Pack2] TotalCost 1.5 demand_fit['389',S] 1 NumUnopenedOuters['389',Pack2] demand_fit['389',M] 2 demand_fit['389',L] 4 NumUnopenedOuters['389',Pack2] demand_fit['389',XL] 5 NumUnopenedOuters['390',Pack2] TotalCost 1.5 demand_fit['390',S] 1 NumUnopenedOuters['390',Pack2] demand_fit['390',M] 2 demand_fit['390',L] 4 NumUnopenedOuters['390',Pack2] demand_fit['390',XL] 5 NumUnopenedOuters['397',Pack2] TotalCost 1.5 demand_fit['397',S] 1 NumUnopenedOuters['397',Pack2] demand_fit['397',M] 2 demand_fit['397',L] 4 NumUnopenedOuters['397',Pack2] demand_fit['397',XL] 5 NumUnopenedOuters['398',Pack2] TotalCost 1.5 demand_fit['398',S] 1 NumUnopenedOuters['398',Pack2] demand_fit['398',M] 2 demand_fit['398',L] 4 NumUnopenedOuters['398',Pack2] demand_fit['398',XL] 5 NumUnopenedOuters['403',Pack2] TotalCost 1.5 demand_fit['403',S] 1 NumUnopenedOuters['403',Pack2] demand_fit['403',M] 2 demand_fit['403',L] 4 NumUnopenedOuters['403',Pack2] demand_fit['403',XL] 5 NumUnopenedOuters['418',Pack2] TotalCost 1.5 demand_fit['418',S] 1 NumUnopenedOuters['418',Pack2] demand_fit['418',M] 2 demand_fit['418',L] 4 NumUnopenedOuters['418',Pack2] demand_fit['418',XL] 5 NumUnopenedOuters['430',Pack2] TotalCost 1.5 demand_fit['430',S] 1 NumUnopenedOuters['430',Pack2] demand_fit['430',M] 2 demand_fit['430',L] 4 NumUnopenedOuters['430',Pack2] demand_fit['430',XL] 5 NumUnopenedOuters['431',Pack2] TotalCost 1.5 demand_fit['431',S] 1 NumUnopenedOuters['431',Pack2] demand_fit['431',M] 2 demand_fit['431',L] 4 NumUnopenedOuters['431',Pack2] demand_fit['431',XL] 5 NumUnopenedOuters['479',Pack2] TotalCost 1.5 demand_fit['479',S] 1 NumUnopenedOuters['479',Pack2] demand_fit['479',M] 2 demand_fit['479',L] 4 NumUnopenedOuters['479',Pack2] demand_fit['479',XL] 5 NumUnopenedOuters['502',Pack2] TotalCost 1.5 demand_fit['502',S] 1 NumUnopenedOuters['502',Pack2] demand_fit['502',M] 2 demand_fit['502',L] 4 NumUnopenedOuters['502',Pack2] demand_fit['502',XL] 5 NumUnopenedOuters['504',Pack2] TotalCost 1.5 demand_fit['504',S] 1 NumUnopenedOuters['504',Pack2] demand_fit['504',M] 2 demand_fit['504',L] 4 NumUnopenedOuters['504',Pack2] demand_fit['504',XL] 5 NumUnopenedOuters['512',Pack2] TotalCost 1.5 demand_fit['512',S] 1 NumUnopenedOuters['512',Pack2] demand_fit['512',M] 2 demand_fit['512',L] 4 NumUnopenedOuters['512',Pack2] demand_fit['512',XL] 5 NumUnopenedOuters['528',Pack2] TotalCost 1.5 demand_fit['528',S] 1 NumUnopenedOuters['528',Pack2] demand_fit['528',M] 2 demand_fit['528',L] 4 NumUnopenedOuters['528',Pack2] demand_fit['528',XL] 5 NumUnopenedOuters['533',Pack2] TotalCost 1.5 demand_fit['533',S] 1 NumUnopenedOuters['533',Pack2] demand_fit['533',M] 2 demand_fit['533',L] 4 NumUnopenedOuters['533',Pack2] demand_fit['533',XL] 5 NumUnopenedOuters['538',Pack2] TotalCost 1.5 demand_fit['538',S] 1 NumUnopenedOuters['538',Pack2] demand_fit['538',M] 2 demand_fit['538',L] 4 NumUnopenedOuters['538',Pack2] demand_fit['538',XL] 5 NumUnopenedOuters['552',Pack2] TotalCost 1.5 demand_fit['552',S] 1 NumUnopenedOuters['552',Pack2] demand_fit['552',M] 2 demand_fit['552',L] 4 NumUnopenedOuters['552',Pack2] demand_fit['552',XL] 5 NumUnopenedOuters['621',Pack2] TotalCost 1.5 demand_fit['621',S] 1 NumUnopenedOuters['621',Pack2] demand_fit['621',M] 2 demand_fit['621',L] 4 NumUnopenedOuters['621',Pack2] demand_fit['621',XL] 5 NumUnopenedOuters['639',Pack2] TotalCost 1.5 demand_fit['639',S] 1 NumUnopenedOuters['639',Pack2] demand_fit['639',M] 2 demand_fit['639',L] 4 NumUnopenedOuters['639',Pack2] demand_fit['639',XL] 5 NumUnopenedOuters['712',Pack2] TotalCost 1.5 demand_fit['712',S] 1 NumUnopenedOuters['712',Pack2] demand_fit['712',M] 2 demand_fit['712',L] 4 NumUnopenedOuters['712',Pack2] demand_fit['712',XL] 5 NumUnopenedOuters['781',Pack2] TotalCost 1.5 demand_fit['781',S] 1 NumUnopenedOuters['781',Pack2] demand_fit['781',M] 2 demand_fit['781',L] 4 NumUnopenedOuters['781',Pack2] demand_fit['781',XL] 5 NumUnopenedOuters['71',Pack3] TotalCost 0.5 demand_fit['71',S] 2 NumUnopenedOuters['71',Pack3] demand_fit['71',M] 4 demand_fit['71',L] 3 NumUnopenedOuters['71',Pack3] demand_fit['71',XL] 3 NumUnopenedOuters['73',Pack3] TotalCost 0.5 demand_fit['73',S] 2 NumUnopenedOuters['73',Pack3] demand_fit['73',M] 4 demand_fit['73',L] 3 NumUnopenedOuters['73',Pack3] demand_fit['73',XL] 3 NumUnopenedOuters['86',Pack3] TotalCost 0.5 demand_fit['86',S] 2 NumUnopenedOuters['86',Pack3] demand_fit['86',M] 4 demand_fit['86',L] 3 NumUnopenedOuters['86',Pack3] demand_fit['86',XL] 3 NumUnopenedOuters['99',Pack3] TotalCost 0.5 demand_fit['99',S] 2 NumUnopenedOuters['99',Pack3] demand_fit['99',M] 4 demand_fit['99',L] 3 NumUnopenedOuters['99',Pack3] demand_fit['99',XL] 3 NumUnopenedOuters['103',Pack3] TotalCost 0.5 demand_fit['103',S] 2 NumUnopenedOuters['103',Pack3] demand_fit['103',M] 4 demand_fit['103',L] 3 NumUnopenedOuters['103',Pack3] demand_fit['103',XL] 3 NumUnopenedOuters['126',Pack3] TotalCost 0.5 demand_fit['126',S] 2 NumUnopenedOuters['126',Pack3] demand_fit['126',M] 4 demand_fit['126',L] 3 NumUnopenedOuters['126',Pack3] demand_fit['126',XL] 3 NumUnopenedOuters['221',Pack3] TotalCost 0.5 demand_fit['221',S] 2 NumUnopenedOuters['221',Pack3] demand_fit['221',M] 4 demand_fit['221',L] 3 NumUnopenedOuters['221',Pack3] demand_fit['221',XL] 3 NumUnopenedOuters['225',Pack3] TotalCost 0.5 demand_fit['225',S] 2 NumUnopenedOuters['225',Pack3] demand_fit['225',M] 4 demand_fit['225',L] 3 NumUnopenedOuters['225',Pack3] demand_fit['225',XL] 3 NumUnopenedOuters['251',Pack3] TotalCost 0.5 demand_fit['251',S] 2 NumUnopenedOuters['251',Pack3] demand_fit['251',M] 4 demand_fit['251',L] 3 NumUnopenedOuters['251',Pack3] demand_fit['251',XL] 3 NumUnopenedOuters['270',Pack3] TotalCost 0.5 demand_fit['270',S] 2 NumUnopenedOuters['270',Pack3] demand_fit['270',M] 4 demand_fit['270',L] 3 NumUnopenedOuters['270',Pack3] demand_fit['270',XL] 3 NumUnopenedOuters['272',Pack3] TotalCost 0.5 demand_fit['272',S] 2 NumUnopenedOuters['272',Pack3] demand_fit['272',M] 4 demand_fit['272',L] 3 NumUnopenedOuters['272',Pack3] demand_fit['272',XL] 3 NumUnopenedOuters['275',Pack3] TotalCost 0.5 demand_fit['275',S] 2 NumUnopenedOuters['275',Pack3] demand_fit['275',M] 4 demand_fit['275',L] 3 NumUnopenedOuters['275',Pack3] demand_fit['275',XL] 3 NumUnopenedOuters['276',Pack3] TotalCost 0.5 demand_fit['276',S] 2 NumUnopenedOuters['276',Pack3] demand_fit['276',M] 4 demand_fit['276',L] 3 NumUnopenedOuters['276',Pack3] demand_fit['276',XL] 3 NumUnopenedOuters['280',Pack3] TotalCost 0.5 demand_fit['280',S] 2 NumUnopenedOuters['280',Pack3] demand_fit['280',M] 4 demand_fit['280',L] 3 NumUnopenedOuters['280',Pack3] demand_fit['280',XL] 3 NumUnopenedOuters['282',Pack3] TotalCost 0.5 demand_fit['282',S] 2 NumUnopenedOuters['282',Pack3] demand_fit['282',M] 4 demand_fit['282',L] 3 NumUnopenedOuters['282',Pack3] demand_fit['282',XL] 3 NumUnopenedOuters['283',Pack3] TotalCost 0.5 demand_fit['283',S] 2 NumUnopenedOuters['283',Pack3] demand_fit['283',M] 4 demand_fit['283',L] 3 NumUnopenedOuters['283',Pack3] demand_fit['283',XL] 3 NumUnopenedOuters['293',Pack3] TotalCost 0.5 demand_fit['293',S] 2 NumUnopenedOuters['293',Pack3] demand_fit['293',M] 4 demand_fit['293',L] 3 NumUnopenedOuters['293',Pack3] demand_fit['293',XL] 3 NumUnopenedOuters['298',Pack3] TotalCost 0.5 demand_fit['298',S] 2 NumUnopenedOuters['298',Pack3] demand_fit['298',M] 4 demand_fit['298',L] 3 NumUnopenedOuters['298',Pack3] demand_fit['298',XL] 3 NumUnopenedOuters['299',Pack3] TotalCost 0.5 demand_fit['299',S] 2 NumUnopenedOuters['299',Pack3] demand_fit['299',M] 4 demand_fit['299',L] 3 NumUnopenedOuters['299',Pack3] demand_fit['299',XL] 3 NumUnopenedOuters['301',Pack3] TotalCost 0.5 demand_fit['301',S] 2 NumUnopenedOuters['301',Pack3] demand_fit['301',M] 4 demand_fit['301',L] 3 NumUnopenedOuters['301',Pack3] demand_fit['301',XL] 3 NumUnopenedOuters['309',Pack3] TotalCost 0.5 demand_fit['309',S] 2 NumUnopenedOuters['309',Pack3] demand_fit['309',M] 4 demand_fit['309',L] 3 NumUnopenedOuters['309',Pack3] demand_fit['309',XL] 3 NumUnopenedOuters['310',Pack3] TotalCost 0.5 demand_fit['310',S] 2 NumUnopenedOuters['310',Pack3] demand_fit['310',M] 4 demand_fit['310',L] 3 NumUnopenedOuters['310',Pack3] demand_fit['310',XL] 3 NumUnopenedOuters['375',Pack3] TotalCost 0.5 demand_fit['375',S] 2 NumUnopenedOuters['375',Pack3] demand_fit['375',M] 4 demand_fit['375',L] 3 NumUnopenedOuters['375',Pack3] demand_fit['375',XL] 3 NumUnopenedOuters['378',Pack3] TotalCost 0.5 demand_fit['378',S] 2 NumUnopenedOuters['378',Pack3] demand_fit['378',M] 4 demand_fit['378',L] 3 NumUnopenedOuters['378',Pack3] demand_fit['378',XL] 3 NumUnopenedOuters['379',Pack3] TotalCost 0.5 demand_fit['379',S] 2 NumUnopenedOuters['379',Pack3] demand_fit['379',M] 4 demand_fit['379',L] 3 NumUnopenedOuters['379',Pack3] demand_fit['379',XL] 3 NumUnopenedOuters['381',Pack3] TotalCost 0.5 demand_fit['381',S] 2 NumUnopenedOuters['381',Pack3] demand_fit['381',M] 4 demand_fit['381',L] 3 NumUnopenedOuters['381',Pack3] demand_fit['381',XL] 3 NumUnopenedOuters['383',Pack3] TotalCost 0.5 demand_fit['383',S] 2 NumUnopenedOuters['383',Pack3] demand_fit['383',M] 4 demand_fit['383',L] 3 NumUnopenedOuters['383',Pack3] demand_fit['383',XL] 3 NumUnopenedOuters['384',Pack3] TotalCost 0.5 demand_fit['384',S] 2 NumUnopenedOuters['384',Pack3] demand_fit['384',M] 4 demand_fit['384',L] 3 NumUnopenedOuters['384',Pack3] demand_fit['384',XL] 3 NumUnopenedOuters['386',Pack3] TotalCost 0.5 demand_fit['386',S] 2 NumUnopenedOuters['386',Pack3] demand_fit['386',M] 4 demand_fit['386',L] 3 NumUnopenedOuters['386',Pack3] demand_fit['386',XL] 3 NumUnopenedOuters['388',Pack3] TotalCost 0.5 demand_fit['388',S] 2 NumUnopenedOuters['388',Pack3] demand_fit['388',M] 4 demand_fit['388',L] 3 NumUnopenedOuters['388',Pack3] demand_fit['388',XL] 3 NumUnopenedOuters['389',Pack3] TotalCost 0.5 demand_fit['389',S] 2 NumUnopenedOuters['389',Pack3] demand_fit['389',M] 4 demand_fit['389',L] 3 NumUnopenedOuters['389',Pack3] demand_fit['389',XL] 3 NumUnopenedOuters['390',Pack3] TotalCost 0.5 demand_fit['390',S] 2 NumUnopenedOuters['390',Pack3] demand_fit['390',M] 4 demand_fit['390',L] 3 NumUnopenedOuters['390',Pack3] demand_fit['390',XL] 3 NumUnopenedOuters['397',Pack3] TotalCost 0.5 demand_fit['397',S] 2 NumUnopenedOuters['397',Pack3] demand_fit['397',M] 4 demand_fit['397',L] 3 NumUnopenedOuters['397',Pack3] demand_fit['397',XL] 3 NumUnopenedOuters['398',Pack3] TotalCost 0.5 demand_fit['398',S] 2 NumUnopenedOuters['398',Pack3] demand_fit['398',M] 4 demand_fit['398',L] 3 NumUnopenedOuters['398',Pack3] demand_fit['398',XL] 3 NumUnopenedOuters['403',Pack3] TotalCost 0.5 demand_fit['403',S] 2 NumUnopenedOuters['403',Pack3] demand_fit['403',M] 4 demand_fit['403',L] 3 NumUnopenedOuters['403',Pack3] demand_fit['403',XL] 3 NumUnopenedOuters['418',Pack3] TotalCost 0.5 demand_fit['418',S] 2 NumUnopenedOuters['418',Pack3] demand_fit['418',M] 4 demand_fit['418',L] 3 NumUnopenedOuters['418',Pack3] demand_fit['418',XL] 3 NumUnopenedOuters['430',Pack3] TotalCost 0.5 demand_fit['430',S] 2 NumUnopenedOuters['430',Pack3] demand_fit['430',M] 4 demand_fit['430',L] 3 NumUnopenedOuters['430',Pack3] demand_fit['430',XL] 3 NumUnopenedOuters['431',Pack3] TotalCost 0.5 demand_fit['431',S] 2 NumUnopenedOuters['431',Pack3] demand_fit['431',M] 4 demand_fit['431',L] 3 NumUnopenedOuters['431',Pack3] demand_fit['431',XL] 3 NumUnopenedOuters['479',Pack3] TotalCost 0.5 demand_fit['479',S] 2 NumUnopenedOuters['479',Pack3] demand_fit['479',M] 4 demand_fit['479',L] 3 NumUnopenedOuters['479',Pack3] demand_fit['479',XL] 3 NumUnopenedOuters['502',Pack3] TotalCost 0.5 demand_fit['502',S] 2 NumUnopenedOuters['502',Pack3] demand_fit['502',M] 4 demand_fit['502',L] 3 NumUnopenedOuters['502',Pack3] demand_fit['502',XL] 3 NumUnopenedOuters['504',Pack3] TotalCost 0.5 demand_fit['504',S] 2 NumUnopenedOuters['504',Pack3] demand_fit['504',M] 4 demand_fit['504',L] 3 NumUnopenedOuters['504',Pack3] demand_fit['504',XL] 3 NumUnopenedOuters['512',Pack3] TotalCost 0.5 demand_fit['512',S] 2 NumUnopenedOuters['512',Pack3] demand_fit['512',M] 4 demand_fit['512',L] 3 NumUnopenedOuters['512',Pack3] demand_fit['512',XL] 3 NumUnopenedOuters['528',Pack3] TotalCost 0.5 demand_fit['528',S] 2 NumUnopenedOuters['528',Pack3] demand_fit['528',M] 4 demand_fit['528',L] 3 NumUnopenedOuters['528',Pack3] demand_fit['528',XL] 3 NumUnopenedOuters['533',Pack3] TotalCost 0.5 demand_fit['533',S] 2 NumUnopenedOuters['533',Pack3] demand_fit['533',M] 4 demand_fit['533',L] 3 NumUnopenedOuters['533',Pack3] demand_fit['533',XL] 3 NumUnopenedOuters['538',Pack3] TotalCost 0.5 demand_fit['538',S] 2 NumUnopenedOuters['538',Pack3] demand_fit['538',M] 4 demand_fit['538',L] 3 NumUnopenedOuters['538',Pack3] demand_fit['538',XL] 3 NumUnopenedOuters['552',Pack3] TotalCost 0.5 demand_fit['552',S] 2 NumUnopenedOuters['552',Pack3] demand_fit['552',M] 4 demand_fit['552',L] 3 NumUnopenedOuters['552',Pack3] demand_fit['552',XL] 3 NumUnopenedOuters['621',Pack3] TotalCost 0.5 demand_fit['621',S] 2 NumUnopenedOuters['621',Pack3] demand_fit['621',M] 4 demand_fit['621',L] 3 NumUnopenedOuters['621',Pack3] demand_fit['621',XL] 3 NumUnopenedOuters['639',Pack3] TotalCost 0.5 demand_fit['639',S] 2 NumUnopenedOuters['639',Pack3] demand_fit['639',M] 4 demand_fit['639',L] 3 NumUnopenedOuters['639',Pack3] demand_fit['639',XL] 3 NumUnopenedOuters['712',Pack3] TotalCost 0.5 demand_fit['712',S] 2 NumUnopenedOuters['712',Pack3] demand_fit['712',M] 4 demand_fit['712',L] 3 NumUnopenedOuters['712',Pack3] demand_fit['712',XL] 3 NumUnopenedOuters['781',Pack3] TotalCost 0.5 demand_fit['781',S] 2 NumUnopenedOuters['781',Pack3] demand_fit['781',M] 4 demand_fit['781',L] 3 NumUnopenedOuters['781',Pack3] demand_fit['781',XL] 3 NumOpenedOuters[Pack1] TotalCost 1 material_balance[Pack1] -1 NumOpenedOuters[Pack2] TotalCost 1 material_balance[Pack2] -1 NumOpenedOuters[Pack3] TotalCost 1 material_balance[Pack3] -1 .MRK0001 'MARKER' 'INTEND' NumOver['71',S] TotalCost 1 demand_fit['71',S] -1 NumOver['73',S] TotalCost 1 demand_fit['73',S] -1 NumOver['86',S] TotalCost 1 demand_fit['86',S] -1 NumOver['99',S] TotalCost 1 demand_fit['99',S] -1 NumOver['103',S] TotalCost 1 demand_fit['103',S] -1 NumOver['126',S] TotalCost 1 demand_fit['126',S] -1 NumOver['221',S] TotalCost 1 demand_fit['221',S] -1 NumOver['225',S] TotalCost 1 demand_fit['225',S] -1 NumOver['251',S] TotalCost 1 demand_fit['251',S] -1 NumOver['270',S] TotalCost 1 demand_fit['270',S] -1 NumOver['272',S] TotalCost 1 demand_fit['272',S] -1 NumOver['275',S] TotalCost 1 demand_fit['275',S] -1 NumOver['276',S] TotalCost 1 demand_fit['276',S] -1 NumOver['280',S] TotalCost 1 demand_fit['280',S] -1 NumOver['282',S] TotalCost 1 demand_fit['282',S] -1 NumOver['283',S] TotalCost 1 demand_fit['283',S] -1 NumOver['293',S] TotalCost 1 demand_fit['293',S] -1 NumOver['298',S] TotalCost 1 demand_fit['298',S] -1 NumOver['299',S] TotalCost 1 demand_fit['299',S] -1 NumOver['301',S] TotalCost 1 demand_fit['301',S] -1 NumOver['309',S] TotalCost 1 demand_fit['309',S] -1 NumOver['310',S] TotalCost 1 demand_fit['310',S] -1 NumOver['375',S] TotalCost 1 demand_fit['375',S] -1 NumOver['378',S] TotalCost 1 demand_fit['378',S] -1 NumOver['379',S] TotalCost 1 demand_fit['379',S] -1 NumOver['381',S] TotalCost 1 demand_fit['381',S] -1 NumOver['383',S] TotalCost 1 demand_fit['383',S] -1 NumOver['384',S] TotalCost 1 demand_fit['384',S] -1 NumOver['386',S] TotalCost 1 demand_fit['386',S] -1 NumOver['388',S] TotalCost 1 demand_fit['388',S] -1 NumOver['389',S] TotalCost 1 demand_fit['389',S] -1 NumOver['390',S] TotalCost 1 demand_fit['390',S] -1 NumOver['397',S] TotalCost 1 demand_fit['397',S] -1 NumOver['398',S] TotalCost 1 demand_fit['398',S] -1 NumOver['403',S] TotalCost 1 demand_fit['403',S] -1 NumOver['418',S] TotalCost 1 demand_fit['418',S] -1 NumOver['430',S] TotalCost 1 demand_fit['430',S] -1 NumOver['431',S] TotalCost 1 demand_fit['431',S] -1 NumOver['479',S] TotalCost 1 demand_fit['479',S] -1 NumOver['502',S] TotalCost 1 demand_fit['502',S] -1 NumOver['504',S] TotalCost 1 demand_fit['504',S] -1 NumOver['512',S] TotalCost 1 demand_fit['512',S] -1 NumOver['528',S] TotalCost 1 demand_fit['528',S] -1 NumOver['533',S] TotalCost 1 demand_fit['533',S] -1 NumOver['538',S] TotalCost 1 demand_fit['538',S] -1 NumOver['552',S] TotalCost 1 demand_fit['552',S] -1 NumOver['621',S] TotalCost 1 demand_fit['621',S] -1 NumOver['639',S] TotalCost 1 demand_fit['639',S] -1 NumOver['712',S] TotalCost 1 demand_fit['712',S] -1 NumOver['781',S] TotalCost 1 demand_fit['781',S] -1 NumOver['71',M] TotalCost 1 demand_fit['71',M] -1 NumOver['73',M] TotalCost 1 demand_fit['73',M] -1 NumOver['86',M] TotalCost 1 demand_fit['86',M] -1 NumOver['99',M] TotalCost 1 demand_fit['99',M] -1 NumOver['103',M] TotalCost 1 demand_fit['103',M] -1 NumOver['126',M] TotalCost 1 demand_fit['126',M] -1 NumOver['221',M] TotalCost 1 demand_fit['221',M] -1 NumOver['225',M] TotalCost 1 demand_fit['225',M] -1 NumOver['251',M] TotalCost 1 demand_fit['251',M] -1 NumOver['270',M] TotalCost 1 demand_fit['270',M] -1 NumOver['272',M] TotalCost 1 demand_fit['272',M] -1 NumOver['275',M] TotalCost 1 demand_fit['275',M] -1 NumOver['276',M] TotalCost 1 demand_fit['276',M] -1 NumOver['280',M] TotalCost 1 demand_fit['280',M] -1 NumOver['282',M] TotalCost 1 demand_fit['282',M] -1 NumOver['283',M] TotalCost 1 demand_fit['283',M] -1 NumOver['293',M] TotalCost 1 demand_fit['293',M] -1 NumOver['298',M] TotalCost 1 demand_fit['298',M] -1 NumOver['299',M] TotalCost 1 demand_fit['299',M] -1 NumOver['301',M] TotalCost 1 demand_fit['301',M] -1 NumOver['309',M] TotalCost 1 demand_fit['309',M] -1 NumOver['310',M] TotalCost 1 demand_fit['310',M] -1 NumOver['375',M] TotalCost 1 demand_fit['375',M] -1 NumOver['378',M] TotalCost 1 demand_fit['378',M] -1 NumOver['379',M] TotalCost 1 demand_fit['379',M] -1 NumOver['381',M] TotalCost 1 demand_fit['381',M] -1 NumOver['383',M] TotalCost 1 demand_fit['383',M] -1 NumOver['384',M] TotalCost 1 demand_fit['384',M] -1 NumOver['386',M] TotalCost 1 demand_fit['386',M] -1 NumOver['388',M] TotalCost 1 demand_fit['388',M] -1 NumOver['389',M] TotalCost 1 demand_fit['389',M] -1 NumOver['390',M] TotalCost 1 demand_fit['390',M] -1 NumOver['397',M] TotalCost 1 demand_fit['397',M] -1 NumOver['398',M] TotalCost 1 demand_fit['398',M] -1 NumOver['403',M] TotalCost 1 demand_fit['403',M] -1 NumOver['418',M] TotalCost 1 demand_fit['418',M] -1 NumOver['430',M] TotalCost 1 demand_fit['430',M] -1 NumOver['431',M] TotalCost 1 demand_fit['431',M] -1 NumOver['479',M] TotalCost 1 demand_fit['479',M] -1 NumOver['502',M] TotalCost 1 demand_fit['502',M] -1 NumOver['504',M] TotalCost 1 demand_fit['504',M] -1 NumOver['512',M] TotalCost 1 demand_fit['512',M] -1 NumOver['528',M] TotalCost 1 demand_fit['528',M] -1 NumOver['533',M] TotalCost 1 demand_fit['533',M] -1 NumOver['538',M] TotalCost 1 demand_fit['538',M] -1 NumOver['552',M] TotalCost 1 demand_fit['552',M] -1 NumOver['621',M] TotalCost 1 demand_fit['621',M] -1 NumOver['639',M] TotalCost 1 demand_fit['639',M] -1 NumOver['712',M] TotalCost 1 demand_fit['712',M] -1 NumOver['781',M] TotalCost 1 demand_fit['781',M] -1 NumOver['71',L] TotalCost 1 demand_fit['71',L] -1 NumOver['73',L] TotalCost 1 demand_fit['73',L] -1 NumOver['86',L] TotalCost 1 demand_fit['86',L] -1 NumOver['99',L] TotalCost 1 demand_fit['99',L] -1 NumOver['103',L] TotalCost 1 demand_fit['103',L] -1 NumOver['126',L] TotalCost 1 demand_fit['126',L] -1 NumOver['221',L] TotalCost 1 demand_fit['221',L] -1 NumOver['225',L] TotalCost 1 demand_fit['225',L] -1 NumOver['251',L] TotalCost 1 demand_fit['251',L] -1 NumOver['270',L] TotalCost 1 demand_fit['270',L] -1 NumOver['272',L] TotalCost 1 demand_fit['272',L] -1 NumOver['275',L] TotalCost 1 demand_fit['275',L] -1 NumOver['276',L] TotalCost 1 demand_fit['276',L] -1 NumOver['280',L] TotalCost 1 demand_fit['280',L] -1 NumOver['282',L] TotalCost 1 demand_fit['282',L] -1 NumOver['283',L] TotalCost 1 demand_fit['283',L] -1 NumOver['293',L] TotalCost 1 demand_fit['293',L] -1 NumOver['298',L] TotalCost 1 demand_fit['298',L] -1 NumOver['299',L] TotalCost 1 demand_fit['299',L] -1 NumOver['301',L] TotalCost 1 demand_fit['301',L] -1 NumOver['309',L] TotalCost 1 demand_fit['309',L] -1 NumOver['310',L] TotalCost 1 demand_fit['310',L] -1 NumOver['375',L] TotalCost 1 demand_fit['375',L] -1 NumOver['378',L] TotalCost 1 demand_fit['378',L] -1 NumOver['379',L] TotalCost 1 demand_fit['379',L] -1 NumOver['381',L] TotalCost 1 demand_fit['381',L] -1 NumOver['383',L] TotalCost 1 demand_fit['383',L] -1 NumOver['384',L] TotalCost 1 demand_fit['384',L] -1 NumOver['386',L] TotalCost 1 demand_fit['386',L] -1 NumOver['388',L] TotalCost 1 demand_fit['388',L] -1 NumOver['389',L] TotalCost 1 demand_fit['389',L] -1 NumOver['390',L] TotalCost 1 demand_fit['390',L] -1 NumOver['397',L] TotalCost 1 demand_fit['397',L] -1 NumOver['398',L] TotalCost 1 demand_fit['398',L] -1 NumOver['403',L] TotalCost 1 demand_fit['403',L] -1 NumOver['418',L] TotalCost 1 demand_fit['418',L] -1 NumOver['430',L] TotalCost 1 demand_fit['430',L] -1 NumOver['431',L] TotalCost 1 demand_fit['431',L] -1 NumOver['479',L] TotalCost 1 demand_fit['479',L] -1 NumOver['502',L] TotalCost 1 demand_fit['502',L] -1 NumOver['504',L] TotalCost 1 demand_fit['504',L] -1 NumOver['512',L] TotalCost 1 demand_fit['512',L] -1 NumOver['528',L] TotalCost 1 demand_fit['528',L] -1 NumOver['533',L] TotalCost 1 demand_fit['533',L] -1 NumOver['538',L] TotalCost 1 demand_fit['538',L] -1 NumOver['552',L] TotalCost 1 demand_fit['552',L] -1 NumOver['621',L] TotalCost 1 demand_fit['621',L] -1 NumOver['639',L] TotalCost 1 demand_fit['639',L] -1 NumOver['712',L] TotalCost 1 demand_fit['712',L] -1 NumOver['781',L] TotalCost 1 demand_fit['781',L] -1 NumOver['71',XL] TotalCost 1 demand_fit['71',XL] -1 NumOver['73',XL] TotalCost 1 demand_fit['73',XL] -1 NumOver['86',XL] TotalCost 1 demand_fit['86',XL] -1 NumOver['99',XL] TotalCost 1 demand_fit['99',XL] -1 NumOver['103',XL] TotalCost 1 demand_fit['103',XL] -1 NumOver['126',XL] TotalCost 1 demand_fit['126',XL] -1 NumOver['221',XL] TotalCost 1 demand_fit['221',XL] -1 NumOver['225',XL] TotalCost 1 demand_fit['225',XL] -1 NumOver['251',XL] TotalCost 1 demand_fit['251',XL] -1 NumOver['270',XL] TotalCost 1 demand_fit['270',XL] -1 NumOver['272',XL] TotalCost 1 demand_fit['272',XL] -1 NumOver['275',XL] TotalCost 1 demand_fit['275',XL] -1 NumOver['276',XL] TotalCost 1 demand_fit['276',XL] -1 NumOver['280',XL] TotalCost 1 demand_fit['280',XL] -1 NumOver['282',XL] TotalCost 1 demand_fit['282',XL] -1 NumOver['283',XL] TotalCost 1 demand_fit['283',XL] -1 NumOver['293',XL] TotalCost 1 demand_fit['293',XL] -1 NumOver['298',XL] TotalCost 1 demand_fit['298',XL] -1 NumOver['299',XL] TotalCost 1 demand_fit['299',XL] -1 NumOver['301',XL] TotalCost 1 demand_fit['301',XL] -1 NumOver['309',XL] TotalCost 1 demand_fit['309',XL] -1 NumOver['310',XL] TotalCost 1 demand_fit['310',XL] -1 NumOver['375',XL] TotalCost 1 demand_fit['375',XL] -1 NumOver['378',XL] TotalCost 1 demand_fit['378',XL] -1 NumOver['379',XL] TotalCost 1 demand_fit['379',XL] -1 NumOver['381',XL] TotalCost 1 demand_fit['381',XL] -1 NumOver['383',XL] TotalCost 1 demand_fit['383',XL] -1 NumOver['384',XL] TotalCost 1 demand_fit['384',XL] -1 NumOver['386',XL] TotalCost 1 demand_fit['386',XL] -1 NumOver['388',XL] TotalCost 1 demand_fit['388',XL] -1 NumOver['389',XL] TotalCost 1 demand_fit['389',XL] -1 NumOver['390',XL] TotalCost 1 demand_fit['390',XL] -1 NumOver['397',XL] TotalCost 1 demand_fit['397',XL] -1 NumOver['398',XL] TotalCost 1 demand_fit['398',XL] -1 NumOver['403',XL] TotalCost 1 demand_fit['403',XL] -1 NumOver['418',XL] TotalCost 1 demand_fit['418',XL] -1 NumOver['430',XL] TotalCost 1 demand_fit['430',XL] -1 NumOver['431',XL] TotalCost 1 demand_fit['431',XL] -1 NumOver['479',XL] TotalCost 1 demand_fit['479',XL] -1 NumOver['502',XL] TotalCost 1 demand_fit['502',XL] -1 NumOver['504',XL] TotalCost 1 demand_fit['504',XL] -1 NumOver['512',XL] TotalCost 1 demand_fit['512',XL] -1 NumOver['528',XL] TotalCost 1 demand_fit['528',XL] -1 NumOver['533',XL] TotalCost 1 demand_fit['533',XL] -1 NumOver['538',XL] TotalCost 1 demand_fit['538',XL] -1 NumOver['552',XL] TotalCost 1 demand_fit['552',XL] -1 NumOver['621',XL] TotalCost 1 demand_fit['621',XL] -1 NumOver['639',XL] TotalCost 1 demand_fit['639',XL] -1 NumOver['712',XL] TotalCost 1 demand_fit['712',XL] -1 NumOver['781',XL] TotalCost 1 demand_fit['781',XL] -1 NumUnder['71',S] TotalCost 6 demand_fit['71',S] 1 NumUnder['73',S] TotalCost 6 demand_fit['73',S] 1 NumUnder['86',S] TotalCost 6 demand_fit['86',S] 1 NumUnder['99',S] TotalCost 6 demand_fit['99',S] 1 NumUnder['103',S] TotalCost 6 demand_fit['103',S] 1 NumUnder['126',S] TotalCost 6 demand_fit['126',S] 1 NumUnder['221',S] TotalCost 6 demand_fit['221',S] 1 NumUnder['225',S] TotalCost 6 demand_fit['225',S] 1 NumUnder['251',S] TotalCost 6 demand_fit['251',S] 1 NumUnder['270',S] TotalCost 6 demand_fit['270',S] 1 NumUnder['272',S] TotalCost 6 demand_fit['272',S] 1 NumUnder['275',S] TotalCost 6 demand_fit['275',S] 1 NumUnder['276',S] TotalCost 6 demand_fit['276',S] 1 NumUnder['280',S] TotalCost 6 demand_fit['280',S] 1 NumUnder['282',S] TotalCost 6 demand_fit['282',S] 1 NumUnder['283',S] TotalCost 6 demand_fit['283',S] 1 NumUnder['293',S] TotalCost 6 demand_fit['293',S] 1 NumUnder['298',S] TotalCost 6 demand_fit['298',S] 1 NumUnder['299',S] TotalCost 6 demand_fit['299',S] 1 NumUnder['301',S] TotalCost 6 demand_fit['301',S] 1 NumUnder['309',S] TotalCost 6 demand_fit['309',S] 1 NumUnder['310',S] TotalCost 6 demand_fit['310',S] 1 NumUnder['375',S] TotalCost 6 demand_fit['375',S] 1 NumUnder['378',S] TotalCost 6 demand_fit['378',S] 1 NumUnder['379',S] TotalCost 6 demand_fit['379',S] 1 NumUnder['381',S] TotalCost 6 demand_fit['381',S] 1 NumUnder['383',S] TotalCost 6 demand_fit['383',S] 1 NumUnder['384',S] TotalCost 6 demand_fit['384',S] 1 NumUnder['386',S] TotalCost 6 demand_fit['386',S] 1 NumUnder['388',S] TotalCost 6 demand_fit['388',S] 1 NumUnder['389',S] TotalCost 6 demand_fit['389',S] 1 NumUnder['390',S] TotalCost 15 demand_fit['390',S] 1 NumUnder['397',S] TotalCost 6 demand_fit['397',S] 1 NumUnder['398',S] TotalCost 6 demand_fit['398',S] 1 NumUnder['403',S] TotalCost 6 demand_fit['403',S] 1 NumUnder['418',S] TotalCost 6 demand_fit['418',S] 1 NumUnder['430',S] TotalCost 6 demand_fit['430',S] 1 NumUnder['431',S] TotalCost 6 demand_fit['431',S] 1 NumUnder['479',S] TotalCost 6 demand_fit['479',S] 1 NumUnder['502',S] TotalCost 6 demand_fit['502',S] 1 NumUnder['504',S] TotalCost 6 demand_fit['504',S] 1 NumUnder['512',S] TotalCost 6 demand_fit['512',S] 1 NumUnder['528',S] TotalCost 6 demand_fit['528',S] 1 NumUnder['533',S] TotalCost 6 demand_fit['533',S] 1 NumUnder['538',S] TotalCost 6 demand_fit['538',S] 1 NumUnder['552',S] TotalCost 6 demand_fit['552',S] 1 NumUnder['621',S] TotalCost 6 demand_fit['621',S] 1 NumUnder['639',S] TotalCost 6 demand_fit['639',S] 1 NumUnder['712',S] TotalCost 6 demand_fit['712',S] 1 NumUnder['781',S] TotalCost 6 demand_fit['781',S] 1 NumUnder['71',M] TotalCost 6 demand_fit['71',M] 1 NumUnder['73',M] TotalCost 6 demand_fit['73',M] 1 NumUnder['86',M] TotalCost 6 demand_fit['86',M] 1 NumUnder['99',M] TotalCost 6 demand_fit['99',M] 1 NumUnder['103',M] TotalCost 6 demand_fit['103',M] 1 NumUnder['126',M] TotalCost 6 demand_fit['126',M] 1 NumUnder['221',M] TotalCost 6 demand_fit['221',M] 1 NumUnder['225',M] TotalCost 6 demand_fit['225',M] 1 NumUnder['251',M] TotalCost 6 demand_fit['251',M] 1 NumUnder['270',M] TotalCost 6 demand_fit['270',M] 1 NumUnder['272',M] TotalCost 6 demand_fit['272',M] 1 NumUnder['275',M] TotalCost 6 demand_fit['275',M] 1 NumUnder['276',M] TotalCost 6 demand_fit['276',M] 1 NumUnder['280',M] TotalCost 6 demand_fit['280',M] 1 NumUnder['282',M] TotalCost 6 demand_fit['282',M] 1 NumUnder['283',M] TotalCost 6 demand_fit['283',M] 1 NumUnder['293',M] TotalCost 6 demand_fit['293',M] 1 NumUnder['298',M] TotalCost 6 demand_fit['298',M] 1 NumUnder['299',M] TotalCost 6 demand_fit['299',M] 1 NumUnder['301',M] TotalCost 6 demand_fit['301',M] 1 NumUnder['309',M] TotalCost 6 demand_fit['309',M] 1 NumUnder['310',M] TotalCost 6 demand_fit['310',M] 1 NumUnder['375',M] TotalCost 6 demand_fit['375',M] 1 NumUnder['378',M] TotalCost 6 demand_fit['378',M] 1 NumUnder['379',M] TotalCost 6 demand_fit['379',M] 1 NumUnder['381',M] TotalCost 6 demand_fit['381',M] 1 NumUnder['383',M] TotalCost 6 demand_fit['383',M] 1 NumUnder['384',M] TotalCost 6 demand_fit['384',M] 1 NumUnder['386',M] TotalCost 6 demand_fit['386',M] 1 NumUnder['388',M] TotalCost 6 demand_fit['388',M] 1 NumUnder['389',M] TotalCost 6 demand_fit['389',M] 1 NumUnder['390',M] TotalCost 15 demand_fit['390',M] 1 NumUnder['397',M] TotalCost 6 demand_fit['397',M] 1 NumUnder['398',M] TotalCost 6 demand_fit['398',M] 1 NumUnder['403',M] TotalCost 6 demand_fit['403',M] 1 NumUnder['418',M] TotalCost 6 demand_fit['418',M] 1 NumUnder['430',M] TotalCost 6 demand_fit['430',M] 1 NumUnder['431',M] TotalCost 6 demand_fit['431',M] 1 NumUnder['479',M] TotalCost 6 demand_fit['479',M] 1 NumUnder['502',M] TotalCost 6 demand_fit['502',M] 1 NumUnder['504',M] TotalCost 6 demand_fit['504',M] 1 NumUnder['512',M] TotalCost 6 demand_fit['512',M] 1 NumUnder['528',M] TotalCost 6 demand_fit['528',M] 1 NumUnder['533',M] TotalCost 6 demand_fit['533',M] 1 NumUnder['538',M] TotalCost 6 demand_fit['538',M] 1 NumUnder['552',M] TotalCost 6 demand_fit['552',M] 1 NumUnder['621',M] TotalCost 6 demand_fit['621',M] 1 NumUnder['639',M] TotalCost 6 demand_fit['639',M] 1 NumUnder['712',M] TotalCost 6 demand_fit['712',M] 1 NumUnder['781',M] TotalCost 6 demand_fit['781',M] 1 NumUnder['71',L] TotalCost 6 demand_fit['71',L] 1 NumUnder['73',L] TotalCost 6 demand_fit['73',L] 1 NumUnder['86',L] TotalCost 6 demand_fit['86',L] 1 NumUnder['99',L] TotalCost 6 demand_fit['99',L] 1 NumUnder['103',L] TotalCost 6 demand_fit['103',L] 1 NumUnder['126',L] TotalCost 6 demand_fit['126',L] 1 NumUnder['221',L] TotalCost 6 demand_fit['221',L] 1 NumUnder['225',L] TotalCost 6 demand_fit['225',L] 1 NumUnder['251',L] TotalCost 6 demand_fit['251',L] 1 NumUnder['270',L] TotalCost 6 demand_fit['270',L] 1 NumUnder['272',L] TotalCost 6 demand_fit['272',L] 1 NumUnder['275',L] TotalCost 6 demand_fit['275',L] 1 NumUnder['276',L] TotalCost 6 demand_fit['276',L] 1 NumUnder['280',L] TotalCost 6 demand_fit['280',L] 1 NumUnder['282',L] TotalCost 6 demand_fit['282',L] 1 NumUnder['283',L] TotalCost 6 demand_fit['283',L] 1 NumUnder['293',L] TotalCost 6 demand_fit['293',L] 1 NumUnder['298',L] TotalCost 6 demand_fit['298',L] 1 NumUnder['299',L] TotalCost 6 demand_fit['299',L] 1 NumUnder['301',L] TotalCost 6 demand_fit['301',L] 1 NumUnder['309',L] TotalCost 6 demand_fit['309',L] 1 NumUnder['310',L] TotalCost 6 demand_fit['310',L] 1 NumUnder['375',L] TotalCost 6 demand_fit['375',L] 1 NumUnder['378',L] TotalCost 6 demand_fit['378',L] 1 NumUnder['379',L] TotalCost 6 demand_fit['379',L] 1 NumUnder['381',L] TotalCost 6 demand_fit['381',L] 1 NumUnder['383',L] TotalCost 6 demand_fit['383',L] 1 NumUnder['384',L] TotalCost 6 demand_fit['384',L] 1 NumUnder['386',L] TotalCost 6 demand_fit['386',L] 1 NumUnder['388',L] TotalCost 6 demand_fit['388',L] 1 NumUnder['389',L] TotalCost 6 demand_fit['389',L] 1 NumUnder['390',L] TotalCost 6 demand_fit['390',L] 1 NumUnder['397',L] TotalCost 6 demand_fit['397',L] 1 NumUnder['398',L] TotalCost 6 demand_fit['398',L] 1 NumUnder['403',L] TotalCost 6 demand_fit['403',L] 1 NumUnder['418',L] TotalCost 6 demand_fit['418',L] 1 NumUnder['430',L] TotalCost 6 demand_fit['430',L] 1 NumUnder['431',L] TotalCost 6 demand_fit['431',L] 1 NumUnder['479',L] TotalCost 6 demand_fit['479',L] 1 NumUnder['502',L] TotalCost 6 demand_fit['502',L] 1 NumUnder['504',L] TotalCost 6 demand_fit['504',L] 1 NumUnder['512',L] TotalCost 6 demand_fit['512',L] 1 NumUnder['528',L] TotalCost 6 demand_fit['528',L] 1 NumUnder['533',L] TotalCost 6 demand_fit['533',L] 1 NumUnder['538',L] TotalCost 6 demand_fit['538',L] 1 NumUnder['552',L] TotalCost 6 demand_fit['552',L] 1 NumUnder['621',L] TotalCost 6 demand_fit['621',L] 1 NumUnder['639',L] TotalCost 6 demand_fit['639',L] 1 NumUnder['712',L] TotalCost 6 demand_fit['712',L] 1 NumUnder['781',L] TotalCost 6 demand_fit['781',L] 1 NumUnder['71',XL] TotalCost 6 demand_fit['71',XL] 1 NumUnder['73',XL] TotalCost 6 demand_fit['73',XL] 1 NumUnder['86',XL] TotalCost 6 demand_fit['86',XL] 1 NumUnder['99',XL] TotalCost 6 demand_fit['99',XL] 1 NumUnder['103',XL] TotalCost 6 demand_fit['103',XL] 1 NumUnder['126',XL] TotalCost 6 demand_fit['126',XL] 1 NumUnder['221',XL] TotalCost 6 demand_fit['221',XL] 1 NumUnder['225',XL] TotalCost 6 demand_fit['225',XL] 1 NumUnder['251',XL] TotalCost 6 demand_fit['251',XL] 1 NumUnder['270',XL] TotalCost 6 demand_fit['270',XL] 1 NumUnder['272',XL] TotalCost 6 demand_fit['272',XL] 1 NumUnder['275',XL] TotalCost 6 demand_fit['275',XL] 1 NumUnder['276',XL] TotalCost 6 demand_fit['276',XL] 1 NumUnder['280',XL] TotalCost 6 demand_fit['280',XL] 1 NumUnder['282',XL] TotalCost 6 demand_fit['282',XL] 1 NumUnder['283',XL] TotalCost 6 demand_fit['283',XL] 1 NumUnder['293',XL] TotalCost 6 demand_fit['293',XL] 1 NumUnder['298',XL] TotalCost 6 demand_fit['298',XL] 1 NumUnder['299',XL] TotalCost 6 demand_fit['299',XL] 1 NumUnder['301',XL] TotalCost 6 demand_fit['301',XL] 1 NumUnder['309',XL] TotalCost 6 demand_fit['309',XL] 1 NumUnder['310',XL] TotalCost 6 demand_fit['310',XL] 1 NumUnder['375',XL] TotalCost 6 demand_fit['375',XL] 1 NumUnder['378',XL] TotalCost 6 demand_fit['378',XL] 1 NumUnder['379',XL] TotalCost 6 demand_fit['379',XL] 1 NumUnder['381',XL] TotalCost 6 demand_fit['381',XL] 1 NumUnder['383',XL] TotalCost 6 demand_fit['383',XL] 1 NumUnder['384',XL] TotalCost 6 demand_fit['384',XL] 1 NumUnder['386',XL] TotalCost 6 demand_fit['386',XL] 1 NumUnder['388',XL] TotalCost 6 demand_fit['388',XL] 1 NumUnder['389',XL] TotalCost 6 demand_fit['389',XL] 1 NumUnder['390',XL] TotalCost 6 demand_fit['390',XL] 1 NumUnder['397',XL] TotalCost 6 demand_fit['397',XL] 1 NumUnder['398',XL] TotalCost 6 demand_fit['398',XL] 1 NumUnder['403',XL] TotalCost 6 demand_fit['403',XL] 1 NumUnder['418',XL] TotalCost 6 demand_fit['418',XL] 1 NumUnder['430',XL] TotalCost 6 demand_fit['430',XL] 1 NumUnder['431',XL] TotalCost 6 demand_fit['431',XL] 1 NumUnder['479',XL] TotalCost 6 demand_fit['479',XL] 1 NumUnder['502',XL] TotalCost 6 demand_fit['502',XL] 1 NumUnder['504',XL] TotalCost 6 demand_fit['504',XL] 1 NumUnder['512',XL] TotalCost 6 demand_fit['512',XL] 1 NumUnder['528',XL] TotalCost 6 demand_fit['528',XL] 1 NumUnder['533',XL] TotalCost 6 demand_fit['533',XL] 1 NumUnder['538',XL] TotalCost 6 demand_fit['538',XL] 1 NumUnder['552',XL] TotalCost 6 demand_fit['552',XL] 1 NumUnder['621',XL] TotalCost 6 demand_fit['621',XL] 1 NumUnder['639',XL] TotalCost 6 demand_fit['639',XL] 1 NumUnder['712',XL] TotalCost 6 demand_fit['712',XL] 1 NumUnder['781',XL] TotalCost 6 demand_fit['781',XL] 1 RHS .RHS. demand_fit['71',S] 3.64592208 .RHS. demand_fit['73',S] 6.645651 .RHS. demand_fit['86',S] 8.46011328 .RHS. demand_fit['99',S] 5.2875708 .RHS. demand_fit['103',S] 6.38036364 .RHS. demand_fit['126',S] 9.3039114 .RHS. demand_fit['221',S] 8.46011328 .RHS. demand_fit['225',S] 2.11502832 .RHS. demand_fit['251',S] 5.2875708 .RHS. demand_fit['270',S] 2.73444156 .RHS. demand_fit['272',S] 5.2875708 .RHS. demand_fit['275',S] 7.40259912 .RHS. demand_fit['276',S] 6.645651 .RHS. demand_fit['280',S] 3.17254248 .RHS. demand_fit['282',S] 9.3039114 .RHS. demand_fit['283',S] 3.64592208 .RHS. demand_fit['293',S] 2.11502832 .RHS. demand_fit['298',S] 4.23005664 .RHS. demand_fit['299',S] 7.40259912 .RHS. demand_fit['301',S] 5.3165208 .RHS. demand_fit['309',S] 6.645651 .RHS. demand_fit['310',S] 4.5574026 .RHS. demand_fit['375',S] 6.645651 .RHS. demand_fit['378',S] 3.9873906 .RHS. demand_fit['379',S] 6.38036364 .RHS. demand_fit['381',S] 3.9873906 .RHS. demand_fit['383',S] 5.2875708 .RHS. demand_fit['384',S] 9.3039114 .RHS. demand_fit['386',S] 5.3165208 .RHS. demand_fit['388',S] 5.2875708 .RHS. demand_fit['389',S] 8.46011328 .RHS. demand_fit['390',S] 13.291302 .RHS. demand_fit['397',S] 6.645651 .RHS. demand_fit['398',S] 10.6330416 .RHS. demand_fit['403',S] 9.1148052 .RHS. demand_fit['418',S] 5.3165208 .RHS. demand_fit['430',S] 5.3165208 .RHS. demand_fit['431',S] 3.64592208 .RHS. demand_fit['479',S] 3.9873906 .RHS. demand_fit['502',S] 3.17254248 .RHS. demand_fit['504',S] 5.2875708 .RHS. demand_fit['512',S] 4.23005664 .RHS. demand_fit['528',S] 2.11502832 .RHS. demand_fit['533',S] 4.23005664 .RHS. demand_fit['538',S] 5.2875708 .RHS. demand_fit['552',S] 3.64592208 .RHS. demand_fit['621',S] 6.38036364 .RHS. demand_fit['639',S] 2.6582604 .RHS. demand_fit['712',S] 3.9873906 .RHS. demand_fit['781',S] 6.645651 .RHS. demand_fit['71',M] 10.64293584 .RHS. demand_fit['73',M] 15.4621008 .RHS. demand_fit['86',M] 23.24756064 .RHS. demand_fit['99',M] 14.5297254 .RHS. demand_fit['103',M] 18.62513772 .RHS. demand_fit['126',M] 21.64694112 .RHS. demand_fit['221',M] 23.24756064 .RHS. demand_fit['225',M] 5.81189016 .RHS. demand_fit['251',M] 14.5297254 .RHS. demand_fit['270',M] 7.98220188 .RHS. demand_fit['272',M] 14.5297254 .RHS. demand_fit['275',M] 20.34161556 .RHS. demand_fit['276',M] 15.4621008 .RHS. demand_fit['280',M] 8.71783524 .RHS. demand_fit['282',M] 21.64694112 .RHS. demand_fit['283',M] 10.64293584 .RHS. demand_fit['293',M] 5.81189016 .RHS. demand_fit['298',M] 11.62378032 .RHS. demand_fit['299',M] 20.34161556 .RHS. demand_fit['301',M] 12.36968064 .RHS. demand_fit['309',M] 15.4621008 .RHS. demand_fit['310',M] 13.3036698 .RHS. demand_fit['375',M] 15.4621008 .RHS. demand_fit['378',M] 9.27726048 .RHS. demand_fit['379',M] 18.62513772 .RHS. demand_fit['381',M] 9.27726048 .RHS. demand_fit['383',M] 14.5297254 .RHS. demand_fit['384',M] 21.64694112 .RHS. demand_fit['386',M] 12.36968064 .RHS. demand_fit['388',M] 14.5297254 .RHS. demand_fit['389',M] 23.24756064 .RHS. demand_fit['390',M] 30.9242016 .RHS. demand_fit['397',M] 15.4621008 .RHS. demand_fit['398',M] 24.73936128 .RHS. demand_fit['403',M] 26.6073396 .RHS. demand_fit['418',M] 12.36968064 .RHS. demand_fit['430',M] 12.36968064 .RHS. demand_fit['431',M] 10.64293584 .RHS. demand_fit['479',M] 9.27726048 .RHS. demand_fit['502',M] 8.71783524 .RHS. demand_fit['504',M] 14.5297254 .RHS. demand_fit['512',M] 11.62378032 .RHS. demand_fit['528',M] 5.81189016 .RHS. demand_fit['533',M] 11.62378032 .RHS. demand_fit['538',M] 14.5297254 .RHS. demand_fit['552',M] 10.64293584 .RHS. demand_fit['621',M] 18.62513772 .RHS. demand_fit['639',M] 6.18484032 .RHS. demand_fit['712',M] 9.27726048 .RHS. demand_fit['781',M] 15.4621008 .RHS. demand_fit['71',L] 15.62372304 .RHS. demand_fit['73',L] 18.2540478 .RHS. demand_fit['86',L] 31.526496 .RHS. demand_fit['99',L] 19.70406 .RHS. demand_fit['103',L] 27.34151532 .RHS. demand_fit['126',L] 25.55566692 .RHS. demand_fit['221',L] 31.526496 .RHS. demand_fit['225',L] 7.881624 .RHS. demand_fit['251',L] 19.70406 .RHS. demand_fit['270',L] 11.71779228 .RHS. demand_fit['272',L] 19.70406 .RHS. demand_fit['275',L] 27.585684 .RHS. demand_fit['276',L] 18.2540478 .RHS. demand_fit['280',L] 11.822436 .RHS. demand_fit['282',L] 25.55566692 .RHS. demand_fit['283',L] 15.62372304 .RHS. demand_fit['293',L] 7.881624 .RHS. demand_fit['298',L] 15.763248 .RHS. demand_fit['299',L] 27.585684 .RHS. demand_fit['301',L] 14.60323824 .RHS. demand_fit['309',L] 18.2540478 .RHS. demand_fit['310',L] 19.5296538 .RHS. demand_fit['375',L] 18.2540478 .RHS. demand_fit['378',L] 10.95242868 .RHS. demand_fit['379',L] 27.34151532 .RHS. demand_fit['381',L] 10.95242868 .RHS. demand_fit['383',L] 19.70406 .RHS. demand_fit['384',L] 25.55566692 .RHS. demand_fit['386',L] 14.60323824 .RHS. demand_fit['388',L] 19.70406 .RHS. demand_fit['389',L] 31.526496 .RHS. demand_fit['390',L] 36.5080956 .RHS. demand_fit['397',L] 18.2540478 .RHS. demand_fit['398',L] 29.20647648 .RHS. demand_fit['403',L] 39.0593076 .RHS. demand_fit['418',L] 14.60323824 .RHS. demand_fit['430',L] 14.60323824 .RHS. demand_fit['431',L] 15.62372304 .RHS. demand_fit['479',L] 10.95242868 .RHS. demand_fit['502',L] 11.822436 .RHS. demand_fit['504',L] 19.70406 .RHS. demand_fit['512',L] 15.763248 .RHS. demand_fit['528',L] 7.881624 .RHS. demand_fit['533',L] 15.763248 .RHS. demand_fit['538',L] 19.70406 .RHS. demand_fit['552',L] 15.62372304 .RHS. demand_fit['621',L] 27.34151532 .RHS. demand_fit['639',L] 7.30161912 .RHS. demand_fit['712',L] 10.95242868 .RHS. demand_fit['781',L] 18.2540478 .RHS. demand_fit['71',XL] 18.08741904 .RHS. demand_fit['73',XL] 19.6382004 .RHS. demand_fit['86',XL] 32.76582912 .RHS. demand_fit['99',XL] 20.4786432 .RHS. demand_fit['103',XL] 31.65298332 .RHS. demand_fit['126',XL] 27.49348056 .RHS. demand_fit['221',XL] 32.76582912 .RHS. demand_fit['225',XL] 8.19145728 .RHS. demand_fit['251',XL] 20.4786432 .RHS. demand_fit['270',XL] 13.56556428 .RHS. demand_fit['272',XL] 20.4786432 .RHS. demand_fit['275',XL] 28.67010048 .RHS. demand_fit['276',XL] 19.6382004 .RHS. demand_fit['280',XL] 12.28718592 .RHS. demand_fit['282',XL] 27.49348056 .RHS. demand_fit['283',XL] 18.08741904 .RHS. demand_fit['293',XL] 8.19145728 .RHS. demand_fit['298',XL] 16.38291456 .RHS. demand_fit['299',XL] 28.67010048 .RHS. demand_fit['301',XL] 15.71056032 .RHS. demand_fit['309',XL] 19.6382004 .RHS. demand_fit['310',XL] 22.6092738 .RHS. demand_fit['375',XL] 19.6382004 .RHS. demand_fit['378',XL] 11.78292024 .RHS. demand_fit['379',XL] 31.65298332 .RHS. demand_fit['381',XL] 11.78292024 .RHS. demand_fit['383',XL] 20.4786432 .RHS. demand_fit['384',XL] 27.49348056 .RHS. demand_fit['386',XL] 15.71056032 .RHS. demand_fit['388',XL] 20.4786432 .RHS. demand_fit['389',XL] 32.76582912 .RHS. demand_fit['390',XL] 39.2764008 .RHS. demand_fit['397',XL] 19.6382004 .RHS. demand_fit['398',XL] 31.42112064 .RHS. demand_fit['403',XL] 45.2185476 .RHS. demand_fit['418',XL] 15.71056032 .RHS. demand_fit['430',XL] 15.71056032 .RHS. demand_fit['431',XL] 18.08741904 .RHS. demand_fit['479',XL] 11.78292024 .RHS. demand_fit['502',XL] 12.28718592 .RHS. demand_fit['504',XL] 20.4786432 .RHS. demand_fit['512',XL] 16.38291456 .RHS. demand_fit['528',XL] 8.19145728 .RHS. demand_fit['533',XL] 16.38291456 .RHS. demand_fit['538',XL] 20.4786432 .RHS. demand_fit['552',XL] 18.08741904 .RHS. demand_fit['621',XL] 31.65298332 .RHS. demand_fit['639',XL] 7.85528016 .RHS. demand_fit['712',XL] 11.78292024 .RHS. demand_fit['781',XL] 19.6382004 BOUNDS FX .BOUNDS. NumLooseInners['71',Pack1] 0 FX .BOUNDS. NumLooseInners['73',Pack1] 0 FX .BOUNDS. NumLooseInners['86',Pack1] 0 FX .BOUNDS. NumLooseInners['99',Pack1] 0 FX .BOUNDS. NumLooseInners['103',Pack1] 0 FX .BOUNDS. NumLooseInners['126',Pack1] 0 FX .BOUNDS. NumLooseInners['221',Pack1] 0 FX .BOUNDS. NumLooseInners['225',Pack1] 0 FX .BOUNDS. NumLooseInners['251',Pack1] 0 FX .BOUNDS. NumLooseInners['270',Pack1] 0 FX .BOUNDS. NumLooseInners['272',Pack1] 0 FX .BOUNDS. NumLooseInners['275',Pack1] 0 FX .BOUNDS. NumLooseInners['276',Pack1] 0 FX .BOUNDS. NumLooseInners['280',Pack1] 0 FX .BOUNDS. NumLooseInners['282',Pack1] 0 FX .BOUNDS. NumLooseInners['283',Pack1] 0 FX .BOUNDS. NumLooseInners['293',Pack1] 0 FX .BOUNDS. NumLooseInners['298',Pack1] 0 FX .BOUNDS. NumLooseInners['299',Pack1] 0 FX .BOUNDS. NumLooseInners['301',Pack1] 0 FX .BOUNDS. NumLooseInners['309',Pack1] 0 FX .BOUNDS. NumLooseInners['310',Pack1] 0 FX .BOUNDS. NumLooseInners['375',Pack1] 0 FX .BOUNDS. NumLooseInners['378',Pack1] 0 FX .BOUNDS. NumLooseInners['379',Pack1] 0 FX .BOUNDS. NumLooseInners['381',Pack1] 0 FX .BOUNDS. NumLooseInners['383',Pack1] 0 FX .BOUNDS. NumLooseInners['384',Pack1] 0 FX .BOUNDS. NumLooseInners['386',Pack1] 0 FX .BOUNDS. NumLooseInners['388',Pack1] 0 FX .BOUNDS. NumLooseInners['389',Pack1] 0 FX .BOUNDS. NumLooseInners['390',Pack1] 0 FX .BOUNDS. NumLooseInners['397',Pack1] 0 FX .BOUNDS. NumLooseInners['398',Pack1] 0 FX .BOUNDS. NumLooseInners['403',Pack1] 0 FX .BOUNDS. NumLooseInners['418',Pack1] 0 FX .BOUNDS. NumLooseInners['430',Pack1] 0 FX .BOUNDS. NumLooseInners['431',Pack1] 0 FX .BOUNDS. NumLooseInners['479',Pack1] 0 FX .BOUNDS. NumLooseInners['502',Pack1] 0 FX .BOUNDS. NumLooseInners['504',Pack1] 0 FX .BOUNDS. NumLooseInners['512',Pack1] 0 FX .BOUNDS. NumLooseInners['528',Pack1] 0 FX .BOUNDS. NumLooseInners['533',Pack1] 0 FX .BOUNDS. NumLooseInners['538',Pack1] 0 FX .BOUNDS. NumLooseInners['552',Pack1] 0 FX .BOUNDS. NumLooseInners['621',Pack1] 0 FX .BOUNDS. NumLooseInners['639',Pack1] 0 FX .BOUNDS. NumLooseInners['712',Pack1] 0 FX .BOUNDS. NumLooseInners['781',Pack1] 0 FX .BOUNDS. NumLooseInners['71',Pack2] 0 FX .BOUNDS. NumLooseInners['73',Pack2] 0 FX .BOUNDS. NumLooseInners['86',Pack2] 0 FX .BOUNDS. NumLooseInners['99',Pack2] 0 FX .BOUNDS. NumLooseInners['103',Pack2] 0 FX .BOUNDS. NumLooseInners['126',Pack2] 0 FX .BOUNDS. NumLooseInners['221',Pack2] 0 FX .BOUNDS. NumLooseInners['225',Pack2] 0 FX .BOUNDS. NumLooseInners['251',Pack2] 0 FX .BOUNDS. NumLooseInners['270',Pack2] 0 FX .BOUNDS. NumLooseInners['272',Pack2] 0 FX .BOUNDS. NumLooseInners['275',Pack2] 0 FX .BOUNDS. NumLooseInners['276',Pack2] 0 FX .BOUNDS. NumLooseInners['280',Pack2] 0 FX .BOUNDS. NumLooseInners['282',Pack2] 0 FX .BOUNDS. NumLooseInners['283',Pack2] 0 FX .BOUNDS. NumLooseInners['293',Pack2] 0 FX .BOUNDS. NumLooseInners['298',Pack2] 0 FX .BOUNDS. NumLooseInners['299',Pack2] 0 FX .BOUNDS. NumLooseInners['301',Pack2] 0 FX .BOUNDS. NumLooseInners['309',Pack2] 0 FX .BOUNDS. NumLooseInners['310',Pack2] 0 FX .BOUNDS. NumLooseInners['375',Pack2] 0 FX .BOUNDS. NumLooseInners['378',Pack2] 0 FX .BOUNDS. NumLooseInners['379',Pack2] 0 FX .BOUNDS. NumLooseInners['381',Pack2] 0 FX .BOUNDS. NumLooseInners['383',Pack2] 0 FX .BOUNDS. NumLooseInners['384',Pack2] 0 FX .BOUNDS. NumLooseInners['386',Pack2] 0 FX .BOUNDS. NumLooseInners['388',Pack2] 0 FX .BOUNDS. NumLooseInners['389',Pack2] 0 FX .BOUNDS. NumLooseInners['390',Pack2] 0 FX .BOUNDS. NumLooseInners['397',Pack2] 0 FX .BOUNDS. NumLooseInners['398',Pack2] 0 FX .BOUNDS. NumLooseInners['403',Pack2] 0 FX .BOUNDS. NumLooseInners['418',Pack2] 0 FX .BOUNDS. NumLooseInners['430',Pack2] 0 FX .BOUNDS. NumLooseInners['431',Pack2] 0 FX .BOUNDS. NumLooseInners['479',Pack2] 0 FX .BOUNDS. NumLooseInners['502',Pack2] 0 FX .BOUNDS. NumLooseInners['504',Pack2] 0 FX .BOUNDS. NumLooseInners['512',Pack2] 0 FX .BOUNDS. NumLooseInners['528',Pack2] 0 FX .BOUNDS. NumLooseInners['533',Pack2] 0 FX .BOUNDS. NumLooseInners['538',Pack2] 0 FX .BOUNDS. NumLooseInners['552',Pack2] 0 FX .BOUNDS. NumLooseInners['621',Pack2] 0 FX .BOUNDS. NumLooseInners['639',Pack2] 0 FX .BOUNDS. NumLooseInners['712',Pack2] 0 FX .BOUNDS. NumLooseInners['781',Pack2] 0 FX .BOUNDS. NumLooseInners['71',Pack3] 0 FX .BOUNDS. NumLooseInners['73',Pack3] 0 FX .BOUNDS. NumLooseInners['86',Pack3] 0 FX .BOUNDS. NumLooseInners['99',Pack3] 0 FX .BOUNDS. NumLooseInners['103',Pack3] 0 FX .BOUNDS. NumLooseInners['126',Pack3] 0 FX .BOUNDS. NumLooseInners['221',Pack3] 0 FX .BOUNDS. NumLooseInners['225',Pack3] 0 FX .BOUNDS. NumLooseInners['251',Pack3] 0 FX .BOUNDS. NumLooseInners['270',Pack3] 0 FX .BOUNDS. NumLooseInners['272',Pack3] 0 FX .BOUNDS. NumLooseInners['275',Pack3] 0 FX .BOUNDS. NumLooseInners['276',Pack3] 0 FX .BOUNDS. NumLooseInners['280',Pack3] 0 FX .BOUNDS. NumLooseInners['282',Pack3] 0 FX .BOUNDS. NumLooseInners['283',Pack3] 0 FX .BOUNDS. NumLooseInners['293',Pack3] 0 FX .BOUNDS. NumLooseInners['298',Pack3] 0 FX .BOUNDS. NumLooseInners['299',Pack3] 0 FX .BOUNDS. NumLooseInners['301',Pack3] 0 FX .BOUNDS. NumLooseInners['309',Pack3] 0 FX .BOUNDS. NumLooseInners['310',Pack3] 0 FX .BOUNDS. NumLooseInners['375',Pack3] 0 FX .BOUNDS. NumLooseInners['378',Pack3] 0 FX .BOUNDS. NumLooseInners['379',Pack3] 0 FX .BOUNDS. NumLooseInners['381',Pack3] 0 FX .BOUNDS. NumLooseInners['383',Pack3] 0 FX .BOUNDS. NumLooseInners['384',Pack3] 0 FX .BOUNDS. NumLooseInners['386',Pack3] 0 FX .BOUNDS. NumLooseInners['388',Pack3] 0 FX .BOUNDS. NumLooseInners['389',Pack3] 0 FX .BOUNDS. NumLooseInners['390',Pack3] 0 FX .BOUNDS. NumLooseInners['397',Pack3] 0 FX .BOUNDS. NumLooseInners['398',Pack3] 0 FX .BOUNDS. NumLooseInners['403',Pack3] 0 FX .BOUNDS. NumLooseInners['418',Pack3] 0 FX .BOUNDS. NumLooseInners['430',Pack3] 0 FX .BOUNDS. NumLooseInners['431',Pack3] 0 FX .BOUNDS. NumLooseInners['479',Pack3] 0 FX .BOUNDS. NumLooseInners['502',Pack3] 0 FX .BOUNDS. NumLooseInners['504',Pack3] 0 FX .BOUNDS. NumLooseInners['512',Pack3] 0 FX .BOUNDS. NumLooseInners['528',Pack3] 0 FX .BOUNDS. NumLooseInners['533',Pack3] 0 FX .BOUNDS. NumLooseInners['538',Pack3] 0 FX .BOUNDS. NumLooseInners['552',Pack3] 0 FX .BOUNDS. NumLooseInners['621',Pack3] 0 FX .BOUNDS. NumLooseInners['639',Pack3] 0 FX .BOUNDS. NumLooseInners['712',Pack3] 0 FX .BOUNDS. NumLooseInners['781',Pack3] 0 UP .BOUNDS. NumUnopenedOuters['71',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['73',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['86',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['99',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['103',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['126',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['221',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['225',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['251',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['270',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['272',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['275',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['276',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['280',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['282',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['283',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['293',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['298',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['299',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['301',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['309',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['310',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['375',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['378',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['379',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['381',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['383',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['384',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['386',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['388',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['389',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['390',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['397',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['398',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['403',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['418',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['430',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['431',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['479',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['502',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['504',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['512',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['528',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['533',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['538',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['552',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['621',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['639',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['712',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['781',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['71',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['73',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['86',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['99',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['103',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['126',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['221',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['225',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['251',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['270',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['272',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['275',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['276',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['280',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['282',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['283',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['293',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['298',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['299',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['301',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['309',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['310',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['375',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['378',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['379',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['381',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['383',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['384',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['386',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['388',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['389',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['390',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['397',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['398',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['403',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['418',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['430',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['431',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['479',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['502',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['504',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['512',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['528',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['533',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['538',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['552',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['621',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['639',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['712',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['781',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['71',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['73',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['86',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['99',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['103',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['126',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['221',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['225',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['251',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['270',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['272',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['275',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['276',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['280',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['282',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['283',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['293',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['298',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['299',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['301',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['309',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['310',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['375',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['378',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['379',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['381',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['383',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['384',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['386',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['388',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['389',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['390',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['397',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['398',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['403',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['418',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['430',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['431',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['479',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['502',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['504',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['512',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['528',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['533',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['538',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['552',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['621',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['639',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['712',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['781',Pack3] 1000 FX .BOUNDS. NumOpenedOuters[Pack1] 0 FX .BOUNDS. NumOpenedOuters[Pack2] 0 FX .BOUNDS. NumOpenedOuters[Pack3] 0 UP .BOUNDS. NumUnder['71',S] 3.64592208 UP .BOUNDS. NumUnder['73',S] 6.645651 UP .BOUNDS. NumUnder['86',S] 8.46011328 UP .BOUNDS. NumUnder['99',S] 5.2875708 UP .BOUNDS. NumUnder['103',S] 6.38036364 UP .BOUNDS. NumUnder['126',S] 9.3039114 UP .BOUNDS. NumUnder['221',S] 8.46011328 UP .BOUNDS. NumUnder['225',S] 2.11502832 UP .BOUNDS. NumUnder['251',S] 5.2875708 UP .BOUNDS. NumUnder['270',S] 2.73444156 UP .BOUNDS. NumUnder['272',S] 5.2875708 UP .BOUNDS. NumUnder['275',S] 7.40259912 UP .BOUNDS. NumUnder['276',S] 6.645651 UP .BOUNDS. NumUnder['280',S] 3.17254248 UP .BOUNDS. NumUnder['282',S] 9.3039114 UP .BOUNDS. NumUnder['283',S] 3.64592208 UP .BOUNDS. NumUnder['293',S] 2.11502832 UP .BOUNDS. NumUnder['298',S] 4.23005664 UP .BOUNDS. NumUnder['299',S] 7.40259912 UP .BOUNDS. NumUnder['301',S] 5.3165208 UP .BOUNDS. NumUnder['309',S] 6.645651 UP .BOUNDS. NumUnder['310',S] 4.5574026 UP .BOUNDS. NumUnder['375',S] 6.645651 UP .BOUNDS. NumUnder['378',S] 3.9873906 UP .BOUNDS. NumUnder['379',S] 6.38036364 UP .BOUNDS. NumUnder['381',S] 3.9873906 UP .BOUNDS. NumUnder['383',S] 5.2875708 UP .BOUNDS. NumUnder['384',S] 9.3039114 UP .BOUNDS. NumUnder['386',S] 5.3165208 UP .BOUNDS. NumUnder['388',S] 5.2875708 UP .BOUNDS. NumUnder['389',S] 8.46011328 UP .BOUNDS. NumUnder['390',S] 13.291302 UP .BOUNDS. NumUnder['397',S] 6.645651 UP .BOUNDS. NumUnder['398',S] 10.6330416 UP .BOUNDS. NumUnder['403',S] 9.1148052 UP .BOUNDS. NumUnder['418',S] 5.3165208 UP .BOUNDS. NumUnder['430',S] 5.3165208 UP .BOUNDS. NumUnder['431',S] 3.64592208 UP .BOUNDS. NumUnder['479',S] 3.9873906 UP .BOUNDS. NumUnder['502',S] 3.17254248 UP .BOUNDS. NumUnder['504',S] 5.2875708 UP .BOUNDS. NumUnder['512',S] 4.23005664 UP .BOUNDS. NumUnder['528',S] 2.11502832 UP .BOUNDS. NumUnder['533',S] 4.23005664 UP .BOUNDS. NumUnder['538',S] 5.2875708 UP .BOUNDS. NumUnder['552',S] 3.64592208 UP .BOUNDS. NumUnder['621',S] 6.38036364 UP .BOUNDS. NumUnder['639',S] 2.6582604 UP .BOUNDS. NumUnder['712',S] 3.9873906 UP .BOUNDS. NumUnder['781',S] 6.645651 UP .BOUNDS. NumUnder['71',M] 10.64293584 UP .BOUNDS. NumUnder['73',M] 15.4621008 UP .BOUNDS. NumUnder['86',M] 23.24756064 UP .BOUNDS. NumUnder['99',M] 14.5297254 UP .BOUNDS. NumUnder['103',M] 18.62513772 UP .BOUNDS. NumUnder['126',M] 21.64694112 UP .BOUNDS. NumUnder['221',M] 23.24756064 UP .BOUNDS. NumUnder['225',M] 5.81189016 UP .BOUNDS. NumUnder['251',M] 14.5297254 UP .BOUNDS. NumUnder['270',M] 7.98220188 UP .BOUNDS. NumUnder['272',M] 14.5297254 UP .BOUNDS. NumUnder['275',M] 20.34161556 UP .BOUNDS. NumUnder['276',M] 15.4621008 UP .BOUNDS. NumUnder['280',M] 8.71783524 UP .BOUNDS. NumUnder['282',M] 21.64694112 UP .BOUNDS. NumUnder['283',M] 10.64293584 UP .BOUNDS. NumUnder['293',M] 5.81189016 UP .BOUNDS. NumUnder['298',M] 11.62378032 UP .BOUNDS. NumUnder['299',M] 20.34161556 UP .BOUNDS. NumUnder['301',M] 12.36968064 UP .BOUNDS. NumUnder['309',M] 15.4621008 UP .BOUNDS. NumUnder['310',M] 13.3036698 UP .BOUNDS. NumUnder['375',M] 15.4621008 UP .BOUNDS. NumUnder['378',M] 9.27726048 UP .BOUNDS. NumUnder['379',M] 18.62513772 UP .BOUNDS. NumUnder['381',M] 9.27726048 UP .BOUNDS. NumUnder['383',M] 14.5297254 UP .BOUNDS. NumUnder['384',M] 21.64694112 UP .BOUNDS. NumUnder['386',M] 12.36968064 UP .BOUNDS. NumUnder['388',M] 14.5297254 UP .BOUNDS. NumUnder['389',M] 23.24756064 UP .BOUNDS. NumUnder['390',M] 30.9242016 UP .BOUNDS. NumUnder['397',M] 15.4621008 UP .BOUNDS. NumUnder['398',M] 24.73936128 UP .BOUNDS. NumUnder['403',M] 26.6073396 UP .BOUNDS. NumUnder['418',M] 12.36968064 UP .BOUNDS. NumUnder['430',M] 12.36968064 UP .BOUNDS. NumUnder['431',M] 10.64293584 UP .BOUNDS. NumUnder['479',M] 9.27726048 UP .BOUNDS. NumUnder['502',M] 8.71783524 UP .BOUNDS. NumUnder['504',M] 14.5297254 UP .BOUNDS. NumUnder['512',M] 11.62378032 UP .BOUNDS. NumUnder['528',M] 5.81189016 UP .BOUNDS. NumUnder['533',M] 11.62378032 UP .BOUNDS. NumUnder['538',M] 14.5297254 UP .BOUNDS. NumUnder['552',M] 10.64293584 UP .BOUNDS. NumUnder['621',M] 18.62513772 UP .BOUNDS. NumUnder['639',M] 6.18484032 UP .BOUNDS. NumUnder['712',M] 9.27726048 UP .BOUNDS. NumUnder['781',M] 15.4621008 UP .BOUNDS. NumUnder['71',L] 15.62372304 UP .BOUNDS. NumUnder['73',L] 18.2540478 UP .BOUNDS. NumUnder['86',L] 31.526496 UP .BOUNDS. NumUnder['99',L] 19.70406 UP .BOUNDS. NumUnder['103',L] 27.34151532 UP .BOUNDS. NumUnder['126',L] 25.55566692 UP .BOUNDS. NumUnder['221',L] 31.526496 UP .BOUNDS. NumUnder['225',L] 7.881624 UP .BOUNDS. NumUnder['251',L] 19.70406 UP .BOUNDS. NumUnder['270',L] 11.71779228 UP .BOUNDS. NumUnder['272',L] 19.70406 UP .BOUNDS. NumUnder['275',L] 27.585684 UP .BOUNDS. NumUnder['276',L] 18.2540478 UP .BOUNDS. NumUnder['280',L] 11.822436 UP .BOUNDS. NumUnder['282',L] 25.55566692 UP .BOUNDS. NumUnder['283',L] 15.62372304 UP .BOUNDS. NumUnder['293',L] 7.881624 UP .BOUNDS. NumUnder['298',L] 15.763248 UP .BOUNDS. NumUnder['299',L] 27.585684 UP .BOUNDS. NumUnder['301',L] 14.60323824 UP .BOUNDS. NumUnder['309',L] 18.2540478 UP .BOUNDS. NumUnder['310',L] 19.5296538 UP .BOUNDS. NumUnder['375',L] 18.2540478 UP .BOUNDS. NumUnder['378',L] 10.95242868 UP .BOUNDS. NumUnder['379',L] 27.34151532 UP .BOUNDS. NumUnder['381',L] 10.95242868 UP .BOUNDS. NumUnder['383',L] 19.70406 UP .BOUNDS. NumUnder['384',L] 25.55566692 UP .BOUNDS. NumUnder['386',L] 14.60323824 UP .BOUNDS. NumUnder['388',L] 19.70406 UP .BOUNDS. NumUnder['389',L] 31.526496 UP .BOUNDS. NumUnder['390',L] 36.5080956 UP .BOUNDS. NumUnder['397',L] 18.2540478 UP .BOUNDS. NumUnder['398',L] 29.20647648 UP .BOUNDS. NumUnder['403',L] 39.0593076 UP .BOUNDS. NumUnder['418',L] 14.60323824 UP .BOUNDS. NumUnder['430',L] 14.60323824 UP .BOUNDS. NumUnder['431',L] 15.62372304 UP .BOUNDS. NumUnder['479',L] 10.95242868 UP .BOUNDS. NumUnder['502',L] 11.822436 UP .BOUNDS. NumUnder['504',L] 19.70406 UP .BOUNDS. NumUnder['512',L] 15.763248 UP .BOUNDS. NumUnder['528',L] 7.881624 UP .BOUNDS. NumUnder['533',L] 15.763248 UP .BOUNDS. NumUnder['538',L] 19.70406 UP .BOUNDS. NumUnder['552',L] 15.62372304 UP .BOUNDS. NumUnder['621',L] 27.34151532 UP .BOUNDS. NumUnder['639',L] 7.30161912 UP .BOUNDS. NumUnder['712',L] 10.95242868 UP .BOUNDS. NumUnder['781',L] 18.2540478 UP .BOUNDS. NumUnder['71',XL] 18.08741904 UP .BOUNDS. NumUnder['73',XL] 19.6382004 UP .BOUNDS. NumUnder['86',XL] 32.76582912 UP .BOUNDS. NumUnder['99',XL] 20.4786432 UP .BOUNDS. NumUnder['103',XL] 31.65298332 UP .BOUNDS. NumUnder['126',XL] 27.49348056 UP .BOUNDS. NumUnder['221',XL] 32.76582912 UP .BOUNDS. NumUnder['225',XL] 8.19145728 UP .BOUNDS. NumUnder['251',XL] 20.4786432 UP .BOUNDS. NumUnder['270',XL] 13.56556428 UP .BOUNDS. NumUnder['272',XL] 20.4786432 UP .BOUNDS. NumUnder['275',XL] 28.67010048 UP .BOUNDS. NumUnder['276',XL] 19.6382004 UP .BOUNDS. NumUnder['280',XL] 12.28718592 UP .BOUNDS. NumUnder['282',XL] 27.49348056 UP .BOUNDS. NumUnder['283',XL] 18.08741904 UP .BOUNDS. NumUnder['293',XL] 8.19145728 UP .BOUNDS. NumUnder['298',XL] 16.38291456 UP .BOUNDS. NumUnder['299',XL] 28.67010048 UP .BOUNDS. NumUnder['301',XL] 15.71056032 UP .BOUNDS. NumUnder['309',XL] 19.6382004 UP .BOUNDS. NumUnder['310',XL] 22.6092738 UP .BOUNDS. NumUnder['375',XL] 19.6382004 UP .BOUNDS. NumUnder['378',XL] 11.78292024 UP .BOUNDS. NumUnder['379',XL] 31.65298332 UP .BOUNDS. NumUnder['381',XL] 11.78292024 UP .BOUNDS. NumUnder['383',XL] 20.4786432 UP .BOUNDS. NumUnder['384',XL] 27.49348056 UP .BOUNDS. NumUnder['386',XL] 15.71056032 UP .BOUNDS. NumUnder['388',XL] 20.4786432 UP .BOUNDS. NumUnder['389',XL] 32.76582912 UP .BOUNDS. NumUnder['390',XL] 39.2764008 UP .BOUNDS. NumUnder['397',XL] 19.6382004 UP .BOUNDS. NumUnder['398',XL] 31.42112064 UP .BOUNDS. NumUnder['403',XL] 45.2185476 UP .BOUNDS. NumUnder['418',XL] 15.71056032 UP .BOUNDS. NumUnder['430',XL] 15.71056032 UP .BOUNDS. NumUnder['431',XL] 18.08741904 UP .BOUNDS. NumUnder['479',XL] 11.78292024 UP .BOUNDS. NumUnder['502',XL] 12.28718592 UP .BOUNDS. NumUnder['504',XL] 20.4786432 UP .BOUNDS. NumUnder['512',XL] 16.38291456 UP .BOUNDS. NumUnder['528',XL] 8.19145728 UP .BOUNDS. NumUnder['533',XL] 16.38291456 UP .BOUNDS. NumUnder['538',XL] 20.4786432 UP .BOUNDS. NumUnder['552',XL] 18.08741904 UP .BOUNDS. NumUnder['621',XL] 31.65298332 UP .BOUNDS. NumUnder['639',XL] 7.85528016 UP .BOUNDS. NumUnder['712',XL] 11.78292024 UP .BOUNDS. NumUnder['781',XL] 19.6382004 ENDATA Vol-1.5.4/Data/Sample/wedding_16.mps0000644000175000017500000073331512136243266016076 0ustar sudipsudip* ENCODING=ISO-8859-1 NAME wedding_main.lp ROWS N OBJ L Maximum_table_size_0 L Maximum_table_size_1 L Maximum_table_size_2 L Maximum_table_size_3 L Maximum_table_size_4 E Must_seat_A E Must_seat_B E Must_seat_C E Must_seat_D E Must_seat_E E Must_seat_F E Must_seat_G E Must_seat_H E Must_seat_I E Must_seat_J E Must_seat_K E Must_seat_L E Must_seat_M E Must_seat_N E Must_seat_O E Must_seat_P G _C1 G _C10 G _C100 G _C101 G _C102 G _C103 G _C104 G _C105 G _C106 G _C107 G _C108 G _C109 G _C11 G _C110 G _C111 G _C112 G _C113 G _C114 G _C115 G _C116 G _C117 G _C118 G _C119 G _C12 G _C120 G _C121 G _C122 G _C123 G _C124 G _C125 G _C126 G _C127 G _C128 G _C129 G _C13 G _C130 G _C131 G _C132 G _C133 G _C134 G _C135 G _C136 G _C137 G _C138 G _C139 G _C14 G _C140 G _C141 G _C142 G _C143 G _C144 G _C145 G _C146 G _C147 G _C148 G _C149 G _C15 G _C150 G _C151 G _C152 G _C153 G _C154 G _C155 G _C156 G _C157 G _C158 G _C159 G _C16 G _C160 G _C161 G _C162 G _C163 G _C164 G _C165 G _C166 G _C167 G _C168 G _C169 G _C17 G _C170 G _C171 G _C172 G _C173 G _C174 G _C175 G _C176 G _C177 G _C178 G _C179 G _C18 G _C180 G _C181 G _C182 G _C183 G _C184 G _C185 G _C186 G _C187 G _C188 G _C189 G _C19 G _C190 G _C191 G _C192 G _C193 G _C194 G _C195 G _C196 G _C197 G _C198 G _C199 G _C2 G _C20 G _C200 G _C201 G _C202 G _C203 G _C204 G _C205 G _C206 G _C207 G _C208 G _C209 G _C21 G _C210 G _C211 G _C212 G _C213 G _C214 G _C215 G _C216 G _C217 G _C218 G _C219 G _C22 G _C220 G _C221 G _C222 G _C223 G _C224 G _C225 G _C226 G _C227 G _C228 G _C229 G _C23 G _C230 G _C231 G _C232 G _C233 G _C234 G _C235 G _C236 G _C237 G _C238 G _C239 G _C24 G _C240 G _C241 G _C242 G _C243 G _C244 G _C245 G _C246 G _C247 G _C248 G _C249 G _C25 G _C250 G _C251 G _C252 G _C253 G _C254 G _C255 G _C256 G _C257 G _C258 G _C259 G _C26 G _C260 G _C261 G _C262 G _C263 G _C264 G _C265 G _C266 G _C267 G _C268 G _C269 G _C27 G _C270 G _C271 G _C272 G _C273 G _C274 G _C275 G _C276 G _C277 G _C278 G _C279 G _C28 G _C280 G _C281 G _C282 G _C283 G _C284 G _C285 G _C286 G _C287 G _C288 G _C289 G _C29 G _C290 G _C291 G _C292 G _C293 G _C294 G _C295 G _C296 G _C297 G _C298 G _C299 G _C3 G _C30 G _C300 G _C301 G _C302 G _C303 G _C304 G _C305 G _C306 G _C307 G _C308 G _C309 G _C31 G _C310 G _C311 G _C312 G _C313 G _C314 G _C315 G _C316 G _C317 G _C318 G _C319 G _C32 G _C320 G _C321 G _C322 G _C323 G _C324 G _C325 G _C326 G _C327 G _C328 G _C329 G _C33 G _C330 G _C331 G _C332 G _C333 G _C334 G _C335 G _C336 G _C337 G _C338 G _C339 G _C34 G _C340 G _C341 G _C342 G _C343 G _C344 G _C345 G _C346 G _C347 G _C348 G _C349 G _C35 G _C350 G _C351 G _C352 G _C353 G _C354 G _C355 G _C356 G _C357 G _C358 G _C359 G _C36 G _C360 G _C361 G _C362 G _C363 G _C364 G _C365 G _C366 G _C367 G _C368 G _C369 G _C37 G _C370 G _C371 G _C372 G _C373 G _C374 G _C375 G _C376 G _C377 G _C378 G _C379 G _C38 G _C380 G _C381 G _C382 G _C383 G _C384 G _C385 G _C386 G _C387 G _C388 G _C389 G _C39 G _C390 G _C391 G _C392 G _C393 G _C394 G _C395 G _C396 G _C397 G _C398 G _C399 G _C4 G _C40 G _C400 G _C401 G _C402 G _C403 G _C404 G _C405 G _C406 G _C407 G _C408 G _C409 G _C41 G _C410 G _C411 G _C412 G _C413 G _C414 G _C415 G _C416 G _C417 G _C418 G _C419 G _C42 G _C420 G _C421 G _C422 G _C423 G _C424 G _C425 G _C426 G _C427 G _C428 G _C429 G _C43 G _C430 G _C431 G _C432 G _C433 G _C434 G _C435 G _C436 G _C437 G _C438 G _C439 G _C44 G _C440 G _C441 G _C442 G _C443 G _C444 G _C445 G _C446 G _C447 G _C448 G _C449 G _C45 G _C450 G _C451 G _C452 G _C453 G _C454 G _C455 G _C456 G _C457 G _C458 G _C459 G _C46 G _C460 G _C461 G _C462 G _C463 G _C464 G _C465 G _C466 G _C467 G _C468 G _C469 G _C47 G _C470 G _C471 G _C472 G _C473 G _C474 G _C475 G _C476 G _C477 G _C478 G _C479 G _C48 G _C480 G _C481 G _C482 G _C483 G _C484 G _C485 G _C486 G _C487 G _C488 G _C489 G _C49 G _C490 G _C491 G _C492 G _C493 G _C494 G _C495 G _C496 G _C497 G _C498 G _C499 G _C5 G _C50 G _C500 G _C501 G _C502 G _C503 G _C504 G _C505 G _C506 G _C507 G _C508 G _C509 G _C51 G _C510 G _C511 G _C512 G _C513 G _C514 G _C515 G _C516 G _C517 G _C518 G _C519 G _C52 G _C520 G _C521 G _C522 G _C523 G _C524 G _C525 G _C526 G _C527 G _C528 G _C529 G _C53 G _C530 G _C531 G _C532 G _C533 G _C534 G _C535 G _C536 G _C537 G _C538 G _C539 G _C54 G _C540 G _C541 G _C542 G _C543 G _C544 G _C545 G _C546 G _C547 G _C548 G _C549 G _C55 G _C550 G _C551 G _C552 G _C553 G _C554 G _C555 G _C556 G _C557 G _C558 G _C559 G _C56 G _C560 G _C561 G _C562 G _C563 G _C564 G _C565 G _C566 G _C567 G _C568 G _C569 G _C57 G _C570 G _C571 G _C572 G _C573 G _C574 G _C575 G _C576 G _C577 G _C578 G _C579 G _C58 G _C580 G _C581 G _C582 G _C583 G _C584 G _C585 G _C586 G _C587 G _C588 G _C589 G _C59 G _C590 G _C591 G _C592 G _C593 G _C594 G _C595 G _C596 G _C597 G _C598 G _C599 G _C6 G _C60 G _C600 G _C61 G _C62 G _C63 G _C64 G _C65 G _C66 G _C67 G _C68 G _C69 G _C7 G _C70 G _C71 G _C72 G _C73 G _C74 G _C75 G _C76 G _C77 G _C78 G _C79 G _C8 G _C80 G _C81 G _C82 G _C83 G _C84 G _C85 G _C86 G _C87 G _C88 G _C89 G _C9 G _C90 G _C91 G _C92 G _C93 G _C94 G _C95 G _C96 G _C97 G _C98 G _C99 COLUMNS table_happiness_0 OBJ 1 table_happiness_0 _C1 1 table_happiness_0 _C10 1 table_happiness_0 _C100 1 table_happiness_0 _C101 1 table_happiness_0 _C102 1 table_happiness_0 _C103 1 table_happiness_0 _C104 1 table_happiness_0 _C105 1 table_happiness_0 _C106 1 table_happiness_0 _C107 1 table_happiness_0 _C108 1 table_happiness_0 _C109 1 table_happiness_0 _C11 1 table_happiness_0 _C110 1 table_happiness_0 _C111 1 table_happiness_0 _C112 1 table_happiness_0 _C113 1 table_happiness_0 _C114 1 table_happiness_0 _C115 1 table_happiness_0 _C116 1 table_happiness_0 _C117 1 table_happiness_0 _C118 1 table_happiness_0 _C119 1 table_happiness_0 _C12 1 table_happiness_0 _C120 1 table_happiness_0 _C13 1 table_happiness_0 _C14 1 table_happiness_0 _C15 1 table_happiness_0 _C16 1 table_happiness_0 _C17 1 table_happiness_0 _C18 1 table_happiness_0 _C19 1 table_happiness_0 _C2 1 table_happiness_0 _C20 1 table_happiness_0 _C21 1 table_happiness_0 _C22 1 table_happiness_0 _C23 1 table_happiness_0 _C24 1 table_happiness_0 _C25 1 table_happiness_0 _C26 1 table_happiness_0 _C27 1 table_happiness_0 _C28 1 table_happiness_0 _C29 1 table_happiness_0 _C3 1 table_happiness_0 _C30 1 table_happiness_0 _C31 1 table_happiness_0 _C32 1 table_happiness_0 _C33 1 table_happiness_0 _C34 1 table_happiness_0 _C35 1 table_happiness_0 _C36 1 table_happiness_0 _C37 1 table_happiness_0 _C38 1 table_happiness_0 _C39 1 table_happiness_0 _C4 1 table_happiness_0 _C40 1 table_happiness_0 _C41 1 table_happiness_0 _C42 1 table_happiness_0 _C43 1 table_happiness_0 _C44 1 table_happiness_0 _C45 1 table_happiness_0 _C46 1 table_happiness_0 _C47 1 table_happiness_0 _C48 1 table_happiness_0 _C49 1 table_happiness_0 _C5 1 table_happiness_0 _C50 1 table_happiness_0 _C51 1 table_happiness_0 _C52 1 table_happiness_0 _C53 1 table_happiness_0 _C54 1 table_happiness_0 _C55 1 table_happiness_0 _C56 1 table_happiness_0 _C57 1 table_happiness_0 _C58 1 table_happiness_0 _C59 1 table_happiness_0 _C6 1 table_happiness_0 _C60 1 table_happiness_0 _C61 1 table_happiness_0 _C62 1 table_happiness_0 _C63 1 table_happiness_0 _C64 1 table_happiness_0 _C65 1 table_happiness_0 _C66 1 table_happiness_0 _C67 1 table_happiness_0 _C68 1 table_happiness_0 _C69 1 table_happiness_0 _C7 1 table_happiness_0 _C70 1 table_happiness_0 _C71 1 table_happiness_0 _C72 1 table_happiness_0 _C73 1 table_happiness_0 _C74 1 table_happiness_0 _C75 1 table_happiness_0 _C76 1 table_happiness_0 _C77 1 table_happiness_0 _C78 1 table_happiness_0 _C79 1 table_happiness_0 _C8 1 table_happiness_0 _C80 1 table_happiness_0 _C81 1 table_happiness_0 _C82 1 table_happiness_0 _C83 1 table_happiness_0 _C84 1 table_happiness_0 _C85 1 table_happiness_0 _C86 1 table_happiness_0 _C87 1 table_happiness_0 _C88 1 table_happiness_0 _C89 1 table_happiness_0 _C9 1 table_happiness_0 _C90 1 table_happiness_0 _C91 1 table_happiness_0 _C92 1 table_happiness_0 _C93 1 table_happiness_0 _C94 1 table_happiness_0 _C95 1 table_happiness_0 _C96 1 table_happiness_0 _C97 1 table_happiness_0 _C98 1 table_happiness_0 _C99 1 table_happiness_1 OBJ 1 table_happiness_1 _C121 1 table_happiness_1 _C122 1 table_happiness_1 _C123 1 table_happiness_1 _C124 1 table_happiness_1 _C125 1 table_happiness_1 _C126 1 table_happiness_1 _C127 1 table_happiness_1 _C128 1 table_happiness_1 _C129 1 table_happiness_1 _C130 1 table_happiness_1 _C131 1 table_happiness_1 _C132 1 table_happiness_1 _C133 1 table_happiness_1 _C134 1 table_happiness_1 _C135 1 table_happiness_1 _C136 1 table_happiness_1 _C137 1 table_happiness_1 _C138 1 table_happiness_1 _C139 1 table_happiness_1 _C140 1 table_happiness_1 _C141 1 table_happiness_1 _C142 1 table_happiness_1 _C143 1 table_happiness_1 _C144 1 table_happiness_1 _C145 1 table_happiness_1 _C146 1 table_happiness_1 _C147 1 table_happiness_1 _C148 1 table_happiness_1 _C149 1 table_happiness_1 _C150 1 table_happiness_1 _C151 1 table_happiness_1 _C152 1 table_happiness_1 _C153 1 table_happiness_1 _C154 1 table_happiness_1 _C155 1 table_happiness_1 _C156 1 table_happiness_1 _C157 1 table_happiness_1 _C158 1 table_happiness_1 _C159 1 table_happiness_1 _C160 1 table_happiness_1 _C161 1 table_happiness_1 _C162 1 table_happiness_1 _C163 1 table_happiness_1 _C164 1 table_happiness_1 _C165 1 table_happiness_1 _C166 1 table_happiness_1 _C167 1 table_happiness_1 _C168 1 table_happiness_1 _C169 1 table_happiness_1 _C170 1 table_happiness_1 _C171 1 table_happiness_1 _C172 1 table_happiness_1 _C173 1 table_happiness_1 _C174 1 table_happiness_1 _C175 1 table_happiness_1 _C176 1 table_happiness_1 _C177 1 table_happiness_1 _C178 1 table_happiness_1 _C179 1 table_happiness_1 _C180 1 table_happiness_1 _C181 1 table_happiness_1 _C182 1 table_happiness_1 _C183 1 table_happiness_1 _C184 1 table_happiness_1 _C185 1 table_happiness_1 _C186 1 table_happiness_1 _C187 1 table_happiness_1 _C188 1 table_happiness_1 _C189 1 table_happiness_1 _C190 1 table_happiness_1 _C191 1 table_happiness_1 _C192 1 table_happiness_1 _C193 1 table_happiness_1 _C194 1 table_happiness_1 _C195 1 table_happiness_1 _C196 1 table_happiness_1 _C197 1 table_happiness_1 _C198 1 table_happiness_1 _C199 1 table_happiness_1 _C200 1 table_happiness_1 _C201 1 table_happiness_1 _C202 1 table_happiness_1 _C203 1 table_happiness_1 _C204 1 table_happiness_1 _C205 1 table_happiness_1 _C206 1 table_happiness_1 _C207 1 table_happiness_1 _C208 1 table_happiness_1 _C209 1 table_happiness_1 _C210 1 table_happiness_1 _C211 1 table_happiness_1 _C212 1 table_happiness_1 _C213 1 table_happiness_1 _C214 1 table_happiness_1 _C215 1 table_happiness_1 _C216 1 table_happiness_1 _C217 1 table_happiness_1 _C218 1 table_happiness_1 _C219 1 table_happiness_1 _C220 1 table_happiness_1 _C221 1 table_happiness_1 _C222 1 table_happiness_1 _C223 1 table_happiness_1 _C224 1 table_happiness_1 _C225 1 table_happiness_1 _C226 1 table_happiness_1 _C227 1 table_happiness_1 _C228 1 table_happiness_1 _C229 1 table_happiness_1 _C230 1 table_happiness_1 _C231 1 table_happiness_1 _C232 1 table_happiness_1 _C233 1 table_happiness_1 _C234 1 table_happiness_1 _C235 1 table_happiness_1 _C236 1 table_happiness_1 _C237 1 table_happiness_1 _C238 1 table_happiness_1 _C239 1 table_happiness_1 _C240 1 table_happiness_2 OBJ 1 table_happiness_2 _C241 1 table_happiness_2 _C242 1 table_happiness_2 _C243 1 table_happiness_2 _C244 1 table_happiness_2 _C245 1 table_happiness_2 _C246 1 table_happiness_2 _C247 1 table_happiness_2 _C248 1 table_happiness_2 _C249 1 table_happiness_2 _C250 1 table_happiness_2 _C251 1 table_happiness_2 _C252 1 table_happiness_2 _C253 1 table_happiness_2 _C254 1 table_happiness_2 _C255 1 table_happiness_2 _C256 1 table_happiness_2 _C257 1 table_happiness_2 _C258 1 table_happiness_2 _C259 1 table_happiness_2 _C260 1 table_happiness_2 _C261 1 table_happiness_2 _C262 1 table_happiness_2 _C263 1 table_happiness_2 _C264 1 table_happiness_2 _C265 1 table_happiness_2 _C266 1 table_happiness_2 _C267 1 table_happiness_2 _C268 1 table_happiness_2 _C269 1 table_happiness_2 _C270 1 table_happiness_2 _C271 1 table_happiness_2 _C272 1 table_happiness_2 _C273 1 table_happiness_2 _C274 1 table_happiness_2 _C275 1 table_happiness_2 _C276 1 table_happiness_2 _C277 1 table_happiness_2 _C278 1 table_happiness_2 _C279 1 table_happiness_2 _C280 1 table_happiness_2 _C281 1 table_happiness_2 _C282 1 table_happiness_2 _C283 1 table_happiness_2 _C284 1 table_happiness_2 _C285 1 table_happiness_2 _C286 1 table_happiness_2 _C287 1 table_happiness_2 _C288 1 table_happiness_2 _C289 1 table_happiness_2 _C290 1 table_happiness_2 _C291 1 table_happiness_2 _C292 1 table_happiness_2 _C293 1 table_happiness_2 _C294 1 table_happiness_2 _C295 1 table_happiness_2 _C296 1 table_happiness_2 _C297 1 table_happiness_2 _C298 1 table_happiness_2 _C299 1 table_happiness_2 _C300 1 table_happiness_2 _C301 1 table_happiness_2 _C302 1 table_happiness_2 _C303 1 table_happiness_2 _C304 1 table_happiness_2 _C305 1 table_happiness_2 _C306 1 table_happiness_2 _C307 1 table_happiness_2 _C308 1 table_happiness_2 _C309 1 table_happiness_2 _C310 1 table_happiness_2 _C311 1 table_happiness_2 _C312 1 table_happiness_2 _C313 1 table_happiness_2 _C314 1 table_happiness_2 _C315 1 table_happiness_2 _C316 1 table_happiness_2 _C317 1 table_happiness_2 _C318 1 table_happiness_2 _C319 1 table_happiness_2 _C320 1 table_happiness_2 _C321 1 table_happiness_2 _C322 1 table_happiness_2 _C323 1 table_happiness_2 _C324 1 table_happiness_2 _C325 1 table_happiness_2 _C326 1 table_happiness_2 _C327 1 table_happiness_2 _C328 1 table_happiness_2 _C329 1 table_happiness_2 _C330 1 table_happiness_2 _C331 1 table_happiness_2 _C332 1 table_happiness_2 _C333 1 table_happiness_2 _C334 1 table_happiness_2 _C335 1 table_happiness_2 _C336 1 table_happiness_2 _C337 1 table_happiness_2 _C338 1 table_happiness_2 _C339 1 table_happiness_2 _C340 1 table_happiness_2 _C341 1 table_happiness_2 _C342 1 table_happiness_2 _C343 1 table_happiness_2 _C344 1 table_happiness_2 _C345 1 table_happiness_2 _C346 1 table_happiness_2 _C347 1 table_happiness_2 _C348 1 table_happiness_2 _C349 1 table_happiness_2 _C350 1 table_happiness_2 _C351 1 table_happiness_2 _C352 1 table_happiness_2 _C353 1 table_happiness_2 _C354 1 table_happiness_2 _C355 1 table_happiness_2 _C356 1 table_happiness_2 _C357 1 table_happiness_2 _C358 1 table_happiness_2 _C359 1 table_happiness_2 _C360 1 table_happiness_3 OBJ 1 table_happiness_3 _C361 1 table_happiness_3 _C362 1 table_happiness_3 _C363 1 table_happiness_3 _C364 1 table_happiness_3 _C365 1 table_happiness_3 _C366 1 table_happiness_3 _C367 1 table_happiness_3 _C368 1 table_happiness_3 _C369 1 table_happiness_3 _C370 1 table_happiness_3 _C371 1 table_happiness_3 _C372 1 table_happiness_3 _C373 1 table_happiness_3 _C374 1 table_happiness_3 _C375 1 table_happiness_3 _C376 1 table_happiness_3 _C377 1 table_happiness_3 _C378 1 table_happiness_3 _C379 1 table_happiness_3 _C380 1 table_happiness_3 _C381 1 table_happiness_3 _C382 1 table_happiness_3 _C383 1 table_happiness_3 _C384 1 table_happiness_3 _C385 1 table_happiness_3 _C386 1 table_happiness_3 _C387 1 table_happiness_3 _C388 1 table_happiness_3 _C389 1 table_happiness_3 _C390 1 table_happiness_3 _C391 1 table_happiness_3 _C392 1 table_happiness_3 _C393 1 table_happiness_3 _C394 1 table_happiness_3 _C395 1 table_happiness_3 _C396 1 table_happiness_3 _C397 1 table_happiness_3 _C398 1 table_happiness_3 _C399 1 table_happiness_3 _C400 1 table_happiness_3 _C401 1 table_happiness_3 _C402 1 table_happiness_3 _C403 1 table_happiness_3 _C404 1 table_happiness_3 _C405 1 table_happiness_3 _C406 1 table_happiness_3 _C407 1 table_happiness_3 _C408 1 table_happiness_3 _C409 1 table_happiness_3 _C410 1 table_happiness_3 _C411 1 table_happiness_3 _C412 1 table_happiness_3 _C413 1 table_happiness_3 _C414 1 table_happiness_3 _C415 1 table_happiness_3 _C416 1 table_happiness_3 _C417 1 table_happiness_3 _C418 1 table_happiness_3 _C419 1 table_happiness_3 _C420 1 table_happiness_3 _C421 1 table_happiness_3 _C422 1 table_happiness_3 _C423 1 table_happiness_3 _C424 1 table_happiness_3 _C425 1 table_happiness_3 _C426 1 table_happiness_3 _C427 1 table_happiness_3 _C428 1 table_happiness_3 _C429 1 table_happiness_3 _C430 1 table_happiness_3 _C431 1 table_happiness_3 _C432 1 table_happiness_3 _C433 1 table_happiness_3 _C434 1 table_happiness_3 _C435 1 table_happiness_3 _C436 1 table_happiness_3 _C437 1 table_happiness_3 _C438 1 table_happiness_3 _C439 1 table_happiness_3 _C440 1 table_happiness_3 _C441 1 table_happiness_3 _C442 1 table_happiness_3 _C443 1 table_happiness_3 _C444 1 table_happiness_3 _C445 1 table_happiness_3 _C446 1 table_happiness_3 _C447 1 table_happiness_3 _C448 1 table_happiness_3 _C449 1 table_happiness_3 _C450 1 table_happiness_3 _C451 1 table_happiness_3 _C452 1 table_happiness_3 _C453 1 table_happiness_3 _C454 1 table_happiness_3 _C455 1 table_happiness_3 _C456 1 table_happiness_3 _C457 1 table_happiness_3 _C458 1 table_happiness_3 _C459 1 table_happiness_3 _C460 1 table_happiness_3 _C461 1 table_happiness_3 _C462 1 table_happiness_3 _C463 1 table_happiness_3 _C464 1 table_happiness_3 _C465 1 table_happiness_3 _C466 1 table_happiness_3 _C467 1 table_happiness_3 _C468 1 table_happiness_3 _C469 1 table_happiness_3 _C470 1 table_happiness_3 _C471 1 table_happiness_3 _C472 1 table_happiness_3 _C473 1 table_happiness_3 _C474 1 table_happiness_3 _C475 1 table_happiness_3 _C476 1 table_happiness_3 _C477 1 table_happiness_3 _C478 1 table_happiness_3 _C479 1 table_happiness_3 _C480 1 table_happiness_4 OBJ 1 table_happiness_4 _C481 1 table_happiness_4 _C482 1 table_happiness_4 _C483 1 table_happiness_4 _C484 1 table_happiness_4 _C485 1 table_happiness_4 _C486 1 table_happiness_4 _C487 1 table_happiness_4 _C488 1 table_happiness_4 _C489 1 table_happiness_4 _C490 1 table_happiness_4 _C491 1 table_happiness_4 _C492 1 table_happiness_4 _C493 1 table_happiness_4 _C494 1 table_happiness_4 _C495 1 table_happiness_4 _C496 1 table_happiness_4 _C497 1 table_happiness_4 _C498 1 table_happiness_4 _C499 1 table_happiness_4 _C500 1 table_happiness_4 _C501 1 table_happiness_4 _C502 1 table_happiness_4 _C503 1 table_happiness_4 _C504 1 table_happiness_4 _C505 1 table_happiness_4 _C506 1 table_happiness_4 _C507 1 table_happiness_4 _C508 1 table_happiness_4 _C509 1 table_happiness_4 _C510 1 table_happiness_4 _C511 1 table_happiness_4 _C512 1 table_happiness_4 _C513 1 table_happiness_4 _C514 1 table_happiness_4 _C515 1 table_happiness_4 _C516 1 table_happiness_4 _C517 1 table_happiness_4 _C518 1 table_happiness_4 _C519 1 table_happiness_4 _C520 1 table_happiness_4 _C521 1 table_happiness_4 _C522 1 table_happiness_4 _C523 1 table_happiness_4 _C524 1 table_happiness_4 _C525 1 table_happiness_4 _C526 1 table_happiness_4 _C527 1 table_happiness_4 _C528 1 table_happiness_4 _C529 1 table_happiness_4 _C530 1 table_happiness_4 _C531 1 table_happiness_4 _C532 1 table_happiness_4 _C533 1 table_happiness_4 _C534 1 table_happiness_4 _C535 1 table_happiness_4 _C536 1 table_happiness_4 _C537 1 table_happiness_4 _C538 1 table_happiness_4 _C539 1 table_happiness_4 _C540 1 table_happiness_4 _C541 1 table_happiness_4 _C542 1 table_happiness_4 _C543 1 table_happiness_4 _C544 1 table_happiness_4 _C545 1 table_happiness_4 _C546 1 table_happiness_4 _C547 1 table_happiness_4 _C548 1 table_happiness_4 _C549 1 table_happiness_4 _C550 1 table_happiness_4 _C551 1 table_happiness_4 _C552 1 table_happiness_4 _C553 1 table_happiness_4 _C554 1 table_happiness_4 _C555 1 table_happiness_4 _C556 1 table_happiness_4 _C557 1 table_happiness_4 _C558 1 table_happiness_4 _C559 1 table_happiness_4 _C560 1 table_happiness_4 _C561 1 table_happiness_4 _C562 1 table_happiness_4 _C563 1 table_happiness_4 _C564 1 table_happiness_4 _C565 1 table_happiness_4 _C566 1 table_happiness_4 _C567 1 table_happiness_4 _C568 1 table_happiness_4 _C569 1 table_happiness_4 _C570 1 table_happiness_4 _C571 1 table_happiness_4 _C572 1 table_happiness_4 _C573 1 table_happiness_4 _C574 1 table_happiness_4 _C575 1 table_happiness_4 _C576 1 table_happiness_4 _C577 1 table_happiness_4 _C578 1 table_happiness_4 _C579 1 table_happiness_4 _C580 1 table_happiness_4 _C581 1 table_happiness_4 _C582 1 table_happiness_4 _C583 1 table_happiness_4 _C584 1 table_happiness_4 _C585 1 table_happiness_4 _C586 1 table_happiness_4 _C587 1 table_happiness_4 _C588 1 table_happiness_4 _C589 1 table_happiness_4 _C590 1 table_happiness_4 _C591 1 table_happiness_4 _C592 1 table_happiness_4 _C593 1 table_happiness_4 _C594 1 table_happiness_4 _C595 1 table_happiness_4 _C596 1 table_happiness_4 _C597 1 table_happiness_4 _C598 1 table_happiness_4 _C599 1 table_happiness_4 _C600 1 MARK0000 'MARKER' 'INTORG' possible_seatings_('A',_0) Maximum_table_size_0 1 possible_seatings_('A',_0) Must_seat_A 1 possible_seatings_('A',_0) _C1 -1 possible_seatings_('A',_0) _C10 -10 possible_seatings_('A',_0) _C11 -11 possible_seatings_('A',_0) _C12 -12 possible_seatings_('A',_0) _C13 -13 possible_seatings_('A',_0) _C14 -14 possible_seatings_('A',_0) _C15 -15 possible_seatings_('A',_0) _C2 -2 possible_seatings_('A',_0) _C3 -3 possible_seatings_('A',_0) _C4 -4 possible_seatings_('A',_0) _C5 -5 possible_seatings_('A',_0) _C6 -6 possible_seatings_('A',_0) _C7 -7 possible_seatings_('A',_0) _C8 -8 possible_seatings_('A',_0) _C9 -9 possible_seatings_('B',_0) Maximum_table_size_0 1 possible_seatings_('B',_0) Must_seat_B 1 possible_seatings_('B',_0) _C1 -1 possible_seatings_('B',_0) _C16 -1 possible_seatings_('B',_0) _C17 -2 possible_seatings_('B',_0) _C18 -3 possible_seatings_('B',_0) _C19 -4 possible_seatings_('B',_0) _C20 -5 possible_seatings_('B',_0) _C21 -6 possible_seatings_('B',_0) _C22 -7 possible_seatings_('B',_0) _C23 -8 possible_seatings_('B',_0) _C24 -9 possible_seatings_('B',_0) _C25 -10 possible_seatings_('B',_0) _C26 -11 possible_seatings_('B',_0) _C27 -12 possible_seatings_('B',_0) _C28 -13 possible_seatings_('B',_0) _C29 -14 possible_seatings_('C',_0) Maximum_table_size_0 1 possible_seatings_('C',_0) Must_seat_C 1 possible_seatings_('C',_0) _C16 -1 possible_seatings_('C',_0) _C2 -2 possible_seatings_('C',_0) _C30 -1 possible_seatings_('C',_0) _C31 -2 possible_seatings_('C',_0) _C32 -3 possible_seatings_('C',_0) _C33 -4 possible_seatings_('C',_0) _C34 -5 possible_seatings_('C',_0) _C35 -6 possible_seatings_('C',_0) _C36 -7 possible_seatings_('C',_0) _C37 -8 possible_seatings_('C',_0) _C38 -9 possible_seatings_('C',_0) _C39 -10 possible_seatings_('C',_0) _C40 -11 possible_seatings_('C',_0) _C41 -12 possible_seatings_('C',_0) _C42 -13 possible_seatings_('D',_0) Maximum_table_size_0 1 possible_seatings_('D',_0) Must_seat_D 1 possible_seatings_('D',_0) _C17 -2 possible_seatings_('D',_0) _C3 -3 possible_seatings_('D',_0) _C30 -1 possible_seatings_('D',_0) _C43 -1 possible_seatings_('D',_0) _C44 -2 possible_seatings_('D',_0) _C45 -3 possible_seatings_('D',_0) _C46 -4 possible_seatings_('D',_0) _C47 -5 possible_seatings_('D',_0) _C48 -6 possible_seatings_('D',_0) _C49 -7 possible_seatings_('D',_0) _C50 -8 possible_seatings_('D',_0) _C51 -9 possible_seatings_('D',_0) _C52 -10 possible_seatings_('D',_0) _C53 -11 possible_seatings_('D',_0) _C54 -12 possible_seatings_('E',_0) Maximum_table_size_0 1 possible_seatings_('E',_0) Must_seat_E 1 possible_seatings_('E',_0) _C18 -3 possible_seatings_('E',_0) _C31 -2 possible_seatings_('E',_0) _C4 -4 possible_seatings_('E',_0) _C43 -1 possible_seatings_('E',_0) _C55 -1 possible_seatings_('E',_0) _C56 -2 possible_seatings_('E',_0) _C57 -3 possible_seatings_('E',_0) _C58 -4 possible_seatings_('E',_0) _C59 -5 possible_seatings_('E',_0) _C60 -6 possible_seatings_('E',_0) _C61 -7 possible_seatings_('E',_0) _C62 -8 possible_seatings_('E',_0) _C63 -9 possible_seatings_('E',_0) _C64 -10 possible_seatings_('E',_0) _C65 -11 possible_seatings_('F',_0) Maximum_table_size_0 1 possible_seatings_('F',_0) Must_seat_F 1 possible_seatings_('F',_0) _C19 -4 possible_seatings_('F',_0) _C32 -3 possible_seatings_('F',_0) _C44 -2 possible_seatings_('F',_0) _C5 -5 possible_seatings_('F',_0) _C55 -1 possible_seatings_('F',_0) _C66 -1 possible_seatings_('F',_0) _C67 -2 possible_seatings_('F',_0) _C68 -3 possible_seatings_('F',_0) _C69 -4 possible_seatings_('F',_0) _C70 -5 possible_seatings_('F',_0) _C71 -6 possible_seatings_('F',_0) _C72 -7 possible_seatings_('F',_0) _C73 -8 possible_seatings_('F',_0) _C74 -9 possible_seatings_('F',_0) _C75 -10 possible_seatings_('G',_0) Maximum_table_size_0 1 possible_seatings_('G',_0) Must_seat_G 1 possible_seatings_('G',_0) _C20 -5 possible_seatings_('G',_0) _C33 -4 possible_seatings_('G',_0) _C45 -3 possible_seatings_('G',_0) _C56 -2 possible_seatings_('G',_0) _C6 -6 possible_seatings_('G',_0) _C66 -1 possible_seatings_('G',_0) _C76 -1 possible_seatings_('G',_0) _C77 -2 possible_seatings_('G',_0) _C78 -3 possible_seatings_('G',_0) _C79 -4 possible_seatings_('G',_0) _C80 -5 possible_seatings_('G',_0) _C81 -6 possible_seatings_('G',_0) _C82 -7 possible_seatings_('G',_0) _C83 -8 possible_seatings_('G',_0) _C84 -9 possible_seatings_('H',_0) Maximum_table_size_0 1 possible_seatings_('H',_0) Must_seat_H 1 possible_seatings_('H',_0) _C21 -6 possible_seatings_('H',_0) _C34 -5 possible_seatings_('H',_0) _C46 -4 possible_seatings_('H',_0) _C57 -3 possible_seatings_('H',_0) _C67 -2 possible_seatings_('H',_0) _C7 -7 possible_seatings_('H',_0) _C76 -1 possible_seatings_('H',_0) _C85 -1 possible_seatings_('H',_0) _C86 -2 possible_seatings_('H',_0) _C87 -3 possible_seatings_('H',_0) _C88 -4 possible_seatings_('H',_0) _C89 -5 possible_seatings_('H',_0) _C90 -6 possible_seatings_('H',_0) _C91 -7 possible_seatings_('H',_0) _C92 -8 possible_seatings_('I',_0) Maximum_table_size_0 1 possible_seatings_('I',_0) Must_seat_I 1 possible_seatings_('I',_0) _C22 -7 possible_seatings_('I',_0) _C35 -6 possible_seatings_('I',_0) _C47 -5 possible_seatings_('I',_0) _C58 -4 possible_seatings_('I',_0) _C68 -3 possible_seatings_('I',_0) _C77 -2 possible_seatings_('I',_0) _C8 -8 possible_seatings_('I',_0) _C85 -1 possible_seatings_('I',_0) _C93 -1 possible_seatings_('I',_0) _C94 -2 possible_seatings_('I',_0) _C95 -3 possible_seatings_('I',_0) _C96 -4 possible_seatings_('I',_0) _C97 -5 possible_seatings_('I',_0) _C98 -6 possible_seatings_('I',_0) _C99 -7 possible_seatings_('J',_0) Maximum_table_size_0 1 possible_seatings_('J',_0) Must_seat_J 1 possible_seatings_('J',_0) _C100 -1 possible_seatings_('J',_0) _C101 -2 possible_seatings_('J',_0) _C102 -3 possible_seatings_('J',_0) _C103 -4 possible_seatings_('J',_0) _C104 -5 possible_seatings_('J',_0) _C105 -6 possible_seatings_('J',_0) _C23 -8 possible_seatings_('J',_0) _C36 -7 possible_seatings_('J',_0) _C48 -6 possible_seatings_('J',_0) _C59 -5 possible_seatings_('J',_0) _C69 -4 possible_seatings_('J',_0) _C78 -3 possible_seatings_('J',_0) _C86 -2 possible_seatings_('J',_0) _C9 -9 possible_seatings_('J',_0) _C93 -1 possible_seatings_('K',_0) Maximum_table_size_0 1 possible_seatings_('K',_0) Must_seat_K 1 possible_seatings_('K',_0) _C10 -10 possible_seatings_('K',_0) _C100 -1 possible_seatings_('K',_0) _C106 -1 possible_seatings_('K',_0) _C107 -2 possible_seatings_('K',_0) _C108 -3 possible_seatings_('K',_0) _C109 -4 possible_seatings_('K',_0) _C110 -5 possible_seatings_('K',_0) _C24 -9 possible_seatings_('K',_0) _C37 -8 possible_seatings_('K',_0) _C49 -7 possible_seatings_('K',_0) _C60 -6 possible_seatings_('K',_0) _C70 -5 possible_seatings_('K',_0) _C79 -4 possible_seatings_('K',_0) _C87 -3 possible_seatings_('K',_0) _C94 -2 possible_seatings_('L',_0) Maximum_table_size_0 1 possible_seatings_('L',_0) Must_seat_L 1 possible_seatings_('L',_0) _C101 -2 possible_seatings_('L',_0) _C106 -1 possible_seatings_('L',_0) _C11 -11 possible_seatings_('L',_0) _C111 -1 possible_seatings_('L',_0) _C112 -2 possible_seatings_('L',_0) _C113 -3 possible_seatings_('L',_0) _C114 -4 possible_seatings_('L',_0) _C25 -10 possible_seatings_('L',_0) _C38 -9 possible_seatings_('L',_0) _C50 -8 possible_seatings_('L',_0) _C61 -7 possible_seatings_('L',_0) _C71 -6 possible_seatings_('L',_0) _C80 -5 possible_seatings_('L',_0) _C88 -4 possible_seatings_('L',_0) _C95 -3 possible_seatings_('M',_0) Maximum_table_size_0 1 possible_seatings_('M',_0) Must_seat_M 1 possible_seatings_('M',_0) _C102 -3 possible_seatings_('M',_0) _C107 -2 possible_seatings_('M',_0) _C111 -1 possible_seatings_('M',_0) _C115 -1 possible_seatings_('M',_0) _C116 -2 possible_seatings_('M',_0) _C117 -3 possible_seatings_('M',_0) _C12 -12 possible_seatings_('M',_0) _C26 -11 possible_seatings_('M',_0) _C39 -10 possible_seatings_('M',_0) _C51 -9 possible_seatings_('M',_0) _C62 -8 possible_seatings_('M',_0) _C72 -7 possible_seatings_('M',_0) _C81 -6 possible_seatings_('M',_0) _C89 -5 possible_seatings_('M',_0) _C96 -4 possible_seatings_('N',_0) Maximum_table_size_0 1 possible_seatings_('N',_0) Must_seat_N 1 possible_seatings_('N',_0) _C103 -4 possible_seatings_('N',_0) _C108 -3 possible_seatings_('N',_0) _C112 -2 possible_seatings_('N',_0) _C115 -1 possible_seatings_('N',_0) _C118 -1 possible_seatings_('N',_0) _C119 -2 possible_seatings_('N',_0) _C13 -13 possible_seatings_('N',_0) _C27 -12 possible_seatings_('N',_0) _C40 -11 possible_seatings_('N',_0) _C52 -10 possible_seatings_('N',_0) _C63 -9 possible_seatings_('N',_0) _C73 -8 possible_seatings_('N',_0) _C82 -7 possible_seatings_('N',_0) _C90 -6 possible_seatings_('N',_0) _C97 -5 possible_seatings_('O',_0) Maximum_table_size_0 1 possible_seatings_('O',_0) Must_seat_O 1 possible_seatings_('O',_0) _C104 -5 possible_seatings_('O',_0) _C109 -4 possible_seatings_('O',_0) _C113 -3 possible_seatings_('O',_0) _C116 -2 possible_seatings_('O',_0) _C118 -1 possible_seatings_('O',_0) _C120 -1 possible_seatings_('O',_0) _C14 -14 possible_seatings_('O',_0) _C28 -13 possible_seatings_('O',_0) _C41 -12 possible_seatings_('O',_0) _C53 -11 possible_seatings_('O',_0) _C64 -10 possible_seatings_('O',_0) _C74 -9 possible_seatings_('O',_0) _C83 -8 possible_seatings_('O',_0) _C91 -7 possible_seatings_('O',_0) _C98 -6 possible_seatings_('P',_0) Maximum_table_size_0 1 possible_seatings_('P',_0) Must_seat_P 1 possible_seatings_('P',_0) _C105 -6 possible_seatings_('P',_0) _C110 -5 possible_seatings_('P',_0) _C114 -4 possible_seatings_('P',_0) _C117 -3 possible_seatings_('P',_0) _C119 -2 possible_seatings_('P',_0) _C120 -1 possible_seatings_('P',_0) _C15 -15 possible_seatings_('P',_0) _C29 -14 possible_seatings_('P',_0) _C42 -13 possible_seatings_('P',_0) _C54 -12 possible_seatings_('P',_0) _C65 -11 possible_seatings_('P',_0) _C75 -10 possible_seatings_('P',_0) _C84 -9 possible_seatings_('P',_0) _C92 -8 possible_seatings_('P',_0) _C99 -7 possible_seatings_('A',_1) Maximum_table_size_1 1 possible_seatings_('A',_1) Must_seat_A 1 possible_seatings_('A',_1) _C121 -1 possible_seatings_('A',_1) _C122 -2 possible_seatings_('A',_1) _C123 -3 possible_seatings_('A',_1) _C124 -4 possible_seatings_('A',_1) _C125 -5 possible_seatings_('A',_1) _C126 -6 possible_seatings_('A',_1) _C127 -7 possible_seatings_('A',_1) _C128 -8 possible_seatings_('A',_1) _C129 -9 possible_seatings_('A',_1) _C130 -10 possible_seatings_('A',_1) _C131 -11 possible_seatings_('A',_1) _C132 -12 possible_seatings_('A',_1) _C133 -13 possible_seatings_('A',_1) _C134 -14 possible_seatings_('A',_1) _C135 -15 possible_seatings_('B',_1) Maximum_table_size_1 1 possible_seatings_('B',_1) Must_seat_B 1 possible_seatings_('B',_1) _C121 -1 possible_seatings_('B',_1) _C136 -1 possible_seatings_('B',_1) _C137 -2 possible_seatings_('B',_1) _C138 -3 possible_seatings_('B',_1) _C139 -4 possible_seatings_('B',_1) _C140 -5 possible_seatings_('B',_1) _C141 -6 possible_seatings_('B',_1) _C142 -7 possible_seatings_('B',_1) _C143 -8 possible_seatings_('B',_1) _C144 -9 possible_seatings_('B',_1) _C145 -10 possible_seatings_('B',_1) _C146 -11 possible_seatings_('B',_1) _C147 -12 possible_seatings_('B',_1) _C148 -13 possible_seatings_('B',_1) _C149 -14 possible_seatings_('C',_1) Maximum_table_size_1 1 possible_seatings_('C',_1) Must_seat_C 1 possible_seatings_('C',_1) _C122 -2 possible_seatings_('C',_1) _C136 -1 possible_seatings_('C',_1) _C150 -1 possible_seatings_('C',_1) _C151 -2 possible_seatings_('C',_1) _C152 -3 possible_seatings_('C',_1) _C153 -4 possible_seatings_('C',_1) _C154 -5 possible_seatings_('C',_1) _C155 -6 possible_seatings_('C',_1) _C156 -7 possible_seatings_('C',_1) _C157 -8 possible_seatings_('C',_1) _C158 -9 possible_seatings_('C',_1) _C159 -10 possible_seatings_('C',_1) _C160 -11 possible_seatings_('C',_1) _C161 -12 possible_seatings_('C',_1) _C162 -13 possible_seatings_('D',_1) Maximum_table_size_1 1 possible_seatings_('D',_1) Must_seat_D 1 possible_seatings_('D',_1) _C123 -3 possible_seatings_('D',_1) _C137 -2 possible_seatings_('D',_1) _C150 -1 possible_seatings_('D',_1) _C163 -1 possible_seatings_('D',_1) _C164 -2 possible_seatings_('D',_1) _C165 -3 possible_seatings_('D',_1) _C166 -4 possible_seatings_('D',_1) _C167 -5 possible_seatings_('D',_1) _C168 -6 possible_seatings_('D',_1) _C169 -7 possible_seatings_('D',_1) _C170 -8 possible_seatings_('D',_1) _C171 -9 possible_seatings_('D',_1) _C172 -10 possible_seatings_('D',_1) _C173 -11 possible_seatings_('D',_1) _C174 -12 possible_seatings_('E',_1) Maximum_table_size_1 1 possible_seatings_('E',_1) Must_seat_E 1 possible_seatings_('E',_1) _C124 -4 possible_seatings_('E',_1) _C138 -3 possible_seatings_('E',_1) _C151 -2 possible_seatings_('E',_1) _C163 -1 possible_seatings_('E',_1) _C175 -1 possible_seatings_('E',_1) _C176 -2 possible_seatings_('E',_1) _C177 -3 possible_seatings_('E',_1) _C178 -4 possible_seatings_('E',_1) _C179 -5 possible_seatings_('E',_1) _C180 -6 possible_seatings_('E',_1) _C181 -7 possible_seatings_('E',_1) _C182 -8 possible_seatings_('E',_1) _C183 -9 possible_seatings_('E',_1) _C184 -10 possible_seatings_('E',_1) _C185 -11 possible_seatings_('F',_1) Maximum_table_size_1 1 possible_seatings_('F',_1) Must_seat_F 1 possible_seatings_('F',_1) _C125 -5 possible_seatings_('F',_1) _C139 -4 possible_seatings_('F',_1) _C152 -3 possible_seatings_('F',_1) _C164 -2 possible_seatings_('F',_1) _C175 -1 possible_seatings_('F',_1) _C186 -1 possible_seatings_('F',_1) _C187 -2 possible_seatings_('F',_1) _C188 -3 possible_seatings_('F',_1) _C189 -4 possible_seatings_('F',_1) _C190 -5 possible_seatings_('F',_1) _C191 -6 possible_seatings_('F',_1) _C192 -7 possible_seatings_('F',_1) _C193 -8 possible_seatings_('F',_1) _C194 -9 possible_seatings_('F',_1) _C195 -10 possible_seatings_('G',_1) Maximum_table_size_1 1 possible_seatings_('G',_1) Must_seat_G 1 possible_seatings_('G',_1) _C126 -6 possible_seatings_('G',_1) _C140 -5 possible_seatings_('G',_1) _C153 -4 possible_seatings_('G',_1) _C165 -3 possible_seatings_('G',_1) _C176 -2 possible_seatings_('G',_1) _C186 -1 possible_seatings_('G',_1) _C196 -1 possible_seatings_('G',_1) _C197 -2 possible_seatings_('G',_1) _C198 -3 possible_seatings_('G',_1) _C199 -4 possible_seatings_('G',_1) _C200 -5 possible_seatings_('G',_1) _C201 -6 possible_seatings_('G',_1) _C202 -7 possible_seatings_('G',_1) _C203 -8 possible_seatings_('G',_1) _C204 -9 possible_seatings_('H',_1) Maximum_table_size_1 1 possible_seatings_('H',_1) Must_seat_H 1 possible_seatings_('H',_1) _C127 -7 possible_seatings_('H',_1) _C141 -6 possible_seatings_('H',_1) _C154 -5 possible_seatings_('H',_1) _C166 -4 possible_seatings_('H',_1) _C177 -3 possible_seatings_('H',_1) _C187 -2 possible_seatings_('H',_1) _C196 -1 possible_seatings_('H',_1) _C205 -1 possible_seatings_('H',_1) _C206 -2 possible_seatings_('H',_1) _C207 -3 possible_seatings_('H',_1) _C208 -4 possible_seatings_('H',_1) _C209 -5 possible_seatings_('H',_1) _C210 -6 possible_seatings_('H',_1) _C211 -7 possible_seatings_('H',_1) _C212 -8 possible_seatings_('I',_1) Maximum_table_size_1 1 possible_seatings_('I',_1) Must_seat_I 1 possible_seatings_('I',_1) _C128 -8 possible_seatings_('I',_1) _C142 -7 possible_seatings_('I',_1) _C155 -6 possible_seatings_('I',_1) _C167 -5 possible_seatings_('I',_1) _C178 -4 possible_seatings_('I',_1) _C188 -3 possible_seatings_('I',_1) _C197 -2 possible_seatings_('I',_1) _C205 -1 possible_seatings_('I',_1) _C213 -1 possible_seatings_('I',_1) _C214 -2 possible_seatings_('I',_1) _C215 -3 possible_seatings_('I',_1) _C216 -4 possible_seatings_('I',_1) _C217 -5 possible_seatings_('I',_1) _C218 -6 possible_seatings_('I',_1) _C219 -7 possible_seatings_('J',_1) Maximum_table_size_1 1 possible_seatings_('J',_1) Must_seat_J 1 possible_seatings_('J',_1) _C129 -9 possible_seatings_('J',_1) _C143 -8 possible_seatings_('J',_1) _C156 -7 possible_seatings_('J',_1) _C168 -6 possible_seatings_('J',_1) _C179 -5 possible_seatings_('J',_1) _C189 -4 possible_seatings_('J',_1) _C198 -3 possible_seatings_('J',_1) _C206 -2 possible_seatings_('J',_1) _C213 -1 possible_seatings_('J',_1) _C220 -1 possible_seatings_('J',_1) _C221 -2 possible_seatings_('J',_1) _C222 -3 possible_seatings_('J',_1) _C223 -4 possible_seatings_('J',_1) _C224 -5 possible_seatings_('J',_1) _C225 -6 possible_seatings_('K',_1) Maximum_table_size_1 1 possible_seatings_('K',_1) Must_seat_K 1 possible_seatings_('K',_1) _C130 -10 possible_seatings_('K',_1) _C144 -9 possible_seatings_('K',_1) _C157 -8 possible_seatings_('K',_1) _C169 -7 possible_seatings_('K',_1) _C180 -6 possible_seatings_('K',_1) _C190 -5 possible_seatings_('K',_1) _C199 -4 possible_seatings_('K',_1) _C207 -3 possible_seatings_('K',_1) _C214 -2 possible_seatings_('K',_1) _C220 -1 possible_seatings_('K',_1) _C226 -1 possible_seatings_('K',_1) _C227 -2 possible_seatings_('K',_1) _C228 -3 possible_seatings_('K',_1) _C229 -4 possible_seatings_('K',_1) _C230 -5 possible_seatings_('L',_1) Maximum_table_size_1 1 possible_seatings_('L',_1) Must_seat_L 1 possible_seatings_('L',_1) _C131 -11 possible_seatings_('L',_1) _C145 -10 possible_seatings_('L',_1) _C158 -9 possible_seatings_('L',_1) _C170 -8 possible_seatings_('L',_1) _C181 -7 possible_seatings_('L',_1) _C191 -6 possible_seatings_('L',_1) _C200 -5 possible_seatings_('L',_1) _C208 -4 possible_seatings_('L',_1) _C215 -3 possible_seatings_('L',_1) _C221 -2 possible_seatings_('L',_1) _C226 -1 possible_seatings_('L',_1) _C231 -1 possible_seatings_('L',_1) _C232 -2 possible_seatings_('L',_1) _C233 -3 possible_seatings_('L',_1) _C234 -4 possible_seatings_('M',_1) Maximum_table_size_1 1 possible_seatings_('M',_1) Must_seat_M 1 possible_seatings_('M',_1) _C132 -12 possible_seatings_('M',_1) _C146 -11 possible_seatings_('M',_1) _C159 -10 possible_seatings_('M',_1) _C171 -9 possible_seatings_('M',_1) _C182 -8 possible_seatings_('M',_1) _C192 -7 possible_seatings_('M',_1) _C201 -6 possible_seatings_('M',_1) _C209 -5 possible_seatings_('M',_1) _C216 -4 possible_seatings_('M',_1) _C222 -3 possible_seatings_('M',_1) _C227 -2 possible_seatings_('M',_1) _C231 -1 possible_seatings_('M',_1) _C235 -1 possible_seatings_('M',_1) _C236 -2 possible_seatings_('M',_1) _C237 -3 possible_seatings_('N',_1) Maximum_table_size_1 1 possible_seatings_('N',_1) Must_seat_N 1 possible_seatings_('N',_1) _C133 -13 possible_seatings_('N',_1) _C147 -12 possible_seatings_('N',_1) _C160 -11 possible_seatings_('N',_1) _C172 -10 possible_seatings_('N',_1) _C183 -9 possible_seatings_('N',_1) _C193 -8 possible_seatings_('N',_1) _C202 -7 possible_seatings_('N',_1) _C210 -6 possible_seatings_('N',_1) _C217 -5 possible_seatings_('N',_1) _C223 -4 possible_seatings_('N',_1) _C228 -3 possible_seatings_('N',_1) _C232 -2 possible_seatings_('N',_1) _C235 -1 possible_seatings_('N',_1) _C238 -1 possible_seatings_('N',_1) _C239 -2 possible_seatings_('O',_1) Maximum_table_size_1 1 possible_seatings_('O',_1) Must_seat_O 1 possible_seatings_('O',_1) _C134 -14 possible_seatings_('O',_1) _C148 -13 possible_seatings_('O',_1) _C161 -12 possible_seatings_('O',_1) _C173 -11 possible_seatings_('O',_1) _C184 -10 possible_seatings_('O',_1) _C194 -9 possible_seatings_('O',_1) _C203 -8 possible_seatings_('O',_1) _C211 -7 possible_seatings_('O',_1) _C218 -6 possible_seatings_('O',_1) _C224 -5 possible_seatings_('O',_1) _C229 -4 possible_seatings_('O',_1) _C233 -3 possible_seatings_('O',_1) _C236 -2 possible_seatings_('O',_1) _C238 -1 possible_seatings_('O',_1) _C240 -1 possible_seatings_('P',_1) Maximum_table_size_1 1 possible_seatings_('P',_1) Must_seat_P 1 possible_seatings_('P',_1) _C135 -15 possible_seatings_('P',_1) _C149 -14 possible_seatings_('P',_1) _C162 -13 possible_seatings_('P',_1) _C174 -12 possible_seatings_('P',_1) _C185 -11 possible_seatings_('P',_1) _C195 -10 possible_seatings_('P',_1) _C204 -9 possible_seatings_('P',_1) _C212 -8 possible_seatings_('P',_1) _C219 -7 possible_seatings_('P',_1) _C225 -6 possible_seatings_('P',_1) _C230 -5 possible_seatings_('P',_1) _C234 -4 possible_seatings_('P',_1) _C237 -3 possible_seatings_('P',_1) _C239 -2 possible_seatings_('P',_1) _C240 -1 possible_seatings_('A',_2) Maximum_table_size_2 1 possible_seatings_('A',_2) Must_seat_A 1 possible_seatings_('A',_2) _C241 -1 possible_seatings_('A',_2) _C242 -2 possible_seatings_('A',_2) _C243 -3 possible_seatings_('A',_2) _C244 -4 possible_seatings_('A',_2) _C245 -5 possible_seatings_('A',_2) _C246 -6 possible_seatings_('A',_2) _C247 -7 possible_seatings_('A',_2) _C248 -8 possible_seatings_('A',_2) _C249 -9 possible_seatings_('A',_2) _C250 -10 possible_seatings_('A',_2) _C251 -11 possible_seatings_('A',_2) _C252 -12 possible_seatings_('A',_2) _C253 -13 possible_seatings_('A',_2) _C254 -14 possible_seatings_('A',_2) _C255 -15 possible_seatings_('B',_2) Maximum_table_size_2 1 possible_seatings_('B',_2) Must_seat_B 1 possible_seatings_('B',_2) _C241 -1 possible_seatings_('B',_2) _C256 -1 possible_seatings_('B',_2) _C257 -2 possible_seatings_('B',_2) _C258 -3 possible_seatings_('B',_2) _C259 -4 possible_seatings_('B',_2) _C260 -5 possible_seatings_('B',_2) _C261 -6 possible_seatings_('B',_2) _C262 -7 possible_seatings_('B',_2) _C263 -8 possible_seatings_('B',_2) _C264 -9 possible_seatings_('B',_2) _C265 -10 possible_seatings_('B',_2) _C266 -11 possible_seatings_('B',_2) _C267 -12 possible_seatings_('B',_2) _C268 -13 possible_seatings_('B',_2) _C269 -14 possible_seatings_('C',_2) Maximum_table_size_2 1 possible_seatings_('C',_2) Must_seat_C 1 possible_seatings_('C',_2) _C242 -2 possible_seatings_('C',_2) _C256 -1 possible_seatings_('C',_2) _C270 -1 possible_seatings_('C',_2) _C271 -2 possible_seatings_('C',_2) _C272 -3 possible_seatings_('C',_2) _C273 -4 possible_seatings_('C',_2) _C274 -5 possible_seatings_('C',_2) _C275 -6 possible_seatings_('C',_2) _C276 -7 possible_seatings_('C',_2) _C277 -8 possible_seatings_('C',_2) _C278 -9 possible_seatings_('C',_2) _C279 -10 possible_seatings_('C',_2) _C280 -11 possible_seatings_('C',_2) _C281 -12 possible_seatings_('C',_2) _C282 -13 possible_seatings_('D',_2) Maximum_table_size_2 1 possible_seatings_('D',_2) Must_seat_D 1 possible_seatings_('D',_2) _C243 -3 possible_seatings_('D',_2) _C257 -2 possible_seatings_('D',_2) _C270 -1 possible_seatings_('D',_2) _C283 -1 possible_seatings_('D',_2) _C284 -2 possible_seatings_('D',_2) _C285 -3 possible_seatings_('D',_2) _C286 -4 possible_seatings_('D',_2) _C287 -5 possible_seatings_('D',_2) _C288 -6 possible_seatings_('D',_2) _C289 -7 possible_seatings_('D',_2) _C290 -8 possible_seatings_('D',_2) _C291 -9 possible_seatings_('D',_2) _C292 -10 possible_seatings_('D',_2) _C293 -11 possible_seatings_('D',_2) _C294 -12 possible_seatings_('E',_2) Maximum_table_size_2 1 possible_seatings_('E',_2) Must_seat_E 1 possible_seatings_('E',_2) _C244 -4 possible_seatings_('E',_2) _C258 -3 possible_seatings_('E',_2) _C271 -2 possible_seatings_('E',_2) _C283 -1 possible_seatings_('E',_2) _C295 -1 possible_seatings_('E',_2) _C296 -2 possible_seatings_('E',_2) _C297 -3 possible_seatings_('E',_2) _C298 -4 possible_seatings_('E',_2) _C299 -5 possible_seatings_('E',_2) _C300 -6 possible_seatings_('E',_2) _C301 -7 possible_seatings_('E',_2) _C302 -8 possible_seatings_('E',_2) _C303 -9 possible_seatings_('E',_2) _C304 -10 possible_seatings_('E',_2) _C305 -11 possible_seatings_('F',_2) Maximum_table_size_2 1 possible_seatings_('F',_2) Must_seat_F 1 possible_seatings_('F',_2) _C245 -5 possible_seatings_('F',_2) _C259 -4 possible_seatings_('F',_2) _C272 -3 possible_seatings_('F',_2) _C284 -2 possible_seatings_('F',_2) _C295 -1 possible_seatings_('F',_2) _C306 -1 possible_seatings_('F',_2) _C307 -2 possible_seatings_('F',_2) _C308 -3 possible_seatings_('F',_2) _C309 -4 possible_seatings_('F',_2) _C310 -5 possible_seatings_('F',_2) _C311 -6 possible_seatings_('F',_2) _C312 -7 possible_seatings_('F',_2) _C313 -8 possible_seatings_('F',_2) _C314 -9 possible_seatings_('F',_2) _C315 -10 possible_seatings_('G',_2) Maximum_table_size_2 1 possible_seatings_('G',_2) Must_seat_G 1 possible_seatings_('G',_2) _C246 -6 possible_seatings_('G',_2) _C260 -5 possible_seatings_('G',_2) _C273 -4 possible_seatings_('G',_2) _C285 -3 possible_seatings_('G',_2) _C296 -2 possible_seatings_('G',_2) _C306 -1 possible_seatings_('G',_2) _C316 -1 possible_seatings_('G',_2) _C317 -2 possible_seatings_('G',_2) _C318 -3 possible_seatings_('G',_2) _C319 -4 possible_seatings_('G',_2) _C320 -5 possible_seatings_('G',_2) _C321 -6 possible_seatings_('G',_2) _C322 -7 possible_seatings_('G',_2) _C323 -8 possible_seatings_('G',_2) _C324 -9 possible_seatings_('H',_2) Maximum_table_size_2 1 possible_seatings_('H',_2) Must_seat_H 1 possible_seatings_('H',_2) _C247 -7 possible_seatings_('H',_2) _C261 -6 possible_seatings_('H',_2) _C274 -5 possible_seatings_('H',_2) _C286 -4 possible_seatings_('H',_2) _C297 -3 possible_seatings_('H',_2) _C307 -2 possible_seatings_('H',_2) _C316 -1 possible_seatings_('H',_2) _C325 -1 possible_seatings_('H',_2) _C326 -2 possible_seatings_('H',_2) _C327 -3 possible_seatings_('H',_2) _C328 -4 possible_seatings_('H',_2) _C329 -5 possible_seatings_('H',_2) _C330 -6 possible_seatings_('H',_2) _C331 -7 possible_seatings_('H',_2) _C332 -8 possible_seatings_('I',_2) Maximum_table_size_2 1 possible_seatings_('I',_2) Must_seat_I 1 possible_seatings_('I',_2) _C248 -8 possible_seatings_('I',_2) _C262 -7 possible_seatings_('I',_2) _C275 -6 possible_seatings_('I',_2) _C287 -5 possible_seatings_('I',_2) _C298 -4 possible_seatings_('I',_2) _C308 -3 possible_seatings_('I',_2) _C317 -2 possible_seatings_('I',_2) _C325 -1 possible_seatings_('I',_2) _C333 -1 possible_seatings_('I',_2) _C334 -2 possible_seatings_('I',_2) _C335 -3 possible_seatings_('I',_2) _C336 -4 possible_seatings_('I',_2) _C337 -5 possible_seatings_('I',_2) _C338 -6 possible_seatings_('I',_2) _C339 -7 possible_seatings_('J',_2) Maximum_table_size_2 1 possible_seatings_('J',_2) Must_seat_J 1 possible_seatings_('J',_2) _C249 -9 possible_seatings_('J',_2) _C263 -8 possible_seatings_('J',_2) _C276 -7 possible_seatings_('J',_2) _C288 -6 possible_seatings_('J',_2) _C299 -5 possible_seatings_('J',_2) _C309 -4 possible_seatings_('J',_2) _C318 -3 possible_seatings_('J',_2) _C326 -2 possible_seatings_('J',_2) _C333 -1 possible_seatings_('J',_2) _C340 -1 possible_seatings_('J',_2) _C341 -2 possible_seatings_('J',_2) _C342 -3 possible_seatings_('J',_2) _C343 -4 possible_seatings_('J',_2) _C344 -5 possible_seatings_('J',_2) _C345 -6 possible_seatings_('K',_2) Maximum_table_size_2 1 possible_seatings_('K',_2) Must_seat_K 1 possible_seatings_('K',_2) _C250 -10 possible_seatings_('K',_2) _C264 -9 possible_seatings_('K',_2) _C277 -8 possible_seatings_('K',_2) _C289 -7 possible_seatings_('K',_2) _C300 -6 possible_seatings_('K',_2) _C310 -5 possible_seatings_('K',_2) _C319 -4 possible_seatings_('K',_2) _C327 -3 possible_seatings_('K',_2) _C334 -2 possible_seatings_('K',_2) _C340 -1 possible_seatings_('K',_2) _C346 -1 possible_seatings_('K',_2) _C347 -2 possible_seatings_('K',_2) _C348 -3 possible_seatings_('K',_2) _C349 -4 possible_seatings_('K',_2) _C350 -5 possible_seatings_('L',_2) Maximum_table_size_2 1 possible_seatings_('L',_2) Must_seat_L 1 possible_seatings_('L',_2) _C251 -11 possible_seatings_('L',_2) _C265 -10 possible_seatings_('L',_2) _C278 -9 possible_seatings_('L',_2) _C290 -8 possible_seatings_('L',_2) _C301 -7 possible_seatings_('L',_2) _C311 -6 possible_seatings_('L',_2) _C320 -5 possible_seatings_('L',_2) _C328 -4 possible_seatings_('L',_2) _C335 -3 possible_seatings_('L',_2) _C341 -2 possible_seatings_('L',_2) _C346 -1 possible_seatings_('L',_2) _C351 -1 possible_seatings_('L',_2) _C352 -2 possible_seatings_('L',_2) _C353 -3 possible_seatings_('L',_2) _C354 -4 possible_seatings_('M',_2) Maximum_table_size_2 1 possible_seatings_('M',_2) Must_seat_M 1 possible_seatings_('M',_2) _C252 -12 possible_seatings_('M',_2) _C266 -11 possible_seatings_('M',_2) _C279 -10 possible_seatings_('M',_2) _C291 -9 possible_seatings_('M',_2) _C302 -8 possible_seatings_('M',_2) _C312 -7 possible_seatings_('M',_2) _C321 -6 possible_seatings_('M',_2) _C329 -5 possible_seatings_('M',_2) _C336 -4 possible_seatings_('M',_2) _C342 -3 possible_seatings_('M',_2) _C347 -2 possible_seatings_('M',_2) _C351 -1 possible_seatings_('M',_2) _C355 -1 possible_seatings_('M',_2) _C356 -2 possible_seatings_('M',_2) _C357 -3 possible_seatings_('N',_2) Maximum_table_size_2 1 possible_seatings_('N',_2) Must_seat_N 1 possible_seatings_('N',_2) _C253 -13 possible_seatings_('N',_2) _C267 -12 possible_seatings_('N',_2) _C280 -11 possible_seatings_('N',_2) _C292 -10 possible_seatings_('N',_2) _C303 -9 possible_seatings_('N',_2) _C313 -8 possible_seatings_('N',_2) _C322 -7 possible_seatings_('N',_2) _C330 -6 possible_seatings_('N',_2) _C337 -5 possible_seatings_('N',_2) _C343 -4 possible_seatings_('N',_2) _C348 -3 possible_seatings_('N',_2) _C352 -2 possible_seatings_('N',_2) _C355 -1 possible_seatings_('N',_2) _C358 -1 possible_seatings_('N',_2) _C359 -2 possible_seatings_('O',_2) Maximum_table_size_2 1 possible_seatings_('O',_2) Must_seat_O 1 possible_seatings_('O',_2) _C254 -14 possible_seatings_('O',_2) _C268 -13 possible_seatings_('O',_2) _C281 -12 possible_seatings_('O',_2) _C293 -11 possible_seatings_('O',_2) _C304 -10 possible_seatings_('O',_2) _C314 -9 possible_seatings_('O',_2) _C323 -8 possible_seatings_('O',_2) _C331 -7 possible_seatings_('O',_2) _C338 -6 possible_seatings_('O',_2) _C344 -5 possible_seatings_('O',_2) _C349 -4 possible_seatings_('O',_2) _C353 -3 possible_seatings_('O',_2) _C356 -2 possible_seatings_('O',_2) _C358 -1 possible_seatings_('O',_2) _C360 -1 possible_seatings_('P',_2) Maximum_table_size_2 1 possible_seatings_('P',_2) Must_seat_P 1 possible_seatings_('P',_2) _C255 -15 possible_seatings_('P',_2) _C269 -14 possible_seatings_('P',_2) _C282 -13 possible_seatings_('P',_2) _C294 -12 possible_seatings_('P',_2) _C305 -11 possible_seatings_('P',_2) _C315 -10 possible_seatings_('P',_2) _C324 -9 possible_seatings_('P',_2) _C332 -8 possible_seatings_('P',_2) _C339 -7 possible_seatings_('P',_2) _C345 -6 possible_seatings_('P',_2) _C350 -5 possible_seatings_('P',_2) _C354 -4 possible_seatings_('P',_2) _C357 -3 possible_seatings_('P',_2) _C359 -2 possible_seatings_('P',_2) _C360 -1 possible_seatings_('A',_3) Maximum_table_size_3 1 possible_seatings_('A',_3) Must_seat_A 1 possible_seatings_('A',_3) _C361 -1 possible_seatings_('A',_3) _C362 -2 possible_seatings_('A',_3) _C363 -3 possible_seatings_('A',_3) _C364 -4 possible_seatings_('A',_3) _C365 -5 possible_seatings_('A',_3) _C366 -6 possible_seatings_('A',_3) _C367 -7 possible_seatings_('A',_3) _C368 -8 possible_seatings_('A',_3) _C369 -9 possible_seatings_('A',_3) _C370 -10 possible_seatings_('A',_3) _C371 -11 possible_seatings_('A',_3) _C372 -12 possible_seatings_('A',_3) _C373 -13 possible_seatings_('A',_3) _C374 -14 possible_seatings_('A',_3) _C375 -15 possible_seatings_('B',_3) Maximum_table_size_3 1 possible_seatings_('B',_3) Must_seat_B 1 possible_seatings_('B',_3) _C361 -1 possible_seatings_('B',_3) _C376 -1 possible_seatings_('B',_3) _C377 -2 possible_seatings_('B',_3) _C378 -3 possible_seatings_('B',_3) _C379 -4 possible_seatings_('B',_3) _C380 -5 possible_seatings_('B',_3) _C381 -6 possible_seatings_('B',_3) _C382 -7 possible_seatings_('B',_3) _C383 -8 possible_seatings_('B',_3) _C384 -9 possible_seatings_('B',_3) _C385 -10 possible_seatings_('B',_3) _C386 -11 possible_seatings_('B',_3) _C387 -12 possible_seatings_('B',_3) _C388 -13 possible_seatings_('B',_3) _C389 -14 possible_seatings_('C',_3) Maximum_table_size_3 1 possible_seatings_('C',_3) Must_seat_C 1 possible_seatings_('C',_3) _C362 -2 possible_seatings_('C',_3) _C376 -1 possible_seatings_('C',_3) _C390 -1 possible_seatings_('C',_3) _C391 -2 possible_seatings_('C',_3) _C392 -3 possible_seatings_('C',_3) _C393 -4 possible_seatings_('C',_3) _C394 -5 possible_seatings_('C',_3) _C395 -6 possible_seatings_('C',_3) _C396 -7 possible_seatings_('C',_3) _C397 -8 possible_seatings_('C',_3) _C398 -9 possible_seatings_('C',_3) _C399 -10 possible_seatings_('C',_3) _C400 -11 possible_seatings_('C',_3) _C401 -12 possible_seatings_('C',_3) _C402 -13 possible_seatings_('D',_3) Maximum_table_size_3 1 possible_seatings_('D',_3) Must_seat_D 1 possible_seatings_('D',_3) _C363 -3 possible_seatings_('D',_3) _C377 -2 possible_seatings_('D',_3) _C390 -1 possible_seatings_('D',_3) _C403 -1 possible_seatings_('D',_3) _C404 -2 possible_seatings_('D',_3) _C405 -3 possible_seatings_('D',_3) _C406 -4 possible_seatings_('D',_3) _C407 -5 possible_seatings_('D',_3) _C408 -6 possible_seatings_('D',_3) _C409 -7 possible_seatings_('D',_3) _C410 -8 possible_seatings_('D',_3) _C411 -9 possible_seatings_('D',_3) _C412 -10 possible_seatings_('D',_3) _C413 -11 possible_seatings_('D',_3) _C414 -12 possible_seatings_('E',_3) Maximum_table_size_3 1 possible_seatings_('E',_3) Must_seat_E 1 possible_seatings_('E',_3) _C364 -4 possible_seatings_('E',_3) _C378 -3 possible_seatings_('E',_3) _C391 -2 possible_seatings_('E',_3) _C403 -1 possible_seatings_('E',_3) _C415 -1 possible_seatings_('E',_3) _C416 -2 possible_seatings_('E',_3) _C417 -3 possible_seatings_('E',_3) _C418 -4 possible_seatings_('E',_3) _C419 -5 possible_seatings_('E',_3) _C420 -6 possible_seatings_('E',_3) _C421 -7 possible_seatings_('E',_3) _C422 -8 possible_seatings_('E',_3) _C423 -9 possible_seatings_('E',_3) _C424 -10 possible_seatings_('E',_3) _C425 -11 possible_seatings_('F',_3) Maximum_table_size_3 1 possible_seatings_('F',_3) Must_seat_F 1 possible_seatings_('F',_3) _C365 -5 possible_seatings_('F',_3) _C379 -4 possible_seatings_('F',_3) _C392 -3 possible_seatings_('F',_3) _C404 -2 possible_seatings_('F',_3) _C415 -1 possible_seatings_('F',_3) _C426 -1 possible_seatings_('F',_3) _C427 -2 possible_seatings_('F',_3) _C428 -3 possible_seatings_('F',_3) _C429 -4 possible_seatings_('F',_3) _C430 -5 possible_seatings_('F',_3) _C431 -6 possible_seatings_('F',_3) _C432 -7 possible_seatings_('F',_3) _C433 -8 possible_seatings_('F',_3) _C434 -9 possible_seatings_('F',_3) _C435 -10 possible_seatings_('G',_3) Maximum_table_size_3 1 possible_seatings_('G',_3) Must_seat_G 1 possible_seatings_('G',_3) _C366 -6 possible_seatings_('G',_3) _C380 -5 possible_seatings_('G',_3) _C393 -4 possible_seatings_('G',_3) _C405 -3 possible_seatings_('G',_3) _C416 -2 possible_seatings_('G',_3) _C426 -1 possible_seatings_('G',_3) _C436 -1 possible_seatings_('G',_3) _C437 -2 possible_seatings_('G',_3) _C438 -3 possible_seatings_('G',_3) _C439 -4 possible_seatings_('G',_3) _C440 -5 possible_seatings_('G',_3) _C441 -6 possible_seatings_('G',_3) _C442 -7 possible_seatings_('G',_3) _C443 -8 possible_seatings_('G',_3) _C444 -9 possible_seatings_('H',_3) Maximum_table_size_3 1 possible_seatings_('H',_3) Must_seat_H 1 possible_seatings_('H',_3) _C367 -7 possible_seatings_('H',_3) _C381 -6 possible_seatings_('H',_3) _C394 -5 possible_seatings_('H',_3) _C406 -4 possible_seatings_('H',_3) _C417 -3 possible_seatings_('H',_3) _C427 -2 possible_seatings_('H',_3) _C436 -1 possible_seatings_('H',_3) _C445 -1 possible_seatings_('H',_3) _C446 -2 possible_seatings_('H',_3) _C447 -3 possible_seatings_('H',_3) _C448 -4 possible_seatings_('H',_3) _C449 -5 possible_seatings_('H',_3) _C450 -6 possible_seatings_('H',_3) _C451 -7 possible_seatings_('H',_3) _C452 -8 possible_seatings_('I',_3) Maximum_table_size_3 1 possible_seatings_('I',_3) Must_seat_I 1 possible_seatings_('I',_3) _C368 -8 possible_seatings_('I',_3) _C382 -7 possible_seatings_('I',_3) _C395 -6 possible_seatings_('I',_3) _C407 -5 possible_seatings_('I',_3) _C418 -4 possible_seatings_('I',_3) _C428 -3 possible_seatings_('I',_3) _C437 -2 possible_seatings_('I',_3) _C445 -1 possible_seatings_('I',_3) _C453 -1 possible_seatings_('I',_3) _C454 -2 possible_seatings_('I',_3) _C455 -3 possible_seatings_('I',_3) _C456 -4 possible_seatings_('I',_3) _C457 -5 possible_seatings_('I',_3) _C458 -6 possible_seatings_('I',_3) _C459 -7 possible_seatings_('J',_3) Maximum_table_size_3 1 possible_seatings_('J',_3) Must_seat_J 1 possible_seatings_('J',_3) _C369 -9 possible_seatings_('J',_3) _C383 -8 possible_seatings_('J',_3) _C396 -7 possible_seatings_('J',_3) _C408 -6 possible_seatings_('J',_3) _C419 -5 possible_seatings_('J',_3) _C429 -4 possible_seatings_('J',_3) _C438 -3 possible_seatings_('J',_3) _C446 -2 possible_seatings_('J',_3) _C453 -1 possible_seatings_('J',_3) _C460 -1 possible_seatings_('J',_3) _C461 -2 possible_seatings_('J',_3) _C462 -3 possible_seatings_('J',_3) _C463 -4 possible_seatings_('J',_3) _C464 -5 possible_seatings_('J',_3) _C465 -6 possible_seatings_('K',_3) Maximum_table_size_3 1 possible_seatings_('K',_3) Must_seat_K 1 possible_seatings_('K',_3) _C370 -10 possible_seatings_('K',_3) _C384 -9 possible_seatings_('K',_3) _C397 -8 possible_seatings_('K',_3) _C409 -7 possible_seatings_('K',_3) _C420 -6 possible_seatings_('K',_3) _C430 -5 possible_seatings_('K',_3) _C439 -4 possible_seatings_('K',_3) _C447 -3 possible_seatings_('K',_3) _C454 -2 possible_seatings_('K',_3) _C460 -1 possible_seatings_('K',_3) _C466 -1 possible_seatings_('K',_3) _C467 -2 possible_seatings_('K',_3) _C468 -3 possible_seatings_('K',_3) _C469 -4 possible_seatings_('K',_3) _C470 -5 possible_seatings_('L',_3) Maximum_table_size_3 1 possible_seatings_('L',_3) Must_seat_L 1 possible_seatings_('L',_3) _C371 -11 possible_seatings_('L',_3) _C385 -10 possible_seatings_('L',_3) _C398 -9 possible_seatings_('L',_3) _C410 -8 possible_seatings_('L',_3) _C421 -7 possible_seatings_('L',_3) _C431 -6 possible_seatings_('L',_3) _C440 -5 possible_seatings_('L',_3) _C448 -4 possible_seatings_('L',_3) _C455 -3 possible_seatings_('L',_3) _C461 -2 possible_seatings_('L',_3) _C466 -1 possible_seatings_('L',_3) _C471 -1 possible_seatings_('L',_3) _C472 -2 possible_seatings_('L',_3) _C473 -3 possible_seatings_('L',_3) _C474 -4 possible_seatings_('M',_3) Maximum_table_size_3 1 possible_seatings_('M',_3) Must_seat_M 1 possible_seatings_('M',_3) _C372 -12 possible_seatings_('M',_3) _C386 -11 possible_seatings_('M',_3) _C399 -10 possible_seatings_('M',_3) _C411 -9 possible_seatings_('M',_3) _C422 -8 possible_seatings_('M',_3) _C432 -7 possible_seatings_('M',_3) _C441 -6 possible_seatings_('M',_3) _C449 -5 possible_seatings_('M',_3) _C456 -4 possible_seatings_('M',_3) _C462 -3 possible_seatings_('M',_3) _C467 -2 possible_seatings_('M',_3) _C471 -1 possible_seatings_('M',_3) _C475 -1 possible_seatings_('M',_3) _C476 -2 possible_seatings_('M',_3) _C477 -3 possible_seatings_('N',_3) Maximum_table_size_3 1 possible_seatings_('N',_3) Must_seat_N 1 possible_seatings_('N',_3) _C373 -13 possible_seatings_('N',_3) _C387 -12 possible_seatings_('N',_3) _C400 -11 possible_seatings_('N',_3) _C412 -10 possible_seatings_('N',_3) _C423 -9 possible_seatings_('N',_3) _C433 -8 possible_seatings_('N',_3) _C442 -7 possible_seatings_('N',_3) _C450 -6 possible_seatings_('N',_3) _C457 -5 possible_seatings_('N',_3) _C463 -4 possible_seatings_('N',_3) _C468 -3 possible_seatings_('N',_3) _C472 -2 possible_seatings_('N',_3) _C475 -1 possible_seatings_('N',_3) _C478 -1 possible_seatings_('N',_3) _C479 -2 possible_seatings_('O',_3) Maximum_table_size_3 1 possible_seatings_('O',_3) Must_seat_O 1 possible_seatings_('O',_3) _C374 -14 possible_seatings_('O',_3) _C388 -13 possible_seatings_('O',_3) _C401 -12 possible_seatings_('O',_3) _C413 -11 possible_seatings_('O',_3) _C424 -10 possible_seatings_('O',_3) _C434 -9 possible_seatings_('O',_3) _C443 -8 possible_seatings_('O',_3) _C451 -7 possible_seatings_('O',_3) _C458 -6 possible_seatings_('O',_3) _C464 -5 possible_seatings_('O',_3) _C469 -4 possible_seatings_('O',_3) _C473 -3 possible_seatings_('O',_3) _C476 -2 possible_seatings_('O',_3) _C478 -1 possible_seatings_('O',_3) _C480 -1 possible_seatings_('P',_3) Maximum_table_size_3 1 possible_seatings_('P',_3) Must_seat_P 1 possible_seatings_('P',_3) _C375 -15 possible_seatings_('P',_3) _C389 -14 possible_seatings_('P',_3) _C402 -13 possible_seatings_('P',_3) _C414 -12 possible_seatings_('P',_3) _C425 -11 possible_seatings_('P',_3) _C435 -10 possible_seatings_('P',_3) _C444 -9 possible_seatings_('P',_3) _C452 -8 possible_seatings_('P',_3) _C459 -7 possible_seatings_('P',_3) _C465 -6 possible_seatings_('P',_3) _C470 -5 possible_seatings_('P',_3) _C474 -4 possible_seatings_('P',_3) _C477 -3 possible_seatings_('P',_3) _C479 -2 possible_seatings_('P',_3) _C480 -1 possible_seatings_('A',_4) Maximum_table_size_4 1 possible_seatings_('A',_4) Must_seat_A 1 possible_seatings_('A',_4) _C481 -1 possible_seatings_('A',_4) _C482 -2 possible_seatings_('A',_4) _C483 -3 possible_seatings_('A',_4) _C484 -4 possible_seatings_('A',_4) _C485 -5 possible_seatings_('A',_4) _C486 -6 possible_seatings_('A',_4) _C487 -7 possible_seatings_('A',_4) _C488 -8 possible_seatings_('A',_4) _C489 -9 possible_seatings_('A',_4) _C490 -10 possible_seatings_('A',_4) _C491 -11 possible_seatings_('A',_4) _C492 -12 possible_seatings_('A',_4) _C493 -13 possible_seatings_('A',_4) _C494 -14 possible_seatings_('A',_4) _C495 -15 possible_seatings_('B',_4) Maximum_table_size_4 1 possible_seatings_('B',_4) Must_seat_B 1 possible_seatings_('B',_4) _C481 -1 possible_seatings_('B',_4) _C496 -1 possible_seatings_('B',_4) _C497 -2 possible_seatings_('B',_4) _C498 -3 possible_seatings_('B',_4) _C499 -4 possible_seatings_('B',_4) _C500 -5 possible_seatings_('B',_4) _C501 -6 possible_seatings_('B',_4) _C502 -7 possible_seatings_('B',_4) _C503 -8 possible_seatings_('B',_4) _C504 -9 possible_seatings_('B',_4) _C505 -10 possible_seatings_('B',_4) _C506 -11 possible_seatings_('B',_4) _C507 -12 possible_seatings_('B',_4) _C508 -13 possible_seatings_('B',_4) _C509 -14 possible_seatings_('C',_4) Maximum_table_size_4 1 possible_seatings_('C',_4) Must_seat_C 1 possible_seatings_('C',_4) _C482 -2 possible_seatings_('C',_4) _C496 -1 possible_seatings_('C',_4) _C510 -1 possible_seatings_('C',_4) _C511 -2 possible_seatings_('C',_4) _C512 -3 possible_seatings_('C',_4) _C513 -4 possible_seatings_('C',_4) _C514 -5 possible_seatings_('C',_4) _C515 -6 possible_seatings_('C',_4) _C516 -7 possible_seatings_('C',_4) _C517 -8 possible_seatings_('C',_4) _C518 -9 possible_seatings_('C',_4) _C519 -10 possible_seatings_('C',_4) _C520 -11 possible_seatings_('C',_4) _C521 -12 possible_seatings_('C',_4) _C522 -13 possible_seatings_('D',_4) Maximum_table_size_4 1 possible_seatings_('D',_4) Must_seat_D 1 possible_seatings_('D',_4) _C483 -3 possible_seatings_('D',_4) _C497 -2 possible_seatings_('D',_4) _C510 -1 possible_seatings_('D',_4) _C523 -1 possible_seatings_('D',_4) _C524 -2 possible_seatings_('D',_4) _C525 -3 possible_seatings_('D',_4) _C526 -4 possible_seatings_('D',_4) _C527 -5 possible_seatings_('D',_4) _C528 -6 possible_seatings_('D',_4) _C529 -7 possible_seatings_('D',_4) _C530 -8 possible_seatings_('D',_4) _C531 -9 possible_seatings_('D',_4) _C532 -10 possible_seatings_('D',_4) _C533 -11 possible_seatings_('D',_4) _C534 -12 possible_seatings_('E',_4) Maximum_table_size_4 1 possible_seatings_('E',_4) Must_seat_E 1 possible_seatings_('E',_4) _C484 -4 possible_seatings_('E',_4) _C498 -3 possible_seatings_('E',_4) _C511 -2 possible_seatings_('E',_4) _C523 -1 possible_seatings_('E',_4) _C535 -1 possible_seatings_('E',_4) _C536 -2 possible_seatings_('E',_4) _C537 -3 possible_seatings_('E',_4) _C538 -4 possible_seatings_('E',_4) _C539 -5 possible_seatings_('E',_4) _C540 -6 possible_seatings_('E',_4) _C541 -7 possible_seatings_('E',_4) _C542 -8 possible_seatings_('E',_4) _C543 -9 possible_seatings_('E',_4) _C544 -10 possible_seatings_('E',_4) _C545 -11 possible_seatings_('F',_4) Maximum_table_size_4 1 possible_seatings_('F',_4) Must_seat_F 1 possible_seatings_('F',_4) _C485 -5 possible_seatings_('F',_4) _C499 -4 possible_seatings_('F',_4) _C512 -3 possible_seatings_('F',_4) _C524 -2 possible_seatings_('F',_4) _C535 -1 possible_seatings_('F',_4) _C546 -1 possible_seatings_('F',_4) _C547 -2 possible_seatings_('F',_4) _C548 -3 possible_seatings_('F',_4) _C549 -4 possible_seatings_('F',_4) _C550 -5 possible_seatings_('F',_4) _C551 -6 possible_seatings_('F',_4) _C552 -7 possible_seatings_('F',_4) _C553 -8 possible_seatings_('F',_4) _C554 -9 possible_seatings_('F',_4) _C555 -10 possible_seatings_('G',_4) Maximum_table_size_4 1 possible_seatings_('G',_4) Must_seat_G 1 possible_seatings_('G',_4) _C486 -6 possible_seatings_('G',_4) _C500 -5 possible_seatings_('G',_4) _C513 -4 possible_seatings_('G',_4) _C525 -3 possible_seatings_('G',_4) _C536 -2 possible_seatings_('G',_4) _C546 -1 possible_seatings_('G',_4) _C556 -1 possible_seatings_('G',_4) _C557 -2 possible_seatings_('G',_4) _C558 -3 possible_seatings_('G',_4) _C559 -4 possible_seatings_('G',_4) _C560 -5 possible_seatings_('G',_4) _C561 -6 possible_seatings_('G',_4) _C562 -7 possible_seatings_('G',_4) _C563 -8 possible_seatings_('G',_4) _C564 -9 possible_seatings_('H',_4) Maximum_table_size_4 1 possible_seatings_('H',_4) Must_seat_H 1 possible_seatings_('H',_4) _C487 -7 possible_seatings_('H',_4) _C501 -6 possible_seatings_('H',_4) _C514 -5 possible_seatings_('H',_4) _C526 -4 possible_seatings_('H',_4) _C537 -3 possible_seatings_('H',_4) _C547 -2 possible_seatings_('H',_4) _C556 -1 possible_seatings_('H',_4) _C565 -1 possible_seatings_('H',_4) _C566 -2 possible_seatings_('H',_4) _C567 -3 possible_seatings_('H',_4) _C568 -4 possible_seatings_('H',_4) _C569 -5 possible_seatings_('H',_4) _C570 -6 possible_seatings_('H',_4) _C571 -7 possible_seatings_('H',_4) _C572 -8 possible_seatings_('I',_4) Maximum_table_size_4 1 possible_seatings_('I',_4) Must_seat_I 1 possible_seatings_('I',_4) _C488 -8 possible_seatings_('I',_4) _C502 -7 possible_seatings_('I',_4) _C515 -6 possible_seatings_('I',_4) _C527 -5 possible_seatings_('I',_4) _C538 -4 possible_seatings_('I',_4) _C548 -3 possible_seatings_('I',_4) _C557 -2 possible_seatings_('I',_4) _C565 -1 possible_seatings_('I',_4) _C573 -1 possible_seatings_('I',_4) _C574 -2 possible_seatings_('I',_4) _C575 -3 possible_seatings_('I',_4) _C576 -4 possible_seatings_('I',_4) _C577 -5 possible_seatings_('I',_4) _C578 -6 possible_seatings_('I',_4) _C579 -7 possible_seatings_('J',_4) Maximum_table_size_4 1 possible_seatings_('J',_4) Must_seat_J 1 possible_seatings_('J',_4) _C489 -9 possible_seatings_('J',_4) _C503 -8 possible_seatings_('J',_4) _C516 -7 possible_seatings_('J',_4) _C528 -6 possible_seatings_('J',_4) _C539 -5 possible_seatings_('J',_4) _C549 -4 possible_seatings_('J',_4) _C558 -3 possible_seatings_('J',_4) _C566 -2 possible_seatings_('J',_4) _C573 -1 possible_seatings_('J',_4) _C580 -1 possible_seatings_('J',_4) _C581 -2 possible_seatings_('J',_4) _C582 -3 possible_seatings_('J',_4) _C583 -4 possible_seatings_('J',_4) _C584 -5 possible_seatings_('J',_4) _C585 -6 possible_seatings_('K',_4) Maximum_table_size_4 1 possible_seatings_('K',_4) Must_seat_K 1 possible_seatings_('K',_4) _C490 -10 possible_seatings_('K',_4) _C504 -9 possible_seatings_('K',_4) _C517 -8 possible_seatings_('K',_4) _C529 -7 possible_seatings_('K',_4) _C540 -6 possible_seatings_('K',_4) _C550 -5 possible_seatings_('K',_4) _C559 -4 possible_seatings_('K',_4) _C567 -3 possible_seatings_('K',_4) _C574 -2 possible_seatings_('K',_4) _C580 -1 possible_seatings_('K',_4) _C586 -1 possible_seatings_('K',_4) _C587 -2 possible_seatings_('K',_4) _C588 -3 possible_seatings_('K',_4) _C589 -4 possible_seatings_('K',_4) _C590 -5 possible_seatings_('L',_4) Maximum_table_size_4 1 possible_seatings_('L',_4) Must_seat_L 1 possible_seatings_('L',_4) _C491 -11 possible_seatings_('L',_4) _C505 -10 possible_seatings_('L',_4) _C518 -9 possible_seatings_('L',_4) _C530 -8 possible_seatings_('L',_4) _C541 -7 possible_seatings_('L',_4) _C551 -6 possible_seatings_('L',_4) _C560 -5 possible_seatings_('L',_4) _C568 -4 possible_seatings_('L',_4) _C575 -3 possible_seatings_('L',_4) _C581 -2 possible_seatings_('L',_4) _C586 -1 possible_seatings_('L',_4) _C591 -1 possible_seatings_('L',_4) _C592 -2 possible_seatings_('L',_4) _C593 -3 possible_seatings_('L',_4) _C594 -4 possible_seatings_('M',_4) Maximum_table_size_4 1 possible_seatings_('M',_4) Must_seat_M 1 possible_seatings_('M',_4) _C492 -12 possible_seatings_('M',_4) _C506 -11 possible_seatings_('M',_4) _C519 -10 possible_seatings_('M',_4) _C531 -9 possible_seatings_('M',_4) _C542 -8 possible_seatings_('M',_4) _C552 -7 possible_seatings_('M',_4) _C561 -6 possible_seatings_('M',_4) _C569 -5 possible_seatings_('M',_4) _C576 -4 possible_seatings_('M',_4) _C582 -3 possible_seatings_('M',_4) _C587 -2 possible_seatings_('M',_4) _C591 -1 possible_seatings_('M',_4) _C595 -1 possible_seatings_('M',_4) _C596 -2 possible_seatings_('M',_4) _C597 -3 possible_seatings_('N',_4) Maximum_table_size_4 1 possible_seatings_('N',_4) Must_seat_N 1 possible_seatings_('N',_4) _C493 -13 possible_seatings_('N',_4) _C507 -12 possible_seatings_('N',_4) _C520 -11 possible_seatings_('N',_4) _C532 -10 possible_seatings_('N',_4) _C543 -9 possible_seatings_('N',_4) _C553 -8 possible_seatings_('N',_4) _C562 -7 possible_seatings_('N',_4) _C570 -6 possible_seatings_('N',_4) _C577 -5 possible_seatings_('N',_4) _C583 -4 possible_seatings_('N',_4) _C588 -3 possible_seatings_('N',_4) _C592 -2 possible_seatings_('N',_4) _C595 -1 possible_seatings_('N',_4) _C598 -1 possible_seatings_('N',_4) _C599 -2 possible_seatings_('O',_4) Maximum_table_size_4 1 possible_seatings_('O',_4) Must_seat_O 1 possible_seatings_('O',_4) _C494 -14 possible_seatings_('O',_4) _C508 -13 possible_seatings_('O',_4) _C521 -12 possible_seatings_('O',_4) _C533 -11 possible_seatings_('O',_4) _C544 -10 possible_seatings_('O',_4) _C554 -9 possible_seatings_('O',_4) _C563 -8 possible_seatings_('O',_4) _C571 -7 possible_seatings_('O',_4) _C578 -6 possible_seatings_('O',_4) _C584 -5 possible_seatings_('O',_4) _C589 -4 possible_seatings_('O',_4) _C593 -3 possible_seatings_('O',_4) _C596 -2 possible_seatings_('O',_4) _C598 -1 possible_seatings_('O',_4) _C600 -1 possible_seatings_('P',_4) Maximum_table_size_4 1 possible_seatings_('P',_4) Must_seat_P 1 possible_seatings_('P',_4) _C495 -15 possible_seatings_('P',_4) _C509 -14 possible_seatings_('P',_4) _C522 -13 possible_seatings_('P',_4) _C534 -12 possible_seatings_('P',_4) _C545 -11 possible_seatings_('P',_4) _C555 -10 possible_seatings_('P',_4) _C564 -9 possible_seatings_('P',_4) _C572 -8 possible_seatings_('P',_4) _C579 -7 possible_seatings_('P',_4) _C585 -6 possible_seatings_('P',_4) _C590 -5 possible_seatings_('P',_4) _C594 -4 possible_seatings_('P',_4) _C597 -3 possible_seatings_('P',_4) _C599 -2 possible_seatings_('P',_4) _C600 -1 MARK0001 'MARKER' 'INTEND' RHS rhs Maximum_table_size_0 4 rhs Maximum_table_size_1 4 rhs Maximum_table_size_2 4 rhs Maximum_table_size_3 4 rhs Maximum_table_size_4 4 rhs Must_seat_A 1 rhs Must_seat_B 1 rhs Must_seat_C 1 rhs Must_seat_D 1 rhs Must_seat_E 1 rhs Must_seat_F 1 rhs Must_seat_G 1 rhs Must_seat_H 1 rhs Must_seat_I 1 rhs Must_seat_J 1 rhs Must_seat_K 1 rhs Must_seat_L 1 rhs Must_seat_M 1 rhs Must_seat_N 1 rhs Must_seat_O 1 rhs Must_seat_P 1 rhs _C1 -1 rhs _C10 -10 rhs _C100 -1 rhs _C101 -2 rhs _C102 -3 rhs _C103 -4 rhs _C104 -5 rhs _C105 -6 rhs _C106 -1 rhs _C107 -2 rhs _C108 -3 rhs _C109 -4 rhs _C11 -11 rhs _C110 -5 rhs _C111 -1 rhs _C112 -2 rhs _C113 -3 rhs _C114 -4 rhs _C115 -1 rhs _C116 -2 rhs _C117 -3 rhs _C118 -1 rhs _C119 -2 rhs _C12 -12 rhs _C120 -1 rhs _C121 -1 rhs _C122 -2 rhs _C123 -3 rhs _C124 -4 rhs _C125 -5 rhs _C126 -6 rhs _C127 -7 rhs _C128 -8 rhs _C129 -9 rhs _C13 -13 rhs _C130 -10 rhs _C131 -11 rhs _C132 -12 rhs _C133 -13 rhs _C134 -14 rhs _C135 -15 rhs _C136 -1 rhs _C137 -2 rhs _C138 -3 rhs _C139 -4 rhs _C14 -14 rhs _C140 -5 rhs _C141 -6 rhs _C142 -7 rhs _C143 -8 rhs _C144 -9 rhs _C145 -10 rhs _C146 -11 rhs _C147 -12 rhs _C148 -13 rhs _C149 -14 rhs _C15 -15 rhs _C150 -1 rhs _C151 -2 rhs _C152 -3 rhs _C153 -4 rhs _C154 -5 rhs _C155 -6 rhs _C156 -7 rhs _C157 -8 rhs _C158 -9 rhs _C159 -10 rhs _C16 -1 rhs _C160 -11 rhs _C161 -12 rhs _C162 -13 rhs _C163 -1 rhs _C164 -2 rhs _C165 -3 rhs _C166 -4 rhs _C167 -5 rhs _C168 -6 rhs _C169 -7 rhs _C17 -2 rhs _C170 -8 rhs _C171 -9 rhs _C172 -10 rhs _C173 -11 rhs _C174 -12 rhs _C175 -1 rhs _C176 -2 rhs _C177 -3 rhs _C178 -4 rhs _C179 -5 rhs _C18 -3 rhs _C180 -6 rhs _C181 -7 rhs _C182 -8 rhs _C183 -9 rhs _C184 -10 rhs _C185 -11 rhs _C186 -1 rhs _C187 -2 rhs _C188 -3 rhs _C189 -4 rhs _C19 -4 rhs _C190 -5 rhs _C191 -6 rhs _C192 -7 rhs _C193 -8 rhs _C194 -9 rhs _C195 -10 rhs _C196 -1 rhs _C197 -2 rhs _C198 -3 rhs _C199 -4 rhs _C2 -2 rhs _C20 -5 rhs _C200 -5 rhs _C201 -6 rhs _C202 -7 rhs _C203 -8 rhs _C204 -9 rhs _C205 -1 rhs _C206 -2 rhs _C207 -3 rhs _C208 -4 rhs _C209 -5 rhs _C21 -6 rhs _C210 -6 rhs _C211 -7 rhs _C212 -8 rhs _C213 -1 rhs _C214 -2 rhs _C215 -3 rhs _C216 -4 rhs _C217 -5 rhs _C218 -6 rhs _C219 -7 rhs _C22 -7 rhs _C220 -1 rhs _C221 -2 rhs _C222 -3 rhs _C223 -4 rhs _C224 -5 rhs _C225 -6 rhs _C226 -1 rhs _C227 -2 rhs _C228 -3 rhs _C229 -4 rhs _C23 -8 rhs _C230 -5 rhs _C231 -1 rhs _C232 -2 rhs _C233 -3 rhs _C234 -4 rhs _C235 -1 rhs _C236 -2 rhs _C237 -3 rhs _C238 -1 rhs _C239 -2 rhs _C24 -9 rhs _C240 -1 rhs _C241 -1 rhs _C242 -2 rhs _C243 -3 rhs _C244 -4 rhs _C245 -5 rhs _C246 -6 rhs _C247 -7 rhs _C248 -8 rhs _C249 -9 rhs _C25 -10 rhs _C250 -10 rhs _C251 -11 rhs _C252 -12 rhs _C253 -13 rhs _C254 -14 rhs _C255 -15 rhs _C256 -1 rhs _C257 -2 rhs _C258 -3 rhs _C259 -4 rhs _C26 -11 rhs _C260 -5 rhs _C261 -6 rhs _C262 -7 rhs _C263 -8 rhs _C264 -9 rhs _C265 -10 rhs _C266 -11 rhs _C267 -12 rhs _C268 -13 rhs _C269 -14 rhs _C27 -12 rhs _C270 -1 rhs _C271 -2 rhs _C272 -3 rhs _C273 -4 rhs _C274 -5 rhs _C275 -6 rhs _C276 -7 rhs _C277 -8 rhs _C278 -9 rhs _C279 -10 rhs _C28 -13 rhs _C280 -11 rhs _C281 -12 rhs _C282 -13 rhs _C283 -1 rhs _C284 -2 rhs _C285 -3 rhs _C286 -4 rhs _C287 -5 rhs _C288 -6 rhs _C289 -7 rhs _C29 -14 rhs _C290 -8 rhs _C291 -9 rhs _C292 -10 rhs _C293 -11 rhs _C294 -12 rhs _C295 -1 rhs _C296 -2 rhs _C297 -3 rhs _C298 -4 rhs _C299 -5 rhs _C3 -3 rhs _C30 -1 rhs _C300 -6 rhs _C301 -7 rhs _C302 -8 rhs _C303 -9 rhs _C304 -10 rhs _C305 -11 rhs _C306 -1 rhs _C307 -2 rhs _C308 -3 rhs _C309 -4 rhs _C31 -2 rhs _C310 -5 rhs _C311 -6 rhs _C312 -7 rhs _C313 -8 rhs _C314 -9 rhs _C315 -10 rhs _C316 -1 rhs _C317 -2 rhs _C318 -3 rhs _C319 -4 rhs _C32 -3 rhs _C320 -5 rhs _C321 -6 rhs _C322 -7 rhs _C323 -8 rhs _C324 -9 rhs _C325 -1 rhs _C326 -2 rhs _C327 -3 rhs _C328 -4 rhs _C329 -5 rhs _C33 -4 rhs _C330 -6 rhs _C331 -7 rhs _C332 -8 rhs _C333 -1 rhs _C334 -2 rhs _C335 -3 rhs _C336 -4 rhs _C337 -5 rhs _C338 -6 rhs _C339 -7 rhs _C34 -5 rhs _C340 -1 rhs _C341 -2 rhs _C342 -3 rhs _C343 -4 rhs _C344 -5 rhs _C345 -6 rhs _C346 -1 rhs _C347 -2 rhs _C348 -3 rhs _C349 -4 rhs _C35 -6 rhs _C350 -5 rhs _C351 -1 rhs _C352 -2 rhs _C353 -3 rhs _C354 -4 rhs _C355 -1 rhs _C356 -2 rhs _C357 -3 rhs _C358 -1 rhs _C359 -2 rhs _C36 -7 rhs _C360 -1 rhs _C361 -1 rhs _C362 -2 rhs _C363 -3 rhs _C364 -4 rhs _C365 -5 rhs _C366 -6 rhs _C367 -7 rhs _C368 -8 rhs _C369 -9 rhs _C37 -8 rhs _C370 -10 rhs _C371 -11 rhs _C372 -12 rhs _C373 -13 rhs _C374 -14 rhs _C375 -15 rhs _C376 -1 rhs _C377 -2 rhs _C378 -3 rhs _C379 -4 rhs _C38 -9 rhs _C380 -5 rhs _C381 -6 rhs _C382 -7 rhs _C383 -8 rhs _C384 -9 rhs _C385 -10 rhs _C386 -11 rhs _C387 -12 rhs _C388 -13 rhs _C389 -14 rhs _C39 -10 rhs _C390 -1 rhs _C391 -2 rhs _C392 -3 rhs _C393 -4 rhs _C394 -5 rhs _C395 -6 rhs _C396 -7 rhs _C397 -8 rhs _C398 -9 rhs _C399 -10 rhs _C4 -4 rhs _C40 -11 rhs _C400 -11 rhs _C401 -12 rhs _C402 -13 rhs _C403 -1 rhs _C404 -2 rhs _C405 -3 rhs _C406 -4 rhs _C407 -5 rhs _C408 -6 rhs _C409 -7 rhs _C41 -12 rhs _C410 -8 rhs _C411 -9 rhs _C412 -10 rhs _C413 -11 rhs _C414 -12 rhs _C415 -1 rhs _C416 -2 rhs _C417 -3 rhs _C418 -4 rhs _C419 -5 rhs _C42 -13 rhs _C420 -6 rhs _C421 -7 rhs _C422 -8 rhs _C423 -9 rhs _C424 -10 rhs _C425 -11 rhs _C426 -1 rhs _C427 -2 rhs _C428 -3 rhs _C429 -4 rhs _C43 -1 rhs _C430 -5 rhs _C431 -6 rhs _C432 -7 rhs _C433 -8 rhs _C434 -9 rhs _C435 -10 rhs _C436 -1 rhs _C437 -2 rhs _C438 -3 rhs _C439 -4 rhs _C44 -2 rhs _C440 -5 rhs _C441 -6 rhs _C442 -7 rhs _C443 -8 rhs _C444 -9 rhs _C445 -1 rhs _C446 -2 rhs _C447 -3 rhs _C448 -4 rhs _C449 -5 rhs _C45 -3 rhs _C450 -6 rhs _C451 -7 rhs _C452 -8 rhs _C453 -1 rhs _C454 -2 rhs _C455 -3 rhs _C456 -4 rhs _C457 -5 rhs _C458 -6 rhs _C459 -7 rhs _C46 -4 rhs _C460 -1 rhs _C461 -2 rhs _C462 -3 rhs _C463 -4 rhs _C464 -5 rhs _C465 -6 rhs _C466 -1 rhs _C467 -2 rhs _C468 -3 rhs _C469 -4 rhs _C47 -5 rhs _C470 -5 rhs _C471 -1 rhs _C472 -2 rhs _C473 -3 rhs _C474 -4 rhs _C475 -1 rhs _C476 -2 rhs _C477 -3 rhs _C478 -1 rhs _C479 -2 rhs _C48 -6 rhs _C480 -1 rhs _C481 -1 rhs _C482 -2 rhs _C483 -3 rhs _C484 -4 rhs _C485 -5 rhs _C486 -6 rhs _C487 -7 rhs _C488 -8 rhs _C489 -9 rhs _C49 -7 rhs _C490 -10 rhs _C491 -11 rhs _C492 -12 rhs _C493 -13 rhs _C494 -14 rhs _C495 -15 rhs _C496 -1 rhs _C497 -2 rhs _C498 -3 rhs _C499 -4 rhs _C5 -5 rhs _C50 -8 rhs _C500 -5 rhs _C501 -6 rhs _C502 -7 rhs _C503 -8 rhs _C504 -9 rhs _C505 -10 rhs _C506 -11 rhs _C507 -12 rhs _C508 -13 rhs _C509 -14 rhs _C51 -9 rhs _C510 -1 rhs _C511 -2 rhs _C512 -3 rhs _C513 -4 rhs _C514 -5 rhs _C515 -6 rhs _C516 -7 rhs _C517 -8 rhs _C518 -9 rhs _C519 -10 rhs _C52 -10 rhs _C520 -11 rhs _C521 -12 rhs _C522 -13 rhs _C523 -1 rhs _C524 -2 rhs _C525 -3 rhs _C526 -4 rhs _C527 -5 rhs _C528 -6 rhs _C529 -7 rhs _C53 -11 rhs _C530 -8 rhs _C531 -9 rhs _C532 -10 rhs _C533 -11 rhs _C534 -12 rhs _C535 -1 rhs _C536 -2 rhs _C537 -3 rhs _C538 -4 rhs _C539 -5 rhs _C54 -12 rhs _C540 -6 rhs _C541 -7 rhs _C542 -8 rhs _C543 -9 rhs _C544 -10 rhs _C545 -11 rhs _C546 -1 rhs _C547 -2 rhs _C548 -3 rhs _C549 -4 rhs _C55 -1 rhs _C550 -5 rhs _C551 -6 rhs _C552 -7 rhs _C553 -8 rhs _C554 -9 rhs _C555 -10 rhs _C556 -1 rhs _C557 -2 rhs _C558 -3 rhs _C559 -4 rhs _C56 -2 rhs _C560 -5 rhs _C561 -6 rhs _C562 -7 rhs _C563 -8 rhs _C564 -9 rhs _C565 -1 rhs _C566 -2 rhs _C567 -3 rhs _C568 -4 rhs _C569 -5 rhs _C57 -3 rhs _C570 -6 rhs _C571 -7 rhs _C572 -8 rhs _C573 -1 rhs _C574 -2 rhs _C575 -3 rhs _C576 -4 rhs _C577 -5 rhs _C578 -6 rhs _C579 -7 rhs _C58 -4 rhs _C580 -1 rhs _C581 -2 rhs _C582 -3 rhs _C583 -4 rhs _C584 -5 rhs _C585 -6 rhs _C586 -1 rhs _C587 -2 rhs _C588 -3 rhs _C589 -4 rhs _C59 -5 rhs _C590 -5 rhs _C591 -1 rhs _C592 -2 rhs _C593 -3 rhs _C594 -4 rhs _C595 -1 rhs _C596 -2 rhs _C597 -3 rhs _C598 -1 rhs _C599 -2 rhs _C6 -6 rhs _C60 -6 rhs _C600 -1 rhs _C61 -7 rhs _C62 -8 rhs _C63 -9 rhs _C64 -10 rhs _C65 -11 rhs _C66 -1 rhs _C67 -2 rhs _C68 -3 rhs _C69 -4 rhs _C7 -7 rhs _C70 -5 rhs _C71 -6 rhs _C72 -7 rhs _C73 -8 rhs _C74 -9 rhs _C75 -10 rhs _C76 -1 rhs _C77 -2 rhs _C78 -3 rhs _C79 -4 rhs _C8 -8 rhs _C80 -5 rhs _C81 -6 rhs _C82 -7 rhs _C83 -8 rhs _C84 -9 rhs _C85 -1 rhs _C86 -2 rhs _C87 -3 rhs _C88 -4 rhs _C89 -5 rhs _C9 -9 rhs _C90 -6 rhs _C91 -7 rhs _C92 -8 rhs _C93 -1 rhs _C94 -2 rhs _C95 -3 rhs _C96 -4 rhs _C97 -5 rhs _C98 -6 rhs _C99 -7 BOUNDS UP bnd possible_seatings_('A',_0) 1 UP bnd possible_seatings_('B',_0) 1 UP bnd possible_seatings_('C',_0) 1 UP bnd possible_seatings_('D',_0) 1 UP bnd possible_seatings_('E',_0) 1 UP bnd possible_seatings_('F',_0) 1 UP bnd possible_seatings_('G',_0) 1 UP bnd possible_seatings_('H',_0) 1 UP bnd possible_seatings_('I',_0) 1 UP bnd possible_seatings_('J',_0) 1 UP bnd possible_seatings_('K',_0) 1 UP bnd possible_seatings_('L',_0) 1 UP bnd possible_seatings_('M',_0) 1 UP bnd possible_seatings_('N',_0) 1 UP bnd possible_seatings_('O',_0) 1 UP bnd possible_seatings_('P',_0) 1 UP bnd possible_seatings_('A',_1) 1 UP bnd possible_seatings_('B',_1) 1 UP bnd possible_seatings_('C',_1) 1 UP bnd possible_seatings_('D',_1) 1 UP bnd possible_seatings_('E',_1) 1 UP bnd possible_seatings_('F',_1) 1 UP bnd possible_seatings_('G',_1) 1 UP bnd possible_seatings_('H',_1) 1 UP bnd possible_seatings_('I',_1) 1 UP bnd possible_seatings_('J',_1) 1 UP bnd possible_seatings_('K',_1) 1 UP bnd possible_seatings_('L',_1) 1 UP bnd possible_seatings_('M',_1) 1 UP bnd possible_seatings_('N',_1) 1 UP bnd possible_seatings_('O',_1) 1 UP bnd possible_seatings_('P',_1) 1 UP bnd possible_seatings_('A',_2) 1 UP bnd possible_seatings_('B',_2) 1 UP bnd possible_seatings_('C',_2) 1 UP bnd possible_seatings_('D',_2) 1 UP bnd possible_seatings_('E',_2) 1 UP bnd possible_seatings_('F',_2) 1 UP bnd possible_seatings_('G',_2) 1 UP bnd possible_seatings_('H',_2) 1 UP bnd possible_seatings_('I',_2) 1 UP bnd possible_seatings_('J',_2) 1 UP bnd possible_seatings_('K',_2) 1 UP bnd possible_seatings_('L',_2) 1 UP bnd possible_seatings_('M',_2) 1 UP bnd possible_seatings_('N',_2) 1 UP bnd possible_seatings_('O',_2) 1 UP bnd possible_seatings_('P',_2) 1 UP bnd possible_seatings_('A',_3) 1 UP bnd possible_seatings_('B',_3) 1 UP bnd possible_seatings_('C',_3) 1 UP bnd possible_seatings_('D',_3) 1 UP bnd possible_seatings_('E',_3) 1 UP bnd possible_seatings_('F',_3) 1 UP bnd possible_seatings_('G',_3) 1 UP bnd possible_seatings_('H',_3) 1 UP bnd possible_seatings_('I',_3) 1 UP bnd possible_seatings_('J',_3) 1 UP bnd possible_seatings_('K',_3) 1 UP bnd possible_seatings_('L',_3) 1 UP bnd possible_seatings_('M',_3) 1 UP bnd possible_seatings_('N',_3) 1 UP bnd possible_seatings_('O',_3) 1 UP bnd possible_seatings_('P',_3) 1 UP bnd possible_seatings_('A',_4) 1 UP bnd possible_seatings_('B',_4) 1 UP bnd possible_seatings_('C',_4) 1 UP bnd possible_seatings_('D',_4) 1 UP bnd possible_seatings_('E',_4) 1 UP bnd possible_seatings_('F',_4) 1 UP bnd possible_seatings_('G',_4) 1 UP bnd possible_seatings_('H',_4) 1 UP bnd possible_seatings_('I',_4) 1 UP bnd possible_seatings_('J',_4) 1 UP bnd possible_seatings_('K',_4) 1 UP bnd possible_seatings_('L',_4) 1 UP bnd possible_seatings_('M',_4) 1 UP bnd possible_seatings_('N',_4) 1 UP bnd possible_seatings_('O',_4) 1 UP bnd possible_seatings_('P',_4) 1 ENDATA Vol-1.5.4/Data/Sample/Makefile.am0000644000175000017500000000144212053222044015434 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 324 2012-11-21 18:57:40Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # List files that should be distributed # ######################################################################## EXTRA_DIST = $(EXAMPLE_FILES) DISTCLEANFILES = $(EXAMPLE_CLEAN_FILES) datacoindir = $(datadir)/coin/Data/Sample datacoin_DATA = $(EXAMPLE_FILES) pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = coindatasample.pc include BuildTools/Makemain.inc test: @echo "No test available." Vol-1.5.4/Data/Sample/block_milp.lp0000644000175000017500000000365212452373145016071 0ustar sudipsudip\* MILP *\ Minimize Objective: - 20 x_1.0 - 7 x_10.0 - 4 x_11.0 - 9 x_12.0 - 8 x_13.0 - 2 x_14.0 - 3 x_15.0 - 8 x_16.0 - 8 x_17.0 - 7 x_18.0 - 2 x_19.0 - 4 x_2.0 - 10 x_20.0 - x_21.0 - 10 x_22.0 - 8 x_23.0 - 6 x_24.0 - 9 x_25.0 - 5 x_26.0 - 3 x_27.0 - 8 x_28.0 - 5 x_29.0 - 3 x_3.0 - 9 x_30.0 - 7 x_31.0 - 2 x_32.0 - 2 x_33.0 - 6 x_34.0 - 10 x_35.0 - 5 x_36.0 - 6 x_37.0 - 3 x_38.0 - 7 x_39.0 - x_4.0 - 6 x_40.0 - 4 x_5.0 - 8 x_6.0 - 2 x_7.0 - 10 x_8.0 - 5 x_9.0 Subject To C_1.0: 2 x_11.0 + 8 x_13.0 + 10 x_20.0 + x_22.0 + 2 x_32.0 + 2 x_33.0 + 2 x_34.0 + 5 x_37.0 + 5 x_7.0 + 7 x_8.0 + 6 x_9.0 <= 10 C_2.0: x_13.0 + 8 x_2.0 + x_28.0 + 10 x_3.0 + 10 x_30.0 + 4 x_36.0 + 3 x_38.0 + 9 x_7.0 <= 9 C_3.0: 7 x_1.0 + 6 x_17.0 + 7 x_19.0 + 3 x_23.0 + 6 x_4.0 <= 7 C_4.0: 3 x_16.0 + 4 x_29.0 + 8 x_3.0 + 10 x_34.0 + 3 x_37.0 + 8 x_40.0 <= 11 C_5.0_1.0: 5 x_32.0 + 2 x_34.0 + 2 x_37.0 <= 4 C_6.0_1.0: 4 x_33.0 + 4 x_38.0 + 3 x_39.0 <= 5 C_7.0_1.0: 4 x_31.0 + 5 x_35.0 + 2 x_36.0 + 3 x_40.0 <= 6 C_8.0_2.0: 5 x_24.0 + 7 x_30.0 <= 5 C_9.0_2.0: 6 x_22.0 + 3 x_23.0 + 6 x_28.0 <= 5 C_10.0_2.0: 10 x_22.0 + 6 x_24.0 + 4 x_26.0 <= 5 C_11.0_2.0: 9 x_23.0 + 4 x_25.0 + 7 x_27.0 <= 4 C_12.0_2.0: 4 x_22.0 + 8 x_24.0 + 2 x_30.0 <= 5 C_13.0_3.0: 3 x_15.0 + x_21.0 <= 5 C_14.0_3.0: 5 x_16.0 + 5 x_19.0 <= 4 C_15.0_3.0: 3 x_17.0 + 4 x_20.0 <= 4 C_16.0_3.0: 7 x_16.0 + 10 x_18.0 <= 5 C_17.0_4.0: 3 x_11.0 + 6 x_14.0 + 2 x_6.0 + 3 x_9.0 <= 5 C_18.0_4.0: 5 x_3.0 + 7 x_5.0 + x_9.0 <= 5 C_19.0_4.0: 5 x_11.0 + 7 x_12.0 + 10 x_14.0 + 7 x_2.0 + 10 x_4.0 + x_8.0 <= 5 C_20.0_4.0: 2 x_10.0 + 5 x_11.0 + 5 x_13.0 + 2 x_7.0 <= 4 Binaries x_1.0 x_10.0 x_11.0 x_12.0 x_13.0 x_14.0 x_15.0 x_16.0 x_17.0 x_18.0 x_19.0 x_2.0 x_20.0 x_21.0 x_22.0 x_23.0 x_24.0 x_25.0 x_26.0 x_27.0 x_28.0 x_29.0 x_3.0 x_30.0 x_31.0 x_32.0 x_33.0 x_34.0 x_35.0 x_36.0 x_37.0 x_38.0 x_39.0 x_4.0 x_40.0 x_5.0 x_6.0 x_7.0 x_8.0 x_9.0 End Vol-1.5.4/Data/Sample/atm_5_10_1.mps0000644000175000017500000032537212136243266015674 0ustar sudipsudipNAME BLANK FREE ROWS N OBJROW L budget(d_DATE0) L budget(d_DATE1) L budget(d_DATE2) L budget(d_DATE3) L budget(d_DATE4) L budget(d_DATE5) L budget(d_DATE6) L budget(d_DATE7) L budget(d_DATE8) L budget(d_DATE9) E demand_def(a_ATM0,d_DATE0) L linkv(a_ATM0,d_DATE0) E demand_def(a_ATM0,d_DATE1) L linkv(a_ATM0,d_DATE1) E demand_def(a_ATM0,d_DATE2) L linkv(a_ATM0,d_DATE2) E demand_def(a_ATM0,d_DATE3) L linkv(a_ATM0,d_DATE3) E demand_def(a_ATM0,d_DATE4) L linkv(a_ATM0,d_DATE4) E demand_def(a_ATM0,d_DATE5) L linkv(a_ATM0,d_DATE5) E demand_def(a_ATM0,d_DATE6) L linkv(a_ATM0,d_DATE6) E demand_def(a_ATM0,d_DATE7) L linkv(a_ATM0,d_DATE7) E demand_def(a_ATM0,d_DATE8) L linkv(a_ATM0,d_DATE8) E demand_def(a_ATM0,d_DATE9) L linkv(a_ATM0,d_DATE9) L pickone_x1(a_ATM0) L count(a_ATM0) L ztox1(a_ATM0,t_1) L ztox2(a_ATM0,t_1) G ztox3(a_ATM0,t_1) L ztox1(a_ATM0,t_2) L ztox2(a_ATM0,t_2) G ztox3(a_ATM0,t_2) L ztox1(a_ATM0,t_3) L ztox2(a_ATM0,t_3) G ztox3(a_ATM0,t_3) L ztox1(a_ATM0,t_4) L ztox2(a_ATM0,t_4) G ztox3(a_ATM0,t_4) L ztox1(a_ATM0,t_5) L ztox2(a_ATM0,t_5) G ztox3(a_ATM0,t_5) L ztox1(a_ATM0,t_6) L ztox2(a_ATM0,t_6) G ztox3(a_ATM0,t_6) L ztox1(a_ATM0,t_7) L ztox2(a_ATM0,t_7) G ztox3(a_ATM0,t_7) L ztox1(a_ATM0,t_8) L ztox2(a_ATM0,t_8) G ztox3(a_ATM0,t_8) L ztox1(a_ATM0,t_9) L ztox2(a_ATM0,t_9) G ztox3(a_ATM0,t_9) L ztox1(a_ATM0,t_10) L ztox2(a_ATM0,t_10) G ztox3(a_ATM0,t_10) E demand_def(a_ATM1,d_DATE0) L linkv(a_ATM1,d_DATE0) E demand_def(a_ATM1,d_DATE1) L linkv(a_ATM1,d_DATE1) E demand_def(a_ATM1,d_DATE2) L linkv(a_ATM1,d_DATE2) E demand_def(a_ATM1,d_DATE3) L linkv(a_ATM1,d_DATE3) E demand_def(a_ATM1,d_DATE4) L linkv(a_ATM1,d_DATE4) E demand_def(a_ATM1,d_DATE5) L linkv(a_ATM1,d_DATE5) E demand_def(a_ATM1,d_DATE6) L linkv(a_ATM1,d_DATE6) E demand_def(a_ATM1,d_DATE7) L linkv(a_ATM1,d_DATE7) E demand_def(a_ATM1,d_DATE8) L linkv(a_ATM1,d_DATE8) E demand_def(a_ATM1,d_DATE9) L linkv(a_ATM1,d_DATE9) L pickone_x1(a_ATM1) L count(a_ATM1) L ztox1(a_ATM1,t_1) L ztox2(a_ATM1,t_1) G ztox3(a_ATM1,t_1) L ztox1(a_ATM1,t_2) L ztox2(a_ATM1,t_2) G ztox3(a_ATM1,t_2) L ztox1(a_ATM1,t_3) L ztox2(a_ATM1,t_3) G ztox3(a_ATM1,t_3) L ztox1(a_ATM1,t_4) L ztox2(a_ATM1,t_4) G ztox3(a_ATM1,t_4) L ztox1(a_ATM1,t_5) L ztox2(a_ATM1,t_5) G ztox3(a_ATM1,t_5) L ztox1(a_ATM1,t_6) L ztox2(a_ATM1,t_6) G ztox3(a_ATM1,t_6) L ztox1(a_ATM1,t_7) L ztox2(a_ATM1,t_7) G ztox3(a_ATM1,t_7) L ztox1(a_ATM1,t_8) L ztox2(a_ATM1,t_8) G ztox3(a_ATM1,t_8) L ztox1(a_ATM1,t_9) L ztox2(a_ATM1,t_9) G ztox3(a_ATM1,t_9) L ztox1(a_ATM1,t_10) L ztox2(a_ATM1,t_10) G ztox3(a_ATM1,t_10) E demand_def(a_ATM2,d_DATE0) L linkv(a_ATM2,d_DATE0) E demand_def(a_ATM2,d_DATE1) L linkv(a_ATM2,d_DATE1) E demand_def(a_ATM2,d_DATE2) L linkv(a_ATM2,d_DATE2) E demand_def(a_ATM2,d_DATE3) L linkv(a_ATM2,d_DATE3) E demand_def(a_ATM2,d_DATE4) L linkv(a_ATM2,d_DATE4) E demand_def(a_ATM2,d_DATE5) L linkv(a_ATM2,d_DATE5) E demand_def(a_ATM2,d_DATE6) L linkv(a_ATM2,d_DATE6) E demand_def(a_ATM2,d_DATE7) L linkv(a_ATM2,d_DATE7) E demand_def(a_ATM2,d_DATE8) L linkv(a_ATM2,d_DATE8) E demand_def(a_ATM2,d_DATE9) L linkv(a_ATM2,d_DATE9) L pickone_x1(a_ATM2) L count(a_ATM2) L ztox1(a_ATM2,t_1) L ztox2(a_ATM2,t_1) G ztox3(a_ATM2,t_1) L ztox1(a_ATM2,t_2) L ztox2(a_ATM2,t_2) G ztox3(a_ATM2,t_2) L ztox1(a_ATM2,t_3) L ztox2(a_ATM2,t_3) G ztox3(a_ATM2,t_3) L ztox1(a_ATM2,t_4) L ztox2(a_ATM2,t_4) G ztox3(a_ATM2,t_4) L ztox1(a_ATM2,t_5) L ztox2(a_ATM2,t_5) G ztox3(a_ATM2,t_5) L ztox1(a_ATM2,t_6) L ztox2(a_ATM2,t_6) G ztox3(a_ATM2,t_6) L ztox1(a_ATM2,t_7) L ztox2(a_ATM2,t_7) G ztox3(a_ATM2,t_7) L ztox1(a_ATM2,t_8) L ztox2(a_ATM2,t_8) G ztox3(a_ATM2,t_8) L ztox1(a_ATM2,t_9) L ztox2(a_ATM2,t_9) G ztox3(a_ATM2,t_9) L ztox1(a_ATM2,t_10) L ztox2(a_ATM2,t_10) G ztox3(a_ATM2,t_10) E demand_def(a_ATM3,d_DATE0) L linkv(a_ATM3,d_DATE0) E demand_def(a_ATM3,d_DATE1) L linkv(a_ATM3,d_DATE1) E demand_def(a_ATM3,d_DATE2) L linkv(a_ATM3,d_DATE2) E demand_def(a_ATM3,d_DATE3) L linkv(a_ATM3,d_DATE3) E demand_def(a_ATM3,d_DATE4) L linkv(a_ATM3,d_DATE4) E demand_def(a_ATM3,d_DATE5) L linkv(a_ATM3,d_DATE5) E demand_def(a_ATM3,d_DATE6) L linkv(a_ATM3,d_DATE6) E demand_def(a_ATM3,d_DATE7) L linkv(a_ATM3,d_DATE7) E demand_def(a_ATM3,d_DATE8) L linkv(a_ATM3,d_DATE8) E demand_def(a_ATM3,d_DATE9) L linkv(a_ATM3,d_DATE9) L pickone_x1(a_ATM3) L count(a_ATM3) L ztox1(a_ATM3,t_1) L ztox2(a_ATM3,t_1) G ztox3(a_ATM3,t_1) L ztox1(a_ATM3,t_2) L ztox2(a_ATM3,t_2) G ztox3(a_ATM3,t_2) L ztox1(a_ATM3,t_3) L ztox2(a_ATM3,t_3) G ztox3(a_ATM3,t_3) L ztox1(a_ATM3,t_4) L ztox2(a_ATM3,t_4) G ztox3(a_ATM3,t_4) L ztox1(a_ATM3,t_5) L ztox2(a_ATM3,t_5) G ztox3(a_ATM3,t_5) L ztox1(a_ATM3,t_6) L ztox2(a_ATM3,t_6) G ztox3(a_ATM3,t_6) L ztox1(a_ATM3,t_7) L ztox2(a_ATM3,t_7) G ztox3(a_ATM3,t_7) L ztox1(a_ATM3,t_8) L ztox2(a_ATM3,t_8) G ztox3(a_ATM3,t_8) L ztox1(a_ATM3,t_9) L ztox2(a_ATM3,t_9) G ztox3(a_ATM3,t_9) L ztox1(a_ATM3,t_10) L ztox2(a_ATM3,t_10) G ztox3(a_ATM3,t_10) E demand_def(a_ATM4,d_DATE0) L linkv(a_ATM4,d_DATE0) E demand_def(a_ATM4,d_DATE1) L linkv(a_ATM4,d_DATE1) E demand_def(a_ATM4,d_DATE2) L linkv(a_ATM4,d_DATE2) E demand_def(a_ATM4,d_DATE3) L linkv(a_ATM4,d_DATE3) E demand_def(a_ATM4,d_DATE4) L linkv(a_ATM4,d_DATE4) E demand_def(a_ATM4,d_DATE5) L linkv(a_ATM4,d_DATE5) E demand_def(a_ATM4,d_DATE6) L linkv(a_ATM4,d_DATE6) E demand_def(a_ATM4,d_DATE7) L linkv(a_ATM4,d_DATE7) E demand_def(a_ATM4,d_DATE8) L linkv(a_ATM4,d_DATE8) E demand_def(a_ATM4,d_DATE9) L linkv(a_ATM4,d_DATE9) L pickone_x1(a_ATM4) L count(a_ATM4) L ztox1(a_ATM4,t_1) L ztox2(a_ATM4,t_1) G ztox3(a_ATM4,t_1) L ztox1(a_ATM4,t_2) L ztox2(a_ATM4,t_2) G ztox3(a_ATM4,t_2) L ztox1(a_ATM4,t_3) L ztox2(a_ATM4,t_3) G ztox3(a_ATM4,t_3) L ztox1(a_ATM4,t_4) L ztox2(a_ATM4,t_4) G ztox3(a_ATM4,t_4) L ztox1(a_ATM4,t_5) L ztox2(a_ATM4,t_5) G ztox3(a_ATM4,t_5) L ztox1(a_ATM4,t_6) L ztox2(a_ATM4,t_6) G ztox3(a_ATM4,t_6) L ztox1(a_ATM4,t_7) L ztox2(a_ATM4,t_7) G ztox3(a_ATM4,t_7) L ztox1(a_ATM4,t_8) L ztox2(a_ATM4,t_8) G ztox3(a_ATM4,t_8) L ztox1(a_ATM4,t_9) L ztox2(a_ATM4,t_9) G ztox3(a_ATM4,t_9) L ztox1(a_ATM4,t_10) L ztox2(a_ATM4,t_10) G ztox3(a_ATM4,t_10) COLUMNS x1(0_ATM0,1) demand_def(a_ATM0,d_DATE0) -282.2 demand_def(a_ATM0,d_DATE1) -133.7 x1(0_ATM0,1) demand_def(a_ATM0,d_DATE2) -268.5 demand_def(a_ATM0,d_DATE3) 59.5 x1(0_ATM0,1) demand_def(a_ATM0,d_DATE4) -304.1 demand_def(a_ATM0,d_DATE5) -72.1 x1(0_ATM0,1) demand_def(a_ATM0,d_DATE6) -357.3 demand_def(a_ATM0,d_DATE7) -39.9 x1(0_ATM0,1) demand_def(a_ATM0,d_DATE8) -164.4 demand_def(a_ATM0,d_DATE9) 116.1 x1(0_ATM0,1) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_1) -1. x1(0_ATM0,1) ztox3(a_ATM0,t_1) -1. x1(1_ATM0,2) demand_def(a_ATM0,d_DATE0) -564.4 demand_def(a_ATM0,d_DATE1) -267.4 x1(1_ATM0,2) demand_def(a_ATM0,d_DATE2) -537. demand_def(a_ATM0,d_DATE3) 119. x1(1_ATM0,2) demand_def(a_ATM0,d_DATE4) -608.2 demand_def(a_ATM0,d_DATE5) -144.2 x1(1_ATM0,2) demand_def(a_ATM0,d_DATE6) -714.6 demand_def(a_ATM0,d_DATE7) -79.8 x1(1_ATM0,2) demand_def(a_ATM0,d_DATE8) -328.8 demand_def(a_ATM0,d_DATE9) 232.2 x1(1_ATM0,2) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_2) -1. x1(1_ATM0,2) ztox3(a_ATM0,t_2) -1. x1(2_ATM0,3) demand_def(a_ATM0,d_DATE0) -846.6 demand_def(a_ATM0,d_DATE1) -401.1 x1(2_ATM0,3) demand_def(a_ATM0,d_DATE2) -805.5 demand_def(a_ATM0,d_DATE3) 178.5 x1(2_ATM0,3) demand_def(a_ATM0,d_DATE4) -912.3 demand_def(a_ATM0,d_DATE5) -216.3 x1(2_ATM0,3) demand_def(a_ATM0,d_DATE6) -1071.9 demand_def(a_ATM0,d_DATE7) -119.7 x1(2_ATM0,3) demand_def(a_ATM0,d_DATE8) -493.2 demand_def(a_ATM0,d_DATE9) 348.3 x1(2_ATM0,3) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_3) -1. x1(2_ATM0,3) ztox3(a_ATM0,t_3) -1. x1(3_ATM0,4) demand_def(a_ATM0,d_DATE0) -1128.8 demand_def(a_ATM0,d_DATE1) -534.8 x1(3_ATM0,4) demand_def(a_ATM0,d_DATE2) -1074. demand_def(a_ATM0,d_DATE3) 238. x1(3_ATM0,4) demand_def(a_ATM0,d_DATE4) -1216.4 demand_def(a_ATM0,d_DATE5) -288.4 x1(3_ATM0,4) demand_def(a_ATM0,d_DATE6) -1429.2 demand_def(a_ATM0,d_DATE7) -159.6 x1(3_ATM0,4) demand_def(a_ATM0,d_DATE8) -657.6 demand_def(a_ATM0,d_DATE9) 464.4 x1(3_ATM0,4) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_4) -1. x1(3_ATM0,4) ztox3(a_ATM0,t_4) -1. x1(4_ATM0,5) demand_def(a_ATM0,d_DATE0) -1411. demand_def(a_ATM0,d_DATE1) -668.5 x1(4_ATM0,5) demand_def(a_ATM0,d_DATE2) -1342.5 demand_def(a_ATM0,d_DATE3) 297.5 x1(4_ATM0,5) demand_def(a_ATM0,d_DATE4) -1520.5 demand_def(a_ATM0,d_DATE5) -360.5 x1(4_ATM0,5) demand_def(a_ATM0,d_DATE6) -1786.5 demand_def(a_ATM0,d_DATE7) -199.5 x1(4_ATM0,5) demand_def(a_ATM0,d_DATE8) -822. demand_def(a_ATM0,d_DATE9) 580.5 x1(4_ATM0,5) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_5) -1. x1(4_ATM0,5) ztox3(a_ATM0,t_5) -1. x1(5_ATM0,6) demand_def(a_ATM0,d_DATE0) -1693.2 demand_def(a_ATM0,d_DATE1) -802.2 x1(5_ATM0,6) demand_def(a_ATM0,d_DATE2) -1611. demand_def(a_ATM0,d_DATE3) 357. x1(5_ATM0,6) demand_def(a_ATM0,d_DATE4) -1824.6 demand_def(a_ATM0,d_DATE5) -432.6 x1(5_ATM0,6) demand_def(a_ATM0,d_DATE6) -2143.8 demand_def(a_ATM0,d_DATE7) -239.4 x1(5_ATM0,6) demand_def(a_ATM0,d_DATE8) -986.4 demand_def(a_ATM0,d_DATE9) 696.6 x1(5_ATM0,6) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_6) -1. x1(5_ATM0,6) ztox3(a_ATM0,t_6) -1. x1(6_ATM0,7) demand_def(a_ATM0,d_DATE0) -1975.4 demand_def(a_ATM0,d_DATE1) -935.9 x1(6_ATM0,7) demand_def(a_ATM0,d_DATE2) -1879.5 demand_def(a_ATM0,d_DATE3) 416.5 x1(6_ATM0,7) demand_def(a_ATM0,d_DATE4) -2128.7 demand_def(a_ATM0,d_DATE5) -504.7 x1(6_ATM0,7) demand_def(a_ATM0,d_DATE6) -2501.1 demand_def(a_ATM0,d_DATE7) -279.3 x1(6_ATM0,7) demand_def(a_ATM0,d_DATE8) -1150.8 demand_def(a_ATM0,d_DATE9) 812.7 x1(6_ATM0,7) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_7) -1. x1(6_ATM0,7) ztox3(a_ATM0,t_7) -1. x1(7_ATM0,8) demand_def(a_ATM0,d_DATE0) -2257.6 demand_def(a_ATM0,d_DATE1) -1069.6 x1(7_ATM0,8) demand_def(a_ATM0,d_DATE2) -2148. demand_def(a_ATM0,d_DATE3) 476. x1(7_ATM0,8) demand_def(a_ATM0,d_DATE4) -2432.8 demand_def(a_ATM0,d_DATE5) -576.8 x1(7_ATM0,8) demand_def(a_ATM0,d_DATE6) -2858.4 demand_def(a_ATM0,d_DATE7) -319.2 x1(7_ATM0,8) demand_def(a_ATM0,d_DATE8) -1315.2 demand_def(a_ATM0,d_DATE9) 928.8 x1(7_ATM0,8) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_8) -1. x1(7_ATM0,8) ztox3(a_ATM0,t_8) -1. x1(8_ATM0,9) demand_def(a_ATM0,d_DATE0) -2539.8 demand_def(a_ATM0,d_DATE1) -1203.3 x1(8_ATM0,9) demand_def(a_ATM0,d_DATE2) -2416.5 demand_def(a_ATM0,d_DATE3) 535.5 x1(8_ATM0,9) demand_def(a_ATM0,d_DATE4) -2736.9 demand_def(a_ATM0,d_DATE5) -648.9 x1(8_ATM0,9) demand_def(a_ATM0,d_DATE6) -3215.7 demand_def(a_ATM0,d_DATE7) -359.1 x1(8_ATM0,9) demand_def(a_ATM0,d_DATE8) -1479.6 demand_def(a_ATM0,d_DATE9) 1044.9 x1(8_ATM0,9) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_9) -1. x1(8_ATM0,9) ztox3(a_ATM0,t_9) -1. x1(9_ATM0,10) demand_def(a_ATM0,d_DATE0) -2822. demand_def(a_ATM0,d_DATE1) -1337. x1(9_ATM0,10) demand_def(a_ATM0,d_DATE2) -2685. demand_def(a_ATM0,d_DATE3) 595. x1(9_ATM0,10) demand_def(a_ATM0,d_DATE4) -3041. demand_def(a_ATM0,d_DATE5) -721. x1(9_ATM0,10) demand_def(a_ATM0,d_DATE6) -3573. demand_def(a_ATM0,d_DATE7) -399. x1(9_ATM0,10) demand_def(a_ATM0,d_DATE8) -1644. demand_def(a_ATM0,d_DATE9) 1161. x1(9_ATM0,10) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_10) -1. x1(9_ATM0,10) ztox3(a_ATM0,t_10) -1. x1(10_ATM1,1) demand_def(a_ATM1,d_DATE0) 167.1 demand_def(a_ATM1,d_DATE1) -293.3 x1(10_ATM1,1) demand_def(a_ATM1,d_DATE2) 285. demand_def(a_ATM1,d_DATE3) 247. x1(10_ATM1,1) demand_def(a_ATM1,d_DATE4) 124.8 demand_def(a_ATM1,d_DATE5) -203.1 x1(10_ATM1,1) demand_def(a_ATM1,d_DATE6) -500.2 demand_def(a_ATM1,d_DATE7) -632.8 x1(10_ATM1,1) demand_def(a_ATM1,d_DATE8) -144.3 demand_def(a_ATM1,d_DATE9) 156.1 x1(10_ATM1,1) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_1) -1. x1(10_ATM1,1) ztox3(a_ATM1,t_1) -1. x1(11_ATM1,2) demand_def(a_ATM1,d_DATE0) 334.2 demand_def(a_ATM1,d_DATE1) -586.6 x1(11_ATM1,2) demand_def(a_ATM1,d_DATE2) 570. demand_def(a_ATM1,d_DATE3) 494. x1(11_ATM1,2) demand_def(a_ATM1,d_DATE4) 249.6 demand_def(a_ATM1,d_DATE5) -406.2 x1(11_ATM1,2) demand_def(a_ATM1,d_DATE6) -1000.4 demand_def(a_ATM1,d_DATE7) -1265.6 x1(11_ATM1,2) demand_def(a_ATM1,d_DATE8) -288.6 demand_def(a_ATM1,d_DATE9) 312.2 x1(11_ATM1,2) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_2) -1. x1(11_ATM1,2) ztox3(a_ATM1,t_2) -1. x1(12_ATM1,3) demand_def(a_ATM1,d_DATE0) 501.3 demand_def(a_ATM1,d_DATE1) -879.9 x1(12_ATM1,3) demand_def(a_ATM1,d_DATE2) 855. demand_def(a_ATM1,d_DATE3) 741. x1(12_ATM1,3) demand_def(a_ATM1,d_DATE4) 374.4 demand_def(a_ATM1,d_DATE5) -609.3 x1(12_ATM1,3) demand_def(a_ATM1,d_DATE6) -1500.6 demand_def(a_ATM1,d_DATE7) -1898.4 x1(12_ATM1,3) demand_def(a_ATM1,d_DATE8) -432.9 demand_def(a_ATM1,d_DATE9) 468.3 x1(12_ATM1,3) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_3) -1. x1(12_ATM1,3) ztox3(a_ATM1,t_3) -1. x1(13_ATM1,4) demand_def(a_ATM1,d_DATE0) 668.4 demand_def(a_ATM1,d_DATE1) -1173.2 x1(13_ATM1,4) demand_def(a_ATM1,d_DATE2) 1140. demand_def(a_ATM1,d_DATE3) 988. x1(13_ATM1,4) demand_def(a_ATM1,d_DATE4) 499.2 demand_def(a_ATM1,d_DATE5) -812.4 x1(13_ATM1,4) demand_def(a_ATM1,d_DATE6) -2000.8 demand_def(a_ATM1,d_DATE7) -2531.2 x1(13_ATM1,4) demand_def(a_ATM1,d_DATE8) -577.2 demand_def(a_ATM1,d_DATE9) 624.4 x1(13_ATM1,4) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_4) -1. x1(13_ATM1,4) ztox3(a_ATM1,t_4) -1. x1(14_ATM1,5) demand_def(a_ATM1,d_DATE0) 835.5 demand_def(a_ATM1,d_DATE1) -1466.5 x1(14_ATM1,5) demand_def(a_ATM1,d_DATE2) 1425. demand_def(a_ATM1,d_DATE3) 1235. x1(14_ATM1,5) demand_def(a_ATM1,d_DATE4) 624. demand_def(a_ATM1,d_DATE5) -1015.5 x1(14_ATM1,5) demand_def(a_ATM1,d_DATE6) -2501. demand_def(a_ATM1,d_DATE7) -3164. x1(14_ATM1,5) demand_def(a_ATM1,d_DATE8) -721.5 demand_def(a_ATM1,d_DATE9) 780.5 x1(14_ATM1,5) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_5) -1. x1(14_ATM1,5) ztox3(a_ATM1,t_5) -1. x1(15_ATM1,6) demand_def(a_ATM1,d_DATE0) 1002.6 demand_def(a_ATM1,d_DATE1) -1759.8 x1(15_ATM1,6) demand_def(a_ATM1,d_DATE2) 1710. demand_def(a_ATM1,d_DATE3) 1482. x1(15_ATM1,6) demand_def(a_ATM1,d_DATE4) 748.8 demand_def(a_ATM1,d_DATE5) -1218.6 x1(15_ATM1,6) demand_def(a_ATM1,d_DATE6) -3001.2 demand_def(a_ATM1,d_DATE7) -3796.8 x1(15_ATM1,6) demand_def(a_ATM1,d_DATE8) -865.8 demand_def(a_ATM1,d_DATE9) 936.6 x1(15_ATM1,6) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_6) -1. x1(15_ATM1,6) ztox3(a_ATM1,t_6) -1. x1(16_ATM1,7) demand_def(a_ATM1,d_DATE0) 1169.7 demand_def(a_ATM1,d_DATE1) -2053.1 x1(16_ATM1,7) demand_def(a_ATM1,d_DATE2) 1995. demand_def(a_ATM1,d_DATE3) 1729. x1(16_ATM1,7) demand_def(a_ATM1,d_DATE4) 873.6 demand_def(a_ATM1,d_DATE5) -1421.7 x1(16_ATM1,7) demand_def(a_ATM1,d_DATE6) -3501.4 demand_def(a_ATM1,d_DATE7) -4429.6 x1(16_ATM1,7) demand_def(a_ATM1,d_DATE8) -1010.1 demand_def(a_ATM1,d_DATE9) 1092.7 x1(16_ATM1,7) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_7) -1. x1(16_ATM1,7) ztox3(a_ATM1,t_7) -1. x1(17_ATM1,8) demand_def(a_ATM1,d_DATE0) 1336.8 demand_def(a_ATM1,d_DATE1) -2346.4 x1(17_ATM1,8) demand_def(a_ATM1,d_DATE2) 2280. demand_def(a_ATM1,d_DATE3) 1976. x1(17_ATM1,8) demand_def(a_ATM1,d_DATE4) 998.4 demand_def(a_ATM1,d_DATE5) -1624.8 x1(17_ATM1,8) demand_def(a_ATM1,d_DATE6) -4001.6 demand_def(a_ATM1,d_DATE7) -5062.4 x1(17_ATM1,8) demand_def(a_ATM1,d_DATE8) -1154.4 demand_def(a_ATM1,d_DATE9) 1248.8 x1(17_ATM1,8) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_8) -1. x1(17_ATM1,8) ztox3(a_ATM1,t_8) -1. x1(18_ATM1,9) demand_def(a_ATM1,d_DATE0) 1503.9 demand_def(a_ATM1,d_DATE1) -2639.7 x1(18_ATM1,9) demand_def(a_ATM1,d_DATE2) 2565. demand_def(a_ATM1,d_DATE3) 2223. x1(18_ATM1,9) demand_def(a_ATM1,d_DATE4) 1123.2 demand_def(a_ATM1,d_DATE5) -1827.9 x1(18_ATM1,9) demand_def(a_ATM1,d_DATE6) -4501.8 demand_def(a_ATM1,d_DATE7) -5695.2 x1(18_ATM1,9) demand_def(a_ATM1,d_DATE8) -1298.7 demand_def(a_ATM1,d_DATE9) 1404.9 x1(18_ATM1,9) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_9) -1. x1(18_ATM1,9) ztox3(a_ATM1,t_9) -1. x1(19_ATM1,10) demand_def(a_ATM1,d_DATE0) 1671. demand_def(a_ATM1,d_DATE1) -2933. x1(19_ATM1,10) demand_def(a_ATM1,d_DATE2) 2850. demand_def(a_ATM1,d_DATE3) 2470. x1(19_ATM1,10) demand_def(a_ATM1,d_DATE4) 1248. demand_def(a_ATM1,d_DATE5) -2031. x1(19_ATM1,10) demand_def(a_ATM1,d_DATE6) -5002. demand_def(a_ATM1,d_DATE7) -6328. x1(19_ATM1,10) demand_def(a_ATM1,d_DATE8) -1443. demand_def(a_ATM1,d_DATE9) 1561. x1(19_ATM1,10) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_10) -1. x1(19_ATM1,10) ztox3(a_ATM1,t_10) -1. x1(20_ATM2,1) demand_def(a_ATM2,d_DATE0) -58.9 demand_def(a_ATM2,d_DATE1) 106.8 x1(20_ATM2,1) demand_def(a_ATM2,d_DATE2) 18.5 demand_def(a_ATM2,d_DATE3) -41.3 x1(20_ATM2,1) demand_def(a_ATM2,d_DATE4) -117.4 demand_def(a_ATM2,d_DATE5) -156.4 x1(20_ATM2,1) demand_def(a_ATM2,d_DATE6) -22.5 demand_def(a_ATM2,d_DATE7) 134. x1(20_ATM2,1) demand_def(a_ATM2,d_DATE8) -209.7 demand_def(a_ATM2,d_DATE9) -99.6 x1(20_ATM2,1) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_1) -1. x1(20_ATM2,1) ztox3(a_ATM2,t_1) -1. x1(21_ATM2,2) demand_def(a_ATM2,d_DATE0) -117.8 demand_def(a_ATM2,d_DATE1) 213.6 x1(21_ATM2,2) demand_def(a_ATM2,d_DATE2) 37. demand_def(a_ATM2,d_DATE3) -82.6 x1(21_ATM2,2) demand_def(a_ATM2,d_DATE4) -234.8 demand_def(a_ATM2,d_DATE5) -312.8 x1(21_ATM2,2) demand_def(a_ATM2,d_DATE6) -45. demand_def(a_ATM2,d_DATE7) 268. x1(21_ATM2,2) demand_def(a_ATM2,d_DATE8) -419.4 demand_def(a_ATM2,d_DATE9) -199.2 x1(21_ATM2,2) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_2) -1. x1(21_ATM2,2) ztox3(a_ATM2,t_2) -1. x1(22_ATM2,3) demand_def(a_ATM2,d_DATE0) -176.7 demand_def(a_ATM2,d_DATE1) 320.4 x1(22_ATM2,3) demand_def(a_ATM2,d_DATE2) 55.5 demand_def(a_ATM2,d_DATE3) -123.9 x1(22_ATM2,3) demand_def(a_ATM2,d_DATE4) -352.2 demand_def(a_ATM2,d_DATE5) -469.2 x1(22_ATM2,3) demand_def(a_ATM2,d_DATE6) -67.5 demand_def(a_ATM2,d_DATE7) 402. x1(22_ATM2,3) demand_def(a_ATM2,d_DATE8) -629.1 demand_def(a_ATM2,d_DATE9) -298.8 x1(22_ATM2,3) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_3) -1. x1(22_ATM2,3) ztox3(a_ATM2,t_3) -1. x1(23_ATM2,4) demand_def(a_ATM2,d_DATE0) -235.6 demand_def(a_ATM2,d_DATE1) 427.2 x1(23_ATM2,4) demand_def(a_ATM2,d_DATE2) 74. demand_def(a_ATM2,d_DATE3) -165.2 x1(23_ATM2,4) demand_def(a_ATM2,d_DATE4) -469.6 demand_def(a_ATM2,d_DATE5) -625.6 x1(23_ATM2,4) demand_def(a_ATM2,d_DATE6) -90. demand_def(a_ATM2,d_DATE7) 536. x1(23_ATM2,4) demand_def(a_ATM2,d_DATE8) -838.8 demand_def(a_ATM2,d_DATE9) -398.4 x1(23_ATM2,4) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_4) -1. x1(23_ATM2,4) ztox3(a_ATM2,t_4) -1. x1(24_ATM2,5) demand_def(a_ATM2,d_DATE0) -294.5 demand_def(a_ATM2,d_DATE1) 534. x1(24_ATM2,5) demand_def(a_ATM2,d_DATE2) 92.5 demand_def(a_ATM2,d_DATE3) -206.5 x1(24_ATM2,5) demand_def(a_ATM2,d_DATE4) -587. demand_def(a_ATM2,d_DATE5) -782. x1(24_ATM2,5) demand_def(a_ATM2,d_DATE6) -112.5 demand_def(a_ATM2,d_DATE7) 670. x1(24_ATM2,5) demand_def(a_ATM2,d_DATE8) -1048.5 demand_def(a_ATM2,d_DATE9) -498. x1(24_ATM2,5) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_5) -1. x1(24_ATM2,5) ztox3(a_ATM2,t_5) -1. x1(25_ATM2,6) demand_def(a_ATM2,d_DATE0) -353.4 demand_def(a_ATM2,d_DATE1) 640.8 x1(25_ATM2,6) demand_def(a_ATM2,d_DATE2) 111. demand_def(a_ATM2,d_DATE3) -247.8 x1(25_ATM2,6) demand_def(a_ATM2,d_DATE4) -704.4 demand_def(a_ATM2,d_DATE5) -938.4 x1(25_ATM2,6) demand_def(a_ATM2,d_DATE6) -135. demand_def(a_ATM2,d_DATE7) 804. x1(25_ATM2,6) demand_def(a_ATM2,d_DATE8) -1258.2 demand_def(a_ATM2,d_DATE9) -597.6 x1(25_ATM2,6) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_6) -1. x1(25_ATM2,6) ztox3(a_ATM2,t_6) -1. x1(26_ATM2,7) demand_def(a_ATM2,d_DATE0) -412.3 demand_def(a_ATM2,d_DATE1) 747.6 x1(26_ATM2,7) demand_def(a_ATM2,d_DATE2) 129.5 demand_def(a_ATM2,d_DATE3) -289.1 x1(26_ATM2,7) demand_def(a_ATM2,d_DATE4) -821.8 demand_def(a_ATM2,d_DATE5) -1094.8 x1(26_ATM2,7) demand_def(a_ATM2,d_DATE6) -157.5 demand_def(a_ATM2,d_DATE7) 938. x1(26_ATM2,7) demand_def(a_ATM2,d_DATE8) -1467.9 demand_def(a_ATM2,d_DATE9) -697.2 x1(26_ATM2,7) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_7) -1. x1(26_ATM2,7) ztox3(a_ATM2,t_7) -1. x1(27_ATM2,8) demand_def(a_ATM2,d_DATE0) -471.2 demand_def(a_ATM2,d_DATE1) 854.4 x1(27_ATM2,8) demand_def(a_ATM2,d_DATE2) 148. demand_def(a_ATM2,d_DATE3) -330.4 x1(27_ATM2,8) demand_def(a_ATM2,d_DATE4) -939.2 demand_def(a_ATM2,d_DATE5) -1251.2 x1(27_ATM2,8) demand_def(a_ATM2,d_DATE6) -180. demand_def(a_ATM2,d_DATE7) 1072. x1(27_ATM2,8) demand_def(a_ATM2,d_DATE8) -1677.6 demand_def(a_ATM2,d_DATE9) -796.8 x1(27_ATM2,8) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_8) -1. x1(27_ATM2,8) ztox3(a_ATM2,t_8) -1. x1(28_ATM2,9) demand_def(a_ATM2,d_DATE0) -530.1 demand_def(a_ATM2,d_DATE1) 961.2 x1(28_ATM2,9) demand_def(a_ATM2,d_DATE2) 166.5 demand_def(a_ATM2,d_DATE3) -371.7 x1(28_ATM2,9) demand_def(a_ATM2,d_DATE4) -1056.6 demand_def(a_ATM2,d_DATE5) -1407.6 x1(28_ATM2,9) demand_def(a_ATM2,d_DATE6) -202.5 demand_def(a_ATM2,d_DATE7) 1206. x1(28_ATM2,9) demand_def(a_ATM2,d_DATE8) -1887.3 demand_def(a_ATM2,d_DATE9) -896.4 x1(28_ATM2,9) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_9) -1. x1(28_ATM2,9) ztox3(a_ATM2,t_9) -1. x1(29_ATM2,10) demand_def(a_ATM2,d_DATE0) -589. demand_def(a_ATM2,d_DATE1) 1068. x1(29_ATM2,10) demand_def(a_ATM2,d_DATE2) 185. demand_def(a_ATM2,d_DATE3) -413. x1(29_ATM2,10) demand_def(a_ATM2,d_DATE4) -1174. demand_def(a_ATM2,d_DATE5) -1564. x1(29_ATM2,10) demand_def(a_ATM2,d_DATE6) -225. demand_def(a_ATM2,d_DATE7) 1340. x1(29_ATM2,10) demand_def(a_ATM2,d_DATE8) -2097. demand_def(a_ATM2,d_DATE9) -996. x1(29_ATM2,10) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_10) -1. x1(29_ATM2,10) ztox3(a_ATM2,t_10) -1. x1(30_ATM3,1) demand_def(a_ATM3,d_DATE0) 48.2 demand_def(a_ATM3,d_DATE1) -403.6 x1(30_ATM3,1) demand_def(a_ATM3,d_DATE2) 116.8 demand_def(a_ATM3,d_DATE3) 95.5 x1(30_ATM3,1) demand_def(a_ATM3,d_DATE4) 112.3 demand_def(a_ATM3,d_DATE5) -62.1 x1(30_ATM3,1) demand_def(a_ATM3,d_DATE6) 95.9 demand_def(a_ATM3,d_DATE7) -503.2 x1(30_ATM3,1) demand_def(a_ATM3,d_DATE8) 35. demand_def(a_ATM3,d_DATE9) 357.9 x1(30_ATM3,1) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_1) -1. x1(30_ATM3,1) ztox3(a_ATM3,t_1) -1. x1(31_ATM3,2) demand_def(a_ATM3,d_DATE0) 96.4 demand_def(a_ATM3,d_DATE1) -807.2 x1(31_ATM3,2) demand_def(a_ATM3,d_DATE2) 233.6 demand_def(a_ATM3,d_DATE3) 191. x1(31_ATM3,2) demand_def(a_ATM3,d_DATE4) 224.6 demand_def(a_ATM3,d_DATE5) -124.2 x1(31_ATM3,2) demand_def(a_ATM3,d_DATE6) 191.8 demand_def(a_ATM3,d_DATE7) -1006.4 x1(31_ATM3,2) demand_def(a_ATM3,d_DATE8) 70. demand_def(a_ATM3,d_DATE9) 715.8 x1(31_ATM3,2) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_2) -1. x1(31_ATM3,2) ztox3(a_ATM3,t_2) -1. x1(32_ATM3,3) demand_def(a_ATM3,d_DATE0) 144.6 demand_def(a_ATM3,d_DATE1) -1210.8 x1(32_ATM3,3) demand_def(a_ATM3,d_DATE2) 350.4 demand_def(a_ATM3,d_DATE3) 286.5 x1(32_ATM3,3) demand_def(a_ATM3,d_DATE4) 336.9 demand_def(a_ATM3,d_DATE5) -186.3 x1(32_ATM3,3) demand_def(a_ATM3,d_DATE6) 287.7 demand_def(a_ATM3,d_DATE7) -1509.6 x1(32_ATM3,3) demand_def(a_ATM3,d_DATE8) 105. demand_def(a_ATM3,d_DATE9) 1073.7 x1(32_ATM3,3) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_3) -1. x1(32_ATM3,3) ztox3(a_ATM3,t_3) -1. x1(33_ATM3,4) demand_def(a_ATM3,d_DATE0) 192.8 demand_def(a_ATM3,d_DATE1) -1614.4 x1(33_ATM3,4) demand_def(a_ATM3,d_DATE2) 467.2 demand_def(a_ATM3,d_DATE3) 382. x1(33_ATM3,4) demand_def(a_ATM3,d_DATE4) 449.2 demand_def(a_ATM3,d_DATE5) -248.4 x1(33_ATM3,4) demand_def(a_ATM3,d_DATE6) 383.6 demand_def(a_ATM3,d_DATE7) -2012.8 x1(33_ATM3,4) demand_def(a_ATM3,d_DATE8) 140. demand_def(a_ATM3,d_DATE9) 1431.6 x1(33_ATM3,4) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_4) -1. x1(33_ATM3,4) ztox3(a_ATM3,t_4) -1. x1(34_ATM3,5) demand_def(a_ATM3,d_DATE0) 241. demand_def(a_ATM3,d_DATE1) -2018. x1(34_ATM3,5) demand_def(a_ATM3,d_DATE2) 584. demand_def(a_ATM3,d_DATE3) 477.5 x1(34_ATM3,5) demand_def(a_ATM3,d_DATE4) 561.5 demand_def(a_ATM3,d_DATE5) -310.5 x1(34_ATM3,5) demand_def(a_ATM3,d_DATE6) 479.5 demand_def(a_ATM3,d_DATE7) -2516. x1(34_ATM3,5) demand_def(a_ATM3,d_DATE8) 175. demand_def(a_ATM3,d_DATE9) 1789.5 x1(34_ATM3,5) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_5) -1. x1(34_ATM3,5) ztox3(a_ATM3,t_5) -1. x1(35_ATM3,6) demand_def(a_ATM3,d_DATE0) 289.2 demand_def(a_ATM3,d_DATE1) -2421.6 x1(35_ATM3,6) demand_def(a_ATM3,d_DATE2) 700.8 demand_def(a_ATM3,d_DATE3) 573. x1(35_ATM3,6) demand_def(a_ATM3,d_DATE4) 673.8 demand_def(a_ATM3,d_DATE5) -372.6 x1(35_ATM3,6) demand_def(a_ATM3,d_DATE6) 575.4 demand_def(a_ATM3,d_DATE7) -3019.2 x1(35_ATM3,6) demand_def(a_ATM3,d_DATE8) 210. demand_def(a_ATM3,d_DATE9) 2147.4 x1(35_ATM3,6) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_6) -1. x1(35_ATM3,6) ztox3(a_ATM3,t_6) -1. x1(36_ATM3,7) demand_def(a_ATM3,d_DATE0) 337.4 demand_def(a_ATM3,d_DATE1) -2825.2 x1(36_ATM3,7) demand_def(a_ATM3,d_DATE2) 817.6 demand_def(a_ATM3,d_DATE3) 668.5 x1(36_ATM3,7) demand_def(a_ATM3,d_DATE4) 786.1 demand_def(a_ATM3,d_DATE5) -434.7 x1(36_ATM3,7) demand_def(a_ATM3,d_DATE6) 671.3 demand_def(a_ATM3,d_DATE7) -3522.4 x1(36_ATM3,7) demand_def(a_ATM3,d_DATE8) 245. demand_def(a_ATM3,d_DATE9) 2505.3 x1(36_ATM3,7) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_7) -1. x1(36_ATM3,7) ztox3(a_ATM3,t_7) -1. x1(37_ATM3,8) demand_def(a_ATM3,d_DATE0) 385.6 demand_def(a_ATM3,d_DATE1) -3228.8 x1(37_ATM3,8) demand_def(a_ATM3,d_DATE2) 934.4 demand_def(a_ATM3,d_DATE3) 764. x1(37_ATM3,8) demand_def(a_ATM3,d_DATE4) 898.4 demand_def(a_ATM3,d_DATE5) -496.8 x1(37_ATM3,8) demand_def(a_ATM3,d_DATE6) 767.2 demand_def(a_ATM3,d_DATE7) -4025.6 x1(37_ATM3,8) demand_def(a_ATM3,d_DATE8) 280. demand_def(a_ATM3,d_DATE9) 2863.2 x1(37_ATM3,8) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_8) -1. x1(37_ATM3,8) ztox3(a_ATM3,t_8) -1. x1(38_ATM3,9) demand_def(a_ATM3,d_DATE0) 433.8 demand_def(a_ATM3,d_DATE1) -3632.4 x1(38_ATM3,9) demand_def(a_ATM3,d_DATE2) 1051.2 demand_def(a_ATM3,d_DATE3) 859.5 x1(38_ATM3,9) demand_def(a_ATM3,d_DATE4) 1010.7 demand_def(a_ATM3,d_DATE5) -558.9 x1(38_ATM3,9) demand_def(a_ATM3,d_DATE6) 863.1 demand_def(a_ATM3,d_DATE7) -4528.8 x1(38_ATM3,9) demand_def(a_ATM3,d_DATE8) 315. demand_def(a_ATM3,d_DATE9) 3221.1 x1(38_ATM3,9) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_9) -1. x1(38_ATM3,9) ztox3(a_ATM3,t_9) -1. x1(39_ATM3,10) demand_def(a_ATM3,d_DATE0) 482. demand_def(a_ATM3,d_DATE1) -4036. x1(39_ATM3,10) demand_def(a_ATM3,d_DATE2) 1168. demand_def(a_ATM3,d_DATE3) 955. x1(39_ATM3,10) demand_def(a_ATM3,d_DATE4) 1123. demand_def(a_ATM3,d_DATE5) -621. x1(39_ATM3,10) demand_def(a_ATM3,d_DATE6) 959. demand_def(a_ATM3,d_DATE7) -5032. x1(39_ATM3,10) demand_def(a_ATM3,d_DATE8) 350. demand_def(a_ATM3,d_DATE9) 3579. x1(39_ATM3,10) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_10) -1. x1(39_ATM3,10) ztox3(a_ATM3,t_10) -1. x1(40_ATM4,1) demand_def(a_ATM4,d_DATE0) -233.4 demand_def(a_ATM4,d_DATE1) -149.2 x1(40_ATM4,1) demand_def(a_ATM4,d_DATE2) 335.2 demand_def(a_ATM4,d_DATE3) -94.2 x1(40_ATM4,1) demand_def(a_ATM4,d_DATE4) 135.3 demand_def(a_ATM4,d_DATE5) 16.7 x1(40_ATM4,1) demand_def(a_ATM4,d_DATE6) -90. demand_def(a_ATM4,d_DATE7) -237.8 x1(40_ATM4,1) demand_def(a_ATM4,d_DATE8) -316.7 demand_def(a_ATM4,d_DATE9) 232.4 x1(40_ATM4,1) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_1) -1. x1(40_ATM4,1) ztox3(a_ATM4,t_1) -1. x1(41_ATM4,2) demand_def(a_ATM4,d_DATE0) -466.8 demand_def(a_ATM4,d_DATE1) -298.4 x1(41_ATM4,2) demand_def(a_ATM4,d_DATE2) 670.4 demand_def(a_ATM4,d_DATE3) -188.4 x1(41_ATM4,2) demand_def(a_ATM4,d_DATE4) 270.6 demand_def(a_ATM4,d_DATE5) 33.4 x1(41_ATM4,2) demand_def(a_ATM4,d_DATE6) -180. demand_def(a_ATM4,d_DATE7) -475.6 x1(41_ATM4,2) demand_def(a_ATM4,d_DATE8) -633.4 demand_def(a_ATM4,d_DATE9) 464.8 x1(41_ATM4,2) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_2) -1. x1(41_ATM4,2) ztox3(a_ATM4,t_2) -1. x1(42_ATM4,3) demand_def(a_ATM4,d_DATE0) -700.2 demand_def(a_ATM4,d_DATE1) -447.6 x1(42_ATM4,3) demand_def(a_ATM4,d_DATE2) 1005.6 demand_def(a_ATM4,d_DATE3) -282.6 x1(42_ATM4,3) demand_def(a_ATM4,d_DATE4) 405.9 demand_def(a_ATM4,d_DATE5) 50.1 x1(42_ATM4,3) demand_def(a_ATM4,d_DATE6) -270. demand_def(a_ATM4,d_DATE7) -713.4 x1(42_ATM4,3) demand_def(a_ATM4,d_DATE8) -950.1 demand_def(a_ATM4,d_DATE9) 697.2 x1(42_ATM4,3) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_3) -1. x1(42_ATM4,3) ztox3(a_ATM4,t_3) -1. x1(43_ATM4,4) demand_def(a_ATM4,d_DATE0) -933.6 demand_def(a_ATM4,d_DATE1) -596.8 x1(43_ATM4,4) demand_def(a_ATM4,d_DATE2) 1340.8 demand_def(a_ATM4,d_DATE3) -376.8 x1(43_ATM4,4) demand_def(a_ATM4,d_DATE4) 541.2 demand_def(a_ATM4,d_DATE5) 66.8 x1(43_ATM4,4) demand_def(a_ATM4,d_DATE6) -360. demand_def(a_ATM4,d_DATE7) -951.2 x1(43_ATM4,4) demand_def(a_ATM4,d_DATE8) -1266.8 demand_def(a_ATM4,d_DATE9) 929.6 x1(43_ATM4,4) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_4) -1. x1(43_ATM4,4) ztox3(a_ATM4,t_4) -1. x1(44_ATM4,5) demand_def(a_ATM4,d_DATE0) -1167. demand_def(a_ATM4,d_DATE1) -746. x1(44_ATM4,5) demand_def(a_ATM4,d_DATE2) 1676. demand_def(a_ATM4,d_DATE3) -471. x1(44_ATM4,5) demand_def(a_ATM4,d_DATE4) 676.5 demand_def(a_ATM4,d_DATE5) 83.5 x1(44_ATM4,5) demand_def(a_ATM4,d_DATE6) -450. demand_def(a_ATM4,d_DATE7) -1189. x1(44_ATM4,5) demand_def(a_ATM4,d_DATE8) -1583.5 demand_def(a_ATM4,d_DATE9) 1162. x1(44_ATM4,5) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_5) -1. x1(44_ATM4,5) ztox3(a_ATM4,t_5) -1. x1(45_ATM4,6) demand_def(a_ATM4,d_DATE0) -1400.4 demand_def(a_ATM4,d_DATE1) -895.2 x1(45_ATM4,6) demand_def(a_ATM4,d_DATE2) 2011.2 demand_def(a_ATM4,d_DATE3) -565.2 x1(45_ATM4,6) demand_def(a_ATM4,d_DATE4) 811.8 demand_def(a_ATM4,d_DATE5) 100.2 x1(45_ATM4,6) demand_def(a_ATM4,d_DATE6) -540. demand_def(a_ATM4,d_DATE7) -1426.8 x1(45_ATM4,6) demand_def(a_ATM4,d_DATE8) -1900.2 demand_def(a_ATM4,d_DATE9) 1394.4 x1(45_ATM4,6) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_6) -1. x1(45_ATM4,6) ztox3(a_ATM4,t_6) -1. x1(46_ATM4,7) demand_def(a_ATM4,d_DATE0) -1633.8 demand_def(a_ATM4,d_DATE1) -1044.4 x1(46_ATM4,7) demand_def(a_ATM4,d_DATE2) 2346.4 demand_def(a_ATM4,d_DATE3) -659.4 x1(46_ATM4,7) demand_def(a_ATM4,d_DATE4) 947.1 demand_def(a_ATM4,d_DATE5) 116.9 x1(46_ATM4,7) demand_def(a_ATM4,d_DATE6) -630. demand_def(a_ATM4,d_DATE7) -1664.6 x1(46_ATM4,7) demand_def(a_ATM4,d_DATE8) -2216.9 demand_def(a_ATM4,d_DATE9) 1626.8 x1(46_ATM4,7) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_7) -1. x1(46_ATM4,7) ztox3(a_ATM4,t_7) -1. x1(47_ATM4,8) demand_def(a_ATM4,d_DATE0) -1867.2 demand_def(a_ATM4,d_DATE1) -1193.6 x1(47_ATM4,8) demand_def(a_ATM4,d_DATE2) 2681.6 demand_def(a_ATM4,d_DATE3) -753.6 x1(47_ATM4,8) demand_def(a_ATM4,d_DATE4) 1082.4 demand_def(a_ATM4,d_DATE5) 133.6 x1(47_ATM4,8) demand_def(a_ATM4,d_DATE6) -720. demand_def(a_ATM4,d_DATE7) -1902.4 x1(47_ATM4,8) demand_def(a_ATM4,d_DATE8) -2533.6 demand_def(a_ATM4,d_DATE9) 1859.2 x1(47_ATM4,8) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_8) -1. x1(47_ATM4,8) ztox3(a_ATM4,t_8) -1. x1(48_ATM4,9) demand_def(a_ATM4,d_DATE0) -2100.6 demand_def(a_ATM4,d_DATE1) -1342.8 x1(48_ATM4,9) demand_def(a_ATM4,d_DATE2) 3016.8 demand_def(a_ATM4,d_DATE3) -847.8 x1(48_ATM4,9) demand_def(a_ATM4,d_DATE4) 1217.7 demand_def(a_ATM4,d_DATE5) 150.3 x1(48_ATM4,9) demand_def(a_ATM4,d_DATE6) -810. demand_def(a_ATM4,d_DATE7) -2140.2 x1(48_ATM4,9) demand_def(a_ATM4,d_DATE8) -2850.3 demand_def(a_ATM4,d_DATE9) 2091.6 x1(48_ATM4,9) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_9) -1. x1(48_ATM4,9) ztox3(a_ATM4,t_9) -1. x1(49_ATM4,10) demand_def(a_ATM4,d_DATE0) -2334. demand_def(a_ATM4,d_DATE1) -1492. x1(49_ATM4,10) demand_def(a_ATM4,d_DATE2) 3352. demand_def(a_ATM4,d_DATE3) -942. x1(49_ATM4,10) demand_def(a_ATM4,d_DATE4) 1353. demand_def(a_ATM4,d_DATE5) 167. x1(49_ATM4,10) demand_def(a_ATM4,d_DATE6) -900. demand_def(a_ATM4,d_DATE7) -2378. x1(49_ATM4,10) demand_def(a_ATM4,d_DATE8) -3167. demand_def(a_ATM4,d_DATE9) 2324. x1(49_ATM4,10) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_10) -1. x1(49_ATM4,10) ztox3(a_ATM4,t_10) -1. z(50_ATM0,1) demand_def(a_ATM0,d_DATE0) 198.4 demand_def(a_ATM0,d_DATE1) 253. z(50_ATM0,1) demand_def(a_ATM0,d_DATE2) -6.7 demand_def(a_ATM0,d_DATE3) -313.5 z(50_ATM0,1) demand_def(a_ATM0,d_DATE4) -95.1 demand_def(a_ATM0,d_DATE5) 47.9 z(50_ATM0,1) demand_def(a_ATM0,d_DATE6) 318.6 demand_def(a_ATM0,d_DATE7) 34.1 z(50_ATM0,1) demand_def(a_ATM0,d_DATE8) -64.3 demand_def(a_ATM0,d_DATE9) -93.1 z(50_ATM0,1) ztox1(a_ATM0,t_1) 1. ztox2(a_ATM0,t_1) 1. z(50_ATM0,1) ztox3(a_ATM0,t_1) 1. z(51_ATM0,2) demand_def(a_ATM0,d_DATE0) 396.8 demand_def(a_ATM0,d_DATE1) 506. z(51_ATM0,2) demand_def(a_ATM0,d_DATE2) -13.4 demand_def(a_ATM0,d_DATE3) -627. z(51_ATM0,2) demand_def(a_ATM0,d_DATE4) -190.2 demand_def(a_ATM0,d_DATE5) 95.8 z(51_ATM0,2) demand_def(a_ATM0,d_DATE6) 637.2 demand_def(a_ATM0,d_DATE7) 68.2 z(51_ATM0,2) demand_def(a_ATM0,d_DATE8) -128.6 demand_def(a_ATM0,d_DATE9) -186.2 z(51_ATM0,2) ztox1(a_ATM0,t_2) 1. ztox2(a_ATM0,t_2) 1. z(51_ATM0,2) ztox3(a_ATM0,t_2) 1. z(52_ATM0,3) demand_def(a_ATM0,d_DATE0) 595.2 demand_def(a_ATM0,d_DATE1) 759. z(52_ATM0,3) demand_def(a_ATM0,d_DATE2) -20.1 demand_def(a_ATM0,d_DATE3) -940.5 z(52_ATM0,3) demand_def(a_ATM0,d_DATE4) -285.3 demand_def(a_ATM0,d_DATE5) 143.7 z(52_ATM0,3) demand_def(a_ATM0,d_DATE6) 955.8 demand_def(a_ATM0,d_DATE7) 102.3 z(52_ATM0,3) demand_def(a_ATM0,d_DATE8) -192.9 demand_def(a_ATM0,d_DATE9) -279.3 z(52_ATM0,3) ztox1(a_ATM0,t_3) 1. ztox2(a_ATM0,t_3) 1. z(52_ATM0,3) ztox3(a_ATM0,t_3) 1. z(53_ATM0,4) demand_def(a_ATM0,d_DATE0) 793.6 demand_def(a_ATM0,d_DATE1) 1012. z(53_ATM0,4) demand_def(a_ATM0,d_DATE2) -26.8 demand_def(a_ATM0,d_DATE3) -1254. z(53_ATM0,4) demand_def(a_ATM0,d_DATE4) -380.4 demand_def(a_ATM0,d_DATE5) 191.6 z(53_ATM0,4) demand_def(a_ATM0,d_DATE6) 1274.4 demand_def(a_ATM0,d_DATE7) 136.4 z(53_ATM0,4) demand_def(a_ATM0,d_DATE8) -257.2 demand_def(a_ATM0,d_DATE9) -372.4 z(53_ATM0,4) ztox1(a_ATM0,t_4) 1. ztox2(a_ATM0,t_4) 1. z(53_ATM0,4) ztox3(a_ATM0,t_4) 1. z(54_ATM0,5) demand_def(a_ATM0,d_DATE0) 992. demand_def(a_ATM0,d_DATE1) 1265. z(54_ATM0,5) demand_def(a_ATM0,d_DATE2) -33.5 demand_def(a_ATM0,d_DATE3) -1567.5 z(54_ATM0,5) demand_def(a_ATM0,d_DATE4) -475.5 demand_def(a_ATM0,d_DATE5) 239.5 z(54_ATM0,5) demand_def(a_ATM0,d_DATE6) 1593. demand_def(a_ATM0,d_DATE7) 170.5 z(54_ATM0,5) demand_def(a_ATM0,d_DATE8) -321.5 demand_def(a_ATM0,d_DATE9) -465.5 z(54_ATM0,5) ztox1(a_ATM0,t_5) 1. ztox2(a_ATM0,t_5) 1. z(54_ATM0,5) ztox3(a_ATM0,t_5) 1. z(55_ATM0,6) demand_def(a_ATM0,d_DATE0) 1190.4 demand_def(a_ATM0,d_DATE1) 1518. z(55_ATM0,6) demand_def(a_ATM0,d_DATE2) -40.2 demand_def(a_ATM0,d_DATE3) -1881. z(55_ATM0,6) demand_def(a_ATM0,d_DATE4) -570.6 demand_def(a_ATM0,d_DATE5) 287.4 z(55_ATM0,6) demand_def(a_ATM0,d_DATE6) 1911.6 demand_def(a_ATM0,d_DATE7) 204.6 z(55_ATM0,6) demand_def(a_ATM0,d_DATE8) -385.8 demand_def(a_ATM0,d_DATE9) -558.6 z(55_ATM0,6) ztox1(a_ATM0,t_6) 1. ztox2(a_ATM0,t_6) 1. z(55_ATM0,6) ztox3(a_ATM0,t_6) 1. z(56_ATM0,7) demand_def(a_ATM0,d_DATE0) 1388.8 demand_def(a_ATM0,d_DATE1) 1771. z(56_ATM0,7) demand_def(a_ATM0,d_DATE2) -46.9 demand_def(a_ATM0,d_DATE3) -2194.5 z(56_ATM0,7) demand_def(a_ATM0,d_DATE4) -665.7 demand_def(a_ATM0,d_DATE5) 335.3 z(56_ATM0,7) demand_def(a_ATM0,d_DATE6) 2230.2 demand_def(a_ATM0,d_DATE7) 238.7 z(56_ATM0,7) demand_def(a_ATM0,d_DATE8) -450.1 demand_def(a_ATM0,d_DATE9) -651.7 z(56_ATM0,7) ztox1(a_ATM0,t_7) 1. ztox2(a_ATM0,t_7) 1. z(56_ATM0,7) ztox3(a_ATM0,t_7) 1. z(57_ATM0,8) demand_def(a_ATM0,d_DATE0) 1587.2 demand_def(a_ATM0,d_DATE1) 2024. z(57_ATM0,8) demand_def(a_ATM0,d_DATE2) -53.6 demand_def(a_ATM0,d_DATE3) -2508. z(57_ATM0,8) demand_def(a_ATM0,d_DATE4) -760.8 demand_def(a_ATM0,d_DATE5) 383.2 z(57_ATM0,8) demand_def(a_ATM0,d_DATE6) 2548.8 demand_def(a_ATM0,d_DATE7) 272.8 z(57_ATM0,8) demand_def(a_ATM0,d_DATE8) -514.4 demand_def(a_ATM0,d_DATE9) -744.8 z(57_ATM0,8) ztox1(a_ATM0,t_8) 1. ztox2(a_ATM0,t_8) 1. z(57_ATM0,8) ztox3(a_ATM0,t_8) 1. z(58_ATM0,9) demand_def(a_ATM0,d_DATE0) 1785.6 demand_def(a_ATM0,d_DATE1) 2277. z(58_ATM0,9) demand_def(a_ATM0,d_DATE2) -60.3 demand_def(a_ATM0,d_DATE3) -2821.5 z(58_ATM0,9) demand_def(a_ATM0,d_DATE4) -855.9 demand_def(a_ATM0,d_DATE5) 431.1 z(58_ATM0,9) demand_def(a_ATM0,d_DATE6) 2867.4 demand_def(a_ATM0,d_DATE7) 306.9 z(58_ATM0,9) demand_def(a_ATM0,d_DATE8) -578.7 demand_def(a_ATM0,d_DATE9) -837.9 z(58_ATM0,9) ztox1(a_ATM0,t_9) 1. ztox2(a_ATM0,t_9) 1. z(58_ATM0,9) ztox3(a_ATM0,t_9) 1. z(59_ATM0,10) demand_def(a_ATM0,d_DATE0) 1984. demand_def(a_ATM0,d_DATE1) 2530. z(59_ATM0,10) demand_def(a_ATM0,d_DATE2) -67. demand_def(a_ATM0,d_DATE3) -3135. z(59_ATM0,10) demand_def(a_ATM0,d_DATE4) -951. demand_def(a_ATM0,d_DATE5) 479. z(59_ATM0,10) demand_def(a_ATM0,d_DATE6) 3186. demand_def(a_ATM0,d_DATE7) 341. z(59_ATM0,10) demand_def(a_ATM0,d_DATE8) -643. demand_def(a_ATM0,d_DATE9) -931. z(59_ATM0,10) ztox1(a_ATM0,t_10) 1. ztox2(a_ATM0,t_10) 1. z(59_ATM0,10) ztox3(a_ATM0,t_10) 1. z(60_ATM1,1) demand_def(a_ATM1,d_DATE0) 60.1 demand_def(a_ATM1,d_DATE1) 61.8 z(60_ATM1,1) demand_def(a_ATM1,d_DATE2) -61. demand_def(a_ATM1,d_DATE3) -197.7 z(60_ATM1,1) demand_def(a_ATM1,d_DATE4) 156.6 demand_def(a_ATM1,d_DATE5) -148. z(60_ATM1,1) demand_def(a_ATM1,d_DATE6) 67.9 demand_def(a_ATM1,d_DATE7) 137.5 z(60_ATM1,1) demand_def(a_ATM1,d_DATE8) 53.4 demand_def(a_ATM1,d_DATE9) 15.7 z(60_ATM1,1) ztox1(a_ATM1,t_1) 1. ztox2(a_ATM1,t_1) 1. z(60_ATM1,1) ztox3(a_ATM1,t_1) 1. z(61_ATM1,2) demand_def(a_ATM1,d_DATE0) 120.2 demand_def(a_ATM1,d_DATE1) 123.6 z(61_ATM1,2) demand_def(a_ATM1,d_DATE2) -122. demand_def(a_ATM1,d_DATE3) -395.4 z(61_ATM1,2) demand_def(a_ATM1,d_DATE4) 313.2 demand_def(a_ATM1,d_DATE5) -296. z(61_ATM1,2) demand_def(a_ATM1,d_DATE6) 135.8 demand_def(a_ATM1,d_DATE7) 275. z(61_ATM1,2) demand_def(a_ATM1,d_DATE8) 106.8 demand_def(a_ATM1,d_DATE9) 31.4 z(61_ATM1,2) ztox1(a_ATM1,t_2) 1. ztox2(a_ATM1,t_2) 1. z(61_ATM1,2) ztox3(a_ATM1,t_2) 1. z(62_ATM1,3) demand_def(a_ATM1,d_DATE0) 180.3 demand_def(a_ATM1,d_DATE1) 185.4 z(62_ATM1,3) demand_def(a_ATM1,d_DATE2) -183. demand_def(a_ATM1,d_DATE3) -593.1 z(62_ATM1,3) demand_def(a_ATM1,d_DATE4) 469.8 demand_def(a_ATM1,d_DATE5) -444. z(62_ATM1,3) demand_def(a_ATM1,d_DATE6) 203.7 demand_def(a_ATM1,d_DATE7) 412.5 z(62_ATM1,3) demand_def(a_ATM1,d_DATE8) 160.2 demand_def(a_ATM1,d_DATE9) 47.1 z(62_ATM1,3) ztox1(a_ATM1,t_3) 1. ztox2(a_ATM1,t_3) 1. z(62_ATM1,3) ztox3(a_ATM1,t_3) 1. z(63_ATM1,4) demand_def(a_ATM1,d_DATE0) 240.4 demand_def(a_ATM1,d_DATE1) 247.2 z(63_ATM1,4) demand_def(a_ATM1,d_DATE2) -244. demand_def(a_ATM1,d_DATE3) -790.8 z(63_ATM1,4) demand_def(a_ATM1,d_DATE4) 626.4 demand_def(a_ATM1,d_DATE5) -592. z(63_ATM1,4) demand_def(a_ATM1,d_DATE6) 271.6 demand_def(a_ATM1,d_DATE7) 550. z(63_ATM1,4) demand_def(a_ATM1,d_DATE8) 213.6 demand_def(a_ATM1,d_DATE9) 62.8 z(63_ATM1,4) ztox1(a_ATM1,t_4) 1. ztox2(a_ATM1,t_4) 1. z(63_ATM1,4) ztox3(a_ATM1,t_4) 1. z(64_ATM1,5) demand_def(a_ATM1,d_DATE0) 300.5 demand_def(a_ATM1,d_DATE1) 309. z(64_ATM1,5) demand_def(a_ATM1,d_DATE2) -305. demand_def(a_ATM1,d_DATE3) -988.5 z(64_ATM1,5) demand_def(a_ATM1,d_DATE4) 783. demand_def(a_ATM1,d_DATE5) -740. z(64_ATM1,5) demand_def(a_ATM1,d_DATE6) 339.5 demand_def(a_ATM1,d_DATE7) 687.5 z(64_ATM1,5) demand_def(a_ATM1,d_DATE8) 267. demand_def(a_ATM1,d_DATE9) 78.5 z(64_ATM1,5) ztox1(a_ATM1,t_5) 1. ztox2(a_ATM1,t_5) 1. z(64_ATM1,5) ztox3(a_ATM1,t_5) 1. z(65_ATM1,6) demand_def(a_ATM1,d_DATE0) 360.6 demand_def(a_ATM1,d_DATE1) 370.8 z(65_ATM1,6) demand_def(a_ATM1,d_DATE2) -366. demand_def(a_ATM1,d_DATE3) -1186.2 z(65_ATM1,6) demand_def(a_ATM1,d_DATE4) 939.6 demand_def(a_ATM1,d_DATE5) -888. z(65_ATM1,6) demand_def(a_ATM1,d_DATE6) 407.4 demand_def(a_ATM1,d_DATE7) 825. z(65_ATM1,6) demand_def(a_ATM1,d_DATE8) 320.4 demand_def(a_ATM1,d_DATE9) 94.2 z(65_ATM1,6) ztox1(a_ATM1,t_6) 1. ztox2(a_ATM1,t_6) 1. z(65_ATM1,6) ztox3(a_ATM1,t_6) 1. z(66_ATM1,7) demand_def(a_ATM1,d_DATE0) 420.7 demand_def(a_ATM1,d_DATE1) 432.6 z(66_ATM1,7) demand_def(a_ATM1,d_DATE2) -427. demand_def(a_ATM1,d_DATE3) -1383.9 z(66_ATM1,7) demand_def(a_ATM1,d_DATE4) 1096.2 demand_def(a_ATM1,d_DATE5) -1036. z(66_ATM1,7) demand_def(a_ATM1,d_DATE6) 475.3 demand_def(a_ATM1,d_DATE7) 962.5 z(66_ATM1,7) demand_def(a_ATM1,d_DATE8) 373.8 demand_def(a_ATM1,d_DATE9) 109.9 z(66_ATM1,7) ztox1(a_ATM1,t_7) 1. ztox2(a_ATM1,t_7) 1. z(66_ATM1,7) ztox3(a_ATM1,t_7) 1. z(67_ATM1,8) demand_def(a_ATM1,d_DATE0) 480.8 demand_def(a_ATM1,d_DATE1) 494.4 z(67_ATM1,8) demand_def(a_ATM1,d_DATE2) -488. demand_def(a_ATM1,d_DATE3) -1581.6 z(67_ATM1,8) demand_def(a_ATM1,d_DATE4) 1252.8 demand_def(a_ATM1,d_DATE5) -1184. z(67_ATM1,8) demand_def(a_ATM1,d_DATE6) 543.2 demand_def(a_ATM1,d_DATE7) 1100. z(67_ATM1,8) demand_def(a_ATM1,d_DATE8) 427.2 demand_def(a_ATM1,d_DATE9) 125.6 z(67_ATM1,8) ztox1(a_ATM1,t_8) 1. ztox2(a_ATM1,t_8) 1. z(67_ATM1,8) ztox3(a_ATM1,t_8) 1. z(68_ATM1,9) demand_def(a_ATM1,d_DATE0) 540.9 demand_def(a_ATM1,d_DATE1) 556.2 z(68_ATM1,9) demand_def(a_ATM1,d_DATE2) -549. demand_def(a_ATM1,d_DATE3) -1779.3 z(68_ATM1,9) demand_def(a_ATM1,d_DATE4) 1409.4 demand_def(a_ATM1,d_DATE5) -1332. z(68_ATM1,9) demand_def(a_ATM1,d_DATE6) 611.1 demand_def(a_ATM1,d_DATE7) 1237.5 z(68_ATM1,9) demand_def(a_ATM1,d_DATE8) 480.6 demand_def(a_ATM1,d_DATE9) 141.3 z(68_ATM1,9) ztox1(a_ATM1,t_9) 1. ztox2(a_ATM1,t_9) 1. z(68_ATM1,9) ztox3(a_ATM1,t_9) 1. z(69_ATM1,10) demand_def(a_ATM1,d_DATE0) 601. demand_def(a_ATM1,d_DATE1) 618. z(69_ATM1,10) demand_def(a_ATM1,d_DATE2) -610. demand_def(a_ATM1,d_DATE3) -1977. z(69_ATM1,10) demand_def(a_ATM1,d_DATE4) 1566. demand_def(a_ATM1,d_DATE5) -1480. z(69_ATM1,10) demand_def(a_ATM1,d_DATE6) 679. demand_def(a_ATM1,d_DATE7) 1375. z(69_ATM1,10) demand_def(a_ATM1,d_DATE8) 534. demand_def(a_ATM1,d_DATE9) 157. z(69_ATM1,10) ztox1(a_ATM1,t_10) 1. ztox2(a_ATM1,t_10) 1. z(69_ATM1,10) ztox3(a_ATM1,t_10) 1. z(70_ATM2,1) demand_def(a_ATM2,d_DATE0) -69.1 demand_def(a_ATM2,d_DATE1) -200.1 z(70_ATM2,1) demand_def(a_ATM2,d_DATE2) 262.6 demand_def(a_ATM2,d_DATE3) 364.9 z(70_ATM2,1) demand_def(a_ATM2,d_DATE4) -95.1 demand_def(a_ATM2,d_DATE5) -137.6 z(70_ATM2,1) demand_def(a_ATM2,d_DATE6) 206.7 demand_def(a_ATM2,d_DATE7) 104.6 z(70_ATM2,1) demand_def(a_ATM2,d_DATE8) -57.4 demand_def(a_ATM2,d_DATE9) -137.7 z(70_ATM2,1) ztox1(a_ATM2,t_1) 1. ztox2(a_ATM2,t_1) 1. z(70_ATM2,1) ztox3(a_ATM2,t_1) 1. z(71_ATM2,2) demand_def(a_ATM2,d_DATE0) -138.2 demand_def(a_ATM2,d_DATE1) -400.2 z(71_ATM2,2) demand_def(a_ATM2,d_DATE2) 525.2 demand_def(a_ATM2,d_DATE3) 729.8 z(71_ATM2,2) demand_def(a_ATM2,d_DATE4) -190.2 demand_def(a_ATM2,d_DATE5) -275.2 z(71_ATM2,2) demand_def(a_ATM2,d_DATE6) 413.4 demand_def(a_ATM2,d_DATE7) 209.2 z(71_ATM2,2) demand_def(a_ATM2,d_DATE8) -114.8 demand_def(a_ATM2,d_DATE9) -275.4 z(71_ATM2,2) ztox1(a_ATM2,t_2) 1. ztox2(a_ATM2,t_2) 1. z(71_ATM2,2) ztox3(a_ATM2,t_2) 1. z(72_ATM2,3) demand_def(a_ATM2,d_DATE0) -207.3 demand_def(a_ATM2,d_DATE1) -600.3 z(72_ATM2,3) demand_def(a_ATM2,d_DATE2) 787.8 demand_def(a_ATM2,d_DATE3) 1094.7 z(72_ATM2,3) demand_def(a_ATM2,d_DATE4) -285.3 demand_def(a_ATM2,d_DATE5) -412.8 z(72_ATM2,3) demand_def(a_ATM2,d_DATE6) 620.1 demand_def(a_ATM2,d_DATE7) 313.8 z(72_ATM2,3) demand_def(a_ATM2,d_DATE8) -172.2 demand_def(a_ATM2,d_DATE9) -413.1 z(72_ATM2,3) ztox1(a_ATM2,t_3) 1. ztox2(a_ATM2,t_3) 1. z(72_ATM2,3) ztox3(a_ATM2,t_3) 1. z(73_ATM2,4) demand_def(a_ATM2,d_DATE0) -276.4 demand_def(a_ATM2,d_DATE1) -800.4 z(73_ATM2,4) demand_def(a_ATM2,d_DATE2) 1050.4 demand_def(a_ATM2,d_DATE3) 1459.6 z(73_ATM2,4) demand_def(a_ATM2,d_DATE4) -380.4 demand_def(a_ATM2,d_DATE5) -550.4 z(73_ATM2,4) demand_def(a_ATM2,d_DATE6) 826.8 demand_def(a_ATM2,d_DATE7) 418.4 z(73_ATM2,4) demand_def(a_ATM2,d_DATE8) -229.6 demand_def(a_ATM2,d_DATE9) -550.8 z(73_ATM2,4) ztox1(a_ATM2,t_4) 1. ztox2(a_ATM2,t_4) 1. z(73_ATM2,4) ztox3(a_ATM2,t_4) 1. z(74_ATM2,5) demand_def(a_ATM2,d_DATE0) -345.5 demand_def(a_ATM2,d_DATE1) -1000.5 z(74_ATM2,5) demand_def(a_ATM2,d_DATE2) 1313. demand_def(a_ATM2,d_DATE3) 1824.5 z(74_ATM2,5) demand_def(a_ATM2,d_DATE4) -475.5 demand_def(a_ATM2,d_DATE5) -688. z(74_ATM2,5) demand_def(a_ATM2,d_DATE6) 1033.5 demand_def(a_ATM2,d_DATE7) 523. z(74_ATM2,5) demand_def(a_ATM2,d_DATE8) -287. demand_def(a_ATM2,d_DATE9) -688.5 z(74_ATM2,5) ztox1(a_ATM2,t_5) 1. ztox2(a_ATM2,t_5) 1. z(74_ATM2,5) ztox3(a_ATM2,t_5) 1. z(75_ATM2,6) demand_def(a_ATM2,d_DATE0) -414.6 demand_def(a_ATM2,d_DATE1) -1200.6 z(75_ATM2,6) demand_def(a_ATM2,d_DATE2) 1575.6 demand_def(a_ATM2,d_DATE3) 2189.4 z(75_ATM2,6) demand_def(a_ATM2,d_DATE4) -570.6 demand_def(a_ATM2,d_DATE5) -825.6 z(75_ATM2,6) demand_def(a_ATM2,d_DATE6) 1240.2 demand_def(a_ATM2,d_DATE7) 627.6 z(75_ATM2,6) demand_def(a_ATM2,d_DATE8) -344.4 demand_def(a_ATM2,d_DATE9) -826.2 z(75_ATM2,6) ztox1(a_ATM2,t_6) 1. ztox2(a_ATM2,t_6) 1. z(75_ATM2,6) ztox3(a_ATM2,t_6) 1. z(76_ATM2,7) demand_def(a_ATM2,d_DATE0) -483.7 demand_def(a_ATM2,d_DATE1) -1400.7 z(76_ATM2,7) demand_def(a_ATM2,d_DATE2) 1838.2 demand_def(a_ATM2,d_DATE3) 2554.3 z(76_ATM2,7) demand_def(a_ATM2,d_DATE4) -665.7 demand_def(a_ATM2,d_DATE5) -963.2 z(76_ATM2,7) demand_def(a_ATM2,d_DATE6) 1446.9 demand_def(a_ATM2,d_DATE7) 732.2 z(76_ATM2,7) demand_def(a_ATM2,d_DATE8) -401.8 demand_def(a_ATM2,d_DATE9) -963.9 z(76_ATM2,7) ztox1(a_ATM2,t_7) 1. ztox2(a_ATM2,t_7) 1. z(76_ATM2,7) ztox3(a_ATM2,t_7) 1. z(77_ATM2,8) demand_def(a_ATM2,d_DATE0) -552.8 demand_def(a_ATM2,d_DATE1) -1600.8 z(77_ATM2,8) demand_def(a_ATM2,d_DATE2) 2100.8 demand_def(a_ATM2,d_DATE3) 2919.2 z(77_ATM2,8) demand_def(a_ATM2,d_DATE4) -760.8 demand_def(a_ATM2,d_DATE5) -1100.8 z(77_ATM2,8) demand_def(a_ATM2,d_DATE6) 1653.6 demand_def(a_ATM2,d_DATE7) 836.8 z(77_ATM2,8) demand_def(a_ATM2,d_DATE8) -459.2 demand_def(a_ATM2,d_DATE9) -1101.6 z(77_ATM2,8) ztox1(a_ATM2,t_8) 1. ztox2(a_ATM2,t_8) 1. z(77_ATM2,8) ztox3(a_ATM2,t_8) 1. z(78_ATM2,9) demand_def(a_ATM2,d_DATE0) -621.9 demand_def(a_ATM2,d_DATE1) -1800.9 z(78_ATM2,9) demand_def(a_ATM2,d_DATE2) 2363.4 demand_def(a_ATM2,d_DATE3) 3284.1 z(78_ATM2,9) demand_def(a_ATM2,d_DATE4) -855.9 demand_def(a_ATM2,d_DATE5) -1238.4 z(78_ATM2,9) demand_def(a_ATM2,d_DATE6) 1860.3 demand_def(a_ATM2,d_DATE7) 941.4 z(78_ATM2,9) demand_def(a_ATM2,d_DATE8) -516.6 demand_def(a_ATM2,d_DATE9) -1239.3 z(78_ATM2,9) ztox1(a_ATM2,t_9) 1. ztox2(a_ATM2,t_9) 1. z(78_ATM2,9) ztox3(a_ATM2,t_9) 1. z(79_ATM2,10) demand_def(a_ATM2,d_DATE0) -691. demand_def(a_ATM2,d_DATE1) -2001. z(79_ATM2,10) demand_def(a_ATM2,d_DATE2) 2626. demand_def(a_ATM2,d_DATE3) 3649. z(79_ATM2,10) demand_def(a_ATM2,d_DATE4) -951. demand_def(a_ATM2,d_DATE5) -1376. z(79_ATM2,10) demand_def(a_ATM2,d_DATE6) 2067. demand_def(a_ATM2,d_DATE7) 1046. z(79_ATM2,10) demand_def(a_ATM2,d_DATE8) -574. demand_def(a_ATM2,d_DATE9) -1377. z(79_ATM2,10) ztox1(a_ATM2,t_10) 1. ztox2(a_ATM2,t_10) 1. z(79_ATM2,10) ztox3(a_ATM2,t_10) 1. z(80_ATM3,1) demand_def(a_ATM3,d_DATE0) 294.3 demand_def(a_ATM3,d_DATE1) 9.3 z(80_ATM3,1) demand_def(a_ATM3,d_DATE2) -45.1 demand_def(a_ATM3,d_DATE3) -128.2 z(80_ATM3,1) demand_def(a_ATM3,d_DATE4) 125.1 demand_def(a_ATM3,d_DATE5) -114.1 z(80_ATM3,1) demand_def(a_ATM3,d_DATE6) -321.4 demand_def(a_ATM3,d_DATE7) -97.6 z(80_ATM3,1) demand_def(a_ATM3,d_DATE8) -48. demand_def(a_ATM3,d_DATE9) -236.9 z(80_ATM3,1) ztox1(a_ATM3,t_1) 1. ztox2(a_ATM3,t_1) 1. z(80_ATM3,1) ztox3(a_ATM3,t_1) 1. z(81_ATM3,2) demand_def(a_ATM3,d_DATE0) 588.6 demand_def(a_ATM3,d_DATE1) 18.6 z(81_ATM3,2) demand_def(a_ATM3,d_DATE2) -90.2 demand_def(a_ATM3,d_DATE3) -256.4 z(81_ATM3,2) demand_def(a_ATM3,d_DATE4) 250.2 demand_def(a_ATM3,d_DATE5) -228.2 z(81_ATM3,2) demand_def(a_ATM3,d_DATE6) -642.8 demand_def(a_ATM3,d_DATE7) -195.2 z(81_ATM3,2) demand_def(a_ATM3,d_DATE8) -96. demand_def(a_ATM3,d_DATE9) -473.8 z(81_ATM3,2) ztox1(a_ATM3,t_2) 1. ztox2(a_ATM3,t_2) 1. z(81_ATM3,2) ztox3(a_ATM3,t_2) 1. z(82_ATM3,3) demand_def(a_ATM3,d_DATE0) 882.9 demand_def(a_ATM3,d_DATE1) 27.9 z(82_ATM3,3) demand_def(a_ATM3,d_DATE2) -135.3 demand_def(a_ATM3,d_DATE3) -384.6 z(82_ATM3,3) demand_def(a_ATM3,d_DATE4) 375.3 demand_def(a_ATM3,d_DATE5) -342.3 z(82_ATM3,3) demand_def(a_ATM3,d_DATE6) -964.2 demand_def(a_ATM3,d_DATE7) -292.8 z(82_ATM3,3) demand_def(a_ATM3,d_DATE8) -144. demand_def(a_ATM3,d_DATE9) -710.7 z(82_ATM3,3) ztox1(a_ATM3,t_3) 1. ztox2(a_ATM3,t_3) 1. z(82_ATM3,3) ztox3(a_ATM3,t_3) 1. z(83_ATM3,4) demand_def(a_ATM3,d_DATE0) 1177.2 demand_def(a_ATM3,d_DATE1) 37.2 z(83_ATM3,4) demand_def(a_ATM3,d_DATE2) -180.4 demand_def(a_ATM3,d_DATE3) -512.8 z(83_ATM3,4) demand_def(a_ATM3,d_DATE4) 500.4 demand_def(a_ATM3,d_DATE5) -456.4 z(83_ATM3,4) demand_def(a_ATM3,d_DATE6) -1285.6 demand_def(a_ATM3,d_DATE7) -390.4 z(83_ATM3,4) demand_def(a_ATM3,d_DATE8) -192. demand_def(a_ATM3,d_DATE9) -947.6 z(83_ATM3,4) ztox1(a_ATM3,t_4) 1. ztox2(a_ATM3,t_4) 1. z(83_ATM3,4) ztox3(a_ATM3,t_4) 1. z(84_ATM3,5) demand_def(a_ATM3,d_DATE0) 1471.5 demand_def(a_ATM3,d_DATE1) 46.5 z(84_ATM3,5) demand_def(a_ATM3,d_DATE2) -225.5 demand_def(a_ATM3,d_DATE3) -641. z(84_ATM3,5) demand_def(a_ATM3,d_DATE4) 625.5 demand_def(a_ATM3,d_DATE5) -570.5 z(84_ATM3,5) demand_def(a_ATM3,d_DATE6) -1607. demand_def(a_ATM3,d_DATE7) -488. z(84_ATM3,5) demand_def(a_ATM3,d_DATE8) -240. demand_def(a_ATM3,d_DATE9) -1184.5 z(84_ATM3,5) ztox1(a_ATM3,t_5) 1. ztox2(a_ATM3,t_5) 1. z(84_ATM3,5) ztox3(a_ATM3,t_5) 1. z(85_ATM3,6) demand_def(a_ATM3,d_DATE0) 1765.8 demand_def(a_ATM3,d_DATE1) 55.8 z(85_ATM3,6) demand_def(a_ATM3,d_DATE2) -270.6 demand_def(a_ATM3,d_DATE3) -769.2 z(85_ATM3,6) demand_def(a_ATM3,d_DATE4) 750.6 demand_def(a_ATM3,d_DATE5) -684.6 z(85_ATM3,6) demand_def(a_ATM3,d_DATE6) -1928.4 demand_def(a_ATM3,d_DATE7) -585.6 z(85_ATM3,6) demand_def(a_ATM3,d_DATE8) -288. demand_def(a_ATM3,d_DATE9) -1421.4 z(85_ATM3,6) ztox1(a_ATM3,t_6) 1. ztox2(a_ATM3,t_6) 1. z(85_ATM3,6) ztox3(a_ATM3,t_6) 1. z(86_ATM3,7) demand_def(a_ATM3,d_DATE0) 2060.1 demand_def(a_ATM3,d_DATE1) 65.1 z(86_ATM3,7) demand_def(a_ATM3,d_DATE2) -315.7 demand_def(a_ATM3,d_DATE3) -897.4 z(86_ATM3,7) demand_def(a_ATM3,d_DATE4) 875.7 demand_def(a_ATM3,d_DATE5) -798.7 z(86_ATM3,7) demand_def(a_ATM3,d_DATE6) -2249.8 demand_def(a_ATM3,d_DATE7) -683.2 z(86_ATM3,7) demand_def(a_ATM3,d_DATE8) -336. demand_def(a_ATM3,d_DATE9) -1658.3 z(86_ATM3,7) ztox1(a_ATM3,t_7) 1. ztox2(a_ATM3,t_7) 1. z(86_ATM3,7) ztox3(a_ATM3,t_7) 1. z(87_ATM3,8) demand_def(a_ATM3,d_DATE0) 2354.4 demand_def(a_ATM3,d_DATE1) 74.4 z(87_ATM3,8) demand_def(a_ATM3,d_DATE2) -360.8 demand_def(a_ATM3,d_DATE3) -1025.6 z(87_ATM3,8) demand_def(a_ATM3,d_DATE4) 1000.8 demand_def(a_ATM3,d_DATE5) -912.8 z(87_ATM3,8) demand_def(a_ATM3,d_DATE6) -2571.2 demand_def(a_ATM3,d_DATE7) -780.8 z(87_ATM3,8) demand_def(a_ATM3,d_DATE8) -384. demand_def(a_ATM3,d_DATE9) -1895.2 z(87_ATM3,8) ztox1(a_ATM3,t_8) 1. ztox2(a_ATM3,t_8) 1. z(87_ATM3,8) ztox3(a_ATM3,t_8) 1. z(88_ATM3,9) demand_def(a_ATM3,d_DATE0) 2648.7 demand_def(a_ATM3,d_DATE1) 83.7 z(88_ATM3,9) demand_def(a_ATM3,d_DATE2) -405.9 demand_def(a_ATM3,d_DATE3) -1153.8 z(88_ATM3,9) demand_def(a_ATM3,d_DATE4) 1125.9 demand_def(a_ATM3,d_DATE5) -1026.9 z(88_ATM3,9) demand_def(a_ATM3,d_DATE6) -2892.6 demand_def(a_ATM3,d_DATE7) -878.4 z(88_ATM3,9) demand_def(a_ATM3,d_DATE8) -432. demand_def(a_ATM3,d_DATE9) -2132.1 z(88_ATM3,9) ztox1(a_ATM3,t_9) 1. ztox2(a_ATM3,t_9) 1. z(88_ATM3,9) ztox3(a_ATM3,t_9) 1. z(89_ATM3,10) demand_def(a_ATM3,d_DATE0) 2943. demand_def(a_ATM3,d_DATE1) 93. z(89_ATM3,10) demand_def(a_ATM3,d_DATE2) -451. demand_def(a_ATM3,d_DATE3) -1282. z(89_ATM3,10) demand_def(a_ATM3,d_DATE4) 1251. demand_def(a_ATM3,d_DATE5) -1141. z(89_ATM3,10) demand_def(a_ATM3,d_DATE6) -3214. demand_def(a_ATM3,d_DATE7) -976. z(89_ATM3,10) demand_def(a_ATM3,d_DATE8) -480. demand_def(a_ATM3,d_DATE9) -2369. z(89_ATM3,10) ztox1(a_ATM3,t_10) 1. ztox2(a_ATM3,t_10) 1. z(89_ATM3,10) ztox3(a_ATM3,t_10) 1. z(90_ATM4,1) demand_def(a_ATM4,d_DATE0) 15.1 demand_def(a_ATM4,d_DATE1) 81.1 z(90_ATM4,1) demand_def(a_ATM4,d_DATE2) -331. demand_def(a_ATM4,d_DATE3) -104.3 z(90_ATM4,1) demand_def(a_ATM4,d_DATE4) -178.9 demand_def(a_ATM4,d_DATE5) -34.6 z(90_ATM4,1) demand_def(a_ATM4,d_DATE6) -13.6 demand_def(a_ATM4,d_DATE7) -184.9 z(90_ATM4,1) demand_def(a_ATM4,d_DATE8) -44.3 demand_def(a_ATM4,d_DATE9) -95.1 z(90_ATM4,1) ztox1(a_ATM4,t_1) 1. ztox2(a_ATM4,t_1) 1. z(90_ATM4,1) ztox3(a_ATM4,t_1) 1. z(91_ATM4,2) demand_def(a_ATM4,d_DATE0) 30.2 demand_def(a_ATM4,d_DATE1) 162.2 z(91_ATM4,2) demand_def(a_ATM4,d_DATE2) -662. demand_def(a_ATM4,d_DATE3) -208.6 z(91_ATM4,2) demand_def(a_ATM4,d_DATE4) -357.8 demand_def(a_ATM4,d_DATE5) -69.2 z(91_ATM4,2) demand_def(a_ATM4,d_DATE6) -27.2 demand_def(a_ATM4,d_DATE7) -369.8 z(91_ATM4,2) demand_def(a_ATM4,d_DATE8) -88.6 demand_def(a_ATM4,d_DATE9) -190.2 z(91_ATM4,2) ztox1(a_ATM4,t_2) 1. ztox2(a_ATM4,t_2) 1. z(91_ATM4,2) ztox3(a_ATM4,t_2) 1. z(92_ATM4,3) demand_def(a_ATM4,d_DATE0) 45.3 demand_def(a_ATM4,d_DATE1) 243.3 z(92_ATM4,3) demand_def(a_ATM4,d_DATE2) -993. demand_def(a_ATM4,d_DATE3) -312.9 z(92_ATM4,3) demand_def(a_ATM4,d_DATE4) -536.7 demand_def(a_ATM4,d_DATE5) -103.8 z(92_ATM4,3) demand_def(a_ATM4,d_DATE6) -40.8 demand_def(a_ATM4,d_DATE7) -554.7 z(92_ATM4,3) demand_def(a_ATM4,d_DATE8) -132.9 demand_def(a_ATM4,d_DATE9) -285.3 z(92_ATM4,3) ztox1(a_ATM4,t_3) 1. ztox2(a_ATM4,t_3) 1. z(92_ATM4,3) ztox3(a_ATM4,t_3) 1. z(93_ATM4,4) demand_def(a_ATM4,d_DATE0) 60.4 demand_def(a_ATM4,d_DATE1) 324.4 z(93_ATM4,4) demand_def(a_ATM4,d_DATE2) -1324. demand_def(a_ATM4,d_DATE3) -417.2 z(93_ATM4,4) demand_def(a_ATM4,d_DATE4) -715.6 demand_def(a_ATM4,d_DATE5) -138.4 z(93_ATM4,4) demand_def(a_ATM4,d_DATE6) -54.4 demand_def(a_ATM4,d_DATE7) -739.6 z(93_ATM4,4) demand_def(a_ATM4,d_DATE8) -177.2 demand_def(a_ATM4,d_DATE9) -380.4 z(93_ATM4,4) ztox1(a_ATM4,t_4) 1. ztox2(a_ATM4,t_4) 1. z(93_ATM4,4) ztox3(a_ATM4,t_4) 1. z(94_ATM4,5) demand_def(a_ATM4,d_DATE0) 75.5 demand_def(a_ATM4,d_DATE1) 405.5 z(94_ATM4,5) demand_def(a_ATM4,d_DATE2) -1655. demand_def(a_ATM4,d_DATE3) -521.5 z(94_ATM4,5) demand_def(a_ATM4,d_DATE4) -894.5 demand_def(a_ATM4,d_DATE5) -173. z(94_ATM4,5) demand_def(a_ATM4,d_DATE6) -68. demand_def(a_ATM4,d_DATE7) -924.5 z(94_ATM4,5) demand_def(a_ATM4,d_DATE8) -221.5 demand_def(a_ATM4,d_DATE9) -475.5 z(94_ATM4,5) ztox1(a_ATM4,t_5) 1. ztox2(a_ATM4,t_5) 1. z(94_ATM4,5) ztox3(a_ATM4,t_5) 1. z(95_ATM4,6) demand_def(a_ATM4,d_DATE0) 90.6 demand_def(a_ATM4,d_DATE1) 486.6 z(95_ATM4,6) demand_def(a_ATM4,d_DATE2) -1986. demand_def(a_ATM4,d_DATE3) -625.8 z(95_ATM4,6) demand_def(a_ATM4,d_DATE4) -1073.4 demand_def(a_ATM4,d_DATE5) -207.6 z(95_ATM4,6) demand_def(a_ATM4,d_DATE6) -81.6 demand_def(a_ATM4,d_DATE7) -1109.4 z(95_ATM4,6) demand_def(a_ATM4,d_DATE8) -265.8 demand_def(a_ATM4,d_DATE9) -570.6 z(95_ATM4,6) ztox1(a_ATM4,t_6) 1. ztox2(a_ATM4,t_6) 1. z(95_ATM4,6) ztox3(a_ATM4,t_6) 1. z(96_ATM4,7) demand_def(a_ATM4,d_DATE0) 105.7 demand_def(a_ATM4,d_DATE1) 567.7 z(96_ATM4,7) demand_def(a_ATM4,d_DATE2) -2317. demand_def(a_ATM4,d_DATE3) -730.1 z(96_ATM4,7) demand_def(a_ATM4,d_DATE4) -1252.3 demand_def(a_ATM4,d_DATE5) -242.2 z(96_ATM4,7) demand_def(a_ATM4,d_DATE6) -95.2 demand_def(a_ATM4,d_DATE7) -1294.3 z(96_ATM4,7) demand_def(a_ATM4,d_DATE8) -310.1 demand_def(a_ATM4,d_DATE9) -665.7 z(96_ATM4,7) ztox1(a_ATM4,t_7) 1. ztox2(a_ATM4,t_7) 1. z(96_ATM4,7) ztox3(a_ATM4,t_7) 1. z(97_ATM4,8) demand_def(a_ATM4,d_DATE0) 120.8 demand_def(a_ATM4,d_DATE1) 648.8 z(97_ATM4,8) demand_def(a_ATM4,d_DATE2) -2648. demand_def(a_ATM4,d_DATE3) -834.4 z(97_ATM4,8) demand_def(a_ATM4,d_DATE4) -1431.2 demand_def(a_ATM4,d_DATE5) -276.8 z(97_ATM4,8) demand_def(a_ATM4,d_DATE6) -108.8 demand_def(a_ATM4,d_DATE7) -1479.2 z(97_ATM4,8) demand_def(a_ATM4,d_DATE8) -354.4 demand_def(a_ATM4,d_DATE9) -760.8 z(97_ATM4,8) ztox1(a_ATM4,t_8) 1. ztox2(a_ATM4,t_8) 1. z(97_ATM4,8) ztox3(a_ATM4,t_8) 1. z(98_ATM4,9) demand_def(a_ATM4,d_DATE0) 135.9 demand_def(a_ATM4,d_DATE1) 729.9 z(98_ATM4,9) demand_def(a_ATM4,d_DATE2) -2979. demand_def(a_ATM4,d_DATE3) -938.7 z(98_ATM4,9) demand_def(a_ATM4,d_DATE4) -1610.1 demand_def(a_ATM4,d_DATE5) -311.4 z(98_ATM4,9) demand_def(a_ATM4,d_DATE6) -122.4 demand_def(a_ATM4,d_DATE7) -1664.1 z(98_ATM4,9) demand_def(a_ATM4,d_DATE8) -398.7 demand_def(a_ATM4,d_DATE9) -855.9 z(98_ATM4,9) ztox1(a_ATM4,t_9) 1. ztox2(a_ATM4,t_9) 1. z(98_ATM4,9) ztox3(a_ATM4,t_9) 1. z(99_ATM4,10) demand_def(a_ATM4,d_DATE0) 151. demand_def(a_ATM4,d_DATE1) 811. z(99_ATM4,10) demand_def(a_ATM4,d_DATE2) -3310. demand_def(a_ATM4,d_DATE3) -1043. z(99_ATM4,10) demand_def(a_ATM4,d_DATE4) -1789. demand_def(a_ATM4,d_DATE5) -346. z(99_ATM4,10) demand_def(a_ATM4,d_DATE6) -136. demand_def(a_ATM4,d_DATE7) -1849. z(99_ATM4,10) demand_def(a_ATM4,d_DATE8) -443. demand_def(a_ATM4,d_DATE9) -951. z(99_ATM4,10) ztox1(a_ATM4,t_10) 1. ztox2(a_ATM4,t_10) 1. z(99_ATM4,10) ztox3(a_ATM4,t_10) 1. fp(100_ATM0,DATE0) OBJROW 1. budget(d_DATE0) 1. fp(100_ATM0,DATE0) demand_def(a_ATM0,d_DATE0) 1. fp(101_ATM0,DATE1) OBJROW 1. budget(d_DATE1) 1. fp(101_ATM0,DATE1) demand_def(a_ATM0,d_DATE1) 1. fp(102_ATM0,DATE2) OBJROW 1. budget(d_DATE2) 1. fp(102_ATM0,DATE2) demand_def(a_ATM0,d_DATE2) 1. fp(103_ATM0,DATE3) OBJROW 1. budget(d_DATE3) 1. fp(103_ATM0,DATE3) demand_def(a_ATM0,d_DATE3) 1. fp(104_ATM0,DATE4) OBJROW 1. budget(d_DATE4) 1. fp(104_ATM0,DATE4) demand_def(a_ATM0,d_DATE4) 1. fp(105_ATM0,DATE5) OBJROW 1. budget(d_DATE5) 1. fp(105_ATM0,DATE5) demand_def(a_ATM0,d_DATE5) 1. fp(106_ATM0,DATE6) OBJROW 1. budget(d_DATE6) 1. fp(106_ATM0,DATE6) demand_def(a_ATM0,d_DATE6) 1. fp(107_ATM0,DATE7) OBJROW 1. budget(d_DATE7) 1. fp(107_ATM0,DATE7) demand_def(a_ATM0,d_DATE7) 1. fp(108_ATM0,DATE8) OBJROW 1. budget(d_DATE8) 1. fp(108_ATM0,DATE8) demand_def(a_ATM0,d_DATE8) 1. fp(109_ATM0,DATE9) OBJROW 1. budget(d_DATE9) 1. fp(109_ATM0,DATE9) demand_def(a_ATM0,d_DATE9) 1. fp(110_ATM1,DATE0) OBJROW 1. budget(d_DATE0) 1. fp(110_ATM1,DATE0) demand_def(a_ATM1,d_DATE0) 1. fp(111_ATM1,DATE1) OBJROW 1. budget(d_DATE1) 1. fp(111_ATM1,DATE1) demand_def(a_ATM1,d_DATE1) 1. fp(112_ATM1,DATE2) OBJROW 1. budget(d_DATE2) 1. fp(112_ATM1,DATE2) demand_def(a_ATM1,d_DATE2) 1. fp(113_ATM1,DATE3) OBJROW 1. budget(d_DATE3) 1. fp(113_ATM1,DATE3) demand_def(a_ATM1,d_DATE3) 1. fp(114_ATM1,DATE4) OBJROW 1. budget(d_DATE4) 1. fp(114_ATM1,DATE4) demand_def(a_ATM1,d_DATE4) 1. fp(115_ATM1,DATE5) OBJROW 1. budget(d_DATE5) 1. fp(115_ATM1,DATE5) demand_def(a_ATM1,d_DATE5) 1. fp(116_ATM1,DATE6) OBJROW 1. budget(d_DATE6) 1. fp(116_ATM1,DATE6) demand_def(a_ATM1,d_DATE6) 1. fp(117_ATM1,DATE7) OBJROW 1. budget(d_DATE7) 1. fp(117_ATM1,DATE7) demand_def(a_ATM1,d_DATE7) 1. fp(118_ATM1,DATE8) OBJROW 1. budget(d_DATE8) 1. fp(118_ATM1,DATE8) demand_def(a_ATM1,d_DATE8) 1. fp(119_ATM1,DATE9) OBJROW 1. budget(d_DATE9) 1. fp(119_ATM1,DATE9) demand_def(a_ATM1,d_DATE9) 1. fp(120_ATM2,DATE0) OBJROW 1. budget(d_DATE0) 1. fp(120_ATM2,DATE0) demand_def(a_ATM2,d_DATE0) 1. fp(121_ATM2,DATE1) OBJROW 1. budget(d_DATE1) 1. fp(121_ATM2,DATE1) demand_def(a_ATM2,d_DATE1) 1. fp(122_ATM2,DATE2) OBJROW 1. budget(d_DATE2) 1. fp(122_ATM2,DATE2) demand_def(a_ATM2,d_DATE2) 1. fp(123_ATM2,DATE3) OBJROW 1. budget(d_DATE3) 1. fp(123_ATM2,DATE3) demand_def(a_ATM2,d_DATE3) 1. fp(124_ATM2,DATE4) OBJROW 1. budget(d_DATE4) 1. fp(124_ATM2,DATE4) demand_def(a_ATM2,d_DATE4) 1. fp(125_ATM2,DATE5) OBJROW 1. budget(d_DATE5) 1. fp(125_ATM2,DATE5) demand_def(a_ATM2,d_DATE5) 1. fp(126_ATM2,DATE6) OBJROW 1. budget(d_DATE6) 1. fp(126_ATM2,DATE6) demand_def(a_ATM2,d_DATE6) 1. fp(127_ATM2,DATE7) OBJROW 1. budget(d_DATE7) 1. fp(127_ATM2,DATE7) demand_def(a_ATM2,d_DATE7) 1. fp(128_ATM2,DATE8) OBJROW 1. budget(d_DATE8) 1. fp(128_ATM2,DATE8) demand_def(a_ATM2,d_DATE8) 1. fp(129_ATM2,DATE9) OBJROW 1. budget(d_DATE9) 1. fp(129_ATM2,DATE9) demand_def(a_ATM2,d_DATE9) 1. fp(130_ATM3,DATE0) OBJROW 1. budget(d_DATE0) 1. fp(130_ATM3,DATE0) demand_def(a_ATM3,d_DATE0) 1. fp(131_ATM3,DATE1) OBJROW 1. budget(d_DATE1) 1. fp(131_ATM3,DATE1) demand_def(a_ATM3,d_DATE1) 1. fp(132_ATM3,DATE2) OBJROW 1. budget(d_DATE2) 1. fp(132_ATM3,DATE2) demand_def(a_ATM3,d_DATE2) 1. fp(133_ATM3,DATE3) OBJROW 1. budget(d_DATE3) 1. fp(133_ATM3,DATE3) demand_def(a_ATM3,d_DATE3) 1. fp(134_ATM3,DATE4) OBJROW 1. budget(d_DATE4) 1. fp(134_ATM3,DATE4) demand_def(a_ATM3,d_DATE4) 1. fp(135_ATM3,DATE5) OBJROW 1. budget(d_DATE5) 1. fp(135_ATM3,DATE5) demand_def(a_ATM3,d_DATE5) 1. fp(136_ATM3,DATE6) OBJROW 1. budget(d_DATE6) 1. fp(136_ATM3,DATE6) demand_def(a_ATM3,d_DATE6) 1. fp(137_ATM3,DATE7) OBJROW 1. budget(d_DATE7) 1. fp(137_ATM3,DATE7) demand_def(a_ATM3,d_DATE7) 1. fp(138_ATM3,DATE8) OBJROW 1. budget(d_DATE8) 1. fp(138_ATM3,DATE8) demand_def(a_ATM3,d_DATE8) 1. fp(139_ATM3,DATE9) OBJROW 1. budget(d_DATE9) 1. fp(139_ATM3,DATE9) demand_def(a_ATM3,d_DATE9) 1. fp(140_ATM4,DATE0) OBJROW 1. budget(d_DATE0) 1. fp(140_ATM4,DATE0) demand_def(a_ATM4,d_DATE0) 1. fp(141_ATM4,DATE1) OBJROW 1. budget(d_DATE1) 1. fp(141_ATM4,DATE1) demand_def(a_ATM4,d_DATE1) 1. fp(142_ATM4,DATE2) OBJROW 1. budget(d_DATE2) 1. fp(142_ATM4,DATE2) demand_def(a_ATM4,d_DATE2) 1. fp(143_ATM4,DATE3) OBJROW 1. budget(d_DATE3) 1. fp(143_ATM4,DATE3) demand_def(a_ATM4,d_DATE3) 1. fp(144_ATM4,DATE4) OBJROW 1. budget(d_DATE4) 1. fp(144_ATM4,DATE4) demand_def(a_ATM4,d_DATE4) 1. fp(145_ATM4,DATE5) OBJROW 1. budget(d_DATE5) 1. fp(145_ATM4,DATE5) demand_def(a_ATM4,d_DATE5) 1. fp(146_ATM4,DATE6) OBJROW 1. budget(d_DATE6) 1. fp(146_ATM4,DATE6) demand_def(a_ATM4,d_DATE6) 1. fp(147_ATM4,DATE7) OBJROW 1. budget(d_DATE7) 1. fp(147_ATM4,DATE7) demand_def(a_ATM4,d_DATE7) 1. fp(148_ATM4,DATE8) OBJROW 1. budget(d_DATE8) 1. fp(148_ATM4,DATE8) demand_def(a_ATM4,d_DATE8) 1. fp(149_ATM4,DATE9) OBJROW 1. budget(d_DATE9) 1. fp(149_ATM4,DATE9) demand_def(a_ATM4,d_DATE9) 1. fm(150_ATM0,DATE0) OBJROW 1. budget(d_DATE0) -1. fm(150_ATM0,DATE0) demand_def(a_ATM0,d_DATE0) -1. linkv(a_ATM0,d_DATE0) 1. fm(151_ATM0,DATE1) OBJROW 1. budget(d_DATE1) -1. fm(151_ATM0,DATE1) demand_def(a_ATM0,d_DATE1) -1. linkv(a_ATM0,d_DATE1) 1. fm(152_ATM0,DATE2) OBJROW 1. budget(d_DATE2) -1. fm(152_ATM0,DATE2) demand_def(a_ATM0,d_DATE2) -1. linkv(a_ATM0,d_DATE2) 1. fm(153_ATM0,DATE3) OBJROW 1. budget(d_DATE3) -1. fm(153_ATM0,DATE3) demand_def(a_ATM0,d_DATE3) -1. linkv(a_ATM0,d_DATE3) 1. fm(154_ATM0,DATE4) OBJROW 1. budget(d_DATE4) -1. fm(154_ATM0,DATE4) demand_def(a_ATM0,d_DATE4) -1. linkv(a_ATM0,d_DATE4) 1. fm(155_ATM0,DATE5) OBJROW 1. budget(d_DATE5) -1. fm(155_ATM0,DATE5) demand_def(a_ATM0,d_DATE5) -1. linkv(a_ATM0,d_DATE5) 1. fm(156_ATM0,DATE6) OBJROW 1. budget(d_DATE6) -1. fm(156_ATM0,DATE6) demand_def(a_ATM0,d_DATE6) -1. linkv(a_ATM0,d_DATE6) 1. fm(157_ATM0,DATE7) OBJROW 1. budget(d_DATE7) -1. fm(157_ATM0,DATE7) demand_def(a_ATM0,d_DATE7) -1. linkv(a_ATM0,d_DATE7) 1. fm(158_ATM0,DATE8) OBJROW 1. budget(d_DATE8) -1. fm(158_ATM0,DATE8) demand_def(a_ATM0,d_DATE8) -1. linkv(a_ATM0,d_DATE8) 1. fm(159_ATM0,DATE9) OBJROW 1. budget(d_DATE9) -1. fm(159_ATM0,DATE9) demand_def(a_ATM0,d_DATE9) -1. linkv(a_ATM0,d_DATE9) 1. fm(160_ATM1,DATE0) OBJROW 1. budget(d_DATE0) -1. fm(160_ATM1,DATE0) demand_def(a_ATM1,d_DATE0) -1. linkv(a_ATM1,d_DATE0) 1. fm(161_ATM1,DATE1) OBJROW 1. budget(d_DATE1) -1. fm(161_ATM1,DATE1) demand_def(a_ATM1,d_DATE1) -1. linkv(a_ATM1,d_DATE1) 1. fm(162_ATM1,DATE2) OBJROW 1. budget(d_DATE2) -1. fm(162_ATM1,DATE2) demand_def(a_ATM1,d_DATE2) -1. linkv(a_ATM1,d_DATE2) 1. fm(163_ATM1,DATE3) OBJROW 1. budget(d_DATE3) -1. fm(163_ATM1,DATE3) demand_def(a_ATM1,d_DATE3) -1. linkv(a_ATM1,d_DATE3) 1. fm(164_ATM1,DATE4) OBJROW 1. budget(d_DATE4) -1. fm(164_ATM1,DATE4) demand_def(a_ATM1,d_DATE4) -1. linkv(a_ATM1,d_DATE4) 1. fm(165_ATM1,DATE5) OBJROW 1. budget(d_DATE5) -1. fm(165_ATM1,DATE5) demand_def(a_ATM1,d_DATE5) -1. linkv(a_ATM1,d_DATE5) 1. fm(166_ATM1,DATE6) OBJROW 1. budget(d_DATE6) -1. fm(166_ATM1,DATE6) demand_def(a_ATM1,d_DATE6) -1. linkv(a_ATM1,d_DATE6) 1. fm(167_ATM1,DATE7) OBJROW 1. budget(d_DATE7) -1. fm(167_ATM1,DATE7) demand_def(a_ATM1,d_DATE7) -1. linkv(a_ATM1,d_DATE7) 1. fm(168_ATM1,DATE8) OBJROW 1. budget(d_DATE8) -1. fm(168_ATM1,DATE8) demand_def(a_ATM1,d_DATE8) -1. linkv(a_ATM1,d_DATE8) 1. fm(169_ATM1,DATE9) OBJROW 1. budget(d_DATE9) -1. fm(169_ATM1,DATE9) demand_def(a_ATM1,d_DATE9) -1. linkv(a_ATM1,d_DATE9) 1. fm(170_ATM2,DATE0) OBJROW 1. budget(d_DATE0) -1. fm(170_ATM2,DATE0) demand_def(a_ATM2,d_DATE0) -1. linkv(a_ATM2,d_DATE0) 1. fm(171_ATM2,DATE1) OBJROW 1. budget(d_DATE1) -1. fm(171_ATM2,DATE1) demand_def(a_ATM2,d_DATE1) -1. linkv(a_ATM2,d_DATE1) 1. fm(172_ATM2,DATE2) OBJROW 1. budget(d_DATE2) -1. fm(172_ATM2,DATE2) demand_def(a_ATM2,d_DATE2) -1. linkv(a_ATM2,d_DATE2) 1. fm(173_ATM2,DATE3) OBJROW 1. budget(d_DATE3) -1. fm(173_ATM2,DATE3) demand_def(a_ATM2,d_DATE3) -1. linkv(a_ATM2,d_DATE3) 1. fm(174_ATM2,DATE4) OBJROW 1. budget(d_DATE4) -1. fm(174_ATM2,DATE4) demand_def(a_ATM2,d_DATE4) -1. linkv(a_ATM2,d_DATE4) 1. fm(175_ATM2,DATE5) OBJROW 1. budget(d_DATE5) -1. fm(175_ATM2,DATE5) demand_def(a_ATM2,d_DATE5) -1. linkv(a_ATM2,d_DATE5) 1. fm(176_ATM2,DATE6) OBJROW 1. budget(d_DATE6) -1. fm(176_ATM2,DATE6) demand_def(a_ATM2,d_DATE6) -1. linkv(a_ATM2,d_DATE6) 1. fm(177_ATM2,DATE7) OBJROW 1. budget(d_DATE7) -1. fm(177_ATM2,DATE7) demand_def(a_ATM2,d_DATE7) -1. linkv(a_ATM2,d_DATE7) 1. fm(178_ATM2,DATE8) OBJROW 1. budget(d_DATE8) -1. fm(178_ATM2,DATE8) demand_def(a_ATM2,d_DATE8) -1. linkv(a_ATM2,d_DATE8) 1. fm(179_ATM2,DATE9) OBJROW 1. budget(d_DATE9) -1. fm(179_ATM2,DATE9) demand_def(a_ATM2,d_DATE9) -1. linkv(a_ATM2,d_DATE9) 1. fm(180_ATM3,DATE0) OBJROW 1. budget(d_DATE0) -1. fm(180_ATM3,DATE0) demand_def(a_ATM3,d_DATE0) -1. linkv(a_ATM3,d_DATE0) 1. fm(181_ATM3,DATE1) OBJROW 1. budget(d_DATE1) -1. fm(181_ATM3,DATE1) demand_def(a_ATM3,d_DATE1) -1. linkv(a_ATM3,d_DATE1) 1. fm(182_ATM3,DATE2) OBJROW 1. budget(d_DATE2) -1. fm(182_ATM3,DATE2) demand_def(a_ATM3,d_DATE2) -1. linkv(a_ATM3,d_DATE2) 1. fm(183_ATM3,DATE3) OBJROW 1. budget(d_DATE3) -1. fm(183_ATM3,DATE3) demand_def(a_ATM3,d_DATE3) -1. linkv(a_ATM3,d_DATE3) 1. fm(184_ATM3,DATE4) OBJROW 1. budget(d_DATE4) -1. fm(184_ATM3,DATE4) demand_def(a_ATM3,d_DATE4) -1. linkv(a_ATM3,d_DATE4) 1. fm(185_ATM3,DATE5) OBJROW 1. budget(d_DATE5) -1. fm(185_ATM3,DATE5) demand_def(a_ATM3,d_DATE5) -1. linkv(a_ATM3,d_DATE5) 1. fm(186_ATM3,DATE6) OBJROW 1. budget(d_DATE6) -1. fm(186_ATM3,DATE6) demand_def(a_ATM3,d_DATE6) -1. linkv(a_ATM3,d_DATE6) 1. fm(187_ATM3,DATE7) OBJROW 1. budget(d_DATE7) -1. fm(187_ATM3,DATE7) demand_def(a_ATM3,d_DATE7) -1. linkv(a_ATM3,d_DATE7) 1. fm(188_ATM3,DATE8) OBJROW 1. budget(d_DATE8) -1. fm(188_ATM3,DATE8) demand_def(a_ATM3,d_DATE8) -1. linkv(a_ATM3,d_DATE8) 1. fm(189_ATM3,DATE9) OBJROW 1. budget(d_DATE9) -1. fm(189_ATM3,DATE9) demand_def(a_ATM3,d_DATE9) -1. linkv(a_ATM3,d_DATE9) 1. fm(190_ATM4,DATE0) OBJROW 1. budget(d_DATE0) -1. fm(190_ATM4,DATE0) demand_def(a_ATM4,d_DATE0) -1. linkv(a_ATM4,d_DATE0) 1. fm(191_ATM4,DATE1) OBJROW 1. budget(d_DATE1) -1. fm(191_ATM4,DATE1) demand_def(a_ATM4,d_DATE1) -1. linkv(a_ATM4,d_DATE1) 1. fm(192_ATM4,DATE2) OBJROW 1. budget(d_DATE2) -1. fm(192_ATM4,DATE2) demand_def(a_ATM4,d_DATE2) -1. linkv(a_ATM4,d_DATE2) 1. fm(193_ATM4,DATE3) OBJROW 1. budget(d_DATE3) -1. fm(193_ATM4,DATE3) demand_def(a_ATM4,d_DATE3) -1. linkv(a_ATM4,d_DATE3) 1. fm(194_ATM4,DATE4) OBJROW 1. budget(d_DATE4) -1. fm(194_ATM4,DATE4) demand_def(a_ATM4,d_DATE4) -1. linkv(a_ATM4,d_DATE4) 1. fm(195_ATM4,DATE5) OBJROW 1. budget(d_DATE5) -1. fm(195_ATM4,DATE5) demand_def(a_ATM4,d_DATE5) -1. linkv(a_ATM4,d_DATE5) 1. fm(196_ATM4,DATE6) OBJROW 1. budget(d_DATE6) -1. fm(196_ATM4,DATE6) demand_def(a_ATM4,d_DATE6) -1. linkv(a_ATM4,d_DATE6) 1. fm(197_ATM4,DATE7) OBJROW 1. budget(d_DATE7) -1. fm(197_ATM4,DATE7) demand_def(a_ATM4,d_DATE7) -1. linkv(a_ATM4,d_DATE7) 1. fm(198_ATM4,DATE8) OBJROW 1. budget(d_DATE8) -1. fm(198_ATM4,DATE8) demand_def(a_ATM4,d_DATE8) -1. linkv(a_ATM4,d_DATE8) 1. fm(199_ATM4,DATE9) OBJROW 1. budget(d_DATE9) -1. fm(199_ATM4,DATE9) demand_def(a_ATM4,d_DATE9) -1. linkv(a_ATM4,d_DATE9) 1. x2(200_ATM0) demand_def(a_ATM0,d_DATE0) -1984. demand_def(a_ATM0,d_DATE1) -2530. x2(200_ATM0) demand_def(a_ATM0,d_DATE2) 67. demand_def(a_ATM0,d_DATE3) 3135. x2(200_ATM0) demand_def(a_ATM0,d_DATE4) 951. demand_def(a_ATM0,d_DATE5) -479. x2(200_ATM0) demand_def(a_ATM0,d_DATE6) -3186. demand_def(a_ATM0,d_DATE7) -341. x2(200_ATM0) demand_def(a_ATM0,d_DATE8) 643. demand_def(a_ATM0,d_DATE9) 931. x2(200_ATM0) ztox2(a_ATM0,t_1) -1. ztox3(a_ATM0,t_1) -1. x2(200_ATM0) ztox2(a_ATM0,t_2) -1. ztox3(a_ATM0,t_2) -1. x2(200_ATM0) ztox2(a_ATM0,t_3) -1. ztox3(a_ATM0,t_3) -1. x2(200_ATM0) ztox2(a_ATM0,t_4) -1. ztox3(a_ATM0,t_4) -1. x2(200_ATM0) ztox2(a_ATM0,t_5) -1. ztox3(a_ATM0,t_5) -1. x2(200_ATM0) ztox2(a_ATM0,t_6) -1. ztox3(a_ATM0,t_6) -1. x2(200_ATM0) ztox2(a_ATM0,t_7) -1. ztox3(a_ATM0,t_7) -1. x2(200_ATM0) ztox2(a_ATM0,t_8) -1. ztox3(a_ATM0,t_8) -1. x2(200_ATM0) ztox2(a_ATM0,t_9) -1. ztox3(a_ATM0,t_9) -1. x2(200_ATM0) ztox2(a_ATM0,t_10) -1. ztox3(a_ATM0,t_10) -1. x2(201_ATM1) demand_def(a_ATM1,d_DATE0) -601. demand_def(a_ATM1,d_DATE1) -618. x2(201_ATM1) demand_def(a_ATM1,d_DATE2) 610. demand_def(a_ATM1,d_DATE3) 1977. x2(201_ATM1) demand_def(a_ATM1,d_DATE4) -1566. demand_def(a_ATM1,d_DATE5) 1480. x2(201_ATM1) demand_def(a_ATM1,d_DATE6) -679. demand_def(a_ATM1,d_DATE7) -1375. x2(201_ATM1) demand_def(a_ATM1,d_DATE8) -534. demand_def(a_ATM1,d_DATE9) -157. x2(201_ATM1) ztox2(a_ATM1,t_1) -1. ztox3(a_ATM1,t_1) -1. x2(201_ATM1) ztox2(a_ATM1,t_2) -1. ztox3(a_ATM1,t_2) -1. x2(201_ATM1) ztox2(a_ATM1,t_3) -1. ztox3(a_ATM1,t_3) -1. x2(201_ATM1) ztox2(a_ATM1,t_4) -1. ztox3(a_ATM1,t_4) -1. x2(201_ATM1) ztox2(a_ATM1,t_5) -1. ztox3(a_ATM1,t_5) -1. x2(201_ATM1) ztox2(a_ATM1,t_6) -1. ztox3(a_ATM1,t_6) -1. x2(201_ATM1) ztox2(a_ATM1,t_7) -1. ztox3(a_ATM1,t_7) -1. x2(201_ATM1) ztox2(a_ATM1,t_8) -1. ztox3(a_ATM1,t_8) -1. x2(201_ATM1) ztox2(a_ATM1,t_9) -1. ztox3(a_ATM1,t_9) -1. x2(201_ATM1) ztox2(a_ATM1,t_10) -1. ztox3(a_ATM1,t_10) -1. x2(202_ATM2) demand_def(a_ATM2,d_DATE0) 691. demand_def(a_ATM2,d_DATE1) 2001. x2(202_ATM2) demand_def(a_ATM2,d_DATE2) -2626. demand_def(a_ATM2,d_DATE3) -3649. x2(202_ATM2) demand_def(a_ATM2,d_DATE4) 951. demand_def(a_ATM2,d_DATE5) 1376. x2(202_ATM2) demand_def(a_ATM2,d_DATE6) -2067. demand_def(a_ATM2,d_DATE7) -1046. x2(202_ATM2) demand_def(a_ATM2,d_DATE8) 574. demand_def(a_ATM2,d_DATE9) 1377. x2(202_ATM2) ztox2(a_ATM2,t_1) -1. ztox3(a_ATM2,t_1) -1. x2(202_ATM2) ztox2(a_ATM2,t_2) -1. ztox3(a_ATM2,t_2) -1. x2(202_ATM2) ztox2(a_ATM2,t_3) -1. ztox3(a_ATM2,t_3) -1. x2(202_ATM2) ztox2(a_ATM2,t_4) -1. ztox3(a_ATM2,t_4) -1. x2(202_ATM2) ztox2(a_ATM2,t_5) -1. ztox3(a_ATM2,t_5) -1. x2(202_ATM2) ztox2(a_ATM2,t_6) -1. ztox3(a_ATM2,t_6) -1. x2(202_ATM2) ztox2(a_ATM2,t_7) -1. ztox3(a_ATM2,t_7) -1. x2(202_ATM2) ztox2(a_ATM2,t_8) -1. ztox3(a_ATM2,t_8) -1. x2(202_ATM2) ztox2(a_ATM2,t_9) -1. ztox3(a_ATM2,t_9) -1. x2(202_ATM2) ztox2(a_ATM2,t_10) -1. ztox3(a_ATM2,t_10) -1. x2(203_ATM3) demand_def(a_ATM3,d_DATE0) -2943. demand_def(a_ATM3,d_DATE1) -93. x2(203_ATM3) demand_def(a_ATM3,d_DATE2) 451. demand_def(a_ATM3,d_DATE3) 1282. x2(203_ATM3) demand_def(a_ATM3,d_DATE4) -1251. demand_def(a_ATM3,d_DATE5) 1141. x2(203_ATM3) demand_def(a_ATM3,d_DATE6) 3214. demand_def(a_ATM3,d_DATE7) 976. x2(203_ATM3) demand_def(a_ATM3,d_DATE8) 480. demand_def(a_ATM3,d_DATE9) 2369. x2(203_ATM3) ztox2(a_ATM3,t_1) -1. ztox3(a_ATM3,t_1) -1. x2(203_ATM3) ztox2(a_ATM3,t_2) -1. ztox3(a_ATM3,t_2) -1. x2(203_ATM3) ztox2(a_ATM3,t_3) -1. ztox3(a_ATM3,t_3) -1. x2(203_ATM3) ztox2(a_ATM3,t_4) -1. ztox3(a_ATM3,t_4) -1. x2(203_ATM3) ztox2(a_ATM3,t_5) -1. ztox3(a_ATM3,t_5) -1. x2(203_ATM3) ztox2(a_ATM3,t_6) -1. ztox3(a_ATM3,t_6) -1. x2(203_ATM3) ztox2(a_ATM3,t_7) -1. ztox3(a_ATM3,t_7) -1. x2(203_ATM3) ztox2(a_ATM3,t_8) -1. ztox3(a_ATM3,t_8) -1. x2(203_ATM3) ztox2(a_ATM3,t_9) -1. ztox3(a_ATM3,t_9) -1. x2(203_ATM3) ztox2(a_ATM3,t_10) -1. ztox3(a_ATM3,t_10) -1. x2(204_ATM4) demand_def(a_ATM4,d_DATE0) -151. demand_def(a_ATM4,d_DATE1) -811. x2(204_ATM4) demand_def(a_ATM4,d_DATE2) 3310. demand_def(a_ATM4,d_DATE3) 1043. x2(204_ATM4) demand_def(a_ATM4,d_DATE4) 1789. demand_def(a_ATM4,d_DATE5) 346. x2(204_ATM4) demand_def(a_ATM4,d_DATE6) 136. demand_def(a_ATM4,d_DATE7) 1849. x2(204_ATM4) demand_def(a_ATM4,d_DATE8) 443. demand_def(a_ATM4,d_DATE9) 951. x2(204_ATM4) ztox2(a_ATM4,t_1) -1. ztox3(a_ATM4,t_1) -1. x2(204_ATM4) ztox2(a_ATM4,t_2) -1. ztox3(a_ATM4,t_2) -1. x2(204_ATM4) ztox2(a_ATM4,t_3) -1. ztox3(a_ATM4,t_3) -1. x2(204_ATM4) ztox2(a_ATM4,t_4) -1. ztox3(a_ATM4,t_4) -1. x2(204_ATM4) ztox2(a_ATM4,t_5) -1. ztox3(a_ATM4,t_5) -1. x2(204_ATM4) ztox2(a_ATM4,t_6) -1. ztox3(a_ATM4,t_6) -1. x2(204_ATM4) ztox2(a_ATM4,t_7) -1. ztox3(a_ATM4,t_7) -1. x2(204_ATM4) ztox2(a_ATM4,t_8) -1. ztox3(a_ATM4,t_8) -1. x2(204_ATM4) ztox2(a_ATM4,t_9) -1. ztox3(a_ATM4,t_9) -1. x2(204_ATM4) ztox2(a_ATM4,t_10) -1. ztox3(a_ATM4,t_10) -1. x3(205_ATM0) demand_def(a_ATM0,d_DATE0) -1045. demand_def(a_ATM0,d_DATE1) -1510. x3(205_ATM0) demand_def(a_ATM0,d_DATE2) -145. demand_def(a_ATM0,d_DATE3) -581. x3(205_ATM0) demand_def(a_ATM0,d_DATE4) -74. demand_def(a_ATM0,d_DATE5) -1121. x3(205_ATM0) demand_def(a_ATM0,d_DATE6) -757. demand_def(a_ATM0,d_DATE7) -843. x3(205_ATM0) demand_def(a_ATM0,d_DATE8) -915. demand_def(a_ATM0,d_DATE9) -43. x3(206_ATM1) demand_def(a_ATM1,d_DATE0) -1772. demand_def(a_ATM1,d_DATE1) -636. x3(206_ATM1) demand_def(a_ATM1,d_DATE2) -825. demand_def(a_ATM1,d_DATE3) -20. x3(206_ATM1) demand_def(a_ATM1,d_DATE4) -1262. demand_def(a_ATM1,d_DATE5) -976. x3(206_ATM1) demand_def(a_ATM1,d_DATE6) -632. demand_def(a_ATM1,d_DATE7) -586. x3(206_ATM1) demand_def(a_ATM1,d_DATE8) -655. demand_def(a_ATM1,d_DATE9) -859. x3(207_ATM2) demand_def(a_ATM2,d_DATE0) -1229. demand_def(a_ATM2,d_DATE1) -410. x3(207_ATM2) demand_def(a_ATM2,d_DATE2) -454. demand_def(a_ATM2,d_DATE3) -26. x3(207_ATM2) demand_def(a_ATM2,d_DATE4) -958. demand_def(a_ATM2,d_DATE5) -443. x3(207_ATM2) demand_def(a_ATM2,d_DATE6) -800. demand_def(a_ATM2,d_DATE7) -123. x3(207_ATM2) demand_def(a_ATM2,d_DATE8) -396. demand_def(a_ATM2,d_DATE9) -82. x3(208_ATM3) demand_def(a_ATM3,d_DATE0) -1593. demand_def(a_ATM3,d_DATE1) -1387. x3(208_ATM3) demand_def(a_ATM3,d_DATE2) -1785. demand_def(a_ATM3,d_DATE3) -3317. x3(208_ATM3) demand_def(a_ATM3,d_DATE4) -80. demand_def(a_ATM3,d_DATE5) -1642. x3(208_ATM3) demand_def(a_ATM3,d_DATE6) -815. demand_def(a_ATM3,d_DATE7) -99. x3(208_ATM3) demand_def(a_ATM3,d_DATE8) -242. demand_def(a_ATM3,d_DATE9) -1546. x3(209_ATM4) demand_def(a_ATM4,d_DATE0) -92. demand_def(a_ATM4,d_DATE1) -2282. x3(209_ATM4) demand_def(a_ATM4,d_DATE2) -404. demand_def(a_ATM4,d_DATE3) -504. x3(209_ATM4) demand_def(a_ATM4,d_DATE4) -549. demand_def(a_ATM4,d_DATE5) -185. x3(209_ATM4) demand_def(a_ATM4,d_DATE6) -624. demand_def(a_ATM4,d_DATE7) -2004. x3(209_ATM4) demand_def(a_ATM4,d_DATE8) -1659. demand_def(a_ATM4,d_DATE9) -1204. v(210_ATM0,DATE0) linkv(a_ATM0,d_DATE0) -780. count(a_ATM0) 1. v(211_ATM0,DATE1) linkv(a_ATM0,d_DATE1) -2351. count(a_ATM0) 1. v(212_ATM0,DATE2) linkv(a_ATM0,d_DATE2) -2288. count(a_ATM0) 1. v(213_ATM0,DATE3) linkv(a_ATM0,d_DATE3) -1357. count(a_ATM0) 1. v(214_ATM0,DATE4) linkv(a_ATM0,d_DATE4) -3637. count(a_ATM0) 1. v(215_ATM0,DATE5) linkv(a_ATM0,d_DATE5) -1371. count(a_ATM0) 1. v(216_ATM0,DATE6) linkv(a_ATM0,d_DATE6) -2225. count(a_ATM0) 1. v(217_ATM0,DATE7) linkv(a_ATM0,d_DATE7) -1721. count(a_ATM0) 1. v(218_ATM0,DATE8) linkv(a_ATM0,d_DATE8) -2110. count(a_ATM0) 1. v(219_ATM0,DATE9) linkv(a_ATM0,d_DATE9) -3118. count(a_ATM0) 1. v(220_ATM1,DATE0) linkv(a_ATM1,d_DATE0) -2830. count(a_ATM1) 1. v(221_ATM1,DATE1) linkv(a_ATM1,d_DATE1) -184. count(a_ATM1) 1. v(222_ATM1,DATE2) linkv(a_ATM1,d_DATE2) -282. count(a_ATM1) 1. v(223_ATM1,DATE3) linkv(a_ATM1,d_DATE3) -998. count(a_ATM1) 1. v(224_ATM1,DATE4) linkv(a_ATM1,d_DATE4) -3198. count(a_ATM1) 1. v(225_ATM1,DATE5) linkv(a_ATM1,d_DATE5) -3170. count(a_ATM1) 1. v(226_ATM1,DATE6) linkv(a_ATM1,d_DATE6) -2301. count(a_ATM1) 1. v(227_ATM1,DATE7) linkv(a_ATM1,d_DATE7) -719. count(a_ATM1) 1. v(228_ATM1,DATE8) linkv(a_ATM1,d_DATE8) -818. count(a_ATM1) 1. v(229_ATM1,DATE9) linkv(a_ATM1,d_DATE9) -1426. count(a_ATM1) 1. v(230_ATM2,DATE0) linkv(a_ATM2,d_DATE0) -2803. count(a_ATM2) 1. v(231_ATM2,DATE1) linkv(a_ATM2,d_DATE1) -1031. count(a_ATM2) 1. v(232_ATM2,DATE2) linkv(a_ATM2,d_DATE2) -23. count(a_ATM2) 1. v(233_ATM2,DATE3) linkv(a_ATM2,d_DATE3) -376. count(a_ATM2) 1. v(234_ATM2,DATE4) linkv(a_ATM2,d_DATE4) -541. count(a_ATM2) 1. v(235_ATM2,DATE5) linkv(a_ATM2,d_DATE5) -2195. count(a_ATM2) 1. v(236_ATM2,DATE6) linkv(a_ATM2,d_DATE6) -3676. count(a_ATM2) 1. v(237_ATM2,DATE7) linkv(a_ATM2,d_DATE7) -2475. count(a_ATM2) 1. v(238_ATM2,DATE8) linkv(a_ATM2,d_DATE8) -1232. count(a_ATM2) 1. v(239_ATM2,DATE9) linkv(a_ATM2,d_DATE9) -352. count(a_ATM2) 1. v(240_ATM3,DATE0) linkv(a_ATM3,d_DATE0) -853. count(a_ATM3) 1. v(241_ATM3,DATE1) linkv(a_ATM3,d_DATE1) -2310. count(a_ATM3) 1. v(242_ATM3,DATE2) linkv(a_ATM3,d_DATE2) -3542. count(a_ATM3) 1. v(243_ATM3,DATE3) linkv(a_ATM3,d_DATE3) -739. count(a_ATM3) 1. v(244_ATM3,DATE4) linkv(a_ATM3,d_DATE4) -1315. count(a_ATM3) 1. v(245_ATM3,DATE5) linkv(a_ATM3,d_DATE5) -2929. count(a_ATM3) 1. v(246_ATM3,DATE6) linkv(a_ATM3,d_DATE6) -2928. count(a_ATM3) 1. v(247_ATM3,DATE7) linkv(a_ATM3,d_DATE7) -2101. count(a_ATM3) 1. v(248_ATM3,DATE8) linkv(a_ATM3,d_DATE8) -3522. count(a_ATM3) 1. v(249_ATM3,DATE9) linkv(a_ATM3,d_DATE9) -319. count(a_ATM3) 1. v(250_ATM4,DATE0) linkv(a_ATM4,d_DATE0) -1184. count(a_ATM4) 1. v(251_ATM4,DATE1) linkv(a_ATM4,d_DATE1) -181. count(a_ATM4) 1. v(252_ATM4,DATE2) linkv(a_ATM4,d_DATE2) -1096. count(a_ATM4) 1. v(253_ATM4,DATE3) linkv(a_ATM4,d_DATE3) -1568. count(a_ATM4) 1. v(254_ATM4,DATE4) linkv(a_ATM4,d_DATE4) -2710. count(a_ATM4) 1. v(255_ATM4,DATE5) linkv(a_ATM4,d_DATE5) -1096. count(a_ATM4) 1. v(256_ATM4,DATE6) linkv(a_ATM4,d_DATE6) -3834. count(a_ATM4) 1. v(257_ATM4,DATE7) linkv(a_ATM4,d_DATE7) -4214. count(a_ATM4) 1. v(258_ATM4,DATE8) linkv(a_ATM4,d_DATE8) -1902. count(a_ATM4) 1. v(259_ATM4,DATE9) linkv(a_ATM4,d_DATE9) -3280. count(a_ATM4) 1. RHS RHS budget(d_DATE0) 5829. budget(d_DATE1) 9829. RHS budget(d_DATE2) 70. budget(d_DATE3) 841. RHS budget(d_DATE4) 4915. budget(d_DATE5) 1100. RHS budget(d_DATE6) 4915. budget(d_DATE7) 5622. RHS budget(d_DATE8) 6264. budget(d_DATE9) 243. RHS demand_def(a_ATM0,d_DATE0) 593. demand_def(a_ATM0,d_DATE1) -2177. RHS demand_def(a_ATM0,d_DATE2) 532. demand_def(a_ATM0,d_DATE3) 1962. RHS demand_def(a_ATM0,d_DATE4) -1590. demand_def(a_ATM0,d_DATE5) 799. RHS demand_def(a_ATM0,d_DATE6) -324. demand_def(a_ATM0,d_DATE7) -368. RHS demand_def(a_ATM0,d_DATE8) -532. demand_def(a_ATM0,d_DATE9) -1334. RHS pickone_x1(a_ATM0) 1. count(a_ATM0) 4. RHS ztox3(a_ATM0,t_1) -1. ztox3(a_ATM0,t_2) -1. RHS ztox3(a_ATM0,t_3) -1. ztox3(a_ATM0,t_4) -1. RHS ztox3(a_ATM0,t_5) -1. ztox3(a_ATM0,t_6) -1. RHS ztox3(a_ATM0,t_7) -1. ztox3(a_ATM0,t_8) -1. RHS ztox3(a_ATM0,t_9) -1. ztox3(a_ATM0,t_10) -1. RHS demand_def(a_ATM1,d_DATE0) -568. demand_def(a_ATM1,d_DATE1) 891. RHS demand_def(a_ATM1,d_DATE2) 2781. demand_def(a_ATM1,d_DATE3) 1922. RHS demand_def(a_ATM1,d_DATE4) -1703. demand_def(a_ATM1,d_DATE5) -517. RHS demand_def(a_ATM1,d_DATE6) -1402. demand_def(a_ATM1,d_DATE7) 438. RHS demand_def(a_ATM1,d_DATE8) 635. demand_def(a_ATM1,d_DATE9) 355. RHS pickone_x1(a_ATM1) 1. count(a_ATM1) 3. RHS ztox3(a_ATM1,t_1) -1. ztox3(a_ATM1,t_2) -1. RHS ztox3(a_ATM1,t_3) -1. ztox3(a_ATM1,t_4) -1. RHS ztox3(a_ATM1,t_5) -1. ztox3(a_ATM1,t_6) -1. RHS ztox3(a_ATM1,t_7) -1. ztox3(a_ATM1,t_8) -1. RHS ztox3(a_ATM1,t_9) -1. ztox3(a_ATM1,t_10) -1. RHS demand_def(a_ATM2,d_DATE0) -1935. demand_def(a_ATM2,d_DATE1) 1043. RHS demand_def(a_ATM2,d_DATE2) 771. demand_def(a_ATM2,d_DATE3) 480. RHS demand_def(a_ATM2,d_DATE4) 1669. demand_def(a_ATM2,d_DATE5) 29. RHS demand_def(a_ATM2,d_DATE6) -2933. demand_def(a_ATM2,d_DATE7) -627. RHS demand_def(a_ATM2,d_DATE8) 1009. demand_def(a_ATM2,d_DATE9) 2157. RHS pickone_x1(a_ATM2) 1. count(a_ATM2) 3. RHS ztox3(a_ATM2,t_1) -1. ztox3(a_ATM2,t_2) -1. RHS ztox3(a_ATM2,t_3) -1. ztox3(a_ATM2,t_4) -1. RHS ztox3(a_ATM2,t_5) -1. ztox3(a_ATM2,t_6) -1. RHS ztox3(a_ATM2,t_7) -1. ztox3(a_ATM2,t_8) -1. RHS ztox3(a_ATM2,t_9) -1. ztox3(a_ATM2,t_10) -1. RHS demand_def(a_ATM3,d_DATE0) -178. demand_def(a_ATM3,d_DATE1) 286. RHS demand_def(a_ATM3,d_DATE2) -2323. demand_def(a_ATM3,d_DATE3) 940. RHS demand_def(a_ATM3,d_DATE4) -130. demand_def(a_ATM3,d_DATE5) -1206. RHS demand_def(a_ATM3,d_DATE6) 469. demand_def(a_ATM3,d_DATE7) -969. RHS demand_def(a_ATM3,d_DATE8) -2804. demand_def(a_ATM3,d_DATE9) 3330. RHS pickone_x1(a_ATM3) 1. count(a_ATM3) 7. RHS ztox3(a_ATM3,t_1) -1. ztox3(a_ATM3,t_2) -1. RHS ztox3(a_ATM3,t_3) -1. ztox3(a_ATM3,t_4) -1. RHS ztox3(a_ATM3,t_5) -1. ztox3(a_ATM3,t_6) -1. RHS ztox3(a_ATM3,t_7) -1. ztox3(a_ATM3,t_8) -1. RHS ztox3(a_ATM3,t_9) -1. ztox3(a_ATM3,t_10) -1. RHS demand_def(a_ATM4,d_DATE0) -144. demand_def(a_ATM4,d_DATE1) 359. RHS demand_def(a_ATM4,d_DATE2) 2349. demand_def(a_ATM4,d_DATE3) -184. RHS demand_def(a_ATM4,d_DATE4) -55. demand_def(a_ATM4,d_DATE5) -698. RHS demand_def(a_ATM4,d_DATE6) -3187. demand_def(a_ATM4,d_DATE7) -1890. RHS demand_def(a_ATM4,d_DATE8) 1647. demand_def(a_ATM4,d_DATE9) 233. RHS pickone_x1(a_ATM4) 1. count(a_ATM4) 5. RHS ztox3(a_ATM4,t_1) -1. ztox3(a_ATM4,t_2) -1. RHS ztox3(a_ATM4,t_3) -1. ztox3(a_ATM4,t_4) -1. RHS ztox3(a_ATM4,t_5) -1. ztox3(a_ATM4,t_6) -1. RHS ztox3(a_ATM4,t_7) -1. ztox3(a_ATM4,t_8) -1. RHS ztox3(a_ATM4,t_9) -1. ztox3(a_ATM4,t_10) -1. BOUNDS BV BOUND x1(0_ATM0,1) 1. BV BOUND x1(1_ATM0,2) 1. BV BOUND x1(2_ATM0,3) 1. BV BOUND x1(3_ATM0,4) 1. BV BOUND x1(4_ATM0,5) 1. BV BOUND x1(5_ATM0,6) 1. BV BOUND x1(6_ATM0,7) 1. BV BOUND x1(7_ATM0,8) 1. BV BOUND x1(8_ATM0,9) 1. BV BOUND x1(9_ATM0,10) 1. BV BOUND x1(10_ATM1,1) 1. BV BOUND x1(11_ATM1,2) 1. BV BOUND x1(12_ATM1,3) 1. BV BOUND x1(13_ATM1,4) 1. BV BOUND x1(14_ATM1,5) 1. BV BOUND x1(15_ATM1,6) 1. BV BOUND x1(16_ATM1,7) 1. BV BOUND x1(17_ATM1,8) 1. BV BOUND x1(18_ATM1,9) 1. BV BOUND x1(19_ATM1,10) 1. BV BOUND x1(20_ATM2,1) 1. BV BOUND x1(21_ATM2,2) 1. BV BOUND x1(22_ATM2,3) 1. BV BOUND x1(23_ATM2,4) 1. BV BOUND x1(24_ATM2,5) 1. BV BOUND x1(25_ATM2,6) 1. BV BOUND x1(26_ATM2,7) 1. BV BOUND x1(27_ATM2,8) 1. BV BOUND x1(28_ATM2,9) 1. BV BOUND x1(29_ATM2,10) 1. BV BOUND x1(30_ATM3,1) 1. BV BOUND x1(31_ATM3,2) 1. BV BOUND x1(32_ATM3,3) 1. BV BOUND x1(33_ATM3,4) 1. BV BOUND x1(34_ATM3,5) 1. BV BOUND x1(35_ATM3,6) 1. BV BOUND x1(36_ATM3,7) 1. BV BOUND x1(37_ATM3,8) 1. BV BOUND x1(38_ATM3,9) 1. BV BOUND x1(39_ATM3,10) 1. BV BOUND x1(40_ATM4,1) 1. BV BOUND x1(41_ATM4,2) 1. BV BOUND x1(42_ATM4,3) 1. BV BOUND x1(43_ATM4,4) 1. BV BOUND x1(44_ATM4,5) 1. BV BOUND x1(45_ATM4,6) 1. BV BOUND x1(46_ATM4,7) 1. BV BOUND x1(47_ATM4,8) 1. BV BOUND x1(48_ATM4,9) 1. BV BOUND x1(49_ATM4,10) 1. UP BOUND z(50_ATM0,1) 1. UP BOUND z(51_ATM0,2) 1. UP BOUND z(52_ATM0,3) 1. UP BOUND z(53_ATM0,4) 1. UP BOUND z(54_ATM0,5) 1. UP BOUND z(55_ATM0,6) 1. UP BOUND z(56_ATM0,7) 1. UP BOUND z(57_ATM0,8) 1. UP BOUND z(58_ATM0,9) 1. UP BOUND z(59_ATM0,10) 1. UP BOUND z(60_ATM1,1) 1. UP BOUND z(61_ATM1,2) 1. UP BOUND z(62_ATM1,3) 1. UP BOUND z(63_ATM1,4) 1. UP BOUND z(64_ATM1,5) 1. UP BOUND z(65_ATM1,6) 1. UP BOUND z(66_ATM1,7) 1. UP BOUND z(67_ATM1,8) 1. UP BOUND z(68_ATM1,9) 1. UP BOUND z(69_ATM1,10) 1. UP BOUND z(70_ATM2,1) 1. UP BOUND z(71_ATM2,2) 1. UP BOUND z(72_ATM2,3) 1. UP BOUND z(73_ATM2,4) 1. UP BOUND z(74_ATM2,5) 1. UP BOUND z(75_ATM2,6) 1. UP BOUND z(76_ATM2,7) 1. UP BOUND z(77_ATM2,8) 1. UP BOUND z(78_ATM2,9) 1. UP BOUND z(79_ATM2,10) 1. UP BOUND z(80_ATM3,1) 1. UP BOUND z(81_ATM3,2) 1. UP BOUND z(82_ATM3,3) 1. UP BOUND z(83_ATM3,4) 1. UP BOUND z(84_ATM3,5) 1. UP BOUND z(85_ATM3,6) 1. UP BOUND z(86_ATM3,7) 1. UP BOUND z(87_ATM3,8) 1. UP BOUND z(88_ATM3,9) 1. UP BOUND z(89_ATM3,10) 1. UP BOUND z(90_ATM4,1) 1. UP BOUND z(91_ATM4,2) 1. UP BOUND z(92_ATM4,3) 1. UP BOUND z(93_ATM4,4) 1. UP BOUND z(94_ATM4,5) 1. UP BOUND z(95_ATM4,6) 1. UP BOUND z(96_ATM4,7) 1. UP BOUND z(97_ATM4,8) 1. UP BOUND z(98_ATM4,9) 1. UP BOUND z(99_ATM4,10) 1. UP BOUND fm(150_ATM0,DATE0) 780. UP BOUND fm(151_ATM0,DATE1) 2351. UP BOUND fm(152_ATM0,DATE2) 2288. UP BOUND fm(153_ATM0,DATE3) 1357. UP BOUND fm(154_ATM0,DATE4) 3637. UP BOUND fm(155_ATM0,DATE5) 1371. UP BOUND fm(156_ATM0,DATE6) 2225. UP BOUND fm(157_ATM0,DATE7) 1721. UP BOUND fm(158_ATM0,DATE8) 2110. UP BOUND fm(159_ATM0,DATE9) 3118. UP BOUND fm(160_ATM1,DATE0) 2830. UP BOUND fm(161_ATM1,DATE1) 184. UP BOUND fm(162_ATM1,DATE2) 282. UP BOUND fm(163_ATM1,DATE3) 998. UP BOUND fm(164_ATM1,DATE4) 3198. UP BOUND fm(165_ATM1,DATE5) 3170. UP BOUND fm(166_ATM1,DATE6) 2301. UP BOUND fm(167_ATM1,DATE7) 719. UP BOUND fm(168_ATM1,DATE8) 818. UP BOUND fm(169_ATM1,DATE9) 1426. UP BOUND fm(170_ATM2,DATE0) 2803. UP BOUND fm(171_ATM2,DATE1) 1031. UP BOUND fm(172_ATM2,DATE2) 23. UP BOUND fm(173_ATM2,DATE3) 376. UP BOUND fm(174_ATM2,DATE4) 541. UP BOUND fm(175_ATM2,DATE5) 2195. UP BOUND fm(176_ATM2,DATE6) 3676. UP BOUND fm(177_ATM2,DATE7) 2475. UP BOUND fm(178_ATM2,DATE8) 1232. UP BOUND fm(179_ATM2,DATE9) 352. UP BOUND fm(180_ATM3,DATE0) 853. UP BOUND fm(181_ATM3,DATE1) 2310. UP BOUND fm(182_ATM3,DATE2) 3542. UP BOUND fm(183_ATM3,DATE3) 739. UP BOUND fm(184_ATM3,DATE4) 1315. UP BOUND fm(185_ATM3,DATE5) 2929. UP BOUND fm(186_ATM3,DATE6) 2928. UP BOUND fm(187_ATM3,DATE7) 2101. UP BOUND fm(188_ATM3,DATE8) 3522. UP BOUND fm(189_ATM3,DATE9) 319. UP BOUND fm(190_ATM4,DATE0) 1184. UP BOUND fm(191_ATM4,DATE1) 181. UP BOUND fm(192_ATM4,DATE2) 1096. UP BOUND fm(193_ATM4,DATE3) 1568. UP BOUND fm(194_ATM4,DATE4) 2710. UP BOUND fm(195_ATM4,DATE5) 1096. UP BOUND fm(196_ATM4,DATE6) 3834. UP BOUND fm(197_ATM4,DATE7) 4214. UP BOUND fm(198_ATM4,DATE8) 1902. UP BOUND fm(199_ATM4,DATE9) 3280. UP BOUND x2(200_ATM0) 1. UP BOUND x2(201_ATM1) 1. UP BOUND x2(202_ATM2) 1. UP BOUND x2(203_ATM3) 1. UP BOUND x2(204_ATM4) 1. UP BOUND x3(205_ATM0) 1000. UP BOUND x3(206_ATM1) 1000. UP BOUND x3(207_ATM2) 1000. UP BOUND x3(208_ATM3) 1000. UP BOUND x3(209_ATM4) 1000. BV BOUND v(210_ATM0,DATE0) 1. BV BOUND v(211_ATM0,DATE1) 1. BV BOUND v(212_ATM0,DATE2) 1. BV BOUND v(213_ATM0,DATE3) 1. BV BOUND v(214_ATM0,DATE4) 1. BV BOUND v(215_ATM0,DATE5) 1. BV BOUND v(216_ATM0,DATE6) 1. BV BOUND v(217_ATM0,DATE7) 1. BV BOUND v(218_ATM0,DATE8) 1. BV BOUND v(219_ATM0,DATE9) 1. BV BOUND v(220_ATM1,DATE0) 1. BV BOUND v(221_ATM1,DATE1) 1. BV BOUND v(222_ATM1,DATE2) 1. BV BOUND v(223_ATM1,DATE3) 1. BV BOUND v(224_ATM1,DATE4) 1. BV BOUND v(225_ATM1,DATE5) 1. BV BOUND v(226_ATM1,DATE6) 1. BV BOUND v(227_ATM1,DATE7) 1. BV BOUND v(228_ATM1,DATE8) 1. BV BOUND v(229_ATM1,DATE9) 1. BV BOUND v(230_ATM2,DATE0) 1. BV BOUND v(231_ATM2,DATE1) 1. BV BOUND v(232_ATM2,DATE2) 1. BV BOUND v(233_ATM2,DATE3) 1. BV BOUND v(234_ATM2,DATE4) 1. BV BOUND v(235_ATM2,DATE5) 1. BV BOUND v(236_ATM2,DATE6) 1. BV BOUND v(237_ATM2,DATE7) 1. BV BOUND v(238_ATM2,DATE8) 1. BV BOUND v(239_ATM2,DATE9) 1. BV BOUND v(240_ATM3,DATE0) 1. BV BOUND v(241_ATM3,DATE1) 1. BV BOUND v(242_ATM3,DATE2) 1. BV BOUND v(243_ATM3,DATE3) 1. BV BOUND v(244_ATM3,DATE4) 1. BV BOUND v(245_ATM3,DATE5) 1. BV BOUND v(246_ATM3,DATE6) 1. BV BOUND v(247_ATM3,DATE7) 1. BV BOUND v(248_ATM3,DATE8) 1. BV BOUND v(249_ATM3,DATE9) 1. BV BOUND v(250_ATM4,DATE0) 1. BV BOUND v(251_ATM4,DATE1) 1. BV BOUND v(252_ATM4,DATE2) 1. BV BOUND v(253_ATM4,DATE3) 1. BV BOUND v(254_ATM4,DATE4) 1. BV BOUND v(255_ATM4,DATE5) 1. BV BOUND v(256_ATM4,DATE6) 1. BV BOUND v(257_ATM4,DATE7) 1. BV BOUND v(258_ATM4,DATE8) 1. BV BOUND v(259_ATM4,DATE9) 1. ENDATA Vol-1.5.4/Data/Sample/tp3.mps0000644000175000017500000000162510430174061014634 0ustar sudipsudip* * small test problem derived from P0548 * NAME tp3 ROWS N R1001 L R1006 G ROWA G ROWB COLUMNS SET00001 'MARKER' 'INTORG' C1045 R1001 155.000000 C1045 R1006 161.000000 C1045 ROWA 1.000000 C1047 R1006 -120.000000 C1050 R1006 -68.000000 C1050 ROWB 1.000000 RHS RHS R1006 -5.000000 RHS ROWA 0.627000 RHS ROWB 0.380000 BOUNDS BV ONE C1045 1.000000 BV ONE C1047 1.000000 BV ONE C1050 1.000000 ENDATA Vol-1.5.4/Data/Sample/retail3.block0000644000175000017500000000266012136243266015775 0ustar sudipsudip0 3 0 53 0 103 0 153 1 4 1 54 1 104 1 154 2 5 2 55 2 105 2 155 3 6 3 56 3 106 3 156 4 7 4 57 4 107 4 157 5 8 5 58 5 108 5 158 6 9 6 59 6 109 6 159 7 10 7 60 7 110 7 160 8 11 8 61 8 111 8 161 9 12 9 62 9 112 9 162 10 13 10 63 10 113 10 163 11 14 11 64 11 114 11 164 12 15 12 65 12 115 12 165 13 16 13 66 13 116 13 166 14 17 14 67 14 117 14 167 15 18 15 68 15 118 15 168 16 19 16 69 16 119 16 169 17 20 17 70 17 120 17 170 18 21 18 71 18 121 18 171 19 22 19 72 19 122 19 172 20 23 20 73 20 123 20 173 21 24 21 74 21 124 21 174 22 25 22 75 22 125 22 175 23 26 23 76 23 126 23 176 24 27 24 77 24 127 24 177 25 28 25 78 25 128 25 178 26 29 26 79 26 129 26 179 27 30 27 80 27 130 27 180 28 31 28 81 28 131 28 181 29 32 29 82 29 132 29 182 30 33 30 83 30 133 30 183 31 34 31 84 31 134 31 184 32 35 32 85 32 135 32 185 33 36 33 86 33 136 33 186 34 37 34 87 34 137 34 187 35 38 35 88 35 138 35 188 36 39 36 89 36 139 36 189 37 40 37 90 37 140 37 190 38 41 38 91 38 141 38 191 39 42 39 92 39 142 39 192 40 43 40 93 40 143 40 193 41 44 41 94 41 144 41 194 42 45 42 95 42 145 42 195 43 46 43 96 43 146 43 196 44 47 44 97 44 147 44 197 45 48 45 98 45 148 45 198 46 49 46 99 46 149 46 199 47 50 47 100 47 150 47 200 48 51 48 101 48 151 48 201 49 52 49 102 49 152 49 202 Vol-1.5.4/Data/Sample/config.guess0000755000175000017500000012706311405216230015730 0ustar sudipsudip#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Vol-1.5.4/Data/Sample/app0110.cor0000755000175000017500000001210611015552002015166 0ustar sudipsudipNAME APP ROWS N COST L K01 L K02 L K03 L K04 L K05 E D00101 E D00201 E D00301 E D00401 E D00102 E D00202 E D00302 E D00402 E D00103 E D00203 E D00303 E D00403 E D00104 E D00204 E D00304 E D00404 E D00105 E D00205 E D00305 E D00405 COLUMNS X00101 K01 1 D00101 1. X00201 K01 1 D00201 1. X00301 K01 1 D00301 1. X00401 K01 1 D00401 1. X00102 K02 1 D00102 1. X00202 K02 1 D00202 1. X00302 K02 1 D00302 1. X00402 K02 1 D00402 1. X00103 K03 1 D00103 1. X00203 K03 1 D00203 1. X00303 K03 1 D00303 1. X00403 K03 1 D00403 1. X00104 K04 1 D00104 1. X00204 K04 1 D00204 1. X00304 K04 1 D00304 1. X00404 K04 1 D00404 1. X00105 K05 1 D00105 1. X00205 K05 1 D00205 1. X00305 K05 1 D00305 1. X00405 K05 1 D00405 1. I00101 COST 1 D00101 -1. I00101 D00102 1. Y00101 COST 2 D00101 1. I00201 COST 2 D00201 -1. I00201 D00202 1. Y00201 COST 3 D00201 1. I00301 COST 3 D00301 -1. I00301 D00302 1. Y00301 COST 2 D00301 1. I00401 COST 4 D00401 -1. I00401 D00402 1. Y00401 COST 5 D00401 1. INT1 'MARKER' 'INTORG' I00102 COST 1 D00102 -1. I00102 D00103 1. Y00102 COST 2 D00102 1. I00202 COST 2 D00202 -1. I00202 D00203 1. Y00202 COST 3 D00202 1. INT1END 'MARKER' 'INTEND' I00302 COST 3 D00302 -1. I00302 D00303 1. Y00302 COST 2 D00302 1. I00402 COST 4 D00402 -1. I00402 D00403 1. Y00402 COST 5 D00402 1. I00103 COST 1 D00103 -1. I00103 D00104 1. Y00103 COST 2 D00103 1. I00203 COST 2 D00203 -1. I00203 D00204 1. Y00203 COST 3 D00203 1. I00303 COST 3 D00303 -1. I00303 D00304 1. Y00303 COST 2 D00303 1. I00403 COST 4 D00403 -1. I00403 D00404 1. Y00403 COST 5 D00403 1. I00104 COST 1 D00104 -1. I00104 D00105 1. Y00104 COST 2 D00104 1. I00204 COST 2 D00204 -1. I00204 D00205 1. Y00204 COST 3 D00204 1. I00304 COST 3 D00304 -1. I00304 D00305 1. Y00304 COST 2 D00304 1. I00404 COST 4 D00404 -1. I00404 D00405 1. Y00404 COST 5 D00404 1. I00105 COST 1 D00105 -1. Y00105 COST 2 D00105 1. I00205 COST 2 D00205 -1. Y00205 COST 3 D00205 1. I00305 COST 3 D00305 -1. Y00305 COST 2 D00305 1. I00405 COST 4 D00405 -1. Y00405 COST 5 D00405 1. RHS RHS K01 3 RHS K02 6 RHS K03 10 RHS K04 2000 RHS K05 18 RHS D00101 1.000 RHS D00201 1.000 RHS D00301 1.000 RHS D00401 1.000 RHS D00102 2.667 RHS D00202 1.667 RHS D00302 2.667 RHS D00402 3.333 RHS D00103 2.667 RHS D00203 2.000 RHS D00303 3.000 RHS D00403 3.000 RHS D00104 2.667 RHS D00204 2.667 RHS D00304 2.667 RHS D00404 2.667 RHS D00105 2.667 RHS D00205 2.333 RHS D00305 2.333 RHS D00405 2.333 BOUNDS UP BOUND1 I00102 51.000000 UP BOUND1 Y00102 51.000000 UP BOUND1 Y00202 51.000000 UP BOUND1 I00202 51.000000 ENDATA Vol-1.5.4/Data/Sample/coindatasample.pc.in0000644000175000017500000000026711507632611017331 0ustar sudipsudipprefix=@prefix@ datadir=@datadir@/coin/Data/Sample Name: Sample Description: Sample models URL: https://projects.coin-or.org/svn/Data/Sample Version: @PACKAGE_VERSION@ Libs: Cflags: Vol-1.5.4/Data/Sample/p0201.mps0000644000175000017500000023142210430174061014670 0ustar sudipsudip*NAME: p0201 *ROWS: 133 *COLUMNS: 201 *INTEGER: 201 *NONZERO: 1923 *BEST SOLN: 7615 (opt) *LP SOLN: 6875.0 *SOURCE: Crowder-Johnson-Padberg test set * * E. Andrew Boyd (Rice University) *APPLICATION: unknown *COMMENTS: pure 0/1 IP * 26 SOS constraints * NAME P0201 ROWS N R1001 L R1002 L R1003 L R1004 L R1005 L R1006 L R1007 L R1008 L R1009 L R1010 L R1011 L R1012 L R1013 L R1014 L R1015 L R1016 L R1017 L R1018 L R1019 L R1020 L R1021 L R1022 L R1023 L R1024 L R1025 L R1026 L R1027 L R1028 L R1029 L R1030 L R1031 L R1032 L R1033 L R1034 L R1035 L R1036 L R1037 L R1038 L R1039 L R1040 L R1041 L R1042 L R1043 L R1044 L R1045 L R1046 L R1047 L R1048 L R1049 L R1050 L R1051 L R1052 L R1053 L R1054 L R1055 L R1056 L R1057 L R1058 L R1059 L R1060 L R1061 L R1062 L R1063 L R1064 L R1065 L R1066 L R1067 L R1068 L R1069 L R1070 L R1071 L R1072 L R1073 L R1074 L R1075 L R1076 L R1077 L R1078 L R1079 L R1080 L R1081 L R1082 L R1083 L R1084 L R1085 L R1086 L R1087 L R1088 L R1089 L R1090 L R1091 L R1092 L R1093 L R1094 L R1095 L R1096 L R1097 L R1098 L R1099 L R1100 L R1101 L R1102 L R1103 L R1104 L R1105 L R1106 L R1107 L R1108 L R1109 L R1110 L R1111 L R1112 L R1113 L R1114 L R1115 L R1116 L R1117 L R1118 L R1119 L R1120 L R1121 L R1122 L R1123 L R1124 L R1125 L R1126 L R1127 L R1128 L R1129 L R1130 L R1131 L R1132 L R1133 L R1134 COLUMNS MARK0000 'MARKER' 'INTORG' C1001 R1001 50 R1002 1 C1001 R1045 -1 R1048 -1 C1001 R1051 -1 R1054 -1 C1001 R1057 -1 R1060 -1 C1001 R1063 -1 R1066 -1 C1001 R1069 -1 R1072 -1 C1002 R1001 100 R1002 2 C1002 R1045 -2 R1048 -2 C1002 R1051 -2 R1054 -2 C1002 R1057 -2 R1060 -2 C1002 R1063 -2 R1066 -2 C1002 R1069 -2 R1072 -2 C1003 R1001 200 R1002 4 C1003 R1045 -4 R1048 -4 C1003 R1051 -4 R1054 -4 C1003 R1057 -4 R1060 -4 C1003 R1063 -4 R1066 -4 C1003 R1069 -4 R1072 -4 C1004 R1001 400 R1002 8 C1004 R1045 -8 R1048 -8 C1004 R1051 -8 R1054 -8 C1004 R1057 -8 R1060 -8 C1004 R1063 -8 R1066 -8 C1004 R1069 -8 R1072 -8 C1005 R1001 800 R1002 16 C1005 R1045 -16 R1048 -16 C1005 R1051 -16 R1054 -16 C1005 R1057 -16 R1060 -16 C1005 R1063 -16 R1066 -16 C1005 R1069 -16 R1072 -16 C1006 R1001 1600 R1002 32 C1006 R1045 -32 R1048 -32 C1006 R1051 -32 R1054 -32 C1006 R1057 -32 R1060 -32 C1006 R1063 -32 R1066 -32 C1006 R1069 -32 R1072 -32 C1007 R1001 3200 R1002 64 C1007 R1045 -64 R1048 -64 C1007 R1051 -64 R1054 -64 C1007 R1057 -64 R1060 -64 C1007 R1063 -64 R1066 -64 C1007 R1069 -64 R1072 -64 C1008 R1001 50 R1003 1 C1008 R1046 -1 R1049 -1 C1008 R1052 -1 R1055 -1 C1008 R1058 -1 R1061 -1 C1008 R1064 -1 R1067 -1 C1008 R1070 -1 R1073 -1 C1009 R1001 100 R1003 2 C1009 R1046 -2 R1049 -2 C1009 R1052 -2 R1055 -2 C1009 R1058 -2 R1061 -2 C1009 R1064 -2 R1067 -2 C1009 R1070 -2 R1073 -2 C1010 R1001 200 R1003 4 C1010 R1046 -4 R1049 -4 C1010 R1052 -4 R1055 -4 C1010 R1058 -4 R1061 -4 C1010 R1064 -4 R1067 -4 C1010 R1070 -4 R1073 -4 C1011 R1001 400 R1003 8 C1011 R1046 -8 R1049 -8 C1011 R1052 -8 R1055 -8 C1011 R1058 -8 R1061 -8 C1011 R1064 -8 R1067 -8 C1011 R1070 -8 R1073 -8 C1012 R1001 800 R1003 16 C1012 R1046 -16 R1049 -16 C1012 R1052 -16 R1055 -16 C1012 R1058 -16 R1061 -16 C1012 R1064 -16 R1067 -16 C1012 R1070 -16 R1073 -16 C1013 R1001 1600 R1003 32 C1013 R1046 -32 R1049 -32 C1013 R1052 -32 R1055 -32 C1013 R1058 -32 R1061 -32 C1013 R1064 -32 R1067 -32 C1013 R1070 -32 R1073 -32 C1014 R1001 3200 R1003 64 C1014 R1046 -64 R1049 -64 C1014 R1052 -64 R1055 -64 C1014 R1058 -64 R1061 -64 C1014 R1064 -64 R1067 -64 C1014 R1070 -64 R1073 -64 C1015 R1001 150 R1004 1 C1015 R1047 -1 R1050 -1 C1015 R1053 -1 R1056 -1 C1015 R1059 -1 R1062 -1 C1015 R1065 -1 R1068 -1 C1015 R1071 -1 R1074 -1 C1016 R1001 300 R1004 2 C1016 R1047 -2 R1050 -2 C1016 R1053 -2 R1056 -2 C1016 R1059 -2 R1062 -2 C1016 R1065 -2 R1068 -2 C1016 R1071 -2 R1074 -2 C1017 R1001 600 R1004 4 C1017 R1047 -4 R1050 -4 C1017 R1053 -4 R1056 -4 C1017 R1059 -4 R1062 -4 C1017 R1065 -4 R1068 -4 C1017 R1071 -4 R1074 -4 C1018 R1001 1200 R1004 8 C1018 R1047 -8 R1050 -8 C1018 R1053 -8 R1056 -8 C1018 R1059 -8 R1062 -8 C1018 R1065 -8 R1068 -8 C1018 R1071 -8 R1074 -8 C1019 R1001 2400 R1004 16 C1019 R1047 -16 R1050 -16 C1019 R1053 -16 R1056 -16 C1019 R1059 -16 R1062 -16 C1019 R1065 -16 R1068 -16 C1019 R1071 -16 R1074 -16 C1020 R1001 4800 R1004 32 C1020 R1047 -32 R1050 -32 C1020 R1053 -32 R1056 -32 C1020 R1059 -32 R1062 -32 C1020 R1065 -32 R1068 -32 C1020 R1071 -32 R1074 -32 C1021 R1001 9600 R1004 64 C1021 R1047 -64 R1050 -64 C1021 R1053 -64 R1056 -64 C1021 R1059 -64 R1062 -64 C1021 R1065 -64 R1068 -64 C1021 R1071 -64 R1074 -64 C1022 R1001 500 R1005 1 C1022 R1006 -1 R1045 -10 C1022 R1048 -10 R1051 -10 C1022 R1054 -10 R1057 -10 C1022 R1060 -10 R1063 -10 C1022 R1066 -10 R1069 -10 C1022 R1072 -10 R1075 1 C1022 R1081 -1 C1023 R1001 560 R1005 1 C1023 R1006 -1 R1045 -10 C1023 R1048 -10 R1051 -10 C1023 R1054 -10 R1057 -10 C1023 R1060 -10 R1063 -10 C1023 R1066 -10 R1069 -10 C1023 R1072 -10 R1076 1 C1023 R1081 -1 C1024 R1001 600 R1005 1 C1024 R1006 -1 R1045 -10 C1024 R1048 -10 R1051 -10 C1024 R1054 -10 R1057 -10 C1024 R1060 -10 R1063 -10 C1024 R1066 -10 R1069 -10 C1024 R1072 -10 R1077 1 C1024 R1081 -1 C1025 R1001 560 R1005 1 C1025 R1006 -1 R1046 -10 C1025 R1049 -10 R1052 -10 C1025 R1055 -10 R1058 -10 C1025 R1061 -10 R1064 -10 C1025 R1067 -10 R1070 -10 C1025 R1073 -10 R1075 1 C1025 R1082 -1 C1026 R1001 500 R1005 1 C1026 R1006 -1 R1046 -10 C1026 R1049 -10 R1052 -10 C1026 R1055 -10 R1058 -10 C1026 R1061 -10 R1064 -10 C1026 R1067 -10 R1070 -10 C1026 R1073 -10 R1076 1 C1026 R1082 -1 C1027 R1001 600 R1005 1 C1027 R1006 -1 R1046 -10 C1027 R1049 -10 R1052 -10 C1027 R1055 -10 R1058 -10 C1027 R1061 -10 R1064 -10 C1027 R1067 -10 R1070 -10 C1027 R1073 -10 R1077 1 C1027 R1082 -1 C1028 R1001 850 R1005 1 C1028 R1006 -1 R1047 -5 C1028 R1050 -5 R1053 -5 C1028 R1056 -5 R1059 -5 C1028 R1062 -5 R1065 -5 C1028 R1068 -5 R1071 -5 C1028 R1074 -5 R1075 1 C1028 R1083 -1 C1029 R1001 850 R1005 1 C1029 R1006 -1 R1047 -5 C1029 R1050 -5 R1053 -5 C1029 R1056 -5 R1059 -5 C1029 R1062 -5 R1065 -5 C1029 R1068 -5 R1071 -5 C1029 R1074 -5 R1076 1 C1029 R1083 -1 C1030 R1001 750 R1005 1 C1030 R1006 -1 R1047 -5 C1030 R1050 -5 R1053 -5 C1030 R1056 -5 R1059 -5 C1030 R1062 -5 R1065 -5 C1030 R1068 -5 R1071 -5 C1030 R1074 -5 R1077 1 C1030 R1083 -1 C1031 R1001 500 R1007 1 C1031 R1008 -1 R1045 -10 C1031 R1048 -10 R1051 -10 C1031 R1054 -10 R1057 -10 C1031 R1060 -10 R1063 -10 C1031 R1066 -10 R1069 -10 C1031 R1072 -10 R1078 1 C1031 R1084 -1 C1032 R1001 560 R1007 1 C1032 R1008 -1 R1045 -10 C1032 R1048 -10 R1051 -10 C1032 R1054 -10 R1057 -10 C1032 R1060 -10 R1063 -10 C1032 R1066 -10 R1069 -10 C1032 R1072 -10 R1079 1 C1032 R1084 -1 C1033 R1001 600 R1007 1 C1033 R1008 -1 R1045 -10 C1033 R1048 -10 R1051 -10 C1033 R1054 -10 R1057 -10 C1033 R1060 -10 R1063 -10 C1033 R1066 -10 R1069 -10 C1033 R1072 -10 R1080 1 C1033 R1084 -1 C1034 R1001 560 R1007 1 C1034 R1008 -1 R1046 -10 C1034 R1049 -10 R1052 -10 C1034 R1055 -10 R1058 -10 C1034 R1061 -10 R1064 -10 C1034 R1067 -10 R1070 -10 C1034 R1073 -10 R1078 1 C1034 R1085 -1 C1035 R1001 500 R1007 1 C1035 R1008 -1 R1046 -10 C1035 R1049 -10 R1052 -10 C1035 R1055 -10 R1058 -10 C1035 R1061 -10 R1064 -10 C1035 R1067 -10 R1070 -10 C1035 R1073 -10 R1079 1 C1035 R1085 -1 C1036 R1001 600 R1007 1 C1036 R1008 -1 R1046 -10 C1036 R1049 -10 R1052 -10 C1036 R1055 -10 R1058 -10 C1036 R1061 -10 R1064 -10 C1036 R1067 -10 R1070 -10 C1036 R1073 -10 R1080 1 C1036 R1085 -1 C1037 R1001 850 R1007 1 C1037 R1008 -1 R1047 -5 C1037 R1050 -5 R1053 -5 C1037 R1056 -5 R1059 -5 C1037 R1062 -5 R1065 -5 C1037 R1068 -5 R1071 -5 C1037 R1074 -5 R1078 1 C1037 R1086 -1 C1038 R1001 850 R1007 1 C1038 R1008 -1 R1047 -5 C1038 R1050 -5 R1053 -5 C1038 R1056 -5 R1059 -5 C1038 R1062 -5 R1065 -5 C1038 R1068 -5 R1071 -5 C1038 R1074 -5 R1079 1 C1038 R1086 -1 C1039 R1001 750 R1007 1 C1039 R1008 -1 R1047 -5 C1039 R1050 -5 R1053 -5 C1039 R1056 -5 R1059 -5 C1039 R1062 -5 R1065 -5 C1039 R1068 -5 R1071 -5 C1039 R1074 -5 R1080 1 C1039 R1086 -1 C1040 R1001 450 R1009 1 C1040 R1010 -1 R1048 -10 C1040 R1051 -10 R1054 -10 C1040 R1057 -10 R1060 -10 C1040 R1063 -10 R1066 -10 C1040 R1069 -10 R1072 -10 C1040 R1081 1 R1087 -1 C1041 R1001 510 R1009 1 C1041 R1010 -1 R1048 -10 C1041 R1051 -10 R1054 -10 C1041 R1057 -10 R1060 -10 C1041 R1063 -10 R1066 -10 C1041 R1069 -10 R1072 -10 C1041 R1082 1 R1087 -1 C1042 R1001 550 R1009 1 C1042 R1010 -1 R1048 -10 C1042 R1051 -10 R1054 -10 C1042 R1057 -10 R1060 -10 C1042 R1063 -10 R1066 -10 C1042 R1069 -10 R1072 -10 C1042 R1083 1 R1087 -1 C1043 R1001 510 R1009 1 C1043 R1010 -1 R1049 -10 C1043 R1052 -10 R1055 -10 C1043 R1058 -10 R1061 -10 C1043 R1064 -10 R1067 -10 C1043 R1070 -10 R1073 -10 C1043 R1081 1 R1088 -1 C1044 R1001 450 R1009 1 C1044 R1010 -1 R1049 -10 C1044 R1052 -10 R1055 -10 C1044 R1058 -10 R1061 -10 C1044 R1064 -10 R1067 -10 C1044 R1070 -10 R1073 -10 C1044 R1082 1 R1088 -1 C1045 R1001 550 R1009 1 C1045 R1010 -1 R1049 -10 C1045 R1052 -10 R1055 -10 C1045 R1058 -10 R1061 -10 C1045 R1064 -10 R1067 -10 C1045 R1070 -10 R1073 -10 C1045 R1083 1 R1088 -1 C1046 R1001 775 R1009 1 C1046 R1010 -1 R1050 -5 C1046 R1053 -5 R1056 -5 C1046 R1059 -5 R1062 -5 C1046 R1065 -5 R1068 -5 C1046 R1071 -5 R1074 -5 C1046 R1081 1 R1089 -1 C1047 R1001 775 R1009 1 C1047 R1010 -1 R1050 -5 C1047 R1053 -5 R1056 -5 C1047 R1059 -5 R1062 -5 C1047 R1065 -5 R1068 -5 C1047 R1071 -5 R1074 -5 C1047 R1082 1 R1089 -1 C1048 R1001 675 R1009 1 C1048 R1010 -1 R1050 -5 C1048 R1053 -5 R1056 -5 C1048 R1059 -5 R1062 -5 C1048 R1065 -5 R1068 -5 C1048 R1071 -5 R1074 -5 C1048 R1083 1 R1089 -1 C1049 R1001 450 R1011 1 C1049 R1012 -1 R1048 -10 C1049 R1051 -10 R1054 -10 C1049 R1057 -10 R1060 -10 C1049 R1063 -10 R1066 -10 C1049 R1069 -10 R1072 -10 C1049 R1084 1 R1090 -1 C1050 R1001 510 R1011 1 C1050 R1012 -1 R1048 -10 C1050 R1051 -10 R1054 -10 C1050 R1057 -10 R1060 -10 C1050 R1063 -10 R1066 -10 C1050 R1069 -10 R1072 -10 C1050 R1085 1 R1090 -1 C1051 R1001 550 R1011 1 C1051 R1012 -1 R1048 -10 C1051 R1051 -10 R1054 -10 C1051 R1057 -10 R1060 -10 C1051 R1063 -10 R1066 -10 C1051 R1069 -10 R1072 -10 C1051 R1086 1 R1090 -1 C1052 R1001 510 R1011 1 C1052 R1012 -1 R1049 -10 C1052 R1052 -10 R1055 -10 C1052 R1058 -10 R1061 -10 C1052 R1064 -10 R1067 -10 C1052 R1070 -10 R1073 -10 C1052 R1084 1 R1091 -1 C1053 R1001 450 R1011 1 C1053 R1012 -1 R1049 -10 C1053 R1052 -10 R1055 -10 C1053 R1058 -10 R1061 -10 C1053 R1064 -10 R1067 -10 C1053 R1070 -10 R1073 -10 C1053 R1085 1 R1091 -1 C1054 R1001 550 R1011 1 C1054 R1012 -1 R1049 -10 C1054 R1052 -10 R1055 -10 C1054 R1058 -10 R1061 -10 C1054 R1064 -10 R1067 -10 C1054 R1070 -10 R1073 -10 C1054 R1086 1 R1091 -1 C1055 R1001 775 R1011 1 C1055 R1012 -1 R1050 -5 C1055 R1053 -5 R1056 -5 C1055 R1059 -5 R1062 -5 C1055 R1065 -5 R1068 -5 C1055 R1071 -5 R1074 -5 C1055 R1084 1 R1092 -1 C1056 R1001 775 R1011 1 C1056 R1012 -1 R1050 -5 C1056 R1053 -5 R1056 -5 C1056 R1059 -5 R1062 -5 C1056 R1065 -5 R1068 -5 C1056 R1071 -5 R1074 -5 C1056 R1085 1 R1092 -1 C1057 R1001 675 R1011 1 C1057 R1012 -1 R1050 -5 C1057 R1053 -5 R1056 -5 C1057 R1059 -5 R1062 -5 C1057 R1065 -5 R1068 -5 C1057 R1071 -5 R1074 -5 C1057 R1086 1 R1092 -1 C1058 R1001 400 R1013 1 C1058 R1014 -1 R1051 -10 C1058 R1054 -10 R1057 -10 C1058 R1060 -10 R1063 -10 C1058 R1066 -10 R1069 -10 C1058 R1072 -10 R1087 1 C1058 R1093 -1 C1059 R1001 460 R1013 1 C1059 R1014 -1 R1051 -10 C1059 R1054 -10 R1057 -10 C1059 R1060 -10 R1063 -10 C1059 R1066 -10 R1069 -10 C1059 R1072 -10 R1088 1 C1059 R1093 -1 C1060 R1001 500 R1013 1 C1060 R1014 -1 R1051 -10 C1060 R1054 -10 R1057 -10 C1060 R1060 -10 R1063 -10 C1060 R1066 -10 R1069 -10 C1060 R1072 -10 R1089 1 C1060 R1093 -1 C1061 R1001 460 R1013 1 C1061 R1014 -1 R1052 -10 C1061 R1055 -10 R1058 -10 C1061 R1061 -10 R1064 -10 C1061 R1067 -10 R1070 -10 C1061 R1073 -10 R1087 1 C1061 R1094 -1 C1062 R1001 400 R1013 1 C1062 R1014 -1 R1052 -10 C1062 R1055 -10 R1058 -10 C1062 R1061 -10 R1064 -10 C1062 R1067 -10 R1070 -10 C1062 R1073 -10 R1088 1 C1062 R1094 -1 C1063 R1001 500 R1013 1 C1063 R1014 -1 R1052 -10 C1063 R1055 -10 R1058 -10 C1063 R1061 -10 R1064 -10 C1063 R1067 -10 R1070 -10 C1063 R1073 -10 R1089 1 C1063 R1094 -1 C1064 R1001 700 R1013 1 C1064 R1014 -1 R1053 -5 C1064 R1056 -5 R1059 -5 C1064 R1062 -5 R1065 -5 C1064 R1068 -5 R1071 -5 C1064 R1074 -5 R1087 1 C1064 R1095 -1 C1065 R1001 700 R1013 1 C1065 R1014 -1 R1053 -5 C1065 R1056 -5 R1059 -5 C1065 R1062 -5 R1065 -5 C1065 R1068 -5 R1071 -5 C1065 R1074 -5 R1088 1 C1065 R1095 -1 C1066 R1001 600 R1013 1 C1066 R1014 -1 R1053 -5 C1066 R1056 -5 R1059 -5 C1066 R1062 -5 R1065 -5 C1066 R1068 -5 R1071 -5 C1066 R1074 -5 R1089 1 C1066 R1095 -1 C1067 R1001 400 R1015 1 C1067 R1016 -1 R1051 -10 C1067 R1054 -10 R1057 -10 C1067 R1060 -10 R1063 -10 C1067 R1066 -10 R1069 -10 C1067 R1072 -10 R1090 1 C1067 R1096 -1 C1068 R1001 460 R1015 1 C1068 R1016 -1 R1051 -10 C1068 R1054 -10 R1057 -10 C1068 R1060 -10 R1063 -10 C1068 R1066 -10 R1069 -10 C1068 R1072 -10 R1091 1 C1068 R1096 -1 C1069 R1001 500 R1015 1 C1069 R1016 -1 R1051 -10 C1069 R1054 -10 R1057 -10 C1069 R1060 -10 R1063 -10 C1069 R1066 -10 R1069 -10 C1069 R1072 -10 R1092 1 C1069 R1096 -1 C1070 R1001 460 R1015 1 C1070 R1016 -1 R1052 -10 C1070 R1055 -10 R1058 -10 C1070 R1061 -10 R1064 -10 C1070 R1067 -10 R1070 -10 C1070 R1073 -10 R1090 1 C1070 R1097 -1 C1071 R1001 400 R1015 1 C1071 R1016 -1 R1052 -10 C1071 R1055 -10 R1058 -10 C1071 R1061 -10 R1064 -10 C1071 R1067 -10 R1070 -10 C1071 R1073 -10 R1091 1 C1071 R1097 -1 C1072 R1001 500 R1015 1 C1072 R1016 -1 R1052 -10 C1072 R1055 -10 R1058 -10 C1072 R1061 -10 R1064 -10 C1072 R1067 -10 R1070 -10 C1072 R1073 -10 R1092 1 C1072 R1097 -1 C1073 R1001 700 R1015 1 C1073 R1016 -1 R1053 -5 C1073 R1056 -5 R1059 -5 C1073 R1062 -5 R1065 -5 C1073 R1068 -5 R1071 -5 C1073 R1074 -5 R1090 1 C1073 R1098 -1 C1074 R1001 700 R1015 1 C1074 R1016 -1 R1053 -5 C1074 R1056 -5 R1059 -5 C1074 R1062 -5 R1065 -5 C1074 R1068 -5 R1071 -5 C1074 R1074 -5 R1091 1 C1074 R1098 -1 C1075 R1001 600 R1015 1 C1075 R1016 -1 R1053 -5 C1075 R1056 -5 R1059 -5 C1075 R1062 -5 R1065 -5 C1075 R1068 -5 R1071 -5 C1075 R1074 -5 R1092 1 C1075 R1098 -1 C1076 R1001 350 R1017 1 C1076 R1018 -1 R1054 -10 C1076 R1057 -10 R1060 -10 C1076 R1063 -10 R1066 -10 C1076 R1069 -10 R1072 -10 C1076 R1093 1 R1099 -1 C1077 R1001 410 R1017 1 C1077 R1018 -1 R1054 -10 C1077 R1057 -10 R1060 -10 C1077 R1063 -10 R1066 -10 C1077 R1069 -10 R1072 -10 C1077 R1094 1 R1099 -1 C1078 R1001 450 R1017 1 C1078 R1018 -1 R1054 -10 C1078 R1057 -10 R1060 -10 C1078 R1063 -10 R1066 -10 C1078 R1069 -10 R1072 -10 C1078 R1095 1 R1099 -1 C1079 R1001 410 R1017 1 C1079 R1018 -1 R1055 -10 C1079 R1058 -10 R1061 -10 C1079 R1064 -10 R1067 -10 C1079 R1070 -10 R1073 -10 C1079 R1093 1 R1100 -1 C1080 R1001 350 R1017 1 C1080 R1018 -1 R1055 -10 C1080 R1058 -10 R1061 -10 C1080 R1064 -10 R1067 -10 C1080 R1070 -10 R1073 -10 C1080 R1094 1 R1100 -1 C1081 R1001 450 R1017 1 C1081 R1018 -1 R1055 -10 C1081 R1058 -10 R1061 -10 C1081 R1064 -10 R1067 -10 C1081 R1070 -10 R1073 -10 C1081 R1095 1 R1100 -1 C1082 R1001 625 R1017 1 C1082 R1018 -1 R1056 -5 C1082 R1059 -5 R1062 -5 C1082 R1065 -5 R1068 -5 C1082 R1071 -5 R1074 -5 C1082 R1093 1 R1101 -1 C1083 R1001 625 R1017 1 C1083 R1018 -1 R1056 -5 C1083 R1059 -5 R1062 -5 C1083 R1065 -5 R1068 -5 C1083 R1071 -5 R1074 -5 C1083 R1094 1 R1101 -1 C1084 R1001 525 R1017 1 C1084 R1018 -1 R1056 -5 C1084 R1059 -5 R1062 -5 C1084 R1065 -5 R1068 -5 C1084 R1071 -5 R1074 -5 C1084 R1095 1 R1101 -1 C1085 R1001 350 R1019 1 C1085 R1020 -1 R1054 -10 C1085 R1057 -10 R1060 -10 C1085 R1063 -10 R1066 -10 C1085 R1069 -10 R1072 -10 C1085 R1096 1 R1102 -1 C1086 R1001 410 R1019 1 C1086 R1020 -1 R1054 -10 C1086 R1057 -10 R1060 -10 C1086 R1063 -10 R1066 -10 C1086 R1069 -10 R1072 -10 C1086 R1097 1 R1102 -1 C1087 R1001 450 R1019 1 C1087 R1020 -1 R1054 -10 C1087 R1057 -10 R1060 -10 C1087 R1063 -10 R1066 -10 C1087 R1069 -10 R1072 -10 C1087 R1098 1 R1102 -1 C1088 R1001 410 R1019 1 C1088 R1020 -1 R1055 -10 C1088 R1058 -10 R1061 -10 C1088 R1064 -10 R1067 -10 C1088 R1070 -10 R1073 -10 C1088 R1096 1 R1103 -1 C1089 R1001 350 R1019 1 C1089 R1020 -1 R1055 -10 C1089 R1058 -10 R1061 -10 C1089 R1064 -10 R1067 -10 C1089 R1070 -10 R1073 -10 C1089 R1097 1 R1103 -1 C1090 R1001 450 R1019 1 C1090 R1020 -1 R1055 -10 C1090 R1058 -10 R1061 -10 C1090 R1064 -10 R1067 -10 C1090 R1070 -10 R1073 -10 C1090 R1098 1 R1103 -1 C1091 R1001 625 R1019 1 C1091 R1020 -1 R1056 -5 C1091 R1059 -5 R1062 -5 C1091 R1065 -5 R1068 -5 C1091 R1071 -5 R1074 -5 C1091 R1096 1 R1104 -1 C1092 R1001 625 R1019 1 C1092 R1020 -1 R1056 -5 C1092 R1059 -5 R1062 -5 C1092 R1065 -5 R1068 -5 C1092 R1071 -5 R1074 -5 C1092 R1097 1 R1104 -1 C1093 R1001 525 R1019 1 C1093 R1020 -1 R1056 -5 C1093 R1059 -5 R1062 -5 C1093 R1065 -5 R1068 -5 C1093 R1071 -5 R1074 -5 C1093 R1098 1 R1104 -1 C1094 R1001 300 R1021 1 C1094 R1022 -1 R1057 -10 C1094 R1060 -10 R1063 -10 C1094 R1066 -10 R1069 -10 C1094 R1072 -10 R1099 1 C1094 R1105 -1 C1095 R1001 360 R1021 1 C1095 R1022 -1 R1057 -10 C1095 R1060 -10 R1063 -10 C1095 R1066 -10 R1069 -10 C1095 R1072 -10 R1100 1 C1095 R1105 -1 C1096 R1001 400 R1021 1 C1096 R1022 -1 R1057 -10 C1096 R1060 -10 R1063 -10 C1096 R1066 -10 R1069 -10 C1096 R1072 -10 R1101 1 C1096 R1105 -1 C1097 R1001 360 R1021 1 C1097 R1022 -1 R1058 -10 C1097 R1061 -10 R1064 -10 C1097 R1067 -10 R1070 -10 C1097 R1073 -10 R1099 1 C1097 R1106 -1 C1098 R1001 300 R1021 1 C1098 R1022 -1 R1058 -10 C1098 R1061 -10 R1064 -10 C1098 R1067 -10 R1070 -10 C1098 R1073 -10 R1100 1 C1098 R1106 -1 C1099 R1001 400 R1021 1 C1099 R1022 -1 R1058 -10 C1099 R1061 -10 R1064 -10 C1099 R1067 -10 R1070 -10 C1099 R1073 -10 R1101 1 C1099 R1106 -1 C1100 R1001 550 R1021 1 C1100 R1022 -1 R1059 -5 C1100 R1062 -5 R1065 -5 C1100 R1068 -5 R1071 -5 C1100 R1074 -5 R1099 1 C1100 R1107 -1 C1101 R1001 550 R1021 1 C1101 R1022 -1 R1059 -5 C1101 R1062 -5 R1065 -5 C1101 R1068 -5 R1071 -5 C1101 R1074 -5 R1100 1 C1101 R1107 -1 C1102 R1001 450 R1021 1 C1102 R1022 -1 R1059 -5 C1102 R1062 -5 R1065 -5 C1102 R1068 -5 R1071 -5 C1102 R1074 -5 R1101 1 C1102 R1107 -1 C1103 R1001 300 R1023 1 C1103 R1024 -1 R1057 -10 C1103 R1060 -10 R1063 -10 C1103 R1066 -10 R1069 -10 C1103 R1072 -10 R1102 1 C1103 R1108 -1 C1104 R1001 360 R1023 1 C1104 R1024 -1 R1057 -10 C1104 R1060 -10 R1063 -10 C1104 R1066 -10 R1069 -10 C1104 R1072 -10 R1103 1 C1104 R1108 -1 C1105 R1001 400 R1023 1 C1105 R1024 -1 R1057 -10 C1105 R1060 -10 R1063 -10 C1105 R1066 -10 R1069 -10 C1105 R1072 -10 R1104 1 C1105 R1108 -1 C1106 R1001 360 R1023 1 C1106 R1024 -1 R1058 -10 C1106 R1061 -10 R1064 -10 C1106 R1067 -10 R1070 -10 C1106 R1073 -10 R1102 1 C1106 R1109 -1 C1107 R1001 300 R1023 1 C1107 R1024 -1 R1058 -10 C1107 R1061 -10 R1064 -10 C1107 R1067 -10 R1070 -10 C1107 R1073 -10 R1103 1 C1107 R1109 -1 C1108 R1001 400 R1023 1 C1108 R1024 -1 R1058 -10 C1108 R1061 -10 R1064 -10 C1108 R1067 -10 R1070 -10 C1108 R1073 -10 R1104 1 C1108 R1109 -1 C1109 R1001 550 R1023 1 C1109 R1024 -1 R1059 -5 C1109 R1062 -5 R1065 -5 C1109 R1068 -5 R1071 -5 C1109 R1074 -5 R1102 1 C1109 R1110 -1 C1110 R1001 550 R1023 1 C1110 R1024 -1 R1059 -5 C1110 R1062 -5 R1065 -5 C1110 R1068 -5 R1071 -5 C1110 R1074 -5 R1103 1 C1110 R1110 -1 C1111 R1001 450 R1023 1 C1111 R1024 -1 R1059 -5 C1111 R1062 -5 R1065 -5 C1111 R1068 -5 R1071 -5 C1111 R1074 -5 R1104 1 C1111 R1110 -1 C1112 R1001 250 R1025 1 C1112 R1026 -1 R1060 -10 C1112 R1063 -10 R1066 -10 C1112 R1069 -10 R1072 -10 C1112 R1105 1 R1111 -1 C1113 R1001 310 R1025 1 C1113 R1026 -1 R1060 -10 C1113 R1063 -10 R1066 -10 C1113 R1069 -10 R1072 -10 C1113 R1106 1 R1111 -1 C1114 R1001 350 R1025 1 C1114 R1026 -1 R1060 -10 C1114 R1063 -10 R1066 -10 C1114 R1069 -10 R1072 -10 C1114 R1107 1 R1111 -1 C1115 R1001 310 R1025 1 C1115 R1026 -1 R1061 -10 C1115 R1064 -10 R1067 -10 C1115 R1070 -10 R1073 -10 C1115 R1105 1 R1112 -1 C1116 R1001 250 R1025 1 C1116 R1026 -1 R1061 -10 C1116 R1064 -10 R1067 -10 C1116 R1070 -10 R1073 -10 C1116 R1106 1 R1112 -1 C1117 R1001 350 R1025 1 C1117 R1026 -1 R1061 -10 C1117 R1064 -10 R1067 -10 C1117 R1070 -10 R1073 -10 C1117 R1107 1 R1112 -1 C1118 R1001 475 R1025 1 C1118 R1026 -1 R1062 -5 C1118 R1065 -5 R1068 -5 C1118 R1071 -5 R1074 -5 C1118 R1105 1 R1113 -1 C1119 R1001 475 R1025 1 C1119 R1026 -1 R1062 -5 C1119 R1065 -5 R1068 -5 C1119 R1071 -5 R1074 -5 C1119 R1106 1 R1113 -1 C1120 R1001 375 R1025 1 C1120 R1026 -1 R1062 -5 C1120 R1065 -5 R1068 -5 C1120 R1071 -5 R1074 -5 C1120 R1107 1 R1113 -1 C1121 R1001 250 R1027 1 C1121 R1028 -1 R1060 -10 C1121 R1063 -10 R1066 -10 C1121 R1069 -10 R1072 -10 C1121 R1108 1 R1114 -1 C1122 R1001 310 R1027 1 C1122 R1028 -1 R1060 -10 C1122 R1063 -10 R1066 -10 C1122 R1069 -10 R1072 -10 C1122 R1109 1 R1114 -1 C1123 R1001 350 R1027 1 C1123 R1028 -1 R1060 -10 C1123 R1063 -10 R1066 -10 C1123 R1069 -10 R1072 -10 C1123 R1110 1 R1114 -1 C1124 R1001 310 R1027 1 C1124 R1028 -1 R1061 -10 C1124 R1064 -10 R1067 -10 C1124 R1070 -10 R1073 -10 C1124 R1108 1 R1115 -1 C1125 R1001 250 R1027 1 C1125 R1028 -1 R1061 -10 C1125 R1064 -10 R1067 -10 C1125 R1070 -10 R1073 -10 C1125 R1109 1 R1115 -1 C1126 R1001 350 R1027 1 C1126 R1028 -1 R1061 -10 C1126 R1064 -10 R1067 -10 C1126 R1070 -10 R1073 -10 C1126 R1110 1 R1115 -1 C1127 R1001 475 R1027 1 C1127 R1028 -1 R1062 -5 C1127 R1065 -5 R1068 -5 C1127 R1071 -5 R1074 -5 C1127 R1108 1 R1116 -1 C1128 R1001 475 R1027 1 C1128 R1028 -1 R1062 -5 C1128 R1065 -5 R1068 -5 C1128 R1071 -5 R1074 -5 C1128 R1109 1 R1116 -1 C1129 R1001 375 R1027 1 C1129 R1028 -1 R1062 -5 C1129 R1065 -5 R1068 -5 C1129 R1071 -5 R1074 -5 C1129 R1110 1 R1116 -1 C1130 R1001 200 R1029 1 C1130 R1030 -1 R1063 -10 C1130 R1066 -10 R1069 -10 C1130 R1072 -10 R1111 1 C1130 R1117 -1 C1131 R1001 260 R1029 1 C1131 R1030 -1 R1063 -10 C1131 R1066 -10 R1069 -10 C1131 R1072 -10 R1112 1 C1131 R1117 -1 C1132 R1001 300 R1029 1 C1132 R1030 -1 R1063 -10 C1132 R1066 -10 R1069 -10 C1132 R1072 -10 R1113 1 C1132 R1117 -1 C1133 R1001 260 R1029 1 C1133 R1030 -1 R1064 -10 C1133 R1067 -10 R1070 -10 C1133 R1073 -10 R1111 1 C1133 R1118 -1 C1134 R1001 200 R1029 1 C1134 R1030 -1 R1064 -10 C1134 R1067 -10 R1070 -10 C1134 R1073 -10 R1112 1 C1134 R1118 -1 C1135 R1001 300 R1029 1 C1135 R1030 -1 R1064 -10 C1135 R1067 -10 R1070 -10 C1135 R1073 -10 R1113 1 C1135 R1118 -1 C1136 R1001 400 R1029 1 C1136 R1030 -1 R1065 -5 C1136 R1068 -5 R1071 -5 C1136 R1074 -5 R1111 1 C1136 R1119 -1 C1137 R1001 400 R1029 1 C1137 R1030 -1 R1065 -5 C1137 R1068 -5 R1071 -5 C1137 R1074 -5 R1112 1 C1137 R1119 -1 C1138 R1001 300 R1029 1 C1138 R1030 -1 R1065 -5 C1138 R1068 -5 R1071 -5 C1138 R1074 -5 R1113 1 C1138 R1119 -1 C1139 R1001 200 R1031 1 C1139 R1032 -1 R1063 -10 C1139 R1066 -10 R1069 -10 C1139 R1072 -10 R1114 1 C1139 R1120 -1 C1140 R1001 260 R1031 1 C1140 R1032 -1 R1063 -10 C1140 R1066 -10 R1069 -10 C1140 R1072 -10 R1115 1 C1140 R1120 -1 C1141 R1001 300 R1031 1 C1141 R1032 -1 R1063 -10 C1141 R1066 -10 R1069 -10 C1141 R1072 -10 R1116 1 C1141 R1120 -1 C1142 R1001 260 R1031 1 C1142 R1032 -1 R1064 -10 C1142 R1067 -10 R1070 -10 C1142 R1073 -10 R1114 1 C1142 R1121 -1 C1143 R1001 200 R1031 1 C1143 R1032 -1 R1064 -10 C1143 R1067 -10 R1070 -10 C1143 R1073 -10 R1115 1 C1143 R1121 -1 C1144 R1001 300 R1031 1 C1144 R1032 -1 R1064 -10 C1144 R1067 -10 R1070 -10 C1144 R1073 -10 R1116 1 C1144 R1121 -1 C1145 R1001 400 R1031 1 C1145 R1032 -1 R1065 -5 C1145 R1068 -5 R1071 -5 C1145 R1074 -5 R1114 1 C1145 R1122 -1 C1146 R1001 400 R1031 1 C1146 R1032 -1 R1065 -5 C1146 R1068 -5 R1071 -5 C1146 R1074 -5 R1115 1 C1146 R1122 -1 C1147 R1001 300 R1031 1 C1147 R1032 -1 R1065 -5 C1147 R1068 -5 R1071 -5 C1147 R1074 -5 R1116 1 C1147 R1122 -1 C1148 R1001 150 R1033 1 C1148 R1034 -1 R1066 -10 C1148 R1069 -10 R1072 -10 C1148 R1117 1 R1123 -1 C1149 R1001 210 R1033 1 C1149 R1034 -1 R1066 -10 C1149 R1069 -10 R1072 -10 C1149 R1118 1 R1123 -1 C1150 R1001 250 R1033 1 C1150 R1034 -1 R1066 -10 C1150 R1069 -10 R1072 -10 C1150 R1119 1 R1123 -1 C1151 R1001 210 R1033 1 C1151 R1034 -1 R1067 -10 C1151 R1070 -10 R1073 -10 C1151 R1117 1 R1124 -1 C1152 R1001 150 R1033 1 C1152 R1034 -1 R1067 -10 C1152 R1070 -10 R1073 -10 C1152 R1118 1 R1124 -1 C1153 R1001 250 R1033 1 C1153 R1034 -1 R1067 -10 C1153 R1070 -10 R1073 -10 C1153 R1119 1 R1124 -1 C1154 R1001 325 R1033 1 C1154 R1034 -1 R1068 -5 C1154 R1071 -5 R1074 -5 C1154 R1117 1 R1125 -1 C1155 R1001 325 R1033 1 C1155 R1034 -1 R1068 -5 C1155 R1071 -5 R1074 -5 C1155 R1118 1 R1125 -1 C1156 R1001 225 R1033 1 C1156 R1034 -1 R1068 -5 C1156 R1071 -5 R1074 -5 C1156 R1119 1 R1125 -1 C1157 R1001 150 R1035 1 C1157 R1036 -1 R1066 -10 C1157 R1069 -10 R1072 -10 C1157 R1120 1 R1126 -1 C1158 R1001 210 R1035 1 C1158 R1036 -1 R1066 -10 C1158 R1069 -10 R1072 -10 C1158 R1121 1 R1126 -1 C1159 R1001 250 R1035 1 C1159 R1036 -1 R1066 -10 C1159 R1069 -10 R1072 -10 C1159 R1122 1 R1126 -1 C1160 R1001 210 R1035 1 C1160 R1036 -1 R1067 -10 C1160 R1070 -10 R1073 -10 C1160 R1120 1 R1127 -1 C1161 R1001 150 R1035 1 C1161 R1036 -1 R1067 -10 C1161 R1070 -10 R1073 -10 C1161 R1121 1 R1127 -1 C1162 R1001 250 R1035 1 C1162 R1036 -1 R1067 -10 C1162 R1070 -10 R1073 -10 C1162 R1122 1 R1127 -1 C1163 R1001 325 R1035 1 C1163 R1036 -1 R1068 -5 C1163 R1071 -5 R1074 -5 C1163 R1120 1 R1128 -1 C1164 R1001 325 R1035 1 C1164 R1036 -1 R1068 -5 C1164 R1071 -5 R1074 -5 C1164 R1121 1 R1128 -1 C1165 R1001 225 R1035 1 C1165 R1036 -1 R1068 -5 C1165 R1071 -5 R1074 -5 C1165 R1122 1 R1128 -1 C1166 R1001 100 R1037 1 C1166 R1038 -1 R1069 -10 C1166 R1072 -10 R1123 1 C1166 R1129 -1 C1167 R1001 160 R1037 1 C1167 R1038 -1 R1069 -10 C1167 R1072 -10 R1124 1 C1167 R1129 -1 C1168 R1001 200 R1037 1 C1168 R1038 -1 R1069 -10 C1168 R1072 -10 R1125 1 C1168 R1129 -1 C1169 R1001 160 R1037 1 C1169 R1038 -1 R1070 -10 C1169 R1073 -10 R1123 1 C1169 R1130 -1 C1170 R1001 100 R1037 1 C1170 R1038 -1 R1070 -10 C1170 R1073 -10 R1124 1 C1170 R1130 -1 C1171 R1001 200 R1037 1 C1171 R1038 -1 R1070 -10 C1171 R1073 -10 R1125 1 C1171 R1130 -1 C1172 R1001 250 R1037 1 C1172 R1038 -1 R1071 -5 C1172 R1074 -5 R1123 1 C1172 R1131 -1 C1173 R1001 250 R1037 1 C1173 R1038 -1 R1071 -5 C1173 R1074 -5 R1124 1 C1173 R1131 -1 C1174 R1001 150 R1037 1 C1174 R1038 -1 R1071 -5 C1174 R1074 -5 R1125 1 C1174 R1131 -1 C1175 R1001 100 R1039 1 C1175 R1040 -1 R1069 -10 C1175 R1072 -10 R1126 1 C1175 R1132 -1 C1176 R1001 160 R1039 1 C1176 R1040 -1 R1069 -10 C1176 R1072 -10 R1127 1 C1176 R1132 -1 C1177 R1001 200 R1039 1 C1177 R1040 -1 R1069 -10 C1177 R1072 -10 R1128 1 C1177 R1132 -1 C1178 R1001 160 R1039 1 C1178 R1040 -1 R1070 -10 C1178 R1073 -10 R1126 1 C1178 R1133 -1 C1179 R1001 100 R1039 1 C1179 R1040 -1 R1070 -10 C1179 R1073 -10 R1127 1 C1179 R1133 -1 C1180 R1001 200 R1039 1 C1180 R1040 -1 R1070 -10 C1180 R1073 -10 R1128 1 C1180 R1133 -1 C1181 R1001 250 R1039 1 C1181 R1040 -1 R1071 -5 C1181 R1074 -5 R1126 1 C1181 R1134 -1 C1182 R1001 250 R1039 1 C1182 R1040 -1 R1071 -5 C1182 R1074 -5 R1127 1 C1182 R1134 -1 C1183 R1001 150 R1039 1 C1183 R1040 -1 R1071 -5 C1183 R1074 -5 R1128 1 C1183 R1134 -1 C1184 R1001 50 R1041 1 C1184 R1042 -1 R1072 -10 C1184 R1129 1 C1185 R1001 110 R1041 1 C1185 R1042 -1 R1072 -10 C1185 R1130 1 C1186 R1001 150 R1041 1 C1186 R1042 -1 R1072 -10 C1186 R1131 1 C1187 R1001 110 R1041 1 C1187 R1042 -1 R1073 -10 C1187 R1129 1 C1188 R1001 50 R1041 1 C1188 R1042 -1 R1073 -10 C1188 R1130 1 C1189 R1001 150 R1041 1 C1189 R1042 -1 R1073 -10 C1189 R1131 1 C1190 R1001 175 R1041 1 C1190 R1042 -1 R1074 -5 C1190 R1129 1 C1191 R1001 175 R1041 1 C1191 R1042 -1 R1074 -5 C1191 R1130 1 C1192 R1001 75 R1041 1 C1192 R1042 -1 R1074 -5 C1192 R1131 1 C1193 R1001 50 R1043 1 C1193 R1044 -1 R1072 -10 C1193 R1132 1 C1194 R1001 110 R1043 1 C1194 R1044 -1 R1072 -10 C1194 R1133 1 C1195 R1001 150 R1043 1 C1195 R1044 -1 R1072 -10 C1195 R1134 1 C1196 R1001 110 R1043 1 C1196 R1044 -1 R1073 -10 C1196 R1132 1 C1197 R1001 50 R1043 1 C1197 R1044 -1 R1073 -10 C1197 R1133 1 C1198 R1001 150 R1043 1 C1198 R1044 -1 R1073 -10 C1198 R1134 1 C1199 R1001 175 R1043 1 C1199 R1044 -1 R1074 -5 C1199 R1132 1 C1200 R1001 175 R1043 1 C1200 R1044 -1 R1074 -5 C1200 R1133 1 C1201 R1001 75 R1043 1 C1201 R1044 -1 R1074 -5 C1201 R1134 1 MARK0001 'MARKER' 'INTEND' RHS RHS R1002 25 R1003 25 RHS R1004 25 R1005 1 RHS R1006 -1 R1007 1 RHS R1008 -1 R1009 1 RHS R1010 -1 R1011 1 RHS R1012 -1 R1013 1 RHS R1014 -1 R1015 1 RHS R1016 -1 R1017 1 RHS R1018 -1 R1019 1 RHS R1020 -1 R1021 1 RHS R1022 -1 R1023 1 RHS R1024 -1 R1025 1 RHS R1026 -1 R1027 1 RHS R1028 -1 R1029 1 RHS R1030 -1 R1031 1 RHS R1032 -1 R1033 1 RHS R1034 -1 R1035 1 RHS R1036 -1 R1037 1 RHS R1038 -1 R1039 1 RHS R1040 -1 R1041 1 RHS R1042 -1 R1043 1 RHS R1044 -1 R1045 -5 RHS R1046 -5 R1047 -5 RHS R1048 -10 R1049 -10 RHS R1050 -10 R1051 -15 RHS R1052 -15 R1053 -15 RHS R1054 -20 R1055 -20 RHS R1056 -20 R1057 -25 RHS R1058 -25 R1059 -25 RHS R1060 -30 R1061 -30 RHS R1062 -30 R1063 -35 RHS R1064 -35 R1065 -35 RHS R1066 -40 R1067 -40 RHS R1068 -40 R1069 -45 RHS R1070 -45 R1071 -45 RHS R1072 -50 R1073 -50 RHS R1074 -50 R1075 1 RHS R1076 1 R1077 1 RHS R1078 1 R1079 1 RHS R1080 1 BOUNDS UP ONE C1001 1 UP ONE C1002 1 UP ONE C1003 1 UP ONE C1004 1 UP ONE C1005 1 UP ONE C1006 1 UP ONE C1007 1 UP ONE C1008 1 UP ONE C1009 1 UP ONE C1010 1 UP ONE C1011 1 UP ONE C1012 1 UP ONE C1013 1 UP ONE C1014 1 UP ONE C1015 1 UP ONE C1016 1 UP ONE C1017 1 UP ONE C1018 1 UP ONE C1019 1 UP ONE C1020 1 UP ONE C1021 1 UP ONE C1022 1 UP ONE C1023 1 UP ONE C1024 1 UP ONE C1025 1 UP ONE C1026 1 UP ONE C1027 1 UP ONE C1028 1 UP ONE C1029 1 UP ONE C1030 1 UP ONE C1031 1 UP ONE C1032 1 UP ONE C1033 1 UP ONE C1034 1 UP ONE C1035 1 UP ONE C1036 1 UP ONE C1037 1 UP ONE C1038 1 UP ONE C1039 1 UP ONE C1040 1 UP ONE C1041 1 UP ONE C1042 1 UP ONE C1043 1 UP ONE C1044 1 UP ONE C1045 1 UP ONE C1046 1 UP ONE C1047 1 UP ONE C1048 1 UP ONE C1049 1 UP ONE C1050 1 UP ONE C1051 1 UP ONE C1052 1 UP ONE C1053 1 UP ONE C1054 1 UP ONE C1055 1 UP ONE C1056 1 UP ONE C1057 1 UP ONE C1058 1 UP ONE C1059 1 UP ONE C1060 1 UP ONE C1061 1 UP ONE C1062 1 UP ONE C1063 1 UP ONE C1064 1 UP ONE C1065 1 UP ONE C1066 1 UP ONE C1067 1 UP ONE C1068 1 UP ONE C1069 1 UP ONE C1070 1 UP ONE C1071 1 UP ONE C1072 1 UP ONE C1073 1 UP ONE C1074 1 UP ONE C1075 1 UP ONE C1076 1 UP ONE C1077 1 UP ONE C1078 1 UP ONE C1079 1 UP ONE C1080 1 UP ONE C1081 1 UP ONE C1082 1 UP ONE C1083 1 UP ONE C1084 1 UP ONE C1085 1 UP ONE C1086 1 UP ONE C1087 1 UP ONE C1088 1 UP ONE C1089 1 UP ONE C1090 1 UP ONE C1091 1 UP ONE C1092 1 UP ONE C1093 1 UP ONE C1094 1 UP ONE C1095 1 UP ONE C1096 1 UP ONE C1097 1 UP ONE C1098 1 UP ONE C1099 1 UP ONE C1100 1 UP ONE C1101 1 UP ONE C1102 1 UP ONE C1103 1 UP ONE C1104 1 UP ONE C1105 1 UP ONE C1106 1 UP ONE C1107 1 UP ONE C1108 1 UP ONE C1109 1 UP ONE C1110 1 UP ONE C1111 1 UP ONE C1112 1 UP ONE C1113 1 UP ONE C1114 1 UP ONE C1115 1 UP ONE C1116 1 UP ONE C1117 1 UP ONE C1118 1 UP ONE C1119 1 UP ONE C1120 1 UP ONE C1121 1 UP ONE C1122 1 UP ONE C1123 1 UP ONE C1124 1 UP ONE C1125 1 UP ONE C1126 1 UP ONE C1127 1 UP ONE C1128 1 UP ONE C1129 1 UP ONE C1130 1 UP ONE C1131 1 UP ONE C1132 1 UP ONE C1133 1 UP ONE C1134 1 UP ONE C1135 1 UP ONE C1136 1 UP ONE C1137 1 UP ONE C1138 1 UP ONE C1139 1 UP ONE C1140 1 UP ONE C1141 1 UP ONE C1142 1 UP ONE C1143 1 UP ONE C1144 1 UP ONE C1145 1 UP ONE C1146 1 UP ONE C1147 1 UP ONE C1148 1 UP ONE C1149 1 UP ONE C1150 1 UP ONE C1151 1 UP ONE C1152 1 UP ONE C1153 1 UP ONE C1154 1 UP ONE C1155 1 UP ONE C1156 1 UP ONE C1157 1 UP ONE C1158 1 UP ONE C1159 1 UP ONE C1160 1 UP ONE C1161 1 UP ONE C1162 1 UP ONE C1163 1 UP ONE C1164 1 UP ONE C1165 1 UP ONE C1166 1 UP ONE C1167 1 UP ONE C1168 1 UP ONE C1169 1 UP ONE C1170 1 UP ONE C1171 1 UP ONE C1172 1 UP ONE C1173 1 UP ONE C1174 1 UP ONE C1175 1 UP ONE C1176 1 UP ONE C1177 1 UP ONE C1178 1 UP ONE C1179 1 UP ONE C1180 1 UP ONE C1181 1 UP ONE C1182 1 UP ONE C1183 1 UP ONE C1184 1 UP ONE C1185 1 UP ONE C1186 1 UP ONE C1187 1 UP ONE C1188 1 UP ONE C1189 1 UP ONE C1190 1 UP ONE C1191 1 UP ONE C1192 1 UP ONE C1193 1 UP ONE C1194 1 UP ONE C1195 1 UP ONE C1196 1 UP ONE C1197 1 UP ONE C1198 1 UP ONE C1199 1 UP ONE C1200 1 UP ONE C1201 1 ENDATA Vol-1.5.4/Data/Sample/app0110.time0000755000175000017500000000075411015552002015347 0ustar sudipsudipTIME APP PERIODS LP X00101 K01 ROOT I00102 D00102 STAGE-2 I00103 D00103 STAGE-3 ENDATA Vol-1.5.4/Data/Sample/depcomp0000755000175000017500000003710011405216230014755 0ustar sudipsudip#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/Data/Sample/missing0000755000175000017500000002540611405216230015005 0ustar sudipsudip#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/Data/Sample/install-sh0000755000175000017500000002202111405216230015400 0ustar sudipsudip#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # 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 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/Data/Sample/exmip1.mps0000644000175000017500000001304610430174061015331 0ustar sudipsudip************************************************************************ * * The data in this file represents the following problem: * * Minimize or maximize Z = x1 + 2x5 - x8 * * Subject to: * * 2.5 <= 3x1 + x2 - 2x4 - x5 - x8 * 2x2 + 1.1x3 <= 2.1 * x3 + x6 = 4.0 * 1.8 <= 2.8x4 -1.2x7 <= 5.0 * 3.0 <= 5.6x1 + x5 + 1.9x8 <= 15.0 * * where: * * 2.5 <= x1 * 0 <= x2 <= 4.1 * 0 <= x3 * 0 <= x4 * 0.5 <= x5 <= 4.0 * 0 <= x6 * 0 <= x7 * 0 <= x8 <= 4.3 * * x3, x4 are 0,1 variables. * ************************************************************************ NAME EXAMPLE ROWS N OBJ G ROW01 L ROW02 E ROW03 G ROW04 L ROW05 COLUMNS COL01 OBJ 1.0 COL01 ROW01 3.0 ROW05 5.6 COL02 ROW01 1.0 ROW02 2.0 * * Mark COL03 and COL04 as integer variables. * INT1 'MARKER' 'INTORG' COL03 ROW02 1.1 ROW03 1.0 COL04 ROW01 -2.0 ROW04 2.8 INT1END 'MARKER' 'INTEND' * COL05 OBJ 2.0 COL05 ROW01 -1.0 ROW05 1.0 COL06 ROW03 1.0 COL07 ROW04 -1.2 COL08 OBJ -1.0 COL08 ROW01 -1.0 ROW05 1.9 RHS RHS1 ROW01 2.5 RHS1 ROW02 2.1 RHS1 ROW03 4.0 RHS1 ROW04 1.8 RHS1 ROW05 15.0 RANGES RNG1 ROW04 3.2 RNG1 ROW05 12.0 BOUNDS LO BND1 COL01 2.5 UP BND1 COL02 4.1 LO BND1 COL05 0.5 UP BND1 COL05 4.0 UP BND1 COL08 4.3 ENDATA Vol-1.5.4/Data/Sample/hello.mps0000644000175000017500000003024210662211140015223 0ustar sudipsudipNAME Hello ROWS N OBJROW L R0000000 L R0000001 L R0000002 L R0000003 L R0000004 L R0000005 L R0000006 L R0000007 L R0000008 L R0000009 L R0000010 L R0000011 L R0000012 L R0000013 L R0000014 L R0000015 L R0000016 L R0000017 L R0000018 L R0000019 L R0000020 COLUMNS C0000000 OBJROW 1. R0000000 1. C0000000 R0000001 1. R0000002 1. C0000000 R0000003 1. R0000004 1. C0000000 R0000005 1. R0000006 1. C0000000 R0000007 1. R0000008 1. C0000000 R0000011 1. R0000012 1. C0000000 R0000013 1. R0000014 1. C0000000 R0000015 1. R0000016 1. C0000000 R0000017 1. C0000001 OBJROW 1. R0000004 1. C0000001 R0000018 1. C0000002 OBJROW 1. R0000004 1. C0000002 R0000019 1. C0000003 OBJROW 1. R0000004 1. C0000003 R0000018 1. C0000004 OBJROW 1. R0000004 1. C0000004 R0000017 1. C0000005 OBJROW 1. R0000004 1. C0000005 R0000018 1. C0000006 OBJROW 1. R0000004 1. C0000006 R0000019 1. C0000007 OBJROW 1. R0000004 1. C0000007 R0000018 1. C0000008 OBJROW 1. R0000000 1. C0000008 R0000001 1. R0000002 1. C0000008 R0000003 1. R0000004 1. C0000008 R0000005 1. R0000006 1. C0000008 R0000007 1. R0000008 1. C0000008 R0000011 1. R0000012 1. C0000008 R0000013 1. R0000014 1. C0000008 R0000015 1. R0000016 1. C0000008 R0000017 1. C0000009 OBJROW 1. C0000010 OBJROW 1. C0000011 OBJROW 1. R0000000 1. C0000011 R0000001 1. R0000002 1. C0000011 R0000003 1. R0000004 1. C0000011 R0000005 1. R0000006 1. C0000011 R0000007 1. R0000008 1. C0000011 R0000013 1. R0000014 1. C0000011 R0000015 1. R0000016 1. C0000011 R0000017 1. C0000012 OBJROW 1. R0000000 1. C0000012 R0000004 1. R0000008 1. C0000012 R0000012 1. R0000018 1. C0000013 OBJROW 1. R0000000 1. C0000013 R0000004 1. R0000008 1. C0000013 R0000011 1. R0000019 1. C0000014 OBJROW 1. R0000000 1. C0000014 R0000004 1. R0000008 1. C0000014 R0000011 1. R0000019 1. C0000015 OBJROW 1. R0000000 1. C0000015 R0000004 1. R0000008 1. C0000015 R0000011 1. R0000019 1. C0000016 OBJROW 1. R0000000 1. C0000016 R0000004 1. R0000008 1. C0000016 R0000011 1. R0000019 1. C0000017 OBJROW 1. R0000000 1. C0000017 R0000008 1. R0000011 1. C0000017 R0000019 1. C0000018 OBJROW 1. R0000000 1. C0000018 R0000008 1. R0000012 1. C0000018 R0000018 1. C0000019 OBJROW 1. R0000000 1. C0000019 R0000008 1. R0000013 1. C0000019 R0000014 1. R0000015 1. C0000019 R0000016 1. R0000017 1. C0000020 OBJROW 1. C0000021 OBJROW 1. C0000022 OBJROW 1. R0000000 1. C0000022 R0000001 1. R0000002 1. C0000022 R0000003 1. R0000004 1. C0000022 R0000005 1. R0000006 1. C0000022 R0000007 1. R0000008 1. C0000022 R0000011 1. R0000012 1. C0000022 R0000013 1. R0000014 1. C0000022 R0000015 1. R0000016 1. C0000022 R0000017 1. R0000018 1. C0000022 R0000019 1. C0000023 OBJROW 1. R0000008 1. C0000023 R0000011 1. R0000015 1. C0000024 OBJROW 1. R0000008 1. C0000024 R0000011 1. R0000015 1. C0000025 OBJROW 1. R0000008 1. C0000025 R0000011 1. R0000015 1. C0000025 R0000016 1. C0000026 OBJROW 1. R0000008 1. C0000026 R0000011 1. R0000015 1. C0000026 R0000017 1. C0000027 OBJROW 1. R0000008 1. C0000027 R0000012 1. R0000014 1. C0000027 R0000018 1. C0000028 OBJROW 1. R0000008 1. C0000028 R0000013 1. R0000014 1. C0000028 R0000019 1. C0000029 OBJROW 1. R0000008 1. C0000030 OBJROW 1. R0000008 1. C0000031 OBJROW 1. C0000032 OBJROW 1. C0000033 OBJROW 1. R0000000 1. C0000033 R0000001 1. R0000002 1. C0000033 R0000003 1. R0000004 1. C0000033 R0000005 1. R0000006 1. C0000033 R0000007 1. R0000008 1. C0000033 R0000011 1. R0000012 1. C0000033 R0000013 1. R0000014 1. C0000033 R0000015 1. R0000016 1. C0000033 R0000017 1. R0000018 1. C0000033 R0000019 1. C0000034 OBJROW 1. R0000008 1. C0000034 R0000019 1. C0000035 OBJROW 1. R0000008 1. C0000035 R0000019 1. C0000036 OBJROW 1. R0000008 1. C0000036 R0000019 1. C0000037 OBJROW 1. R0000008 1. C0000037 R0000019 1. C0000038 OBJROW 1. R0000008 1. C0000038 R0000019 1. C0000039 OBJROW 1. R0000008 1. C0000039 R0000019 1. C0000040 OBJROW 1. R0000008 1. C0000040 R0000019 1. C0000041 OBJROW 1. R0000008 1. C0000041 R0000019 1. C0000042 OBJROW 1. C0000043 OBJROW 1. C0000044 OBJROW 1. R0000002 1. C0000044 R0000003 1. R0000004 1. C0000044 R0000005 1. R0000006 1. C0000044 R0000011 1. R0000012 1. C0000044 R0000013 1. R0000014 1. C0000044 R0000015 1. R0000016 1. C0000044 R0000017 1. R0000018 1. C0000044 R0000019 1. C0000045 OBJROW 1. R0000001 1. C0000045 R0000007 1. R0000011 1. C0000045 R0000019 1. C0000046 OBJROW 1. R0000000 1. C0000046 R0000008 1. R0000011 1. C0000046 R0000019 1. C0000047 OBJROW 1. R0000000 1. C0000047 R0000008 1. R0000011 1. C0000047 R0000019 1. C0000048 OBJROW 1. R0000000 1. C0000048 R0000008 1. R0000011 1. C0000048 R0000019 1. C0000049 OBJROW 1. R0000000 1. C0000049 R0000008 1. R0000012 1. C0000049 R0000018 1. C0000050 OBJROW 1. R0000000 1. C0000050 R0000008 1. R0000013 1. C0000050 R0000017 1. C0000051 OBJROW 1. R0000001 1. C0000051 R0000007 1. R0000014 1. C0000051 R0000015 1. R0000016 1. C0000052 OBJROW 1. R0000002 1. C0000052 R0000003 1. R0000004 1. C0000052 R0000005 1. R0000006 1. RHS RHS R0000000 1. R0000001 1. RHS R0000002 1. R0000003 1. RHS R0000004 1. R0000005 1. RHS R0000006 1. R0000007 1. RHS R0000008 1. R0000009 1. RHS R0000010 1. R0000011 1. RHS R0000012 1. R0000013 1. RHS R0000014 1. R0000015 1. RHS R0000016 1. R0000017 1. RHS R0000018 1. R0000019 1. RHS R0000020 1. RANGES RANGE R0000000 1. R0000001 1. RANGE R0000002 1. R0000003 1. RANGE R0000004 1. R0000005 1. RANGE R0000006 1. R0000007 1. RANGE R0000008 1. R0000009 1. RANGE R0000010 1. R0000011 1. RANGE R0000012 1. R0000013 1. RANGE R0000014 1. R0000015 1. RANGE R0000016 1. R0000017 1. RANGE R0000018 1. R0000019 1. RANGE R0000020 1. BOUNDS UP BOUND C0000000 1. UP BOUND C0000001 1. UP BOUND C0000002 1. UP BOUND C0000003 1. UP BOUND C0000004 1. UP BOUND C0000005 1. UP BOUND C0000006 1. UP BOUND C0000007 1. UP BOUND C0000008 1. UP BOUND C0000009 1. UP BOUND C0000010 1. UP BOUND C0000011 1. UP BOUND C0000012 1. UP BOUND C0000013 1. UP BOUND C0000014 1. UP BOUND C0000015 1. UP BOUND C0000016 1. UP BOUND C0000017 1. UP BOUND C0000018 1. UP BOUND C0000019 1. UP BOUND C0000020 1. UP BOUND C0000021 1. UP BOUND C0000022 1. UP BOUND C0000023 1. UP BOUND C0000024 1. UP BOUND C0000025 1. UP BOUND C0000026 1. UP BOUND C0000027 1. UP BOUND C0000028 1. UP BOUND C0000029 1. UP BOUND C0000030 1. UP BOUND C0000031 1. UP BOUND C0000032 1. UP BOUND C0000033 1. UP BOUND C0000034 1. UP BOUND C0000035 1. UP BOUND C0000036 1. UP BOUND C0000037 1. UP BOUND C0000038 1. UP BOUND C0000039 1. UP BOUND C0000040 1. UP BOUND C0000041 1. UP BOUND C0000042 1. UP BOUND C0000043 1. UP BOUND C0000044 1. UP BOUND C0000045 1. UP BOUND C0000046 1. UP BOUND C0000047 1. UP BOUND C0000048 1. UP BOUND C0000049 1. UP BOUND C0000050 1. UP BOUND C0000051 1. UP BOUND C0000052 1. ENDATA Vol-1.5.4/Data/Sample/galenet.mps0000644000175000017500000000211611431323442015542 0ustar sudipsudipNAME galenet ROWS L S1 L S2 L S3 E NODE4 E NODE5 G D6 G D7 G D8 N COST COLUMNS T14 S1 1. NODE4 1. T24 S2 1. NODE4 1. T25 S2 1. NODE5 1. T35 S3 1. NODE5 1. T46 D6 1. NODE4 -1. T47 D7 1. NODE4 -1. T57 D7 1. NODE5 -1. T58 D8 1. NODE5 -1. RHS RHS S1 20. S2 20. RHS S3 20. D6 10. RHS D7 20. D8 30. BOUNDS UP BND T14 30. UP BND T24 20. UP BND T25 10. UP BND T35 10. UP BND T46 10. UP BND T47 2. UP BND T57 20. UP BND T58 30. ENDATA Vol-1.5.4/doxydoc/0000755000175000017500000000000013434204224012762 5ustar sudipsudipVol-1.5.4/doxydoc/doxygen.conf.in0000644000175000017500000017424411503201014015714 0ustar sudipsudip# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxydoc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = "@abs_top_srcdir@/" # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = @coin_doxy_logname@ #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that # contain documented source files. You may enter file names like "myfile.cpp" # or directories like "/usr/src/myproject". Separate the files or directories # with spaces. For COIN, the default is the package base to suck in all # source directories present in the package. Externals will be processed # if present. INPUT = @abs_top_srcdir@/Vol # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.hpp \ *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn* @coin_doxy_excludes@ # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = @coin_doxy_tagfiles@ # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = @coin_doxy_tagname@ # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = YES # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @coin_doxy_usedot@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES Vol-1.5.4/Makefile.in0000644000175000017500000006712213434066267013403 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = README $(am__configure_deps) \ $(srcdir)/BuildTools/Makemain.inc $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/configure \ $(top_srcdir)/doxydoc/doxygen.conf.in AUTHORS INSTALL \ config.guess config.sub depcomp install-sh ltmain.sh missing @HAVE_EXTERNALS_TRUE@am__append_1 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_2 = .Dependencies-stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = doxydoc/doxygen.conf SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ADD_FFLAGS = @ADD_FFLAGS@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_SKIP_PROJECTS = @COIN_SKIP_PROJECTS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DBG_FFLAGS = @DBG_FFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OPT_FFLAGS = @OPT_FFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = doxydoc/doxygen.conf $(am__append_1) ######################################################################## # Subdirectories # ######################################################################## # subdirs is set by configure as the list of all subdirectories to recurse # into SUBDIRS = $(subdirs) ######################################################################## # Maintainer Stuff # ######################################################################## # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = coin_subdirs.txt $(am__append_2) \ $(VPATH_DISTCLEANFILES) DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/BuildTools/Makemain.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) doxydoc/doxygen.conf: $(top_builddir)/config.status $(top_srcdir)/doxydoc/doxygen.conf.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/BuildTools $(distdir)/doxydoc @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-local uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-libtool clean-local \ clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-libtool distclean-recursive \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am uninstall-info-am \ uninstall-local ######################################################################## # Extra Targets # ######################################################################## test: all cd Vol; $(MAKE) test unitTest: test tests: all for dir in $(subdirs); do \ if test -r $$dir/test/Makefile; then \ (cd $$dir; $(MAKE) test) \ fi; \ done unitTests: tests doxydoc: for dir in $(subdirs) ; do \ if test $$dir != @PACKAGE_NAME@ && test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) doxydoc) \ fi ; \ done ; \ if test -r doxydoc/doxygen.conf ; then \ doxygen doxydoc/doxygen.conf ; \ fi clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) # DocInstallDir is defined in Makemain.inc and is specific to the package. # For the short term, adopt the notion that we install only the package # doxydoc. install-doxydoc: doxydoc if test -r doxydoc/doxygen.conf ; then \ $(mkdir_p) $(DocInstallDir) ; \ cp -R doxydoc $(DocInstallDir) ; \ fi uninstall-doxydoc: rm -rf $(DocInstallDir)/doxydoc clean-local: clean-doxydoc uninstall-local: uninstall-doxydoc .PHONY: tests unitTests doxydoc doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## # Make sure acinclude is using most recent coin.m4 @MAINTAINER_MODE_TRUE@$(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 @MAINTAINER_MODE_TRUE@ cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date @MAINTAINER_MODE_TRUE@$(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh @MAINTAINER_MODE_TRUE@ cp $< $@ # Take care of updating externals (if Dependencies file exists) @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@$(top_builddir)/Makefile: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@.Dependencies-stamp: $(srcdir)/Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); BuildTools/set_externals Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ touch .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@update-externals: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); svn update .PHONY: install-doc uninstall-doc update-externals # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/INSTALL0000644000175000017500000000637410740705662012365 0ustar sudipsudipThese instructions are for UNIX-like systems (including Linux, Cygwin and MSys) only. If Microsoft Developer Studio projects are maintained for this package, you can find instructions at https://projects.coin-or.org/MSVisualStudio ********************************************************************** *** DOWNLOAD *** ********************************************************************** You can obtain the source code for the Vol package in two ways: 1. Obtain the source directly from the COIN-OR subversion repository (recommended). For this you needs the program 'svn' installed on your machine, and output of "svn --version" must contain "handles 'https' scheme". Assuming that you want to download the 'trunk' (where the development happens) version of the code into a subdirectory named "Vol", you type svn co https://projects.coin-or.org/svn/Vol/trunk Vol To download stable/1.1 you'd type: svn co https://projects.coin-or.org/svn/Vol/stable/1.1 Vol etc. 2. Download the tarball from http://www.coin-or.org/download/source/Vol and extract it. For example, for the release 1.1.0 you type gunzip CoinUtils-1.1.0.tgz tar xvf CoinUtils-1.1.0.tar More detailed download instructions can be found at https://projects.coin-or.org/BuildTools/wiki/user-download ********************************************************************** *** CONFIGURATION *** ********************************************************************** Go into the directory that you just downloaded or extracted (e.g., Vol or Vol-1.1.0). Then create a build directory and configure the package by typing mkdir build cd build ../configure Note that you might have to specify additional options, in case you don't want to use the default choices that configure makes (e.g., compilers). Please visit https://projects.coin-or.org/BuildTools/wiki/user-configure and the Vol Trac page https://projects.coin-or.org/Vol for more information. If everything went fine, you will see at the end of the output "Main configuration of Vol successful" ********************************************************************** *** COMPILATION AND INSTALLATION *** ********************************************************************** In the directory where you ran the configure script: 1. Compile the code by typing make 2. To test if the code works, you can type make test 3. To install the code, you type make install After this, you will find the executables, libraries and header files in the "bin", "lib" and "include" subdirectory, respectively. More information on the compilation and installation can be found at https://projects.coin-or.org/BuildTools/wiki/user-compile ********************************************************************** *** USING THE LIBRARIES *** ********************************************************************** Now you can link your own code with the installed libraries. You can find examples in the Vol/examples/ subdirectory, see also the information at https://projects.coin-or.org/BuildTools/wiki/user-examples Vol-1.5.4/configure.ac0000644000175000017500000000441013434066267013613 0ustar sudipsudip# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 430 2019-02-22 21:42:15Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([Vol],[1.5.4],[coin-vol@lists.coin-or.org]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License.]) AC_REVISION(0.9) # List one file in the package so that the configure script can test # whether the package is actually there AC_CONFIG_SRCDIR(configure.ac) # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) ############################################################################# # Create the libtool script for the subdirectories # ############################################################################# AC_COIN_CREATE_LIBTOOL ############################################################################# # Check which subprojects are there # ############################################################################# AC_COIN_MAIN_PACKAGEDIR(Sample,Data) AC_COIN_MAIN_PACKAGEDIR(CoinUtils) AC_COIN_MAIN_PACKAGEDIR(Osi) AC_COIN_MAIN_PACKAGEDIR(Vol) AC_COIN_DOXYGEN(CoinUtils Osi) ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) AC_CONFIG_FILES([Makefile doxydoc/doxygen.conf ]) # Finally, we let configure write all the output... AC_COIN_FINALIZE Vol-1.5.4/Osi/0000755000175000017500000000000013434204224012043 5ustar sudipsudipVol-1.5.4/Osi/configure0000755000175000017500000340002613434065666013776 0ustar sudipsudip#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for Osi 0.108.0. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # # Copyright 2006 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package Coin which is distributed # under the Eclipse Public License. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string=`eval $cmd`) 2>/dev/null && echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='Osi' PACKAGE_TARNAME='osi' PACKAGE_VERSION='0.108.0' PACKAGE_STRING='Osi 0.108.0' PACKAGE_BUGREPORT='osi@list.coin-or.org' ac_unique_file="src/Osi/OsiAuxInfo.cpp" ac_default_prefix=`pwd` # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os ALWAYS_FALSE_TRUE ALWAYS_FALSE_FALSE have_svnversion OSI_SVN_REV CDEFS ADD_CFLAGS DBG_CFLAGS OPT_CFLAGS sol_cc_compiler CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT COIN_CC_IS_CL_TRUE COIN_CC_IS_CL_FALSE MPICC CXXDEFS ADD_CXXFLAGS DBG_CXXFLAGS OPT_CXXFLAGS CXX CXXFLAGS ac_ct_CXX COIN_CXX_IS_CL_TRUE COIN_CXX_IS_CL_FALSE MPICXX EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE host host_cpu host_vendor host_os ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL ac_c_preproc_warn_flag ac_cxx_preproc_warn_flag RPATH_FLAGS DEPENDENCY_LINKING_TRUE DEPENDENCY_LINKING_FALSE LT_LDFLAGS PKG_CONFIG ac_ct_PKG_CONFIG COIN_HAS_PKGCONFIG_TRUE COIN_HAS_PKGCONFIG_FALSE COIN_PKG_CONFIG_PATH COIN_PKG_CONFIG_PATH_UNINSTALLED COINUTILS_LIBS COINUTILS_CFLAGS COINUTILS_DATA COINUTILS_DEPENDENCIES COINUTILS_LIBS_INSTALLED COINUTILS_CFLAGS_INSTALLED COINUTILS_DATA_INSTALLED OSILIB_CFLAGS OSILIB_LIBS OSILIB_PCLIBS OSILIB_PCREQUIRES OSILIB_DEPENDENCIES OSILIB_CFLAGS_INSTALLED OSILIB_LIBS_INSTALLED COIN_HAS_COINUTILS_TRUE COIN_HAS_COINUTILS_FALSE GLPK_LIBS GLPK_CFLAGS GLPK_DATA GLPK_DEPENDENCIES GLPK_LIBS_INSTALLED GLPK_CFLAGS_INSTALLED GLPK_DATA_INSTALLED OSIGLPKLIB_CFLAGS OSIGLPKLIB_LIBS OSIGLPKLIB_PCLIBS OSIGLPKLIB_PCREQUIRES OSIGLPKLIB_DEPENDENCIES OSIGLPKLIB_CFLAGS_INSTALLED OSIGLPKLIB_LIBS_INSTALLED COIN_HAS_GLPK_TRUE COIN_HAS_GLPK_FALSE SOPLEX_LIBS SOPLEX_CFLAGS SOPLEX_DATA SOPLEX_DEPENDENCIES SOPLEX_LIBS_INSTALLED SOPLEX_CFLAGS_INSTALLED SOPLEX_DATA_INSTALLED OSISPXLIB_CFLAGS OSISPXLIB_LIBS OSISPXLIB_PCLIBS OSISPXLIB_PCREQUIRES OSISPXLIB_DEPENDENCIES OSISPXLIB_CFLAGS_INSTALLED OSISPXLIB_LIBS_INSTALLED COIN_HAS_SOPLEX_TRUE COIN_HAS_SOPLEX_FALSE SAMPLE_LIBS SAMPLE_CFLAGS SAMPLE_DATA SAMPLE_DEPENDENCIES SAMPLE_LIBS_INSTALLED SAMPLE_CFLAGS_INSTALLED SAMPLE_DATA_INSTALLED COIN_HAS_SAMPLE_TRUE COIN_HAS_SAMPLE_FALSE NETLIB_LIBS NETLIB_CFLAGS NETLIB_DATA NETLIB_DEPENDENCIES NETLIB_LIBS_INSTALLED NETLIB_CFLAGS_INSTALLED NETLIB_DATA_INSTALLED COIN_HAS_NETLIB_TRUE COIN_HAS_NETLIB_FALSE CPXINCDIR CPXLIB COIN_HAS_CPX_TRUE COIN_HAS_CPX_FALSE MSKINCDIR MSKLIB COIN_HAS_MSK_TRUE COIN_HAS_MSK_FALSE XPRINCDIR XPRLIB COIN_HAS_XPR_TRUE COIN_HAS_XPR_FALSE GRBINCDIR GRBLIB COIN_HAS_GRB_TRUE COIN_HAS_GRB_FALSE OSI_EXAMPLES_SOLVER_NAME OSI_EXAMPLES_SOLVER_CFLAGS OSI_EXAMPLES_SOLVER_LIBS OSI_EXAMPLES_SOLVER_PCNAME coin_have_doxygen coin_have_latex coin_doxy_usedot coin_doxy_tagname coin_doxy_logname COIN_HAS_DOXYGEN_TRUE COIN_HAS_DOXYGEN_FALSE COIN_HAS_LATEX_TRUE COIN_HAS_LATEX_FALSE coin_doxy_tagfiles coin_doxy_excludes LIBEXT VPATH_DISTCLEANFILES ABSBUILDDIR LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CDEFS_set=${CDEFS+set} ac_env_CDEFS_value=$CDEFS ac_cv_env_CDEFS_set=${CDEFS+set} ac_cv_env_CDEFS_value=$CDEFS ac_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_cv_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_cv_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_cv_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_cv_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_cv_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_cv_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_MPICC_set=${MPICC+set} ac_env_MPICC_value=$MPICC ac_cv_env_MPICC_set=${MPICC+set} ac_cv_env_MPICC_value=$MPICC ac_env_CXXDEFS_set=${CXXDEFS+set} ac_env_CXXDEFS_value=$CXXDEFS ac_cv_env_CXXDEFS_set=${CXXDEFS+set} ac_cv_env_CXXDEFS_value=$CXXDEFS ac_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_cv_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_cv_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_cv_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_cv_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_cv_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_cv_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_MPICXX_set=${MPICXX+set} ac_env_MPICXX_value=$MPICXX ac_cv_env_MPICXX_set=${MPICXX+set} ac_cv_env_MPICXX_value=$MPICXX ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS ac_env_PKG_CONFIG_set=${PKG_CONFIG+set} ac_env_PKG_CONFIG_value=$PKG_CONFIG ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set} ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Osi 0.108.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Osi 0.108.0:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug compile all projects with debug options tests (implies --disable-shared) --enable-debug-osi compile project Osi with debug compiler flags --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. --enable-static[=PKGS] build static libraries [default=no] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-dependency-linking disable linking library dependencies into shared libraries --disable-pkg-config disable use of pkg-config (if available) --disable-interpackage-dependencies disables deduction of Makefile dependencies from package linker flags --disable-cplex-libcheck skip the link check at configuration time --disable-mosek-libcheck skip the link check at configuration time --disable-xpress-libcheck skip the link check at configuration time --disable-gurobi-libcheck skip the link check at configuration time Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-osi-verbosity specify the debug verbosity level for project Osi --with-osi-checklevel specify the sanity check level for project Osi --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-coin-instdir prefix of installation directory for precompiled COIN packages --with-coinutils-lib linker flags for using package CoinUtils --with-coinutils-incdir directory with header files for using package CoinUtils --with-coinutils-datadir directory with data files for using package CoinUtils --with-glpk-lib linker flags for using package Glpk --with-glpk-incdir directory with header files for using package Glpk --with-glpk-datadir directory with data files for using package Glpk --with-soplex-lib linker flags for using package SoPlex --with-soplex-incdir directory with header files for using package SoPlex --with-soplex-datadir directory with data files for using package SoPlex --with-sample-lib linker flags for using package Sample --with-sample-incdir directory with header files for using package Sample --with-sample-datadir directory with data files for using package Sample --with-netlib-lib linker flags for using package Netlib --with-netlib-incdir directory with header files for using package Netlib --with-netlib-datadir directory with data files for using package Netlib --with-cplex-incdir specify the header file directory for library Cplex --with-cplex-lib specify the flags used to link with the library Cplex --with-mosek-incdir specify the header file directory for library Mosek --with-mosek-lib specify the flags used to link with the library Mosek --with-xpress-incdir specify the header file directory for library Xpress --with-xpress-lib specify the flags used to link with the library Xpress --with-gurobi-incdir specify the header file directory for library Gurobi --with-gurobi-lib specify the flags used to link with the library Gurobi --with-dot use dot (from graphviz) when creating documentation with doxygen if available; --without-dot to disable Some influential environment variables: CDEFS Additional -D flags to be used when compiling C code. ADD_CFLAGS Additional C compiler options DBG_CFLAGS Debug C compiler options OPT_CFLAGS Optimize C compiler options CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC C MPI Compiler CXXDEFS Additional -D flags to be used when compiling C++ code. ADD_CXXFLAGS Additional C++ compiler options DBG_CXXFLAGS Debug C++ compiler options OPT_CXXFLAGS Optimize C++ compiler options CXX C++ compiler command CXXFLAGS C++ compiler flags MPICXX C++ MPI Compiler CPP C preprocessor CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags PKG_CONFIG path to pkg-config utility Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Osi configure 0.108.0 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Osi $as_me 0.108.0, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # List one file in the package so that the configure script can test # whether the package is actually there # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. ############################################################################# # Standard build tool stuff # ############################################################################# # Get the system type ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # A bit of initial setup # As backup, we make sure we don't loose an FLIBS if it has been set # by the user save_FLIBS="$FLIBS" # A useful makefile conditional that is always false if false; then ALWAYS_FALSE_TRUE= ALWAYS_FALSE_FALSE='#' else ALWAYS_FALSE_TRUE='#' ALWAYS_FALSE_FALSE= fi # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes # Set the project's version numbers cat >>confdefs.h <<_ACEOF #define OSI_VERSION "$PACKAGE_VERSION" _ACEOF coin_majorver=`echo $PACKAGE_VERSION | sed -n -e 's/^\([0-9]*\).*/\1/gp'` coin_minorver=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.\([0-9]*\).*/\1/gp'` coin_releasever=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/gp'` if test "x$coin_majorver" = x ; then coin_majorver=9999 ; fi if test "x$coin_minorver" = x ; then coin_minorver=9999 ; fi if test "x$coin_releasever" = x ; then coin_releasever=9999 ; fi cat >>confdefs.h <<_ACEOF #define OSI_VERSION_MAJOR $coin_majorver _ACEOF cat >>confdefs.h <<_ACEOF #define OSI_VERSION_MINOR $coin_minorver _ACEOF cat >>confdefs.h <<_ACEOF #define OSI_VERSION_RELEASE $coin_releasever _ACEOF # We use the following variable to have a string with the upper case # version of the project name COIN_PRJCT=OSI # Set the project's SVN revision number. The complicated sed expression # (made worse by quadrigraphs) ensures that things like 4123:4168MS end up # as a single number. # Extract the first word of "svnversion", so it can be a program name with args. set dummy svnversion; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svnversion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svnversion"; then ac_cv_prog_have_svnversion="$have_svnversion" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svnversion="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svnversion" && ac_cv_prog_have_svnversion="no" fi fi have_svnversion=$ac_cv_prog_have_svnversion if test -n "$have_svnversion"; then echo "$as_me:$LINENO: result: $have_svnversion" >&5 echo "${ECHO_T}$have_svnversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$have_svnversion" = xyes; then svn_rev_tmp=`LANG=en_EN svnversion $srcdir 2>/dev/null` if test "x$svn_rev_tmp" != xexported -a "x$svn_rev_tmp" != x -a "x$svn_rev_tmp" != "xUnversioned directory"; then OSI_SVN_REV=`echo $svn_rev_tmp | sed -n -e 's/^[0-9]*://' -e 's/\([0-9]\)[^0-9]*$/\1/p'` cat >>confdefs.h <<_ACEOF #define OSI_SVN_REV $OSI_SVN_REV _ACEOF fi fi # Capture libtool library version, if given. coin_libversion=14:0:13 # Check if user wants to produce debugging code echo "$as_me:$LINENO: checking whether we want to compile in debug mode" >&5 echo $ECHO_N "checking whether we want to compile in debug mode... $ECHO_C" >&6 # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" case "${enableval}" in yes) coin_debug_compile=true if test "${enable_shared+set}" = set; then :; else enable_shared=no fi ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug" >&2;} { (exit 1); exit 1; }; } ;; esac else coin_debug_compile=false fi; # Check whether --enable-debug-osi or --disable-debug-osi was given. if test "${enable_debug_osi+set}" = set; then enableval="$enable_debug_osi" case "${enableval}" in yes) coin_debug_compile=true ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug-osi" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug-osi" >&2;} { (exit 1); exit 1; }; } ;; esac else : fi; # m4_ifvaln([Osi], if test $coin_debug_compile = true; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Check whether --with-osi-verbosity or --without-osi-verbosity was given. if test "${with_osi_verbosity+set}" = set; then withval="$with_osi_verbosity" if test "$withval" = yes; then withval=1 fi coin_osi_verbosity=$withval else coin_osi_verbosity=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_OSI_VERBOSITY $coin_osi_verbosity _ACEOF # Check whether --with-osi-checklevel or --without-osi-checklevel was given. if test "${with_osi_checklevel+set}" = set; then withval="$with_osi_checklevel" if test "$withval" = yes; then withval=1 fi coin_osi_checklevel=$withval else coin_osi_checklevel=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_OSI_CHECKLEVEL $coin_osi_checklevel _ACEOF # m4_ifvaln([Osi], # Get the name of the C++ compiler and appropriate compiler options # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # For consistency, we set the C compiler to the same value of the C++ # compiler, if the C++ is set, but the C compiler isn't (only for CXX=cl) if test x"$CXX" != x; then case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) if test x"$CC" = x; then CC="$CXX" { echo "$as_me:$LINENO: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&5 echo "$as_me: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&2;} fi ;; esac fi coin_has_cc=yes save_cflags="$CFLAGS" # For *-*-solaris*, promote Studio/Workshop cc compiler to front of list. # Depending on the user's PATH, when Studio/Workshop cc is not present we may # find /usr/ucb/cc, which is almost certainly not a good choice for the C # compiler. In this case, put cc after gcc. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl gcc" else comps="gcc icl cl" fi ;; *-*-solaris*) # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_sol_cc_compiler+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$sol_cc_compiler"; then ac_cv_prog_sol_cc_compiler="$sol_cc_compiler" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_sol_cc_compiler="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_sol_cc_compiler shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set sol_cc_compiler to just the basename; use the full file name. shift ac_cv_prog_sol_cc_compiler="$as_dir/$ac_word${1+' '}$@" fi fi fi fi sol_cc_compiler=$ac_cv_prog_sol_cc_compiler if test -n "$sol_cc_compiler"; then echo "$as_me:$LINENO: result: $sol_cc_compiler" >&5 echo "${ECHO_T}$sol_cc_compiler" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$sol_cc_compiler" = "cc" ; then comps="cc xlc gcc pgcc icc" else comps="xlc gcc pgcc icc cc" fi ;; *-*-darwin*) comps="clang gcc cc" ;; *-linux-gnu*) comps="gcc cc pgcc icc xlc" ;; *-linux-*) comps="xlc gcc cc pgcc icc" ;; *) comps="xlc_r xlc cc gcc pgcc icc" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CC || test "${ac_cv_prog_CC+set}" != set || { ac_cv_prog_CC=; export ac_cv_prog_CC; } # AC_MSG_NOTICE([C compiler candidates: $comps]) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -z "$CC" ; then { { echo "$as_me:$LINENO: error: Failed to find a C compiler!" >&5 echo "$as_me: error: Failed to find a C compiler!" >&2;} { (exit 1); exit 1; }; } fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cc_g" = yes ; then ac_cv_prog_cc_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CFLAGS="$save_cflags" # add automake conditional so we can recognize cl compiler in makefile coin_cc_is_cl=false case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_cc_is_cl=true ;; esac if test $coin_cc_is_cl = true; then COIN_CC_IS_CL_TRUE= COIN_CC_IS_CL_FALSE='#' else COIN_CC_IS_CL_TRUE='#' COIN_CC_IS_CL_FALSE= fi # Check if a project specific CFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CFLAGS+set} if test x$coin_tmp = xset; then eval CFLAGS=\${${COIN_PRJCT}_CFLAGS} fi fi if test x"$CFLAGS" = x; then coin_add_cflags= coin_opt_cflags= coin_dbg_cflags= coin_warn_cflags= if test "$GCC" = "yes"; then case "$CC" in icc* | */icc*) ;; *) coin_opt_cflags="-O3" coin_add_cflags="-pipe" coin_dbg_cflags="-g -O0" coin_warn_cflags="-Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall -Wno-unknown-pragmas -Wno-long-long" esac fi if test -z "$coin_opt_cflags"; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -O2' coin_dbg_cflags='-MDd' else coin_opt_cflags='-MT -O2' coin_dbg_cflags='-MTd' fi coin_add_cflags='-nologo -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -Ox' coin_dbg_cflags='-MDd -debug' else coin_opt_cflags='-MT -Ox' coin_dbg_cflags='-MTd -debug' fi coin_add_cflags='-nologo -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CC" in icc* | */icc*) coin_opt_cflags="-O3 -ip -mp1" coin_add_cflags="" coin_dbg_cflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cflags="-i_dynamic $coin_add_cflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgcc* | */pgcc*) coin_opt_cflags="-fast" coin_add_cflags="-Kieee -pc 64" coin_dbg_cflags="-g" ;; esac ;; *-ibm-*) case "$CC" in xlc* | */xlc* | mpxlc* | */mpxlc*) coin_opt_cflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_cflags="-g" ;; esac ;; *-hp-*) coin_opt_cflags="-O" coin_add_cflags="-Ae" coin_dbg_cflags="-g" ;; *-*-solaris*) coin_opt_cflags="-xO4" coin_dbg_cflags="-g" ;; *-sgi-*) coin_opt_cflags="-O -OPT:Olimit=0" coin_dbg_cflags="-g" ;; esac fi if test "$ac_cv_prog_cc_g" = yes && test -z "$coin_dbg_cflags" ; then coin_dbg_cflags="-g" fi if test -z "$coin_opt_cflags"; then # Try if -O option works if nothing else is set CFLAGS="-O" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cflags" = xyes; then coin_warn_cflags= fi if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$coin_dbg_cflags $coin_add_cflags $coin_warn_cflags" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$coin_opt_cflags $coin_add_cflags -DNDEBUG $coin_warn_cflags" fi DBG_CFLAGS="$DBG_CFLAGS $ADD_CFLAGS $CDEFS" OPT_CFLAGS="$OPT_CFLAGS $ADD_CFLAGS $CDEFS" if test "$coin_debug_compile" = "true"; then CFLAGS="$DBG_CFLAGS" else CFLAGS="$OPT_CFLAGS" fi else CFLAGS="$CFLAGS $ADD_CFLAGS $CDEFS" if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$CFLAGS" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$CFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CFLAGS="$CFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CFLAGS works save_CFLAGS="$CFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&2;} CFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C compiler options are: $CFLAGS" >&5 echo "$as_me: C compiler options are: $CFLAGS" >&6;} if test x"$MPICC" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C compiler $MPICC" >&5 echo "$as_me: Will use MPI C compiler $MPICC" >&6;} CC="$MPICC" fi # Correct the LD variable if we are using the MS or Intel-windows compiler case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #Let's try if that overcomes configuration problem with VC++ 6.0 ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu coin_has_cxx=yes save_cxxflags="$CXXFLAGS" # For *-*-solaris*, promote Studio/Workshop compiler to front of list. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl g++" else comps="g++ icl cl" fi ;; *-*-solaris*) comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; *-darwin*) comps="clang++ g++ c++ CC" ;; *-linux-gnu*) comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;; *) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CXX || test "${ac_cv_prog_CXX+set}" != set || { ac_cv_prog_CXX=; export ac_cv_prog_CXX; } # AC_MSG_NOTICE([C++ compiler candidates: $comps]) ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC $comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu #AC_PROG_CXX sets CXX to g++ if it cannot find a working C++ compiler #thus, we test here whether $CXX is actually working ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking whether C++ compiler $CXX works" >&5 echo $ECHO_N "checking whether C++ compiler $CXX works... $ECHO_C" >&6; cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&5 echo "$as_me: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu coin_cxx_is_cl=false # It seems that we need to cleanup something here for the Windows case "$CXX" in clang* | */clang*) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh mv confdefs.hh confdefs.h coin_cxx_is_cl=true ;; esac # add automake conditional so we can recognize cl compiler in makefile if test $coin_cxx_is_cl = true; then COIN_CXX_IS_CL_TRUE= COIN_CXX_IS_CL_FALSE='#' else COIN_CXX_IS_CL_TRUE='#' COIN_CXX_IS_CL_FALSE= fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cxx_g" = yes ; then ac_cv_prog_cxx_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CXXFLAGS="$save_cxxflags" # Check if a project specific CXXFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CXXFLAGS+set} if test x$coin_tmp = xset; then eval CXXFLAGS=\${${COIN_PRJCT}_CXXFLAGS} fi fi if test x"$CXXFLAGS" = x; then # ToDo decide whether we want -DNDEBUG for optimization coin_add_cxxflags= coin_opt_cxxflags= coin_dbg_cxxflags= coin_warn_cxxflags= if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) ;; *) # ToDo decide about unroll-loops coin_opt_cxxflags="-O3" coin_add_cxxflags="-pipe" coin_dbg_cxxflags="-g -O0" coin_warn_cxxflags="-Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long" esac fi # Note that we do not need to cover GCC in the following tests. if test -z "$coin_opt_cxxflags"; then case $build in *-cygwin* | *-mingw*) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -O2' coin_dbg_cxxflags='-MDd' else coin_opt_cxxflags='-MT -O2' coin_dbg_cxxflags='-MTd' fi coin_add_cxxflags='-nologo -EHsc -GR -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -Ox' coin_dbg_cxxflags='-MDd -debug' else coin_opt_cxxflags='-MT -Ox' coin_dbg_cxxflags='-MTd -debug' fi coin_add_cxxflags='-nologo -EHsc -GR -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CXX" in icpc* | */icpc*) coin_opt_cxxflags="-O3 -ip -mp1" coin_add_cxxflags="" coin_dbg_cxxflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CXXFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cxxflags="-i_dynamic $coin_add_cxxflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgCC* | */pgCC*) coin_opt_cxxflags="-fast" coin_add_cxxflags="-Kieee -pc 64" coin_dbg_cxxflags="-g" ;; esac ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) coin_opt_cxxflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cxxflags="-bmaxdata:0x80000000 -qrtti=dyna -qsuppress=1500-036 -qsuppress=1500-029 -qsourcetype=c++" coin_dbg_cxxflags="-g" ;; esac ;; *-hp-*) case "$CXX" in aCC* | */aCC* ) coin_opt_cxxflags="-O" coin_add_cxxflags="-AA" coin_dbg_cxxflags="-g" ;; esac ;; *-*-solaris*) coin_opt_cxxflags="-O4" coin_dbg_cxxflags="-g" ;; esac fi # Generic flag settings. If these don't work, add a case above. if test "$ac_cv_prog_cxx_g" = yes && test -z "$coin_dbg_cxxflags" ; then coin_dbg_cxxflags="-g" fi if test -z "$coin_opt_cxxflags"; then # Try if -O option works if nothing else is set CXXFLAGS=-O cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cxxflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cxxflags" = xyes; then coin_warn_cxxflags= fi # Do final setup of flags based on values determined above. if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$coin_dbg_cxxflags $coin_add_cxxflags $coin_warn_cxxflags" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$coin_opt_cxxflags $coin_add_cxxflags -DNDEBUG $coin_warn_cxxflags" fi DBG_CXXFLAGS="$DBG_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" OPT_CXXFLAGS="$OPT_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test "$coin_debug_compile" = "true"; then CXXFLAGS="$DBG_CXXFLAGS" else CXXFLAGS="$OPT_CXXFLAGS" fi # Handle the case where CXXFLAGS was set externally. else CXXFLAGS="$CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$CXXFLAGS" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$CXXFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CXXFLAGS="$CXXFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CXXFLAGS works save_CXXFLAGS="$CXXFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&2;} CXXFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C++ compiler options are: $CXXFLAGS" >&5 echo "$as_me: C++ compiler options are: $CXXFLAGS" >&6;} if test x"$MPICXX" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C++ compiler $MPICXX" >&5 echo "$as_me: Will use MPI C++ compiler $MPICXX" >&6;} CXX="$MPICXX" fi # correct the LD variable in a build with MS or Intel-windows compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Initialize automake and libtool { # START coin_disable_shared=no # Test if force_shared has been set if test "x" = xforce_shared; then if test x$enable_shared = xno; then { { echo "$as_me:$LINENO: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&5 echo "$as_me: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&2;} { (exit 1); exit 1; }; } fi enable_shared=yes; else case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CC" in clang* ) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Building of DLLs not supported in this configuration." >&5 echo "$as_me: Building of DLLs not supported in this configuration." >&6;} ;; *gcc*) if test x"$enable_dependency_linking" = xyes; then coin_disable_shared=no else { echo "$as_me:$LINENO: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&5 echo "$as_me: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&2;} fi ;; *) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then { echo "$as_me:$LINENO: WARNING: Shared objects are not supported." >&5 echo "$as_me: WARNING: Shared objects are not supported." >&2;} fi ;; esac fi if test x"$coin_disable_shared" = xyes; then if test x"$enable_shared" = xyes; then : else # we don't disable shared, because it was not selected anyway coin_disable_shared=no fi enable_shared=no fi # By default, we only want the shared objects to be compiled # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=no fi; # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='osi' VERSION='0.108.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME echo "$as_me:$LINENO: checking whether we are using the correct autotools" >&5 echo $ECHO_N "checking whether we are using the correct autotools... $ECHO_C" >&6 if test "${ac_cv_use_correct_autotools+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_use_correct_autotools=check fi echo "$as_me:$LINENO: result: $ac_cv_use_correct_autotools" >&5 echo "${ECHO_T}$ac_cv_use_correct_autotools" >&6 if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf # Extract the first word of "autoconf", so it can be a program name with args. set dummy autoconf; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_autoconf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_autoconf"; then ac_cv_prog_have_autoconf="$have_autoconf" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_autoconf="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_autoconf" && ac_cv_prog_have_autoconf="no" fi fi have_autoconf=$ac_cv_prog_have_autoconf if test -n "$have_autoconf"; then echo "$as_me:$LINENO: result: $have_autoconf" >&5 echo "${ECHO_T}$have_autoconf" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_autoconf = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of autoconf" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of autoconf... $ECHO_C" >&6 autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of autoconf as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of autoconf as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location echo "$as_me:$LINENO: checking whether autoconf is coming from the correct location" >&5 echo $ECHO_N "checking whether autoconf is coming from the correct location... $ECHO_C" >&6 autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if we have automake # Extract the first word of "automake", so it can be a program name with args. set dummy automake; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_automake+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_automake"; then ac_cv_prog_have_automake="$have_automake" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_automake="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_automake" && ac_cv_prog_have_automake="no" fi fi have_automake=$ac_cv_prog_have_automake if test -n "$have_automake"; then echo "$as_me:$LINENO: result: $have_automake" >&5 echo "${ECHO_T}$have_automake" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_automake = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of automake" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of automake... $ECHO_C" >&6 automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of automake as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of automake as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable automake is picked up from the correct location echo "$as_me:$LINENO: checking whether automake is coming from the correct location" >&5 echo $ECHO_N "checking whether automake is coming from the correct location... $ECHO_C" >&6 automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` if test -r $want_dir/libtool/ltmain.sh; then have_ltmain=yes : else have_ltmain=no : fi echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of libtool." >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of libtool.... $ECHO_C" >&6 if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of libtool." >&5 echo "$as_me: error: You don't have the correct version of libtool." >&2;} { (exit 1); exit 1; }; } fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: I cannot find the ltmain.sh file." >&5 echo "$as_me: error: I cannot find the ltmain.sh file." >&2;} { (exit 1); exit 1; }; } fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi if test -r $want_dir/aclocal/libtool.m4; then LIBTOOLM4="$want_dir/aclocal/libtool.m4" : else { { echo "$as_me:$LINENO: error: I cannot find the libtool.m4 file." >&5 echo "$as_me: error: I cannot find the libtool.m4 file." >&2;} { (exit 1); exit 1; }; } : fi # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svn"; then ac_cv_prog_have_svn="$have_svn" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svn="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svn" && ac_cv_prog_have_svn="no" fi fi have_svn=$ac_cv_prog_have_svn if test -n "$have_svn"; then echo "$as_me:$LINENO: result: $have_svn" >&5 echo "${ECHO_T}$have_svn" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$have_svn = xyes; then echo "$as_me:$LINENO: checking whether svn understands https" >&5 echo $ECHO_N "checking whether svn understands https... $ECHO_C" >&6 if test "${ac_cv_svn_understands_https+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out fi echo "$as_me:$LINENO: result: $ac_cv_svn_understands_https" >&5 echo "${ECHO_T}$ac_cv_svn_understands_https" >&6 fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else { { echo "$as_me:$LINENO: error: Cannot find the BuildTools directory" >&5 echo "$as_me: error: Cannot find the BuildTools directory" >&2;} { (exit better disable maintainer mode.); exit better disable maintainer mode.; }; } fi fi fi # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` abs_lib_dir=$full_prefix/lib abs_include_dir=$full_prefix/include abs_bin_dir=$full_prefix/bin if test $coin_have_externals = yes && test x$have_svn = xyes; then HAVE_EXTERNALS_TRUE= HAVE_EXTERNALS_FALSE='#' else HAVE_EXTERNALS_TRUE='#' HAVE_EXTERNALS_FALSE= fi # AC_MSG_NOTICE([End automake initialisation.]) LIBTOOL= if test -f ../libtool; then coin_config_dir=.. LIBTOOL='$(SHELL) $(top_builddir)/../libtool' fi if test "x$LIBTOOL" = x; then if test -f ../../libtool; then coin_config_dir=../.. LIBTOOL='$(SHELL) $(top_builddir)/../../libtool' fi fi if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Creating libtool script (calling COIN_PROG_LIBTOOL).]) # Stuff for libtool # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi; # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi; echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done fi SED=$lt_cv_path_SED echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu | dragonfly*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix3*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 5829 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) LD="${LD-ld} -64" ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:6963:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux*) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8030: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8034: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic='-qnocommon' lt_prog_compiler_wl='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8298: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8302: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works=yes fi else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8402: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8406: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix3*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs=no ;; esac fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which library types will actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e 1s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi if test -z "$LTCFLAGS"; then eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_CXX=yes else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes if test "$GXX" = yes ; then lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_CXX=no ;; esac fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | kfreebsd*-gnu | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_CXX='+b $libdir' ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix3*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: ;; linux*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc*) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC*) # Portland Group C++ compiler archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd='echo' ;; osf3*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ $rm $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. We must also pass each convience library through # to the system linker between allextract/defaultextract. # The C++ compiler will combine linker options so we # cannot just pass the convience library names through # without $wl. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. # So that behaviour is only enabled if SCOABSPATH is set to a # non-empty value in the environment. Most likely only useful for # creating official distributions of packages. # This is a hack until libtool officially supports absolute path # names for shared libraries. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" \ || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $rm -f confest.$objext # PORTME: override above test on systems where it is broken case $host_os in interix3*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; solaris*) case $cc_basename in CC*) # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. postdeps_CXX='-lCstd -lCrun' ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_CXX='-qnocommon' lt_prog_compiler_wl_CXX='-Wl,' ;; esac ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | kfreebsd*-gnu | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc* | ecpc*) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC*) # Portland Group C++ compiler. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13191: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13195: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_CXX=yes fi else lt_prog_compiler_static_works_CXX=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6 if test x"$lt_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13295: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13299: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || \ test -n "$runpath_var_CXX" || \ test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_CXX # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_CXX" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_F77='-qnocommon' lt_prog_compiler_wl_F77='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14865: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14869: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_F77=yes fi else lt_prog_compiler_static_works_F77=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6 if test x"$lt_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14969: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14973: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_F77=no fi ;; interix3*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_F77='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='' link_all_deplibs_F77=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_F77=no ;; esac fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var_F77" || \ test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no old_archive_cmds_GCJ=$old_archive_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17176: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17180: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_GCJ='-qnocommon' lt_prog_compiler_wl_GCJ='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-fpic' lt_prog_compiler_static_GCJ='-Bstatic' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; solaris*) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_GCJ='-Qoption ld ';; *) lt_prog_compiler_wl_GCJ='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; unicos*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_can_build_shared_GCJ=no ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17444: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17448: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_GCJ=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_GCJ=yes fi else lt_prog_compiler_static_works_GCJ=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6 if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then : else lt_prog_compiler_static_GCJ= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17548: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:17552: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_GCJ=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_GCJ=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_GCJ=no fi ;; interix3*) hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_GCJ=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_GCJ=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_GCJ=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = no; then runpath_var= hardcode_libdir_flag_spec_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_GCJ=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_GCJ=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_GCJ=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ='$convenience' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi[45]*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_GCJ=no hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='' link_all_deplibs_GCJ=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_GCJ=no ;; esac fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; *) hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_GCJ=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_GCJ='${wl}-z,text' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_GCJ='${wl}-z,text' allow_undefined_flag_GCJ='${wl}-z,nodefs' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ pic_flag=$lt_prog_compiler_pic_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ test "X$hardcode_automatic_GCJ" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # No longer needed now that CPPFLAGS is correctly set -- lh, 061214 -- # AC_REQUIRE([AC_COIN_DLFCN_H]) # NEW: If libtool exists in the directory higher up, we use that one # instead of creating a new one # It turns out that the code for AC_PROG_LIBTOOL is somehow AC_REQUIRED # out in front of this macro body. You'll notice that LIBTOOL is already # defined here. We'll have to count on this macro not being called if libtool # already exists, or at least move the libtool fixes outside the conditional. # AC_MSG_NOTICE([Entering coin_prog_libtool, LIBTOOL = "$LIBTOOL".]) # This test is therefore removed. -- lh, 061214 -- # if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Calling PROG_LIBTOOL.]) # AC_MSG_NOTICE([Finished PROG_LIBTOOL.]) { echo "$as_me:$LINENO: Build is \"$build\"." >&5 echo "$as_me: Build is \"$build\"." >&6;} mydos2unix='| dos2unix' case $build in *-mingw*) CYGPATH_W=echo ;; esac case $build in # Here we need to check if -m32 is specified. If so, we need to correct # sys_lib_search_path_spec *-cygwin* | *-mingw*) case "$CXX" in clang* ) # we assume that libtool patches for CLANG are the same as for GNU compiler - correct??? { echo "$as_me:$LINENO: Applying patches to libtool for CLANG compiler" >&5 echo "$as_me: Applying patches to libtool for CLANG compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Applying patches to libtool for cl compiler" >&5 echo "$as_me: Applying patches to libtool for cl compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|fix_srcfile_path=\"\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's%compile_deplibs=\"\$dir/\$old_library \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$old_library | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%compile_deplibs=\"\$dir/\$linklib \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$linklib | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%lib /OUT:%lib -OUT:%' \ -e "s%cygpath -w%$CYGPATH_W%" \ -e 's%$AR x \\$f_ex_an_ar_oldlib%bla=\\$(lib -nologo -list \\$('"$CYGPATH_W \$1"') '"$mydos2unix"' | xargs echo); echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$('"$CYGPATH_W \$1"'); done%' \ -e 's%$AR t "$f_ex_an_ar_oldlib"%lib -nologo -list \$('"$CYGPATH_W \$1"') '"$mydos2unix"'%' \ -e 's%f_ex_an_ar_oldlib="\($?*1*\)"%f_ex_an_ar_oldlib='\`"$CYGPATH_W"' \1`%' \ -e 's%^archive_cmds=.*%archive_cmds="\\$CC -o \\$lib \\$libobjs \\$compiler_flags \\\\\\`echo \\\\\\"\\$deplibs\\\\\\" | \\$SED -e '"\'"'s/ -lc\\$//'"\'"'\\\\\\` -link -dll~linknames="%' \ -e 's%old_archive_cmds="lib -OUT:\\$oldlib\\$oldobjs\\$old_deplibs"%old_archive_cmds="if test -r \\$oldlib; then bla=\\"\\$oldlib\\"; else bla=; fi; lib -OUT:\\$oldlib \\\\\\$bla\\$oldobjs\\$old_deplibs"%' \ libtool > conftest.bla ;; *) { echo "$as_me:$LINENO: Applying patches to libtool for GNU compiler" >&5 echo "$as_me: Applying patches to libtool for GNU compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla ;; esac mv conftest.bla libtool chmod 755 libtool ;; *x86_64-*) if test "$GCC" = yes && (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm32' >& /dev/null); then { echo "$as_me:$LINENO: Applying patches to libtool for 32bit compilation" >&5 echo "$as_me: Applying patches to libtool for 32bit compilation" >&6;} sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="/lib /usr/lib"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi ;; *-solaris*) if test "$GCC" = yes && \ (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm64' >/dev/null 2>&1) ; then hdwisa=`isainfo | sed -e 's/\([^ ]*\) .*$/\1/'` if `$EGREP 'sys_lib_search_path_spec=' libtool | $EGREP -v $hdwisa >/dev/null 2>&1` ; then { echo "$as_me:$LINENO: Applying patches to libtool for 64-bit GCC compilation" >&5 echo "$as_me: Applying patches to libtool for 64-bit GCC compilation" >&6;} fixlibtmp=`$CC -m64 -print-search-dirs | $EGREP '^libraries:'` fixlibtmp=`echo $fixlibtmp | sed -e 's/libraries: =//' -e 's/:/ /g'` if `echo "$fixlibtmp" | $EGREP -v $hdwisa >/dev/null 2>&1` ; then # AC_MSG_NOTICE(Compensating for broken gcc) for lib in $fixlibtmp ; do if test -d "${lib}${hdwisa}" ; then syslibpath64="$syslibpath64 ${lib}${hdwisa}/" fi done syslibpath64="${syslibpath64} ${fixlibtmp}" else syslibpath64="$fixlibtmp" fi sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="'"$syslibpath64"'"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi # AC_MSG_NOTICE(Result is ) # $EGREP 'sys_lib_search_path_spec=' libtool fi ;; # Cygwin. Ah, cygwin. Too big and ugly to inline; see the macro. *-darwin*) { echo "$as_me:$LINENO: Applying patches to libtool for Darwin" >&5 echo "$as_me: Applying patches to libtool for Darwin" >&6;} sed -e 's/verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"/verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"/' \ -e 's/ -dynamiclib / -dynamiclib -single_module /g' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac # This fi matches the commented `if test "x$LIBTOOL" = x;' up at the head of # the macro. -- lh, 061214 -- # fi # AC_MSG_NOTICE([End libtool initialisation.]) # AC_MSG_NOTICE([Finished COIN_PROG_LIBTOOL.]) # set RPATH_FLAGS to the compiler link flags required to hardcode location # of the shared objects RPATH_FLAGS= if test $enable_shared = yes; then case $build in *-linux-*) if test "$GXX" = "yes"; then RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -Wl,--rpath -Wl,$dir" done fi ;; *-darwin*) RPATH_FLAGS=nothing ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) RPATH_FLAGS=nothing ;; esac ;; *-hp-*) RPATH_FLAGS=nothing ;; *-mingw32) RPATH_FLAGS=nothing ;; *-*-solaris*) RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -R$dir" done esac if test "$RPATH_FLAGS" = ""; then { echo "$as_me:$LINENO: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&5 echo "$as_me: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&2;} fi if test "$RPATH_FLAGS" = "nothing"; then RPATH_FLAGS= fi fi else { echo "$as_me:$LINENO: Using libtool script in directory $coin_config_dir" >&5 echo "$as_me: Using libtool script in directory $coin_config_dir" >&6;} # get all missing information from the config.log file # output variables and defines as_save_IFS=$IFS IFS=' ' for oneline in `cat $coin_config_dir/config.status`; do case "$oneline" in # First some automake conditionals s,@am__fastdep* | s,@AR@* | s,@CPP@* | s,@CPPFLAGS@* | s,@CXXCPP@* | \ s,@RANLIB@* | s,@STRIP@* | s,@ac_ct_AR@* | s,@ac_ct_RANLIB@* | \ s,@ac_ct_STRIP@* | s,@host* | s,@LN_S@* | s,@RPATH_FLAGS@* | \ s,@ac_c_preproc_warn_flag@* | s,@ac_cxx_preproc_warn_flag@* ) command=`echo $oneline | sed -e 's/^s,@//' -e 's/@,/="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; s,@DEFS@* ) command=`echo $oneline | sed -e 's/^s,@DEFS@,/defsline="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; esac done IFS=$as_save_IFS # And some defines (assuming here that the packages base dir # doesn't have a config.h file for word in $defsline; do # echo word $word case $word in -DHAVE_[A-Z_]*_H=1 | -DSTDC_HEADERS=1 ) i=`echo $word | sed -e 's/-D/#define /' -e 's/=/ /'` # echo dd $i echo $i >>confdefs.h ;; esac done fi # AC_MSG_NOTICE([End of INIT_AUTO_TOOLS.]) # Check whether --enable-dependency-linking or --disable-dependency-linking was given. if test "${enable_dependency_linking+set}" = set; then enableval="$enable_dependency_linking" dependency_linking="$enableval" else dependency_linking=auto fi; if test "$dependency_linking" = auto; then # On Cygwin and AIX, building DLLs doesn't work dependency_linking=no if test x"$coin_disable_shared" = xno; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) dependency_linking=yes ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) dependency_linking=no ;; *gcc*) dependency_linking=yes ;; *) dependency_linking=yes ;; esac ;; *) dependency_linking=yes ;; esac fi fi if test "$dependency_linking" = yes ; then LT_LDFLAGS="-no-undefined" else LT_LDFLAGS= fi if test "$dependency_linking" = yes; then DEPENDENCY_LINKING_TRUE= DEPENDENCY_LINKING_FALSE='#' else DEPENDENCY_LINKING_TRUE='#' DEPENDENCY_LINKING_FALSE= fi # Check if we want to set the library version echo "$as_me:$LINENO: checking if library version is set" >&5 echo $ECHO_N "checking if library version is set... $ECHO_C" >&6 if test x"$coin_libversion" != x; then LT_LDFLAGS="$LT_LDFLAGS -version-info $coin_libversion" echo "$as_me:$LINENO: result: $coin_libversion" >&5 echo "${ECHO_T}$coin_libversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi #END } ############################################################################# # COIN-OR components # ############################################################################# # Check whether --enable-pkg-config or --disable-pkg-config was given. if test "${enable_pkg_config+set}" = set; then enableval="$enable_pkg_config" use_pkgconfig="$enableval" else if test x$coin_cc_is_cl = xtrue; then use_pkgconfig=no else use_pkgconfig=yes fi fi; if test $use_pkgconfig = yes ; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="${ac_tool_prefix}pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_PKG_CONFIG"; then ac_ct_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_PKG_CONFIG"; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_ct_PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_PKG_CONFIG="pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_PKG_CONFIG=$ac_cv_prog_ac_ct_PKG_CONFIG if test -n "$ac_ct_PKG_CONFIG"; then echo "$as_me:$LINENO: result: $ac_ct_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_ct_PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi PKG_CONFIG=$ac_ct_PKG_CONFIG else PKG_CONFIG="$ac_cv_prog_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.16.0 echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 PKG_CONFIG="" fi fi # check if pkg-config supports the short-errors flag if test -n "$PKG_CONFIG" && \ $PKG_CONFIG --atleast-pkgconfig-version 0.20; then pkg_short_errors=" --short-errors " else pkg_short_errors="" fi fi if test -n "$PKG_CONFIG"; then COIN_HAS_PKGCONFIG_TRUE= COIN_HAS_PKGCONFIG_FALSE='#' else COIN_HAS_PKGCONFIG_TRUE='#' COIN_HAS_PKGCONFIG_FALSE= fi # assemble pkg-config search path for installed projects COIN_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" # let's assume that when installing into $prefix, then the user may have installed some other coin projects there before, so it's worth to have a look into there # best would actually to use ${libdir}, since .pc files get installed into ${libdir}/pkgconfig, # unfortunately, ${libdir} expands to ${exec_prefix}/lib and ${exec_prefix} to ${prefix}... if test "x${prefix}" = xNONE ; then COIN_PKG_CONFIG_PATH="${ac_default_prefix}/lib64/pkgconfig:${ac_default_prefix}/lib/pkgconfig:${ac_default_prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" else COIN_PKG_CONFIG_PATH="${prefix}/lib64/pkgconfig:${prefix}/lib/pkgconfig:${prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi # Check whether --with-coin-instdir or --without-coin-instdir was given. if test "${with_coin_instdir+set}" = set; then withval="$with_coin_instdir" if test -d "$withval"; then : ; else { { echo "$as_me:$LINENO: error: argument for --with-coin-instdir not a directory" >&5 echo "$as_me: error: argument for --with-coin-instdir not a directory" >&2;} { (exit 1); exit 1; }; } fi COIN_PKG_CONFIG_PATH="$withval/lib/pkgconfig:$withval/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi; # assemble additional pkg-config search paths for uninstalled projects if test x$coin_projectdir = xyes ; then # if we are in a project setup, then in a classic setup, we want to find uninstalled projects # their (relative) location is written to coin_subdirs.txt by the configure in the project base directory # unfortunately, if the user set prefix, then we do not know where the project base directory is located # but it is likely to be either .. (if we are a usual coin project) or ../.. (if we are a unusual coin project like ThirdParty or Data) COIN_PKG_CONFIG_PATH_UNINSTALLED= if test -f ../coin_subdirs.txt ; then for i in `cat ../coin_subdirs.txt` ; do if test -d ../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi if test -f ../../coin_subdirs.txt ; then for i in `cat ../../coin_subdirs.txt` ; do if test -d ../../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi fi if test -n "$PKG_CONFIG" && test x$coin_cc_is_cl = xtrue; then { echo "$as_me:$LINENO: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&5 echo "$as_me: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&2;} fi echo "$as_me:$LINENO: checking for COIN-OR package CoinUtils" >&5 echo $ECHO_N "checking for COIN-OR package CoinUtils... $ECHO_C" >&6 coin_has_coinutils=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "CoinUtils"; then coin_has_coinutils=skipping fi done fi if test "$coin_has_coinutils" != skipping; then # Check whether --with-m4_tolower(CoinUtils) or --without-m4_tolower(CoinUtils) was given. if test "${with_coinutils+set}" = set; then withval="$with_coinutils" if test "$withval" = no ; then coin_has_coinutils=skipping fi fi; fi COINUTILS_LIBS= COINUTILS_CFLAGS= COINUTILS_DATA= COINUTILS_DEPENDENCIES= COINUTILS_PCLIBS= COINUTILS_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-lib or --without-m4_tolower(CoinUtils)-lib was given. if test "${with_coinutils_lib+set}" = set; then withval="$with_coinutils_lib" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_LIBS="$withval" COINUTILS_PCLIBS="$withval" OSILIB_PCLIBS="$withval $OSILIB_PCLIBS" OSILIB_LIBS="$withval $OSILIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_LIBS_INSTALLED="$withval" OSILIB_LIBS_INSTALLED="$withval $OSILIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-incdir or --without-m4_tolower(CoinUtils)-incdir was given. if test "${with_coinutils_incdir+set}" = set; then withval="$with_coinutils_incdir" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_CFLAGS="-I`${CYGPATH_W} $withval`" OSILIB_CFLAGS="-I`${CYGPATH_W} $withval` $OSILIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_CFLAGS_INSTALLED="$COINUTILS_CFLAGS" OSILIB_CFLAGS_INSTALLED="$COINUTILS_CFLAGS $OSILIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-datadir or --without-m4_tolower(CoinUtils)-datadir was given. if test "${with_coinutils_datadir+set}" = set; then withval="$with_coinutils_datadir" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_coinutils = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinutils"; then COINUTILS_VERSIONS=`$PKG_CONFIG --modversion "coinutils" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinutils" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS="$cflags" COINUTILS_LIBS=`$PKG_CONFIG --libs "coinutils" 2>/dev/null` COINUTILS_DATA=`$PKG_CONFIG --variable=datadir "coinutils" 2>/dev/null` coin_has_coinutils=yes echo "$as_me:$LINENO: result: yes: $COINUTILS_VERSIONS" >&5 echo "${ECHO_T}yes: $COINUTILS_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then COINUTILS_LIBS=`echo " $COINUTILS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi COINUTILS_PCREQUIRES="coinutils" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in OsiLib OSILIB_PCREQUIRES="coinutils $OSILIB_PCREQUIRES" OSILIB_CFLAGS="$COINUTILS_CFLAGS $OSILIB_CFLAGS" OSILIB_LIBS="$COINUTILS_LIBS $OSILIB_LIBS" else COINUTILS_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinutils"` coin_has_coinutils=notGiven echo "$as_me:$LINENO: result: not given: $COINUTILS_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $COINUTILS_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module CoinUtils without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module CoinUtils without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package CoinUtils (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package CoinUtils (fallback)... $ECHO_C" >&6 coin_has_coinutils=notGiven COINUTILS_LIBS= COINUTILS_LIBS_INSTALLED= COINUTILS_CFLAGS= COINUTILS_CFLAGS_INSTALLED= COINUTILS_DATA= COINUTILS_DATA_INSTALLED= COINUTILS_PCLIBS= COINUTILS_PCREQUIRES= # initial list of dependencies is "coinutils", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinutils" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$COINUTILS_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` COINUTILS_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$COINUTILS_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi COINUTILS_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS="$projcflags $COINUTILS_CFLAGS" # set LIBS variable COINUTILS_LIBS="$projlibs $COINUTILS_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS_INSTALLED="$projcflags $COINUTILS_CFLAGS_INSTALLED" # set LIBS variable COINUTILS_LIBS_INSTALLED="$projlibs $COINUTILS_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_coinutils=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_COINUTILS 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then COINUTILS_LIBS=`echo " $COINUTILS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` COINUTILS_LIBS_INSTALLED=`echo " $COINUTILS_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi COINUTILS_PCREQUIRES="coinutils" OSILIB_PCREQUIRES="coinutils $OSILIB_PCREQUIRES" OSILIB_CFLAGS="$COINUTILS_CFLAGS $OSILIB_CFLAGS" OSILIB_LIBS="$COINUTILS_LIBS $OSILIB_LIBS" OSILIB_CFLAGS_INSTALLED="$COINUTILS_CFLAGS_INSTALLED $OSILIB_CFLAGS_INSTALLED" OSILIB_LIBS_INSTALLED="$COINUTILS_LIBS_INSTALLED $OSILIB_LIBS_INSTALLED" fi if test $coin_has_coinutils != notGiven && test $coin_has_coinutils != skipping; then COIN_HAS_COINUTILS_TRUE= COIN_HAS_COINUTILS_FALSE='#' else COIN_HAS_COINUTILS_TRUE='#' COIN_HAS_COINUTILS_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_coinutils" >&5 echo "${ECHO_T}$coin_has_coinutils" >&6 fi if test $coin_has_coinutils != skipping && test $coin_has_coinutils != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_COINUTILS 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) COINUTILS_DEPENDENCIES=`echo " $COINUTILS_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` OSILIB_DEPENDENCIES=`echo " $OSILIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$COINUTILS_CFLAGS" ; then { echo "$as_me:$LINENO: CoinUtils CFLAGS are $COINUTILS_CFLAGS" >&5 echo "$as_me: CoinUtils CFLAGS are $COINUTILS_CFLAGS" >&6;} fi if test -n "$COINUTILS_LIBS" ; then { echo "$as_me:$LINENO: CoinUtils LIBS are $COINUTILS_LIBS" >&5 echo "$as_me: CoinUtils LIBS are $COINUTILS_LIBS" >&6;} fi if test -n "$COINUTILS_DEPENDENCIES" ; then { echo "$as_me:$LINENO: CoinUtils DEPENDENCIES are $COINUTILS_DEPENDENCIES" >&5 echo "$as_me: CoinUtils DEPENDENCIES are $COINUTILS_DEPENDENCIES" >&6;} fi if test -n "$COINUTILS_DATA" ; then { echo "$as_me:$LINENO: CoinUtils DATA is $COINUTILS_DATA" >&5 echo "$as_me: CoinUtils DATA is $COINUTILS_DATA" >&6;} fi if test -n "$COINUTILS_PCLIBS" ; then { echo "$as_me:$LINENO: CoinUtils PCLIBS are $COINUTILS_PCLIBS" >&5 echo "$as_me: CoinUtils PCLIBS are $COINUTILS_PCLIBS" >&6;} fi if test -n "$COINUTILS_PCREQUIRES" ; then { echo "$as_me:$LINENO: CoinUtils PCREQUIRES are $COINUTILS_PCREQUIRES" >&5 echo "$as_me: CoinUtils PCREQUIRES are $COINUTILS_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: OsiLib CFLAGS are $OSILIB_CFLAGS" >&5 echo "$as_me: OsiLib CFLAGS are $OSILIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: OsiLib LIBS are $OSILIB_LIBS" >&5 echo "$as_me: OsiLib LIBS are $OSILIB_LIBS" >&6;} { echo "$as_me:$LINENO: OsiLib DEPENDENCIES are $OSILIB_DEPENDENCIES" >&5 echo "$as_me: OsiLib DEPENDENCIES are $OSILIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_coinutils != notGiven && test $coin_has_coinutils != skipping; then COIN_HAS_COINUTILS_TRUE= COIN_HAS_COINUTILS_FALSE='#' else COIN_HAS_COINUTILS_TRUE='#' COIN_HAS_COINUTILS_FALSE= fi if test $coin_has_coinutils != yes ; then { { echo "$as_me:$LINENO: error: Required package CoinUtils not available." >&5 echo "$as_me: error: Required package CoinUtils not available." >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: checking for COIN-OR package Glpk" >&5 echo $ECHO_N "checking for COIN-OR package Glpk... $ECHO_C" >&6 coin_has_glpk=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Glpk"; then coin_has_glpk=skipping fi done fi if test "$coin_has_glpk" != skipping; then # Check whether --with-m4_tolower(Glpk) or --without-m4_tolower(Glpk) was given. if test "${with_glpk+set}" = set; then withval="$with_glpk" if test "$withval" = no ; then coin_has_glpk=skipping fi fi; fi GLPK_LIBS= GLPK_CFLAGS= GLPK_DATA= GLPK_DEPENDENCIES= GLPK_PCLIBS= GLPK_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_glpk != skipping; then # Check whether --with-m4_tolower(Glpk)-lib or --without-m4_tolower(Glpk)-lib was given. if test "${with_glpk_lib+set}" = set; then withval="$with_glpk_lib" if test "$withval" = no ; then coin_has_glpk=skipping else coin_has_glpk=yes GLPK_LIBS="$withval" GLPK_PCLIBS="$withval" OSIGLPKLIB_PCLIBS="$withval $OSIGLPKLIB_PCLIBS" OSIGLPKLIB_LIBS="$withval $OSIGLPKLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then GLPK_LIBS_INSTALLED="$withval" OSIGLPKLIB_LIBS_INSTALLED="$withval $OSIGLPKLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_glpk != skipping; then # Check whether --with-m4_tolower(Glpk)-incdir or --without-m4_tolower(Glpk)-incdir was given. if test "${with_glpk_incdir+set}" = set; then withval="$with_glpk_incdir" if test "$withval" = no ; then coin_has_glpk=skipping else coin_has_glpk=yes GLPK_CFLAGS="-I`${CYGPATH_W} $withval`" OSIGLPKLIB_CFLAGS="-I`${CYGPATH_W} $withval` $OSIGLPKLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then GLPK_CFLAGS_INSTALLED="$GLPK_CFLAGS" OSIGLPKLIB_CFLAGS_INSTALLED="$GLPK_CFLAGS $OSIGLPKLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_glpk != skipping; then # Check whether --with-m4_tolower(Glpk)-datadir or --without-m4_tolower(Glpk)-datadir was given. if test "${with_glpk_datadir+set}" = set; then withval="$with_glpk_datadir" if test "$withval" = no ; then coin_has_glpk=skipping else coin_has_glpk=yes GLPK_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then GLPK_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_glpk = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinglpk"; then GLPK_VERSIONS=`$PKG_CONFIG --modversion "coinglpk" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinglpk" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi GLPK_CFLAGS="$cflags" GLPK_LIBS=`$PKG_CONFIG --libs "coinglpk" 2>/dev/null` GLPK_DATA=`$PKG_CONFIG --variable=datadir "coinglpk" 2>/dev/null` coin_has_glpk=yes echo "$as_me:$LINENO: result: yes: $GLPK_VERSIONS" >&5 echo "${ECHO_T}yes: $GLPK_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then GLPK_LIBS=`echo " $GLPK_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi GLPK_PCREQUIRES="coinglpk" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in OsiGlpkLib OSIGLPKLIB_PCREQUIRES="coinglpk $OSIGLPKLIB_PCREQUIRES" OSIGLPKLIB_CFLAGS="$GLPK_CFLAGS $OSIGLPKLIB_CFLAGS" OSIGLPKLIB_LIBS="$GLPK_LIBS $OSIGLPKLIB_LIBS" else GLPK_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinglpk"` coin_has_glpk=notGiven echo "$as_me:$LINENO: result: not given: $GLPK_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $GLPK_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Glpk without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Glpk without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Glpk (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Glpk (fallback)... $ECHO_C" >&6 coin_has_glpk=notGiven GLPK_LIBS= GLPK_LIBS_INSTALLED= GLPK_CFLAGS= GLPK_CFLAGS_INSTALLED= GLPK_DATA= GLPK_DATA_INSTALLED= GLPK_PCLIBS= GLPK_PCREQUIRES= # initial list of dependencies is "coinglpk", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinglpk" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$GLPK_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` GLPK_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$GLPK_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi GLPK_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi GLPK_CFLAGS="$projcflags $GLPK_CFLAGS" # set LIBS variable GLPK_LIBS="$projlibs $GLPK_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi GLPK_CFLAGS_INSTALLED="$projcflags $GLPK_CFLAGS_INSTALLED" # set LIBS variable GLPK_LIBS_INSTALLED="$projlibs $GLPK_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_glpk=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_GLPK 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then GLPK_LIBS=`echo " $GLPK_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` GLPK_LIBS_INSTALLED=`echo " $GLPK_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi GLPK_PCREQUIRES="coinglpk" OSIGLPKLIB_PCREQUIRES="coinglpk $OSIGLPKLIB_PCREQUIRES" OSIGLPKLIB_CFLAGS="$GLPK_CFLAGS $OSIGLPKLIB_CFLAGS" OSIGLPKLIB_LIBS="$GLPK_LIBS $OSIGLPKLIB_LIBS" OSIGLPKLIB_CFLAGS_INSTALLED="$GLPK_CFLAGS_INSTALLED $OSIGLPKLIB_CFLAGS_INSTALLED" OSIGLPKLIB_LIBS_INSTALLED="$GLPK_LIBS_INSTALLED $OSIGLPKLIB_LIBS_INSTALLED" fi if test $coin_has_glpk != notGiven && test $coin_has_glpk != skipping; then COIN_HAS_GLPK_TRUE= COIN_HAS_GLPK_FALSE='#' else COIN_HAS_GLPK_TRUE='#' COIN_HAS_GLPK_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_glpk" >&5 echo "${ECHO_T}$coin_has_glpk" >&6 fi if test $coin_has_glpk != skipping && test $coin_has_glpk != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_GLPK 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) GLPK_DEPENDENCIES=`echo " $GLPK_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` OSIGLPKLIB_DEPENDENCIES=`echo " $OSIGLPKLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$GLPK_CFLAGS" ; then { echo "$as_me:$LINENO: Glpk CFLAGS are $GLPK_CFLAGS" >&5 echo "$as_me: Glpk CFLAGS are $GLPK_CFLAGS" >&6;} fi if test -n "$GLPK_LIBS" ; then { echo "$as_me:$LINENO: Glpk LIBS are $GLPK_LIBS" >&5 echo "$as_me: Glpk LIBS are $GLPK_LIBS" >&6;} fi if test -n "$GLPK_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Glpk DEPENDENCIES are $GLPK_DEPENDENCIES" >&5 echo "$as_me: Glpk DEPENDENCIES are $GLPK_DEPENDENCIES" >&6;} fi if test -n "$GLPK_DATA" ; then { echo "$as_me:$LINENO: Glpk DATA is $GLPK_DATA" >&5 echo "$as_me: Glpk DATA is $GLPK_DATA" >&6;} fi if test -n "$GLPK_PCLIBS" ; then { echo "$as_me:$LINENO: Glpk PCLIBS are $GLPK_PCLIBS" >&5 echo "$as_me: Glpk PCLIBS are $GLPK_PCLIBS" >&6;} fi if test -n "$GLPK_PCREQUIRES" ; then { echo "$as_me:$LINENO: Glpk PCREQUIRES are $GLPK_PCREQUIRES" >&5 echo "$as_me: Glpk PCREQUIRES are $GLPK_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: OsiGlpkLib CFLAGS are $OSIGLPKLIB_CFLAGS" >&5 echo "$as_me: OsiGlpkLib CFLAGS are $OSIGLPKLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: OsiGlpkLib LIBS are $OSIGLPKLIB_LIBS" >&5 echo "$as_me: OsiGlpkLib LIBS are $OSIGLPKLIB_LIBS" >&6;} { echo "$as_me:$LINENO: OsiGlpkLib DEPENDENCIES are $OSIGLPKLIB_DEPENDENCIES" >&5 echo "$as_me: OsiGlpkLib DEPENDENCIES are $OSIGLPKLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_glpk != notGiven && test $coin_has_glpk != skipping; then COIN_HAS_GLPK_TRUE= COIN_HAS_GLPK_FALSE='#' else COIN_HAS_GLPK_TRUE='#' COIN_HAS_GLPK_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package SoPlex" >&5 echo $ECHO_N "checking for COIN-OR package SoPlex... $ECHO_C" >&6 coin_has_soplex=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "SoPlex"; then coin_has_soplex=skipping fi done fi if test "$coin_has_soplex" != skipping; then # Check whether --with-m4_tolower(SoPlex) or --without-m4_tolower(SoPlex) was given. if test "${with_soplex+set}" = set; then withval="$with_soplex" if test "$withval" = no ; then coin_has_soplex=skipping fi fi; fi SOPLEX_LIBS= SOPLEX_CFLAGS= SOPLEX_DATA= SOPLEX_DEPENDENCIES= SOPLEX_PCLIBS= SOPLEX_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_soplex != skipping; then # Check whether --with-m4_tolower(SoPlex)-lib or --without-m4_tolower(SoPlex)-lib was given. if test "${with_soplex_lib+set}" = set; then withval="$with_soplex_lib" if test "$withval" = no ; then coin_has_soplex=skipping else coin_has_soplex=yes SOPLEX_LIBS="$withval" SOPLEX_PCLIBS="$withval" OSISPXLIB_PCLIBS="$withval $OSISPXLIB_PCLIBS" OSISPXLIB_LIBS="$withval $OSISPXLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SOPLEX_LIBS_INSTALLED="$withval" OSISPXLIB_LIBS_INSTALLED="$withval $OSISPXLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_soplex != skipping; then # Check whether --with-m4_tolower(SoPlex)-incdir or --without-m4_tolower(SoPlex)-incdir was given. if test "${with_soplex_incdir+set}" = set; then withval="$with_soplex_incdir" if test "$withval" = no ; then coin_has_soplex=skipping else coin_has_soplex=yes SOPLEX_CFLAGS="-I`${CYGPATH_W} $withval`" OSISPXLIB_CFLAGS="-I`${CYGPATH_W} $withval` $OSISPXLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SOPLEX_CFLAGS_INSTALLED="$SOPLEX_CFLAGS" OSISPXLIB_CFLAGS_INSTALLED="$SOPLEX_CFLAGS $OSISPXLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_soplex != skipping; then # Check whether --with-m4_tolower(SoPlex)-datadir or --without-m4_tolower(SoPlex)-datadir was given. if test "${with_soplex_datadir+set}" = set; then withval="$with_soplex_datadir" if test "$withval" = no ; then coin_has_soplex=skipping else coin_has_soplex=yes SOPLEX_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SOPLEX_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_soplex = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinsoplex < 1.7"; then SOPLEX_VERSIONS=`$PKG_CONFIG --modversion "coinsoplex < 1.7" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinsoplex < 1.7" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SOPLEX_CFLAGS="$cflags" SOPLEX_LIBS=`$PKG_CONFIG --libs "coinsoplex < 1.7" 2>/dev/null` SOPLEX_DATA=`$PKG_CONFIG --variable=datadir "coinsoplex < 1.7" 2>/dev/null` coin_has_soplex=yes echo "$as_me:$LINENO: result: yes: $SOPLEX_VERSIONS" >&5 echo "${ECHO_T}yes: $SOPLEX_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SOPLEX_LIBS=`echo " $SOPLEX_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi SOPLEX_PCREQUIRES="coinsoplex < 1.7" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in OsiSpxLib OSISPXLIB_PCREQUIRES="coinsoplex < 1.7 $OSISPXLIB_PCREQUIRES" OSISPXLIB_CFLAGS="$SOPLEX_CFLAGS $OSISPXLIB_CFLAGS" OSISPXLIB_LIBS="$SOPLEX_LIBS $OSISPXLIB_LIBS" else SOPLEX_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinsoplex < 1.7"` coin_has_soplex=notGiven echo "$as_me:$LINENO: result: not given: $SOPLEX_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $SOPLEX_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module SoPlex without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module SoPlex without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package SoPlex (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package SoPlex (fallback)... $ECHO_C" >&6 coin_has_soplex=notGiven SOPLEX_LIBS= SOPLEX_LIBS_INSTALLED= SOPLEX_CFLAGS= SOPLEX_CFLAGS_INSTALLED= SOPLEX_DATA= SOPLEX_DATA_INSTALLED= SOPLEX_PCLIBS= SOPLEX_PCREQUIRES= # initial list of dependencies is "coinsoplex < 1.7", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinsoplex < 1.7" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$SOPLEX_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` SOPLEX_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$SOPLEX_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi SOPLEX_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SOPLEX_CFLAGS="$projcflags $SOPLEX_CFLAGS" # set LIBS variable SOPLEX_LIBS="$projlibs $SOPLEX_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SOPLEX_CFLAGS_INSTALLED="$projcflags $SOPLEX_CFLAGS_INSTALLED" # set LIBS variable SOPLEX_LIBS_INSTALLED="$projlibs $SOPLEX_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_soplex=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SOPLEX 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SOPLEX_LIBS=`echo " $SOPLEX_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` SOPLEX_LIBS_INSTALLED=`echo " $SOPLEX_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi SOPLEX_PCREQUIRES="coinsoplex < 1.7" OSISPXLIB_PCREQUIRES="coinsoplex < 1.7 $OSISPXLIB_PCREQUIRES" OSISPXLIB_CFLAGS="$SOPLEX_CFLAGS $OSISPXLIB_CFLAGS" OSISPXLIB_LIBS="$SOPLEX_LIBS $OSISPXLIB_LIBS" OSISPXLIB_CFLAGS_INSTALLED="$SOPLEX_CFLAGS_INSTALLED $OSISPXLIB_CFLAGS_INSTALLED" OSISPXLIB_LIBS_INSTALLED="$SOPLEX_LIBS_INSTALLED $OSISPXLIB_LIBS_INSTALLED" fi if test $coin_has_soplex != notGiven && test $coin_has_soplex != skipping; then COIN_HAS_SOPLEX_TRUE= COIN_HAS_SOPLEX_FALSE='#' else COIN_HAS_SOPLEX_TRUE='#' COIN_HAS_SOPLEX_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_soplex" >&5 echo "${ECHO_T}$coin_has_soplex" >&6 fi if test $coin_has_soplex != skipping && test $coin_has_soplex != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SOPLEX 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) SOPLEX_DEPENDENCIES=`echo " $SOPLEX_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` OSISPXLIB_DEPENDENCIES=`echo " $OSISPXLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$SOPLEX_CFLAGS" ; then { echo "$as_me:$LINENO: SoPlex CFLAGS are $SOPLEX_CFLAGS" >&5 echo "$as_me: SoPlex CFLAGS are $SOPLEX_CFLAGS" >&6;} fi if test -n "$SOPLEX_LIBS" ; then { echo "$as_me:$LINENO: SoPlex LIBS are $SOPLEX_LIBS" >&5 echo "$as_me: SoPlex LIBS are $SOPLEX_LIBS" >&6;} fi if test -n "$SOPLEX_DEPENDENCIES" ; then { echo "$as_me:$LINENO: SoPlex DEPENDENCIES are $SOPLEX_DEPENDENCIES" >&5 echo "$as_me: SoPlex DEPENDENCIES are $SOPLEX_DEPENDENCIES" >&6;} fi if test -n "$SOPLEX_DATA" ; then { echo "$as_me:$LINENO: SoPlex DATA is $SOPLEX_DATA" >&5 echo "$as_me: SoPlex DATA is $SOPLEX_DATA" >&6;} fi if test -n "$SOPLEX_PCLIBS" ; then { echo "$as_me:$LINENO: SoPlex PCLIBS are $SOPLEX_PCLIBS" >&5 echo "$as_me: SoPlex PCLIBS are $SOPLEX_PCLIBS" >&6;} fi if test -n "$SOPLEX_PCREQUIRES" ; then { echo "$as_me:$LINENO: SoPlex PCREQUIRES are $SOPLEX_PCREQUIRES" >&5 echo "$as_me: SoPlex PCREQUIRES are $SOPLEX_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: OsiSpxLib CFLAGS are $OSISPXLIB_CFLAGS" >&5 echo "$as_me: OsiSpxLib CFLAGS are $OSISPXLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: OsiSpxLib LIBS are $OSISPXLIB_LIBS" >&5 echo "$as_me: OsiSpxLib LIBS are $OSISPXLIB_LIBS" >&6;} { echo "$as_me:$LINENO: OsiSpxLib DEPENDENCIES are $OSISPXLIB_DEPENDENCIES" >&5 echo "$as_me: OsiSpxLib DEPENDENCIES are $OSISPXLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_soplex != notGiven && test $coin_has_soplex != skipping; then COIN_HAS_SOPLEX_TRUE= COIN_HAS_SOPLEX_FALSE='#' else COIN_HAS_SOPLEX_TRUE='#' COIN_HAS_SOPLEX_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package Sample" >&5 echo $ECHO_N "checking for COIN-OR package Sample... $ECHO_C" >&6 coin_has_sample=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Sample"; then coin_has_sample=skipping fi done fi if test "$coin_has_sample" != skipping; then # Check whether --with-m4_tolower(Sample) or --without-m4_tolower(Sample) was given. if test "${with_sample+set}" = set; then withval="$with_sample" if test "$withval" = no ; then coin_has_sample=skipping fi fi; fi SAMPLE_LIBS= SAMPLE_CFLAGS= SAMPLE_DATA= SAMPLE_DEPENDENCIES= SAMPLE_PCLIBS= SAMPLE_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-lib or --without-m4_tolower(Sample)-lib was given. if test "${with_sample_lib+set}" = set; then withval="$with_sample_lib" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_LIBS="$withval" SAMPLE_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-incdir or --without-m4_tolower(Sample)-incdir was given. if test "${with_sample_incdir+set}" = set; then withval="$with_sample_incdir" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_CFLAGS_INSTALLED="$SAMPLE_CFLAGS" fi fi fi; fi if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-datadir or --without-m4_tolower(Sample)-datadir was given. if test "${with_sample_datadir+set}" = set; then withval="$with_sample_datadir" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_sample = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coindatasample"; then SAMPLE_VERSIONS=`$PKG_CONFIG --modversion "coindatasample" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coindatasample" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS="$cflags" SAMPLE_LIBS=`$PKG_CONFIG --libs "coindatasample" 2>/dev/null` SAMPLE_DATA=`$PKG_CONFIG --variable=datadir "coindatasample" 2>/dev/null` coin_has_sample=yes echo "$as_me:$LINENO: result: yes: $SAMPLE_VERSIONS" >&5 echo "${ECHO_T}yes: $SAMPLE_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SAMPLE_LIBS=`echo " $SAMPLE_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi SAMPLE_PCREQUIRES="coindatasample" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else SAMPLE_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coindatasample"` coin_has_sample=notGiven echo "$as_me:$LINENO: result: not given: $SAMPLE_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $SAMPLE_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Sample without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Sample without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Sample (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Sample (fallback)... $ECHO_C" >&6 coin_has_sample=notGiven SAMPLE_LIBS= SAMPLE_LIBS_INSTALLED= SAMPLE_CFLAGS= SAMPLE_CFLAGS_INSTALLED= SAMPLE_DATA= SAMPLE_DATA_INSTALLED= SAMPLE_PCLIBS= SAMPLE_PCREQUIRES= # initial list of dependencies is "coindatasample", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coindatasample" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$SAMPLE_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` SAMPLE_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$SAMPLE_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi SAMPLE_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS="$projcflags $SAMPLE_CFLAGS" # set LIBS variable SAMPLE_LIBS="$projlibs $SAMPLE_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS_INSTALLED="$projcflags $SAMPLE_CFLAGS_INSTALLED" # set LIBS variable SAMPLE_LIBS_INSTALLED="$projlibs $SAMPLE_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_sample=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SAMPLE 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SAMPLE_LIBS=`echo " $SAMPLE_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` SAMPLE_LIBS_INSTALLED=`echo " $SAMPLE_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi SAMPLE_PCREQUIRES="coindatasample" fi if test $coin_has_sample != notGiven && test $coin_has_sample != skipping; then COIN_HAS_SAMPLE_TRUE= COIN_HAS_SAMPLE_FALSE='#' else COIN_HAS_SAMPLE_TRUE='#' COIN_HAS_SAMPLE_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_sample" >&5 echo "${ECHO_T}$coin_has_sample" >&6 fi if test $coin_has_sample != skipping && test $coin_has_sample != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SAMPLE 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) SAMPLE_DEPENDENCIES=`echo " $SAMPLE_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$SAMPLE_CFLAGS" ; then { echo "$as_me:$LINENO: Sample CFLAGS are $SAMPLE_CFLAGS" >&5 echo "$as_me: Sample CFLAGS are $SAMPLE_CFLAGS" >&6;} fi if test -n "$SAMPLE_LIBS" ; then { echo "$as_me:$LINENO: Sample LIBS are $SAMPLE_LIBS" >&5 echo "$as_me: Sample LIBS are $SAMPLE_LIBS" >&6;} fi if test -n "$SAMPLE_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Sample DEPENDENCIES are $SAMPLE_DEPENDENCIES" >&5 echo "$as_me: Sample DEPENDENCIES are $SAMPLE_DEPENDENCIES" >&6;} fi if test -n "$SAMPLE_DATA" ; then { echo "$as_me:$LINENO: Sample DATA is $SAMPLE_DATA" >&5 echo "$as_me: Sample DATA is $SAMPLE_DATA" >&6;} fi if test -n "$SAMPLE_PCLIBS" ; then { echo "$as_me:$LINENO: Sample PCLIBS are $SAMPLE_PCLIBS" >&5 echo "$as_me: Sample PCLIBS are $SAMPLE_PCLIBS" >&6;} fi if test -n "$SAMPLE_PCREQUIRES" ; then { echo "$as_me:$LINENO: Sample PCREQUIRES are $SAMPLE_PCREQUIRES" >&5 echo "$as_me: Sample PCREQUIRES are $SAMPLE_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_sample != notGiven && test $coin_has_sample != skipping; then COIN_HAS_SAMPLE_TRUE= COIN_HAS_SAMPLE_FALSE='#' else COIN_HAS_SAMPLE_TRUE='#' COIN_HAS_SAMPLE_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package Netlib" >&5 echo $ECHO_N "checking for COIN-OR package Netlib... $ECHO_C" >&6 coin_has_netlib=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Netlib"; then coin_has_netlib=skipping fi done fi if test "$coin_has_netlib" != skipping; then # Check whether --with-m4_tolower(Netlib) or --without-m4_tolower(Netlib) was given. if test "${with_netlib+set}" = set; then withval="$with_netlib" if test "$withval" = no ; then coin_has_netlib=skipping fi fi; fi NETLIB_LIBS= NETLIB_CFLAGS= NETLIB_DATA= NETLIB_DEPENDENCIES= NETLIB_PCLIBS= NETLIB_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-lib or --without-m4_tolower(Netlib)-lib was given. if test "${with_netlib_lib+set}" = set; then withval="$with_netlib_lib" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_LIBS="$withval" NETLIB_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-incdir or --without-m4_tolower(Netlib)-incdir was given. if test "${with_netlib_incdir+set}" = set; then withval="$with_netlib_incdir" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_CFLAGS_INSTALLED="$NETLIB_CFLAGS" fi fi fi; fi if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-datadir or --without-m4_tolower(Netlib)-datadir was given. if test "${with_netlib_datadir+set}" = set; then withval="$with_netlib_datadir" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_netlib = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coindatanetlib"; then NETLIB_VERSIONS=`$PKG_CONFIG --modversion "coindatanetlib" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coindatanetlib" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS="$cflags" NETLIB_LIBS=`$PKG_CONFIG --libs "coindatanetlib" 2>/dev/null` NETLIB_DATA=`$PKG_CONFIG --variable=datadir "coindatanetlib" 2>/dev/null` coin_has_netlib=yes echo "$as_me:$LINENO: result: yes: $NETLIB_VERSIONS" >&5 echo "${ECHO_T}yes: $NETLIB_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then NETLIB_LIBS=`echo " $NETLIB_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi NETLIB_PCREQUIRES="coindatanetlib" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else NETLIB_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coindatanetlib"` coin_has_netlib=notGiven echo "$as_me:$LINENO: result: not given: $NETLIB_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $NETLIB_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Netlib without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Netlib without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Netlib (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Netlib (fallback)... $ECHO_C" >&6 coin_has_netlib=notGiven NETLIB_LIBS= NETLIB_LIBS_INSTALLED= NETLIB_CFLAGS= NETLIB_CFLAGS_INSTALLED= NETLIB_DATA= NETLIB_DATA_INSTALLED= NETLIB_PCLIBS= NETLIB_PCREQUIRES= # initial list of dependencies is "coindatanetlib", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coindatanetlib" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$NETLIB_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` NETLIB_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$NETLIB_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi NETLIB_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS="$projcflags $NETLIB_CFLAGS" # set LIBS variable NETLIB_LIBS="$projlibs $NETLIB_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS_INSTALLED="$projcflags $NETLIB_CFLAGS_INSTALLED" # set LIBS variable NETLIB_LIBS_INSTALLED="$projlibs $NETLIB_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_netlib=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_NETLIB 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then NETLIB_LIBS=`echo " $NETLIB_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` NETLIB_LIBS_INSTALLED=`echo " $NETLIB_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi NETLIB_PCREQUIRES="coindatanetlib" fi if test $coin_has_netlib != notGiven && test $coin_has_netlib != skipping; then COIN_HAS_NETLIB_TRUE= COIN_HAS_NETLIB_FALSE='#' else COIN_HAS_NETLIB_TRUE='#' COIN_HAS_NETLIB_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_netlib" >&5 echo "${ECHO_T}$coin_has_netlib" >&6 fi if test $coin_has_netlib != skipping && test $coin_has_netlib != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_NETLIB 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) NETLIB_DEPENDENCIES=`echo " $NETLIB_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$NETLIB_CFLAGS" ; then { echo "$as_me:$LINENO: Netlib CFLAGS are $NETLIB_CFLAGS" >&5 echo "$as_me: Netlib CFLAGS are $NETLIB_CFLAGS" >&6;} fi if test -n "$NETLIB_LIBS" ; then { echo "$as_me:$LINENO: Netlib LIBS are $NETLIB_LIBS" >&5 echo "$as_me: Netlib LIBS are $NETLIB_LIBS" >&6;} fi if test -n "$NETLIB_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Netlib DEPENDENCIES are $NETLIB_DEPENDENCIES" >&5 echo "$as_me: Netlib DEPENDENCIES are $NETLIB_DEPENDENCIES" >&6;} fi if test -n "$NETLIB_DATA" ; then { echo "$as_me:$LINENO: Netlib DATA is $NETLIB_DATA" >&5 echo "$as_me: Netlib DATA is $NETLIB_DATA" >&6;} fi if test -n "$NETLIB_PCLIBS" ; then { echo "$as_me:$LINENO: Netlib PCLIBS are $NETLIB_PCLIBS" >&5 echo "$as_me: Netlib PCLIBS are $NETLIB_PCLIBS" >&6;} fi if test -n "$NETLIB_PCREQUIRES" ; then { echo "$as_me:$LINENO: Netlib PCREQUIRES are $NETLIB_PCREQUIRES" >&5 echo "$as_me: Netlib PCREQUIRES are $NETLIB_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_netlib != notGiven && test $coin_has_netlib != skipping; then COIN_HAS_NETLIB_TRUE= COIN_HAS_NETLIB_FALSE='#' else COIN_HAS_NETLIB_TRUE='#' COIN_HAS_NETLIB_FALSE= fi ############################################################################# # Third party solvers # ############################################################################# # Check which third party solvers are available. Cplex detection has been # tested on a semi-regular basis, and Mosek detection most likely works. For # the rest, it's anyone's guess. -- lh, 080529 -- # fixed detection of Mosek and Xpress -- stefan, 091003 (linux32, gcc) -- echo "$as_me:$LINENO: checking if user provides library for Cplex" >&5 echo $ECHO_N "checking if user provides library for Cplex... $ECHO_C" >&6 # Check for header file directory # Check whether --with-cplex-incdir or --without-cplex-incdir was given. if test "${with_cplex_incdir+set}" = set; then withval="$with_cplex_incdir" CPXINCDIR=`cd $withval; pwd` fi; # Check for library directory # Check whether --with-cplex-lib or --without-cplex-lib was given. if test "${with_cplex_lib+set}" = set; then withval="$with_cplex_lib" CPXLIB=$withval fi; # Switch to disable library check if requested # Check whether --enable-cplex-libcheck or --disable-cplex-libcheck was given. if test "${enable_cplex_libcheck+set}" = set; then enableval="$enable_cplex_libcheck" cplex_libcheck=$enableval else cplex_libcheck=yes fi; # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$CPXINCDIR" != x || test x"$CPXLIB" != x; then if test x"$CPXINCDIR" = x || test x"$CPXLIB" = x; then { { echo "$as_me:$LINENO: error: You need to specify both an include directory and link flags to use library Cplex. Use --with-cplex-incdir of environment variable $CPXINCDIR to specify the include directory. Use --with-cplex-lib or environment variable $CPXLIB to specify link flags." >&5 echo "$as_me: error: You need to specify both an include directory and link flags to use library Cplex. Use --with-cplex-incdir of environment variable $CPXINCDIR to specify the include directory. Use --with-cplex-lib or environment variable $CPXLIB to specify link flags." >&2;} { (exit 1); exit 1; }; } fi coin_has_cpx=true echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else coin_has_cpx=false echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # If we have instructions for use, consider header and link checks. if test $coin_has_cpx = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. if test -r $CPXINCDIR/cplex.h; then : else { { echo "$as_me:$LINENO: error: Cannot find file cplex.h in $CPXINCDIR" >&5 echo "$as_me: error: Cannot find file cplex.h in $CPXINCDIR" >&2;} { (exit 1); exit 1; }; } : fi # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. if test x"$cplex_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$CPXLIB " coin_CPX_link=no ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu for fnm in CPXgetstat ; do echo "$as_me:$LINENO: checking whether symbol $fnm is available with CPX" >&5 echo $ECHO_N "checking whether symbol $fnm is available with CPX... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { $fnm() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 coin_CPX_link=yes break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$coin_save_LIBS" if test x"$coin_CPX_link" != xyes ; then { { echo "$as_me:$LINENO: error: Cannot find symbol(s) CPXgetstat with CPX" >&5 echo "$as_me: error: Cannot find symbol(s) CPXgetstat with CPX" >&2;} { (exit 1); exit 1; }; } fi fi # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to _{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. cat >>confdefs.h <<\_ACEOF #define COIN_HAS_CPX 1 _ACEOF fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. if test $coin_has_cpx = true; then COIN_HAS_CPX_TRUE= COIN_HAS_CPX_FALSE='#' else COIN_HAS_CPX_TRUE='#' COIN_HAS_CPX_FALSE= fi echo "$as_me:$LINENO: checking if user provides library for Mosek" >&5 echo $ECHO_N "checking if user provides library for Mosek... $ECHO_C" >&6 # Check for header file directory # Check whether --with-mosek-incdir or --without-mosek-incdir was given. if test "${with_mosek_incdir+set}" = set; then withval="$with_mosek_incdir" MSKINCDIR=`cd $withval; pwd` fi; # Check for library directory # Check whether --with-mosek-lib or --without-mosek-lib was given. if test "${with_mosek_lib+set}" = set; then withval="$with_mosek_lib" MSKLIB=$withval fi; # Switch to disable library check if requested # Check whether --enable-mosek-libcheck or --disable-mosek-libcheck was given. if test "${enable_mosek_libcheck+set}" = set; then enableval="$enable_mosek_libcheck" mosek_libcheck=$enableval else mosek_libcheck=yes fi; # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$MSKINCDIR" != x || test x"$MSKLIB" != x; then if test x"$MSKINCDIR" = x || test x"$MSKLIB" = x; then { { echo "$as_me:$LINENO: error: You need to specify both an include directory and link flags to use library Mosek. Use --with-mosek-incdir of environment variable $MSKINCDIR to specify the include directory. Use --with-mosek-lib or environment variable $MSKLIB to specify link flags." >&5 echo "$as_me: error: You need to specify both an include directory and link flags to use library Mosek. Use --with-mosek-incdir of environment variable $MSKINCDIR to specify the include directory. Use --with-mosek-lib or environment variable $MSKLIB to specify link flags." >&2;} { (exit 1); exit 1; }; } fi coin_has_msk=true echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else coin_has_msk=false echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # If we have instructions for use, consider header and link checks. if test $coin_has_msk = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. if test -r $MSKINCDIR/mosek.h; then : else { { echo "$as_me:$LINENO: error: Cannot find file mosek.h in $MSKINCDIR" >&5 echo "$as_me: error: Cannot find file mosek.h in $MSKINCDIR" >&2;} { (exit 1); exit 1; }; } : fi # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. if test x"$mosek_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$MSKLIB " coin_MSK_link=no ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu for fnm in MSK_makeenv ; do echo "$as_me:$LINENO: checking whether symbol $fnm is available with MSK" >&5 echo $ECHO_N "checking whether symbol $fnm is available with MSK... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { $fnm() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 coin_MSK_link=yes break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$coin_save_LIBS" if test x"$coin_MSK_link" != xyes ; then { { echo "$as_me:$LINENO: error: Cannot find symbol(s) MSK_makeenv with MSK" >&5 echo "$as_me: error: Cannot find symbol(s) MSK_makeenv with MSK" >&2;} { (exit 1); exit 1; }; } fi fi # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to _{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. cat >>confdefs.h <<\_ACEOF #define COIN_HAS_MSK 1 _ACEOF fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. if test $coin_has_msk = true; then COIN_HAS_MSK_TRUE= COIN_HAS_MSK_FALSE='#' else COIN_HAS_MSK_TRUE='#' COIN_HAS_MSK_FALSE= fi echo "$as_me:$LINENO: checking if user provides library for Xpress" >&5 echo $ECHO_N "checking if user provides library for Xpress... $ECHO_C" >&6 # Check for header file directory # Check whether --with-xpress-incdir or --without-xpress-incdir was given. if test "${with_xpress_incdir+set}" = set; then withval="$with_xpress_incdir" XPRINCDIR=`cd $withval; pwd` fi; # Check for library directory # Check whether --with-xpress-lib or --without-xpress-lib was given. if test "${with_xpress_lib+set}" = set; then withval="$with_xpress_lib" XPRLIB=$withval fi; # Switch to disable library check if requested # Check whether --enable-xpress-libcheck or --disable-xpress-libcheck was given. if test "${enable_xpress_libcheck+set}" = set; then enableval="$enable_xpress_libcheck" xpress_libcheck=$enableval else xpress_libcheck=yes fi; # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$XPRINCDIR" != x || test x"$XPRLIB" != x; then if test x"$XPRINCDIR" = x || test x"$XPRLIB" = x; then { { echo "$as_me:$LINENO: error: You need to specify both an include directory and link flags to use library Xpress. Use --with-xpress-incdir of environment variable $XPRINCDIR to specify the include directory. Use --with-xpress-lib or environment variable $XPRLIB to specify link flags." >&5 echo "$as_me: error: You need to specify both an include directory and link flags to use library Xpress. Use --with-xpress-incdir of environment variable $XPRINCDIR to specify the include directory. Use --with-xpress-lib or environment variable $XPRLIB to specify link flags." >&2;} { (exit 1); exit 1; }; } fi coin_has_xpr=true echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else coin_has_xpr=false echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # If we have instructions for use, consider header and link checks. if test $coin_has_xpr = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. if test -r $XPRINCDIR/xprs.h; then : else { { echo "$as_me:$LINENO: error: Cannot find file xprs.h in $XPRINCDIR" >&5 echo "$as_me: error: Cannot find file xprs.h in $XPRINCDIR" >&2;} { (exit 1); exit 1; }; } : fi # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. if test x"$xpress_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$XPRLIB " coin_XPR_link=no ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu for fnm in XPRSinit ; do echo "$as_me:$LINENO: checking whether symbol $fnm is available with XPR" >&5 echo $ECHO_N "checking whether symbol $fnm is available with XPR... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { $fnm() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 coin_XPR_link=yes break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$coin_save_LIBS" if test x"$coin_XPR_link" != xyes ; then { { echo "$as_me:$LINENO: error: Cannot find symbol(s) XPRSinit with XPR" >&5 echo "$as_me: error: Cannot find symbol(s) XPRSinit with XPR" >&2;} { (exit 1); exit 1; }; } fi fi # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to _{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. cat >>confdefs.h <<\_ACEOF #define COIN_HAS_XPR 1 _ACEOF fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. if test $coin_has_xpr = true; then COIN_HAS_XPR_TRUE= COIN_HAS_XPR_FALSE='#' else COIN_HAS_XPR_TRUE='#' COIN_HAS_XPR_FALSE= fi echo "$as_me:$LINENO: checking if user provides library for Gurobi" >&5 echo $ECHO_N "checking if user provides library for Gurobi... $ECHO_C" >&6 # Check for header file directory # Check whether --with-gurobi-incdir or --without-gurobi-incdir was given. if test "${with_gurobi_incdir+set}" = set; then withval="$with_gurobi_incdir" GRBINCDIR=`cd $withval; pwd` fi; # Check for library directory # Check whether --with-gurobi-lib or --without-gurobi-lib was given. if test "${with_gurobi_lib+set}" = set; then withval="$with_gurobi_lib" GRBLIB=$withval fi; # Switch to disable library check if requested # Check whether --enable-gurobi-libcheck or --disable-gurobi-libcheck was given. if test "${enable_gurobi_libcheck+set}" = set; then enableval="$enable_gurobi_libcheck" gurobi_libcheck=$enableval else gurobi_libcheck=yes fi; # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$GRBINCDIR" != x || test x"$GRBLIB" != x; then if test x"$GRBINCDIR" = x || test x"$GRBLIB" = x; then { { echo "$as_me:$LINENO: error: You need to specify both an include directory and link flags to use library Gurobi. Use --with-gurobi-incdir of environment variable $GRBINCDIR to specify the include directory. Use --with-gurobi-lib or environment variable $GRBLIB to specify link flags." >&5 echo "$as_me: error: You need to specify both an include directory and link flags to use library Gurobi. Use --with-gurobi-incdir of environment variable $GRBINCDIR to specify the include directory. Use --with-gurobi-lib or environment variable $GRBLIB to specify link flags." >&2;} { (exit 1); exit 1; }; } fi coin_has_grb=true echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else coin_has_grb=false echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # If we have instructions for use, consider header and link checks. if test $coin_has_grb = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. if test -r $GRBINCDIR/gurobi_c.h; then : else { { echo "$as_me:$LINENO: error: Cannot find file gurobi_c.h in $GRBINCDIR" >&5 echo "$as_me: error: Cannot find file gurobi_c.h in $GRBINCDIR" >&2;} { (exit 1); exit 1; }; } : fi # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. if test x"$gurobi_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$GRBLIB " coin_GRB_link=no ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu for fnm in GRBloadenv ; do echo "$as_me:$LINENO: checking whether symbol $fnm is available with GRB" >&5 echo $ECHO_N "checking whether symbol $fnm is available with GRB... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { $fnm() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 coin_GRB_link=yes break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$coin_save_LIBS" if test x"$coin_GRB_link" != xyes ; then { { echo "$as_me:$LINENO: error: Cannot find symbol(s) GRBloadenv with GRB" >&5 echo "$as_me: error: Cannot find symbol(s) GRBloadenv with GRB" >&2;} { (exit 1); exit 1; }; } fi fi # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to _{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. cat >>confdefs.h <<\_ACEOF #define COIN_HAS_GRB 1 _ACEOF fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. if test $coin_has_grb = true; then COIN_HAS_GRB_TRUE= COIN_HAS_GRB_FALSE='#' else COIN_HAS_GRB_TRUE='#' COIN_HAS_GRB_FALSE= fi ############################################################################# # Examples solver # ############################################################################# # choose a solver interface that can be used in the examples if test $coin_has_glpk = yes ; then OSI_EXAMPLES_SOLVER_NAME=OsiGlpkSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="$GLPK_CFLAGS" OSI_EXAMPLES_SOLVER_LIBS="-lOsiGlpk $GLPK_LIBS_INSTALLED" OSI_EXAMPLES_SOLVER_PCNAME=osi-glpk elif test $coin_has_cpx = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiCpxSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$CPXINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiCpx $CPXLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-cplex elif test $coin_has_grb = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiGrbSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$GRBINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiGrb $GRBLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-gurobi elif test $coin_has_msk = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiMskSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$MSKINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiMsk $MSKLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-mosek elif test $coin_has_xpr = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiXprSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$XPRINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiXpr $XPRLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-xpress elif test $coin_has_soplex = yes ; then OSI_EXAMPLES_SOLVER_NAME=OsiSpxSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="$SOPLEX_CFLAGS" OSI_EXAMPLES_SOLVER_LIBS="-lOsiSpx $SOPLEX_LIBS_INSTALLED" OSI_EXAMPLES_SOLVER_PCNAME=osi-soplex else { echo "$as_me:$LINENO: WARNING: No solver available, examples will not work." >&5 echo "$as_me: WARNING: No solver available, examples will not work." >&2;} fi # adjust linker flags for (i)cl compiler if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then OSI_EXAMPLES_SOLVER_LIBS=`echo " $OSI_EXAMPLES_SOLVER_LIBS" | sed -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi ############################################################################# # Configuration options for individual OSIs # ############################################################################# # If any of the tests performed in this section actually require the presence # of the solver (file presence, link checks, etc.) be sure to guard the call. # We assume that GLPK is not too old cat >>confdefs.h <<\_ACEOF #define GLPK_HAS_INTOPT 1 _ACEOF ############################################################################# # Check for doxygen # ############################################################################# { echo "$as_me:$LINENO: configuring doxygen documentation options" >&5 echo "$as_me: configuring doxygen documentation options" >&6;} # Check to see if doxygen is available. # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_doxygen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_doxygen"; then ac_cv_prog_coin_have_doxygen="$coin_have_doxygen" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_doxygen="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_doxygen" && ac_cv_prog_coin_have_doxygen="no" fi fi coin_have_doxygen=$ac_cv_prog_coin_have_doxygen if test -n "$coin_have_doxygen"; then echo "$as_me:$LINENO: result: $coin_have_doxygen" >&5 echo "${ECHO_T}$coin_have_doxygen" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_latex+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_latex"; then ac_cv_prog_coin_have_latex="$coin_have_latex" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_latex="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_latex" && ac_cv_prog_coin_have_latex="no" fi fi coin_have_latex=$ac_cv_prog_coin_have_latex if test -n "$coin_have_latex"; then echo "$as_me:$LINENO: result: $coin_have_latex" >&5 echo "${ECHO_T}$coin_have_latex" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Look for the dot tool from the graphviz package, unless the user has # disabled it. # Check whether --with-dot or --without-dot was given. if test "${with_dot+set}" = set; then withval="$with_dot" else withval=yes fi; if test x"$withval" = xno ; then coin_doxy_usedot=NO echo "$as_me:$LINENO: checking for dot " >&5 echo $ECHO_N "checking for dot ... $ECHO_C" >&6 echo "$as_me:$LINENO: result: disabled" >&5 echo "${ECHO_T}disabled" >&6 else # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_doxy_usedot+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_doxy_usedot"; then ac_cv_prog_coin_doxy_usedot="$coin_doxy_usedot" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_doxy_usedot="YES" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_doxy_usedot" && ac_cv_prog_coin_doxy_usedot="NO" fi fi coin_doxy_usedot=$ac_cv_prog_coin_doxy_usedot if test -n "$coin_doxy_usedot"; then echo "$as_me:$LINENO: result: $coin_doxy_usedot" >&5 echo "${ECHO_T}$coin_doxy_usedot" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi # Generate a tag file name and a log file name coin_doxy_tagname=doxydoc/${PACKAGE}_doxy.tag coin_doxy_logname=doxydoc/${PACKAGE}_doxy.log if test $coin_have_doxygen = yes; then COIN_HAS_DOXYGEN_TRUE= COIN_HAS_DOXYGEN_FALSE='#' else COIN_HAS_DOXYGEN_TRUE='#' COIN_HAS_DOXYGEN_FALSE= fi if test $coin_have_latex = yes; then COIN_HAS_LATEX_TRUE= COIN_HAS_LATEX_FALSE='#' else COIN_HAS_LATEX_TRUE='#' COIN_HAS_LATEX_FALSE= fi # Process the list of project names and massage them into possible doxygen # doc'n directories. Prefer 1) classic external, source processed using # a project-specific doxygen.conf, we use the tag file; 2) classic # external, source processed using package doxygen.conf; 3) installed # doxydoc. Alternatives 1) and 2) are only possible if the directory will be # configured, which we can't know unless this is the package base configure, # since coin_subdirs is only set there. Hence it's sufficient to check for # membership. If we use a tag file from a classic external, exclude the # source from doxygen processing when doxygen runs in the base directory. coin_doxy_tagfiles= coin_doxy_excludes= tmp="CoinUtils" for proj in $tmp ; do lc_proj=`echo $proj | tr [A-Z] [a-z]` echo "$as_me:$LINENO: checking for doxygen doc'n for $proj " >&5 echo $ECHO_N "checking for doxygen doc'n for $proj ... $ECHO_C" >&6 doxytag=${lc_proj}_doxy.tag doxyfound=no # proj will be configured, hence doxydoc present in build tree doxysrcdir="${srcdir}/../${proj}" # AC_MSG_NOTICE([Considering $doxysrcdir (base)]) if test -d "$doxysrcdir" ; then # with a doxydoc directory? doxydir="$doxysrcdir/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (base)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) if test -d "$doxydir" ; then # use tag file; don't process source doxydir="../${proj}/doxydoc" coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 coin_doxy_excludes="$coin_doxy_excludes */${proj}" else # will process the source -- nothing further to be done here echo "$as_me:$LINENO: result: $doxysrcdir (src)" >&5 echo "${ECHO_T}$doxysrcdir (src)" >&6 fi doxyfound=yes fi # Not built, fall back to installed tag file if test $doxyfound = no ; then eval doxydir="${datadir}/coin/doc/${proj}/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (install)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 fi done ############################################################################# # System header # ############################################################################# ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cmath],[],[],[$hdr]) for ac_header in cmath do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cmath" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([math.h],[],[],[$hdr]) for ac_header in math.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cfloat],[],[],[$hdr]) for ac_header in cfloat do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cfloat" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([float.h],[],[],[$hdr]) for ac_header in float.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cieeefp],[],[],[$hdr]) for ac_header in cieeefp do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cieeefp" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([ieeefp.h],[],[],[$hdr]) for ac_header in ieeefp.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) ac_config_files="$ac_config_files Makefile examples/Makefile src/Osi/Makefile src/OsiCpx/Makefile src/OsiGlpk/Makefile src/OsiMsk/Makefile src/OsiXpr/Makefile src/OsiGrb/Makefile src/OsiSpx/Makefile src/OsiCommonTest/Makefile test/Makefile osi.pc osi-uninstalled.pc osi-unittests.pc osi-unittests-uninstalled.pc" if test $coin_has_cpx = true ; then ac_config_files="$ac_config_files osi-cplex.pc:src/OsiCpx/osi-cplex.pc.in osi-cplex-uninstalled.pc:src/OsiCpx/osi-cplex-uninstalled.pc.in" fi if test $coin_has_glpk = yes ; then ac_config_files="$ac_config_files osi-glpk.pc:src/OsiGlpk/osi-glpk.pc.in osi-glpk-uninstalled.pc:src/OsiGlpk/osi-glpk-uninstalled.pc.in" fi if test $coin_has_grb = true ; then ac_config_files="$ac_config_files osi-gurobi.pc:src/OsiGrb/osi-gurobi.pc.in osi-gurobi-uninstalled.pc:src/OsiGrb/osi-gurobi-uninstalled.pc.in" fi if test $coin_has_msk = true ; then ac_config_files="$ac_config_files osi-mosek.pc:src/OsiMsk/osi-mosek.pc.in osi-mosek-uninstalled.pc:src/OsiMsk/osi-mosek-uninstalled.pc.in" fi if test $coin_has_xpr = true ; then ac_config_files="$ac_config_files osi-xpress.pc:src/OsiXpr/osi-xpress.pc.in osi-xpress-uninstalled.pc:src/OsiXpr/osi-xpress-uninstalled.pc.in" fi if test $coin_has_soplex = yes ; then ac_config_files="$ac_config_files osi-soplex.pc:src/OsiSpx/osi-soplex.pc.in osi-soplex-uninstalled.pc:src/OsiSpx/osi-soplex-uninstalled.pc.in" fi ac_config_files="$ac_config_files doxydoc/doxygen.conf" # Here put the location and name of the configuration header file ac_config_headers="$ac_config_headers src/Osi/config.h src/Osi/config_osi.h" # Finally, we let configure write all the output... echo "$as_me:$LINENO: checking which command should be used to link input files" >&5 echo $ECHO_N "checking which command should be used to link input files... $ECHO_C" >&6 coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac echo "$as_me:$LINENO: result: $coin_link_input_cmd" >&5 echo "${ECHO_T}$coin_link_input_cmd" >&6 if test x$coin_skip_ac_output != xyes; then # library extension case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${ALWAYS_FALSE_TRUE}" && test -z "${ALWAYS_FALSE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CC_IS_CL_TRUE}" && test -z "${COIN_CC_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CXX_IS_CL_TRUE}" && test -z "${COIN_CXX_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_EXTERNALS_TRUE}" && test -z "${HAVE_EXTERNALS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DEPENDENCY_LINKING_TRUE}" && test -z "${DEPENDENCY_LINKING_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_PKGCONFIG_TRUE}" && test -z "${COIN_HAS_PKGCONFIG_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_PKGCONFIG\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_PKGCONFIG\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_COINUTILS_TRUE}" && test -z "${COIN_HAS_COINUTILS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_COINUTILS_TRUE}" && test -z "${COIN_HAS_COINUTILS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_GLPK_TRUE}" && test -z "${COIN_HAS_GLPK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_GLPK_TRUE}" && test -z "${COIN_HAS_GLPK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SOPLEX_TRUE}" && test -z "${COIN_HAS_SOPLEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SOPLEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SOPLEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SOPLEX_TRUE}" && test -z "${COIN_HAS_SOPLEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SOPLEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SOPLEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SAMPLE_TRUE}" && test -z "${COIN_HAS_SAMPLE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SAMPLE_TRUE}" && test -z "${COIN_HAS_SAMPLE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_NETLIB_TRUE}" && test -z "${COIN_HAS_NETLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_NETLIB_TRUE}" && test -z "${COIN_HAS_NETLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_CPX_TRUE}" && test -z "${COIN_HAS_CPX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_CPX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_CPX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_MSK_TRUE}" && test -z "${COIN_HAS_MSK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_MSK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_MSK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_XPR_TRUE}" && test -z "${COIN_HAS_XPR_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_XPR\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_XPR\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_GRB_TRUE}" && test -z "${COIN_HAS_GRB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_GRB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_GRB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_DOXYGEN_TRUE}" && test -z "${COIN_HAS_DOXYGEN_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LATEX_TRUE}" && test -z "${COIN_HAS_LATEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by Osi $as_me 0.108.0, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ Osi config.status 0.108.0 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "src/Osi/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Osi/Makefile" ;; "src/OsiCpx/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiCpx/Makefile" ;; "src/OsiGlpk/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiGlpk/Makefile" ;; "src/OsiMsk/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiMsk/Makefile" ;; "src/OsiXpr/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiXpr/Makefile" ;; "src/OsiGrb/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiGrb/Makefile" ;; "src/OsiSpx/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiSpx/Makefile" ;; "src/OsiCommonTest/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiCommonTest/Makefile" ;; "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "osi.pc" ) CONFIG_FILES="$CONFIG_FILES osi.pc" ;; "osi-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-uninstalled.pc" ;; "osi-unittests.pc" ) CONFIG_FILES="$CONFIG_FILES osi-unittests.pc" ;; "osi-unittests-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-unittests-uninstalled.pc" ;; "osi-cplex.pc" ) CONFIG_FILES="$CONFIG_FILES osi-cplex.pc:src/OsiCpx/osi-cplex.pc.in" ;; "osi-cplex-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-cplex-uninstalled.pc:src/OsiCpx/osi-cplex-uninstalled.pc.in" ;; "osi-glpk.pc" ) CONFIG_FILES="$CONFIG_FILES osi-glpk.pc:src/OsiGlpk/osi-glpk.pc.in" ;; "osi-glpk-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-glpk-uninstalled.pc:src/OsiGlpk/osi-glpk-uninstalled.pc.in" ;; "osi-gurobi.pc" ) CONFIG_FILES="$CONFIG_FILES osi-gurobi.pc:src/OsiGrb/osi-gurobi.pc.in" ;; "osi-gurobi-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-gurobi-uninstalled.pc:src/OsiGrb/osi-gurobi-uninstalled.pc.in" ;; "osi-mosek.pc" ) CONFIG_FILES="$CONFIG_FILES osi-mosek.pc:src/OsiMsk/osi-mosek.pc.in" ;; "osi-mosek-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-mosek-uninstalled.pc:src/OsiMsk/osi-mosek-uninstalled.pc.in" ;; "osi-xpress.pc" ) CONFIG_FILES="$CONFIG_FILES osi-xpress.pc:src/OsiXpr/osi-xpress.pc.in" ;; "osi-xpress-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-xpress-uninstalled.pc:src/OsiXpr/osi-xpress-uninstalled.pc.in" ;; "osi-soplex.pc" ) CONFIG_FILES="$CONFIG_FILES osi-soplex.pc:src/OsiSpx/osi-soplex.pc.in" ;; "osi-soplex-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-soplex-uninstalled.pc:src/OsiSpx/osi-soplex-uninstalled.pc.in" ;; "doxydoc/doxygen.conf" ) CONFIG_FILES="$CONFIG_FILES doxydoc/doxygen.conf" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "src/Osi/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/Osi/config.h" ;; "src/Osi/config_osi.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/Osi/config_osi.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@ALWAYS_FALSE_TRUE@,$ALWAYS_FALSE_TRUE,;t t s,@ALWAYS_FALSE_FALSE@,$ALWAYS_FALSE_FALSE,;t t s,@have_svnversion@,$have_svnversion,;t t s,@OSI_SVN_REV@,$OSI_SVN_REV,;t t s,@CDEFS@,$CDEFS,;t t s,@ADD_CFLAGS@,$ADD_CFLAGS,;t t s,@DBG_CFLAGS@,$DBG_CFLAGS,;t t s,@OPT_CFLAGS@,$OPT_CFLAGS,;t t s,@sol_cc_compiler@,$sol_cc_compiler,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@COIN_CC_IS_CL_TRUE@,$COIN_CC_IS_CL_TRUE,;t t s,@COIN_CC_IS_CL_FALSE@,$COIN_CC_IS_CL_FALSE,;t t s,@MPICC@,$MPICC,;t t s,@CXXDEFS@,$CXXDEFS,;t t s,@ADD_CXXFLAGS@,$ADD_CXXFLAGS,;t t s,@DBG_CXXFLAGS@,$DBG_CXXFLAGS,;t t s,@OPT_CXXFLAGS@,$OPT_CXXFLAGS,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@COIN_CXX_IS_CL_TRUE@,$COIN_CXX_IS_CL_TRUE,;t t s,@COIN_CXX_IS_CL_FALSE@,$COIN_CXX_IS_CL_FALSE,;t t s,@MPICXX@,$MPICXX,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CPP@,$CPP,;t t s,@CXXCPP@,$CXXCPP,;t t s,@F77@,$F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@ac_c_preproc_warn_flag@,$ac_c_preproc_warn_flag,;t t s,@ac_cxx_preproc_warn_flag@,$ac_cxx_preproc_warn_flag,;t t s,@RPATH_FLAGS@,$RPATH_FLAGS,;t t s,@DEPENDENCY_LINKING_TRUE@,$DEPENDENCY_LINKING_TRUE,;t t s,@DEPENDENCY_LINKING_FALSE@,$DEPENDENCY_LINKING_FALSE,;t t s,@LT_LDFLAGS@,$LT_LDFLAGS,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@ac_ct_PKG_CONFIG@,$ac_ct_PKG_CONFIG,;t t s,@COIN_HAS_PKGCONFIG_TRUE@,$COIN_HAS_PKGCONFIG_TRUE,;t t s,@COIN_HAS_PKGCONFIG_FALSE@,$COIN_HAS_PKGCONFIG_FALSE,;t t s,@COIN_PKG_CONFIG_PATH@,$COIN_PKG_CONFIG_PATH,;t t s,@COIN_PKG_CONFIG_PATH_UNINSTALLED@,$COIN_PKG_CONFIG_PATH_UNINSTALLED,;t t s,@COINUTILS_LIBS@,$COINUTILS_LIBS,;t t s,@COINUTILS_CFLAGS@,$COINUTILS_CFLAGS,;t t s,@COINUTILS_DATA@,$COINUTILS_DATA,;t t s,@COINUTILS_DEPENDENCIES@,$COINUTILS_DEPENDENCIES,;t t s,@COINUTILS_LIBS_INSTALLED@,$COINUTILS_LIBS_INSTALLED,;t t s,@COINUTILS_CFLAGS_INSTALLED@,$COINUTILS_CFLAGS_INSTALLED,;t t s,@COINUTILS_DATA_INSTALLED@,$COINUTILS_DATA_INSTALLED,;t t s,@OSILIB_CFLAGS@,$OSILIB_CFLAGS,;t t s,@OSILIB_LIBS@,$OSILIB_LIBS,;t t s,@OSILIB_PCLIBS@,$OSILIB_PCLIBS,;t t s,@OSILIB_PCREQUIRES@,$OSILIB_PCREQUIRES,;t t s,@OSILIB_DEPENDENCIES@,$OSILIB_DEPENDENCIES,;t t s,@OSILIB_CFLAGS_INSTALLED@,$OSILIB_CFLAGS_INSTALLED,;t t s,@OSILIB_LIBS_INSTALLED@,$OSILIB_LIBS_INSTALLED,;t t s,@COIN_HAS_COINUTILS_TRUE@,$COIN_HAS_COINUTILS_TRUE,;t t s,@COIN_HAS_COINUTILS_FALSE@,$COIN_HAS_COINUTILS_FALSE,;t t s,@GLPK_LIBS@,$GLPK_LIBS,;t t s,@GLPK_CFLAGS@,$GLPK_CFLAGS,;t t s,@GLPK_DATA@,$GLPK_DATA,;t t s,@GLPK_DEPENDENCIES@,$GLPK_DEPENDENCIES,;t t s,@GLPK_LIBS_INSTALLED@,$GLPK_LIBS_INSTALLED,;t t s,@GLPK_CFLAGS_INSTALLED@,$GLPK_CFLAGS_INSTALLED,;t t s,@GLPK_DATA_INSTALLED@,$GLPK_DATA_INSTALLED,;t t s,@OSIGLPKLIB_CFLAGS@,$OSIGLPKLIB_CFLAGS,;t t s,@OSIGLPKLIB_LIBS@,$OSIGLPKLIB_LIBS,;t t s,@OSIGLPKLIB_PCLIBS@,$OSIGLPKLIB_PCLIBS,;t t s,@OSIGLPKLIB_PCREQUIRES@,$OSIGLPKLIB_PCREQUIRES,;t t s,@OSIGLPKLIB_DEPENDENCIES@,$OSIGLPKLIB_DEPENDENCIES,;t t s,@OSIGLPKLIB_CFLAGS_INSTALLED@,$OSIGLPKLIB_CFLAGS_INSTALLED,;t t s,@OSIGLPKLIB_LIBS_INSTALLED@,$OSIGLPKLIB_LIBS_INSTALLED,;t t s,@COIN_HAS_GLPK_TRUE@,$COIN_HAS_GLPK_TRUE,;t t s,@COIN_HAS_GLPK_FALSE@,$COIN_HAS_GLPK_FALSE,;t t s,@SOPLEX_LIBS@,$SOPLEX_LIBS,;t t s,@SOPLEX_CFLAGS@,$SOPLEX_CFLAGS,;t t s,@SOPLEX_DATA@,$SOPLEX_DATA,;t t s,@SOPLEX_DEPENDENCIES@,$SOPLEX_DEPENDENCIES,;t t s,@SOPLEX_LIBS_INSTALLED@,$SOPLEX_LIBS_INSTALLED,;t t s,@SOPLEX_CFLAGS_INSTALLED@,$SOPLEX_CFLAGS_INSTALLED,;t t s,@SOPLEX_DATA_INSTALLED@,$SOPLEX_DATA_INSTALLED,;t t s,@OSISPXLIB_CFLAGS@,$OSISPXLIB_CFLAGS,;t t s,@OSISPXLIB_LIBS@,$OSISPXLIB_LIBS,;t t s,@OSISPXLIB_PCLIBS@,$OSISPXLIB_PCLIBS,;t t s,@OSISPXLIB_PCREQUIRES@,$OSISPXLIB_PCREQUIRES,;t t s,@OSISPXLIB_DEPENDENCIES@,$OSISPXLIB_DEPENDENCIES,;t t s,@OSISPXLIB_CFLAGS_INSTALLED@,$OSISPXLIB_CFLAGS_INSTALLED,;t t s,@OSISPXLIB_LIBS_INSTALLED@,$OSISPXLIB_LIBS_INSTALLED,;t t s,@COIN_HAS_SOPLEX_TRUE@,$COIN_HAS_SOPLEX_TRUE,;t t s,@COIN_HAS_SOPLEX_FALSE@,$COIN_HAS_SOPLEX_FALSE,;t t s,@SAMPLE_LIBS@,$SAMPLE_LIBS,;t t s,@SAMPLE_CFLAGS@,$SAMPLE_CFLAGS,;t t s,@SAMPLE_DATA@,$SAMPLE_DATA,;t t s,@SAMPLE_DEPENDENCIES@,$SAMPLE_DEPENDENCIES,;t t s,@SAMPLE_LIBS_INSTALLED@,$SAMPLE_LIBS_INSTALLED,;t t s,@SAMPLE_CFLAGS_INSTALLED@,$SAMPLE_CFLAGS_INSTALLED,;t t s,@SAMPLE_DATA_INSTALLED@,$SAMPLE_DATA_INSTALLED,;t t s,@COIN_HAS_SAMPLE_TRUE@,$COIN_HAS_SAMPLE_TRUE,;t t s,@COIN_HAS_SAMPLE_FALSE@,$COIN_HAS_SAMPLE_FALSE,;t t s,@NETLIB_LIBS@,$NETLIB_LIBS,;t t s,@NETLIB_CFLAGS@,$NETLIB_CFLAGS,;t t s,@NETLIB_DATA@,$NETLIB_DATA,;t t s,@NETLIB_DEPENDENCIES@,$NETLIB_DEPENDENCIES,;t t s,@NETLIB_LIBS_INSTALLED@,$NETLIB_LIBS_INSTALLED,;t t s,@NETLIB_CFLAGS_INSTALLED@,$NETLIB_CFLAGS_INSTALLED,;t t s,@NETLIB_DATA_INSTALLED@,$NETLIB_DATA_INSTALLED,;t t s,@COIN_HAS_NETLIB_TRUE@,$COIN_HAS_NETLIB_TRUE,;t t s,@COIN_HAS_NETLIB_FALSE@,$COIN_HAS_NETLIB_FALSE,;t t s,@CPXINCDIR@,$CPXINCDIR,;t t s,@CPXLIB@,$CPXLIB,;t t s,@COIN_HAS_CPX_TRUE@,$COIN_HAS_CPX_TRUE,;t t s,@COIN_HAS_CPX_FALSE@,$COIN_HAS_CPX_FALSE,;t t s,@MSKINCDIR@,$MSKINCDIR,;t t s,@MSKLIB@,$MSKLIB,;t t s,@COIN_HAS_MSK_TRUE@,$COIN_HAS_MSK_TRUE,;t t s,@COIN_HAS_MSK_FALSE@,$COIN_HAS_MSK_FALSE,;t t s,@XPRINCDIR@,$XPRINCDIR,;t t s,@XPRLIB@,$XPRLIB,;t t s,@COIN_HAS_XPR_TRUE@,$COIN_HAS_XPR_TRUE,;t t s,@COIN_HAS_XPR_FALSE@,$COIN_HAS_XPR_FALSE,;t t s,@GRBINCDIR@,$GRBINCDIR,;t t s,@GRBLIB@,$GRBLIB,;t t s,@COIN_HAS_GRB_TRUE@,$COIN_HAS_GRB_TRUE,;t t s,@COIN_HAS_GRB_FALSE@,$COIN_HAS_GRB_FALSE,;t t s,@OSI_EXAMPLES_SOLVER_NAME@,$OSI_EXAMPLES_SOLVER_NAME,;t t s,@OSI_EXAMPLES_SOLVER_CFLAGS@,$OSI_EXAMPLES_SOLVER_CFLAGS,;t t s,@OSI_EXAMPLES_SOLVER_LIBS@,$OSI_EXAMPLES_SOLVER_LIBS,;t t s,@OSI_EXAMPLES_SOLVER_PCNAME@,$OSI_EXAMPLES_SOLVER_PCNAME,;t t s,@coin_have_doxygen@,$coin_have_doxygen,;t t s,@coin_have_latex@,$coin_have_latex,;t t s,@coin_doxy_usedot@,$coin_doxy_usedot,;t t s,@coin_doxy_tagname@,$coin_doxy_tagname,;t t s,@coin_doxy_logname@,$coin_doxy_logname,;t t s,@COIN_HAS_DOXYGEN_TRUE@,$COIN_HAS_DOXYGEN_TRUE,;t t s,@COIN_HAS_DOXYGEN_FALSE@,$COIN_HAS_DOXYGEN_FALSE,;t t s,@COIN_HAS_LATEX_TRUE@,$COIN_HAS_LATEX_TRUE,;t t s,@COIN_HAS_LATEX_FALSE@,$COIN_HAS_LATEX_FALSE,;t t s,@coin_doxy_tagfiles@,$coin_doxy_tagfiles,;t t s,@coin_doxy_excludes@,$coin_doxy_excludes,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then { echo "$as_me:$LINENO: Copying data files for VPATH configuration" >&5 echo "$as_me: Copying data files for VPATH configuration" >&6;} else { echo "$as_me:$LINENO: Creating VPATH links for data files" >&5 echo "$as_me: Creating VPATH links for data files" >&6;} fi for file in $coin_vpath_link_files; do dir=`(dirname "./$file") 2>/dev/null || $as_expr X"./$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"./$file" : 'X\(//\)[^/]' \| \ X"./$file" : 'X\(//\)$' \| \ X"./$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"./$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test -d $dir; then : ; else { if $as_mkdir_p; then mkdir -p $dir else as_dir=$dir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dir" >&5 echo "$as_me: error: cannot create directory $dir" >&2;} { (exit 1); exit 1; }; }; } fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi { echo "$as_me:$LINENO: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&5 echo "$as_me: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&6;} if test x$coin_projectdir = xyes; then { echo "$as_me:$LINENO: Configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Configuration of $PACKAGE_NAME successful" >&6;} else { echo "$as_me:$LINENO: Main configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Main configuration of $PACKAGE_NAME successful" >&6;} fi else { echo "$as_me:$LINENO: No configuration of $PACKAGE_NAME necessary" >&5 echo "$as_me: No configuration of $PACKAGE_NAME necessary" >&6;} fi Vol-1.5.4/Osi/ltmain.sh0000755000175000017500000057753011405216166013713 0ustar sudipsudip# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $mkdir "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` if eval $echo \"$deplib\" 2>/dev/null \ | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $absdir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes ; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then $show "${rm}r $gentop" $run ${rm}r "$gentop" fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ char * find_executable (const char* wrapper) { int has_slash = 0; const char* p; const char* p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char* concat_name; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char* path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char* q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR(*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); return NULL; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: Vol-1.5.4/Osi/osi-uninstalled.pc.in0000644000175000017500000000044711573725230016122 0ustar sudipsudipprefix=@prefix@ libdir=@ABSBUILDDIR@/src/Osi Name: Osi Description: COIN-OR Open Solver Interface URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsi.la @OSILIB_PCLIBS@ Cflags: -I@abs_source_dir@/src/Osi -I@ABSBUILDDIR@/src/Osi Requires: @OSILIB_PCREQUIRES@ Vol-1.5.4/Osi/doxydoc/0000755000175000017500000000000013434204224013514 5ustar sudipsudipVol-1.5.4/Osi/doxydoc/doxygen.conf.in0000644000175000017500000017400012231275137016454 0ustar sudipsudip# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxydoc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = "@abs_top_srcdir@/" # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = @coin_doxy_logname@ #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @abs_top_srcdir@/src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.hpp \ *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = @coin_doxy_tagfiles@ # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = @coin_doxy_tagname@ # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = YES # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @coin_doxy_usedot@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES Vol-1.5.4/Osi/examples/0000755000175000017500000000000013434204224013661 5ustar sudipsudipVol-1.5.4/Osi/examples/basic.cpp0000644000175000017500000000233312130536345015453 0ustar sudipsudip// Bare bones example of using COIN-OR OSI #include #include OSIXXXhpp int main(void) { // Create a problem pointer. We use the base class here. OsiSolverInterface *si; // When we instantiate the object, we need a specific derived class. si = new OSIXXX; // Read in an mps file. This one's from the MIPLIB library. #if defined(SAMPLEDIR) si->readMps(SAMPLEDIR "/p0033"); #else fprintf(stderr, "Do not know where to find sample MPS files.\n"); exit(1); #endif // Solve the (relaxation of the) problem si->initialSolve(); // Check the solution if ( si->isProvenOptimal() ) { std::cout << "Found optimal solution!" << std::endl; std::cout << "Objective value is " << si->getObjValue() << std::endl; int n = si->getNumCols(); const double* solution = si->getColSolution(); // We can then print the solution or could examine it. for( int i = 0; i < n && i < 5; ++i ) std::cout << si->getColName(i) << " = " << solution[i] << std::endl; if( 5 < n ) std::cout << "..." << std::endl; } else { std::cout << "Didn't find optimal solution." << std::endl; // Could then check other status functions. } return 0; } Vol-1.5.4/Osi/examples/Makefile.in0000644000175000017500000001072212101340333015720 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # $Id: Makefile.in 1881 2013-01-28 00:05:47Z stefan $ ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change CHANGEME entries below. # ########################################################################## # CHANGEME # To compile other examples, either change the following line, or add the # argument DRIVER=filename_without_extension to make, e.g., # `make DRIVER=parameters' DRIVER = basic # CHANGME # This should be the name of your executable; change if you want a name # that's different from the file name. EXE = $(DRIVER)@EXEEXT@ # CHANGEME # OBJS should include all object files necessary to build your program. For # the examples, only one file is needed for each example. You will probably # have more as your code grows. OBJS = $(DRIVER).@OBJEXT@ # CHANGEME # Additional libraries. The examples require only the COIN libraries specified # as LIBS below. You may need more. ADDLIBS = # CHANGEME # Additional flags for compilation (e.g., include flags). As for libraries, # the examples require only COIN include files, specified as part of CXXFLAGS # below. ADDINCFLAGS = # CHANGEME # Directory to the sources for the (example) problem definition files. VPATH # is used if you are building in a different directory than the source. This # can be handy for various reasons; if none occur to you, don't worry about # it. SRCDIR = @srcdir@ VPATH = @srcdir@ ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile the # # package. # ########################################################################## COIN_HAS_PKGCONFIG = @COIN_HAS_PKGCONFIG_TRUE@TRUE COIN_CXX_IS_CL = @COIN_CXX_IS_CL_TRUE@TRUE COIN_HAS_SAMPLE = @COIN_HAS_SAMPLE_TRUE@TRUE COIN_HAS_NETLIB = @COIN_HAS_NETLIB_TRUE@TRUE # C++ Compiler command CXX = @CXX@ # C++ Compiler options CXXFLAGS = @CXXFLAGS@ @OSI_EXAMPLES_SOLVER_CFLAGS@ \ -DOSIXXXhpp=\"@OSI_EXAMPLES_SOLVER_NAME@.hpp\" -DOSIXXX=@OSI_EXAMPLES_SOLVER_NAME@ # Sample data directory ifeq ($(COIN_HAS_SAMPLE), TRUE) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) CXXFLAGS += -DSAMPLEDIR=\"`PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --variable=datadir coindatasample`\" else CXXFLAGS += -DSAMPLEDIR=\"@SAMPLE_DATA_INSTALLED@\" endif endif # Netlib data directory ifeq ($(COIN_HAS_NETLIB), TRUE) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) CXXFLAGS += -DNETLIBDIR=\"`PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --variable=datadir coindatanetlib`\" else CXXFLAGS += -DNETLIBDIR=\"@NETLIB_DATA_INSTALLED@\" endif endif # additional C++ Compiler options for linking CXXLINKFLAGS = @RPATH_FLAGS@ # Include directories (we use the CYGPATH_W variables to allow compilation with Windows compilers) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) INCL = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --cflags @OSI_EXAMPLES_SOLVER_PCNAME@ osi` else INCL = @OSILIB_CFLAGS_INSTALLED@ endif INCL += $(ADDINCFLAGS) # Linker flags ifeq ($(COIN_HAS_PKGCONFIG), TRUE) LIBS = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --libs @OSI_EXAMPLES_SOLVER_PCNAME@ osi` else ifeq ($(COIN_CXX_IS_CL), TRUE) LIBS = -link -libpath:`$(CYGPATH_W) @abs_lib_dir@` libOsi.lib @OSI_EXAMPLES_SOLVER_LIBS@ @OSILIB_LIBS_INSTALLED@ else LIBS = -L@abs_lib_dir@ -lOsi @OSI_EXAMPLES_SOLVER_LIBS@ @OSILIB_LIBS_INSTALLED@ endif endif # The following is necessary under cygwin, if native compilers are used CYGPATH_W = @CYGPATH_W@ all: $(EXE) .SUFFIXES: .cpp .c .o .obj $(EXE): $(OBJS) bla=;\ for file in $(OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \ $(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla $(LIBS) $(ADDLIBS) clean: rm -rf $(EXE) $(OBJS) .cpp.o: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .cpp.obj: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` .c.o: $(CC) $(CFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .c.obj: $(CC) $(CFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` Vol-1.5.4/Osi/examples/opbdp_solve.hpp0000644000175000017500000000273111403136004016703 0ustar sudipsudip// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. #ifndef OsiOpbdpSolve_H #define OsiOpbdpSolve_H #include #include "OsiSolverInterface.hpp" /** Solve pure 0-1 with integral coefficients etc (or can be made by scaling) using opdbp The solution will be set in model If no solution then returns 0, if not suitable returns -1 */ int solveOpbdp(OsiSolverInterface * model); /** Find all solutions of a pure 0-1 with integral coefficients etc (or can be made by scaling) using opdbp Returns an array of bit solution vectors. i is 1 if bit set (see below) If no solution then numberFound will be 0, if not suitable -1 This needs the line at about 206 of EnumerateOpt.cpp local_maximum = value + 1; // try to reach that one! replaced by if (verbosity!=-1) { local_maximum = value + 1; // try to reach that one! } else { local_maximum = 0; void opbdp_save_solution(OrdInt & sol); OrdInt sol = last_solution.to_OrdInt(); opbdp_save_solution(sol); // save solution } */ unsigned int ** solveOpbdp(const OsiSolverInterface * model,int & numberFound); inline bool atOne(int i,unsigned int * array) { return ((array[i>>5]>>(i&31))&1)!=0; } inline void setAtOne(int i,unsigned int * array,bool trueFalse) { unsigned int & value = array[i>>5]; int bit = i&31; if (trueFalse) value |= (1< #include OSIXXXhpp int main(void) { // Create a problem pointer. We use the base class here. OsiSolverInterface *si; // When we instantiate the object, we need a specific derived class. si = new OSIXXX; // Read in an mps file. This one's from the MIPLIB library. #if defined(SAMPLEDIR) si->readMps(SAMPLEDIR "/p0033"); #else fprintf(stderr, "Do not know where to find sample MPS files.\n"); exit(1); #endif // Display some information about the instance int nrows = si->getNumRows(); int ncols = si->getNumCols(); int nelem = si->getNumElements(); std::cout << "This problem has " << nrows << " rows, " << ncols << " columns, and " << nelem << " nonzeros." << std::endl; double const * upper_bounds = si->getColUpper(); std::cout << "The upper bound on the first column is " << upper_bounds[0] << std::endl; // All information about the instance is available with similar methods // Before solving, indicate some parameters si->setIntParam( OsiMaxNumIteration, 10); si->setDblParam( OsiPrimalTolerance, 0.001 ); // Can also read parameters std::string solver; si->getStrParam( OsiSolverName, solver ); std::cout << "About to solve with: " << solver << std::endl; // Solve the (relaxation of the) problem si->initialSolve(); // Check the solution if ( si->isProvenOptimal() ) { std::cout << "Found optimal solution!" << std::endl; std::cout << "Objective value is " << si->getObjValue() << std::endl; // Examine solution int n = si->getNumCols(); const double *solution; solution = si->getColSolution(); std::cout << "Solution: "; for (int i = 0; i < n; i++) std::cout << solution[i] << " "; std::cout << std::endl; std::cout << "It took " << si->getIterationCount() << " iterations" << " to solve." << std::endl; } else { std::cout << "Didn't find optimal solution." << std::endl; // Check other status functions. What happened? if (si->isProvenPrimalInfeasible()) std::cout << "Problem is proven to be infeasible." << std::endl; if (si->isProvenDualInfeasible()) std::cout << "Problem is proven dual infeasible." << std::endl; if (si->isIterationLimitReached()) std::cout << "Reached iteration limit." << std::endl; } return 0; } Vol-1.5.4/Osi/examples/opbdp_solve.cpp0000644000175000017500000003467512130536345016724 0ustar sudipsudip// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. #include "OsiConfig.h" #include #include #include #include #include #include #include #include "CoinPragma.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedVector.hpp" #include "CoinPackedMatrix.hpp" #include "CoinTime.hpp" #include "opbdp_solve.hpp" #include "PBCS.h" // Not threadsafe static unsigned int ** opbdp_solution=NULL; static int opbdp_number_solutions=0; static int opbdp_maximum_solutions=0; static int size_solution=0; static PBCS *save_pbcs=NULL; void opbdp_save_solution(OrdInt & sol) { if (opbdp_number_solutions==opbdp_maximum_solutions) { opbdp_maximum_solutions = opbdp_maximum_solutions*2+100; unsigned int ** temp = new unsigned int * [opbdp_maximum_solutions]; CoinMemcpyN(opbdp_solution,opbdp_number_solutions,temp); CoinZeroN(temp+opbdp_number_solutions,opbdp_maximum_solutions-opbdp_number_solutions); delete [] opbdp_solution; opbdp_solution=temp; } unsigned int * array = new unsigned int [size_solution]; CoinZeroN(array,size_solution); opbdp_solution[opbdp_number_solutions++]=array; sol.first(); while(!sol.last()) { int var = sol.next(); if (var > 0) setAtOne(var-1,array,true); } OrdInt Fixed = save_pbcs->get_fixed(); Fixed.first(); while(!Fixed.last()) { int flit = Fixed.next(); if (flit > 0) setAtOne(flit-1,array,true); } // add hidden ones due to equations save_pbcs->Eq.first(); while(!save_pbcs->Eq.last()) { int l = save_pbcs->Eq.next(); int r = save_pbcs->Eq(l); if (sol.member(r) || Fixed.member(r)) setAtOne(l-1,array,true); else if (sol.member(-r) || Fixed.member(-r)) setAtOne(l-1,array,true); // just positives are added } } //------------------------------------------------------------------- // Returns the greatest common denominator of two // positive integers, a and b, found using Euclid's algorithm //------------------------------------------------------------------- static int gcd(int a, int b) { int remainder = -1; // make sure a<=b (will always remain so) if(a > b) { // Swap a and b int temp = a; a = b; b = temp; } // if zero then gcd is nonzero (zero may occur in rhs of packed) if (!a) { if (b) { return b; } else { printf("**** gcd given two zeros!!\n"); abort(); } } while (remainder) { remainder = b % a; b = a; a = remainder; } return b; } static int solve(const OsiSolverInterface * model,PBCS & pbcs, OrdInt & sol) { int numberColumns = model->getNumCols(); size_solution = (numberColumns+31)/32; int numberRows = model->getNumRows(); bool all01=true; int i; const double * objective = model->getObjCoefficients(); double infinity = model->getInfinity(); const CoinPackedMatrix * matrix = model->getMatrixByRow(); const double * columnLower = model->getColLower(); const double * columnUpper = model->getColUpper(); const double * rowLower = model->getRowLower(); const double * rowUpper = model->getRowUpper(); for (i = 0; i < numberColumns; i++) { if (!model->isInteger(i)||columnLower[i]<0.0||columnUpper[i]>1.0) { all01=false; break; } } if (!all01) return -1; // Get scale factors to make integral const int * column = matrix->getIndices(); const int * rowLength = matrix->getVectorLengths(); const CoinBigIndex * rowStart = matrix->getVectorStarts(); const double * elementByRow = matrix->getElements(); // objective not too important double maximumObjElement = 0.0 ; for (i = 0 ; i < numberColumns ; i++) maximumObjElement = CoinMax(maximumObjElement,fabs(objective[i])) ; int objGood = 0 ; double objMultiplier = 2520.0 ; bool good=true; if (maximumObjElement) { while (10.0*objMultiplier*maximumObjElement < 1.0e9) objMultiplier *= 10.0 ; if (maximumObjElement*2520>=1.0e9) objMultiplier=1.0; double tolerance = 1.0e-9*objMultiplier; for (i = 0 ; i < numberColumns ; i++) { double value=fabs(objective[i])*objMultiplier ; if (!value) continue; int nearest = (int) floor(value+0.5) ; if (fabs(value-floor(value+0.5)) > tolerance) { // just take for now objGood = 1 ; good=false; break ; } else if (!objGood) { objGood = nearest ; } else { objGood = gcd(objGood,nearest) ; } } objMultiplier /= objGood; if (!good) { printf("Unable to scale objective correctly - maximum %g\n", maximumObjElement); objMultiplier = 1.0e7/maximumObjElement; } } else { objMultiplier=0.0; // no objective } double maximumElement=0.0; // now real stuff for (i=0;i=1.0e8) elMultiplier=1.0; double tolerance = 1.0e-8*elMultiplier; good=true; for (i=0;i tolerance) { elGood = 0 ; good=false; break ; } else if (!elGood) { elGood = nearest ; } else { elGood = gcd(elGood,nearest) ; } } } if (rowUpper[i]!=infinity) { double value=fabs(rowUpper[i])*elMultiplier ; if (value) { int nearest = (int) floor(value+0.5) ; if (fabs(value-floor(value+0.5)) > tolerance) { elGood = 0 ; good=false; break ; } else if (!elGood) { elGood = nearest ; } else { elGood = gcd(elGood,nearest) ; } } } for (CoinBigIndex j=rowStart[i];j tolerance) { elGood = 0 ; good=false; break ; } else if (!elGood) { elGood = nearest ; } else { elGood = gcd(elGood,nearest) ; } } } if (!good) return -1; // no good // multiplier elMultiplier /= elGood; double objOffset=0.0; model->getDblParam(OsiObjOffset,objOffset); int doMax= (model->getObjSense()<0.0) ? 1 : 0; printf("Objective multiplier is %g, element mutiplier %g, offset %g\n", objMultiplier,elMultiplier,objOffset); Products objf; Atoms atoms; save_pbcs = & pbcs; pbcs.set_atoms(&atoms); pbcs.set_enum_heuristic(0); for (i=0;i 1) std::cout << "Big M coefficient reduction changed " << changed << " coefficients"<0) { const double * objective = model->getObjCoefficients(); double objOffset=0.0; model->getDblParam(OsiObjOffset,objOffset); int numberColumns = model->getNumCols(); double * solution = new double [numberColumns]; CoinZeroN(solution,numberColumns); sol.first(); while(!sol.last()) { int var = sol.next(); if (var > 0) solution[var-1]=1.0; } OrdInt Fixed = pbcs.get_fixed(); Fixed.first(); while(!Fixed.last()) { int flit = Fixed.next(); if (flit > 0) solution[flit-1]=1.0; } // add hidden ones due to equations pbcs.Eq.first(); while(!pbcs.Eq.last()) { int l = pbcs.Eq.next(); int r = pbcs.Eq(l); if (sol.member(r) || Fixed.member(r)) solution[l-1]=1.0; else if (sol.member(-r) || Fixed.member(-r)) solution[l-1]=1.0; // just positives are added } numberFound=1; double objValue = - objOffset; for (int i=0;igetObjSense()>0 ? "minimum" : "maximum")<<" of "<setObjValue(objValue); model->setColSolution(solution); delete [] solution; } else if (!numberFound) { std::cout << "Constraint Set is unsatisfiable"<0||opbdp_number_solutions) { // all solutions numberFound = opbdp_number_solutions; return opbdp_solution; } else { // no solution return NULL; } } Vol-1.5.4/Osi/examples/build.cpp0000644000175000017500000000567512130536345015505 0ustar sudipsudip// Example of using COIN-OR OSI, building the instance internally // with sparse matrix object #include #include OSIXXXhpp #include "CoinPackedMatrix.hpp" #include "CoinPackedVector.hpp" int main(void) { // Create a problem pointer. We use the base class here. OsiSolverInterface *si; // When we instantiate the object, we need a specific derived class. si = new OSIXXX; // Build our own instance from scratch /* * This section adapted from Matt Galati's example * on the COIN-OR Tutorial website. * * Problem from Bertsimas, Tsitsiklis page 21 * * optimal solution: x* = (1,1) * * minimize -1 x0 - 1 x1 * s.t 1 x0 + 2 x1 <= 3 * 2 x0 + 1 x1 <= 3 * x0 >= 0 * x1 >= 0 */ int n_cols = 2; double *objective = new double[n_cols];//the objective coefficients double *col_lb = new double[n_cols];//the column lower bounds double *col_ub = new double[n_cols];//the column upper bounds //Define the objective coefficients. //minimize -1 x0 - 1 x1 objective[0] = -1.0; objective[1] = -1.0; //Define the variable lower/upper bounds. // x0 >= 0 => 0 <= x0 <= infinity // x1 >= 0 => 0 <= x1 <= infinity col_lb[0] = 0.0; col_lb[1] = 0.0; col_ub[0] = si->getInfinity(); col_ub[1] = si->getInfinity(); int n_rows = 2; double *row_lb = new double[n_rows]; //the row lower bounds double *row_ub = new double[n_rows]; //the row upper bounds //Define the constraint matrix. CoinPackedMatrix *matrix = new CoinPackedMatrix(false,0,0); matrix->setDimensions(0, n_cols); //1 x0 + 2 x1 <= 3 => -infinity <= 1 x0 + 2 x2 <= 3 CoinPackedVector row1; row1.insert(0, 1.0); row1.insert(1, 2.0); row_lb[0] = -1.0 * si->getInfinity(); row_ub[0] = 3.0; matrix->appendRow(row1); //2 x0 + 1 x1 <= 3 => -infinity <= 2 x0 + 1 x1 <= 3 CoinPackedVector row2; row2.insert(0, 2.0); row2.insert(1, 1.0); row_lb[1] = -1.0 * si->getInfinity(); row_ub[1] = 3.0; matrix->appendRow(row2); //load the problem to OSI si->loadProblem(*matrix, col_lb, col_ub, objective, row_lb, row_ub); //write the MPS file to a file called example.mps si->writeMps("example"); // Solve the (relaxation of the) problem si->initialSolve(); // Check the solution if ( si->isProvenOptimal() ) { std::cout << "Found optimal solution!" << std::endl; std::cout << "Objective value is " << si->getObjValue() << std::endl; int n = si->getNumCols(); const double* solution = si->getColSolution(); // We can then print the solution or could examine it. for( int i = 0; i < n; ++i ) std::cout << si->getColName(i) << " = " << solution[i] << std::endl; } else { std::cout << "Didn't find optimal solution." << std::endl; // Could then check other status functions. } return 0; } Vol-1.5.4/Osi/examples/query.cpp0000644000175000017500000000416212101340333015525 0ustar sudipsudip// Example of using COIN-OR OSI // Demonstrates some problem and solution query methods #include #include OSIXXXhpp int main(void) { // Create a problem pointer. We use the base class here. OsiSolverInterface *si; // When we instantiate the object, we need a specific derived class. si = new OSIXXX; // Read in an mps file. This one's from the MIPLIB library. #if defined(SAMPLEDIR) si->readMps(SAMPLEDIR "/p0033"); #else fprintf(stderr, "Do not know where to find sample MPS files.\n"); exit(1); #endif // Display some information about the instance int nrows = si->getNumRows(); int ncols = si->getNumCols(); int nelem = si->getNumElements(); std::cout << "This problem has " << nrows << " rows, " << ncols << " columns, and " << nelem << " nonzeros." << std::endl; double const *upper_bounds = si->getColUpper(); std::cout << "The upper bound on the first column is " << upper_bounds[0] << std::endl; // All information about the instance is available with similar methods // Solve the (relaxation of the) problem si->initialSolve(); // Check the solution if ( si->isProvenOptimal() ) { std::cout << "Found optimal solution!" << std::endl; std::cout << "Objective value is " << si->getObjValue() << std::endl; // Examine solution int n = si->getNumCols(); const double *solution; solution = si->getColSolution(); std::cout << "Solution: "; for (int i = 0; i < n; i++) std::cout << solution[i] << " "; std::cout << std::endl; std::cout << "It took " << si->getIterationCount() << " iterations" << " to solve." << std::endl; } else { std::cout << "Didn't find optimal solution." << std::endl; // Check other status functions. What happened? if (si->isProvenPrimalInfeasible()) std::cout << "Problem is proven to be infeasible." << std::endl; if (si->isProvenDualInfeasible()) std::cout << "Problem is proven dual infeasible." << std::endl; if (si->isIterationLimitReached()) std::cout << "Reached iteration limit." << std::endl; } return 0; } Vol-1.5.4/Osi/examples/README0000644000175000017500000000044711603614254014552 0ustar sudipsudipThese examples are from the OSI tutorial at INFORMS Atlanta 2003 by Brady Hunsaker and the workshop section on OSI given by Matthew Saltzman at CORS/INFORMS Banff 2004. The accompanying slides and handouts can be found at http://www.coin-or.org/Presentations/CORSINFORMSWorkshop04/index.html Vol-1.5.4/Osi/examples/readconic.cpp0000644000175000017500000000475012223503721016321 0ustar sudipsudip// $Id: readconic.cpp 1898 2013-04-09 18:06:04Z stefan $ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinMpsIO.hpp" int main (int argc, const char *argv[]) { CoinMpsIO m_MpsData; int nOfSOS; CoinSet ** SOS = NULL; std::string mpsFileName; #if defined(SAMPLEDIR) mpsFileName = SAMPLEDIR "/conic.mps"; #else if (argc < 2) { fprintf(stderr, "Do not know where to find sample MPS files.\n"); exit(1); } #endif if (argc>=2) mpsFileName = argv[1]; int status = m_MpsData.readMps( mpsFileName.c_str(), "", nOfSOS, SOS ); assert (!status); int * columnStart = NULL; int * columnIdx = NULL; double * elements = NULL; status = m_MpsData.readQuadraticMps(NULL, columnStart, columnIdx, elements, 0); assert (!status); int nOfCones; int * coneStart = NULL; int * coneIdx = NULL; int * coneType = NULL; status = m_MpsData.readConicMps(NULL, coneStart, coneIdx, coneType, nOfCones); assert (!status); if (nOfSOS) { printf("%d SOS sets\n",nOfSOS); for (int iSOS=0;iSOSnumberEntries(); printf("Set %d has %d entries - type %d\n",iSOS,numberEntries,SOS[iSOS]->setType()); const int * which = SOS[iSOS]->which(); const double * weights = SOS[iSOS]->weights(); for (int i=0;i The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double *getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double *getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int columnNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int columnNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int columnNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int columnNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double *getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double *getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double *getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double *getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const; #if 0 /** Get vector of indices of solution which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue); /** Set a a set of objective function coefficients */ virtual void setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList); using OsiSolverInterface::setColLower; /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower(int elementIndex, double elementValue); using OsiSolverInterface::setColUpper; /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper(int elementIndex, double elementValue); /** Set a single column lower and upper bound
The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds(int elementIndex, double lower, double upper); /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setCollower() and setColupper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue); /** Set a single row lower and upper bound
The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds(int elementIndex, double lower, double upper); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() and over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose type changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int *indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int *indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ using OsiSolverInterface::addCol; /** */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj); using OsiSolverInterface::addCols; /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj); /** */ virtual void deleteCols(const int num, const int *colIndices); using OsiSolverInterface::addRow; /** */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng); using OsiSolverInterface::addRows; /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng); /** */ virtual void deleteRows(const int num, const int *rowIndices); #if 0 // ??? implemented in OsiSolverInterface //----------------------------------------------------------------------- /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); using OsiSolverInterface::readMps; /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const; //@} /**@name Message handling */ //@{ /** Pass in a message handler It is the client's responsibility to destroy a message handler installed by this routine; it will not be destroyed when the solver interface is destroyed. */ void passInMessageHandler(CoinMessageHandler *handler); //@} //--------------------------------------------------------------------------- /**@name CPLEX specific public interfaces */ //@{ /** Get pointer to CPLEX model and free all specified cached data entries (combined with logical or-operator '|' ): */ enum keepCachedFlag { /// discard all cached data (default) KEEPCACHED_NONE = 0, /// column information: objective values, lower and upper bounds, variable types KEEPCACHED_COLUMN = 1, /// row information: right hand sides, ranges and senses, lower and upper bounds for row KEEPCACHED_ROW = 2, /// problem matrix: matrix ordered by column and by row KEEPCACHED_MATRIX = 4, /// LP solution: primal and dual solution, reduced costs, row activities KEEPCACHED_RESULTS = 8, /// only discard cached LP solution KEEPCACHED_PROBLEM = KEEPCACHED_COLUMN | KEEPCACHED_ROW | KEEPCACHED_MATRIX, /// keep all cached data (similar to getMutableLpPtr()) KEEPCACHED_ALL = KEEPCACHED_PROBLEM | KEEPCACHED_RESULTS, /// free only cached column and LP solution information FREECACHED_COLUMN = KEEPCACHED_PROBLEM & ~KEEPCACHED_COLUMN, /// free only cached row and LP solution information FREECACHED_ROW = KEEPCACHED_PROBLEM & ~KEEPCACHED_ROW, /// free only cached matrix and LP solution information FREECACHED_MATRIX = KEEPCACHED_PROBLEM & ~KEEPCACHED_MATRIX, /// free only cached LP solution information FREECACHED_RESULTS = KEEPCACHED_ALL & ~KEEPCACHED_RESULTS }; CPXLPptr getLpPtr(int keepCached = KEEPCACHED_NONE); //@{ /// Method to access CPLEX environment pointer CPXENVptr getEnvironmentPtr(); //@} /// return a vector of variable types (continous, binary, integer) const char *getCtype() const; /**@name Constructors and destructor */ //@{ /// Default Constructor OsiCpxSolverInterface(); /// Clone virtual OsiSolverInterface *clone(bool copyData = true) const; /// Copy constructor OsiCpxSolverInterface(const OsiCpxSolverInterface &); /// Assignment operator OsiCpxSolverInterface &operator=(const OsiCpxSolverInterface &rhs); /// Destructor virtual ~OsiCpxSolverInterface(); /// Resets as if default constructor virtual void reset(); //@} /***************************************************************************/ /**@name OsiSimplexInterface methods Cplex adds a slack with coeff +1 in "<=" and "=" constraints, with coeff -1 in ">=", slack being non negative. We switch in order to get a "Clp tableau" where all the slacks have coefficient +1 in the original tableau. If a slack for ">=" is non basic, invB is not changed; column of the slack in the optimal tableau is flipped. If a slack for ">=" is basic, corresp. row of invB is flipped; whole row of the optimal tableau is flipped; then whole column for the slack in opt tableau is flipped. Ranged rows are not supported. It might work, but no garantee is given. Code implemented only for Cplex9.0 and higher, lower version number of Cplex will abort the code. */ //@{ /** Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ virtual int canDoSimplexInterface() const; using OsiSolverInterface::enableSimplexInterface; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void enableSimplexInterface(int doingPrimal) {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void disableSimplexInterface() {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void enableFactorization() const {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void disableFactorization() const {}; ///Returns true if a basis is available virtual bool basisIsAvailable() const; /** Returns a basis status of the structural/artificial variables At present as warm start i.e 0: free, 1: basic, 2: upper, 3: lower */ virtual void getBasisStatus(int *cstat, int *rstat) const; ///Get a row of the tableau (slack part in slack if not NULL) virtual void getBInvARow(int row, double *z, double *slack = NULL) const; ///Get a row of the basis inverse virtual void getBInvRow(int row, double *z) const; ///Get a column of the tableau virtual void getBInvACol(int col, double *vec) const; ///Get a column of the basis inverse virtual void getBInvCol(int col, double *vec) const; /** Get indices of the pivot variable in each row (order of indices corresponds to the order of elements in a vector retured by getBInvACol() and getBInvCol()). */ virtual void getBasics(int *index) const; /// switches CPLEX to prob type LP void switchToLP(); /// switches CPLEX to prob type MIP void switchToMIP(); //@} /***************************************************************************/ protected: /// Get LP Pointer for const methods CPXLPptr getMutableLpPtr() const; /// Get Environment Pointer for const methods CPXENVptr getMutableEnvironmentPtr() const; /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut(const OsiRowCut &rc); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut(const OsiColCut &cc); //@} private: /**@name Private static class functions */ //@{ /// resizes coltype_ vector to be able to store at least minsize elements void resizeColType(int minsize); /// frees colsize_ vector void freeColType(); //@} /**@name Private methods */ //@{ /// The real work of a copy constructor (used by copy and assignment) void gutsOfCopy(const OsiCpxSolverInterface &source); /// The real work of the constructor void gutsOfConstructor(); /// The real work of the destructor void gutsOfDestructor(); /// free cached column rim vectors void freeCachedColRim(); /// free cached row rim vectors void freeCachedRowRim(); /// free cached result vectors void freeCachedResults(); /// free cached matrices void freeCachedMatrix(); /// free all cached data (except specified entries, see getLpPtr()) void freeCachedData(int keepCached = KEEPCACHED_NONE); /// free all allocated memory void freeAllMemory(); //@} /**@name Private member data */ //@{ /// CPLEX environment used in this class instance mutable CPXENVptr env_; /// CPLEX model represented by this class instance mutable CPXLPptr lp_; /// Hotstart information int *hotStartCStat_; int hotStartCStatSize_; int *hotStartRStat_; int hotStartRStatSize_; int hotStartMaxIteration_; /**@name Cached information derived from the CPLEX model */ //@{ /// Pointer to objective vector mutable double *obj_; /// Pointer to dense vector of variable lower bounds mutable double *collower_; /// Pointer to dense vector of variable lower bounds mutable double *colupper_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /// Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) mutable double *rowrange_; /// Pointer to dense vector of row lower bounds mutable double *rowlower_; /// Pointer to dense vector of row upper bounds mutable double *rowupper_; /// Pointer to primal solution vector mutable double *colsol_; /// Pointer to dual solution vector mutable double *rowsol_; /// Pointer to reduced cost vector mutable double *redcost_; /// Pointer to row activity (slack) vector mutable double *rowact_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByCol_; //@} /**@name Additional information needed for storing MIP problems */ //@{ /// Pointer to dense vector of variable types (continous, binary, integer) char *coltype_; /// Size of allocated memory for coltype_ int coltypesize_; /// Stores whether CPLEX' prob type is currently set to MIP mutable bool probtypemip_; /// Whether to pass a column solution to CPLEX before starting MIP solve (copymipstart) bool domipstart; /// Whether to disable use of advanced basis (if given) bool disableadvbasis; //@} }; //############################################################################# /** A function that tests the methods in the OsiCpxSolverInterface class. */ void OsiCpxSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiCpx/osi-cplex.pc.in0000644000175000017500000000046511510106235016674 0ustar sudipsudipprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiCplex Description: COIN-OR Open Solver Interface for CPLEX URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiCpx @CPXLIB@ Cflags: -I${includedir} -I@CPXINCDIR@ Requires: osi Vol-1.5.4/Osi/src/OsiCpx/format-source.sh0000755000175000017500000000100313414504201017152 0ustar sudipsudip# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done Vol-1.5.4/Osi/src/OsiCpx/Makefile.in0000644000175000017500000005537613200223007016113 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/OsiCpx DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiCpx_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libOsiCpx_la_OBJECTS = OsiCpxSolverInterface.lo libOsiCpx_la_OBJECTS = $(am_libOsiCpx_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiCpx_la_SOURCES) DIST_SOURCES = $(libOsiCpx_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiCpx # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiCpx.la # List all source files for this library, including headers libOsiCpx_la_SOURCES = \ OsiCpxSolverInterface.cpp OsiCpxSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiCpx_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(CPXLIB) # This is for libtool (on Windows) libOsiCpx_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(CPXINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiCpxSolverInterface.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiCpx/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiCpx/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiCpx.la: $(libOsiCpx_la_OBJECTS) $(libOsiCpx_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiCpx_la_LDFLAGS) $(libOsiCpx_la_OBJECTS) $(libOsiCpx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiCpxSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Osi/src/OsiCpx/osi-cplex-uninstalled.pc.in0000644000175000017500000000043611507670402021222 0ustar sudipsudipprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiCpx Name: OsiCplex Description: COIN-OR Open Solver Interface for CPLEX URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiCpx.la @CPXLIB@ Cflags: -I@abs_source_dir@/src/OsiCpx -I@CPXINCDIR@ Requires: osi Vol-1.5.4/Osi/src/OsiCpx/Makefile.am0000644000175000017500000000334513200223007016067 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 2110 2017-11-07 03:18:31Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiCpx # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiCpx.la # List all source files for this library, including headers libOsiCpx_la_SOURCES = \ OsiCpxSolverInterface.cpp OsiCpxSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiCpx_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(CPXLIB) endif # This is for libtool (on Windows) libOsiCpx_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(CPXINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiCpxSolverInterface.hpp Vol-1.5.4/Osi/src/OsiCpx/OsiCpxSolverInterface.cpp0000644000175000017500000034053013433035707021000 0ustar sudipsudip//----------------------------------------------------------------------------- // name: OSI Interface for CPLEX // author: Tobias Pfender // Konrad-Zuse-Zentrum Berlin (Germany) // email: pfender@zib.de // date: 09/25/2000 // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2000, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. #include #include #include #include #include "CoinPragma.hpp" #include "OsiCpxSolverInterface.hpp" #include "cplex.h" // CPLEX 10.0 removed CPXERR_NO_INT_SOLN #if !defined(CPXERR_NO_INT_SOLN) #define CPXERR_NO_INT_SOLN CPXERR_NO_SOLN #endif // #define DEBUG 1 #ifdef DEBUG #define debugMessage printf #else #define debugMessage \ if (false) \ printf #endif //############################################################################# // A couple of helper functions //############################################################################# inline void freeCacheDouble(double *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheChar(char *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheMatrix(CoinPackedMatrix *&ptr) { if (ptr != NULL) { delete ptr; ptr = NULL; } } static inline void checkCPXerror(int err, std::string cpxfuncname, std::string osimethod) { if (err != 0) { char s[100]; sprintf(s, "%s returned error %d", cpxfuncname.c_str(), err); #ifdef DEBUG std::cerr << "ERROR: " << s << " (" << osimethod << " in OsiCpxSolverInterface)" << std::endl; #endif throw CoinError(s, osimethod.c_str(), "OsiCpxSolverInterface"); } } static bool incompletemessage = false; static void CPXPUBLIC OsiCpxMessageCallbackPrint(CoinMessageHandler *handler, const char *msg) { /* cplex adds the newlines into their message, while the coin message handler like to add its own newlines * we treat the cases where there is a newline in the beginning or no newline at the end separately * TODO a better way is to scan msg for newlines and to send each line to the handler separately */ if (msg[0] == '\n') { if (incompletemessage) { *handler << CoinMessageEol; incompletemessage = false; } else handler->message(0, "CPX", " ", ' ') << CoinMessageEol; ++msg; if (!*msg) return; } size_t len = strlen(msg); assert(len > 0); if (msg[len - 1] == '\n') { (const_cast< char * >(msg))[len - 1] = '\0'; if (incompletemessage) { *handler << msg << CoinMessageEol; incompletemessage = false; } else handler->message(0, "CPX", msg, ' ') << CoinMessageEol; } else { handler->message(0, "CPX", msg, ' '); incompletemessage = true; } } static void CPXPUBLIC OsiCpxMessageCallbackResultLog(void *handle, const char *msg) { if (!*msg) return; if (handle) { if (((CoinMessageHandler *)handle)->logLevel() >= 1) OsiCpxMessageCallbackPrint((CoinMessageHandler *)handle, msg); } else { printf(msg); } } static void CPXPUBLIC OsiCpxMessageCallbackWarning(void *handle, const char *msg) { if (handle) { if (((CoinMessageHandler *)handle)->logLevel() >= 0) OsiCpxMessageCallbackPrint((CoinMessageHandler *)handle, msg); } else { printf(msg); } } static void CPXPUBLIC OsiCpxMessageCallbackError(void *handle, const char *msg) { if (handle) { OsiCpxMessageCallbackPrint((CoinMessageHandler *)handle, msg); } else { fprintf(stderr, msg); } } void OsiCpxSolverInterface::switchToLP(void) { debugMessage("OsiCpxSolverInterface::switchToLP()\n"); if (probtypemip_) { CPXLPptr lp = getMutableLpPtr(); #if CPX_VERSION >= 800 assert(CPXgetprobtype(env_, lp) == CPXPROB_MILP); #else assert(CPXgetprobtype(env_, lp) == CPXPROB_MIP); #endif int err = CPXchgprobtype(env_, lp, CPXPROB_LP); checkCPXerror(err, "CPXchgprobtype", "switchToLP"); probtypemip_ = false; } } void OsiCpxSolverInterface::switchToMIP(void) { debugMessage("OsiCpxSolverInterface::switchToMIP()\n"); if (!probtypemip_) { CPXLPptr lp = getMutableLpPtr(); int nc = getNumCols(); int *cindarray = new int[nc]; assert(CPXgetprobtype(env_, lp) == CPXPROB_LP); assert(coltype_ != NULL); for (int i = 0; i < nc; ++i) cindarray[i] = i; #if CPX_VERSION >= 800 int err = CPXchgprobtype(env_, lp, CPXPROB_MILP); #else int err = CPXchgprobtype(env_, lp, CPXPROB_MIP); #endif checkCPXerror(err, "CPXchgprobtype", "switchToMIP"); err = CPXchgctype(env_, lp, nc, cindarray, coltype_); checkCPXerror(err, "CPXchgctype", "switchToMIP"); delete[] cindarray; probtypemip_ = true; } } void OsiCpxSolverInterface::resizeColType(int minsize) { debugMessage("OsiCpxSolverInterface::resizeColType()\n"); if (minsize > coltypesize_) { int newcoltypesize = 2 * coltypesize_; if (minsize > newcoltypesize) newcoltypesize = minsize; char *newcoltype = new char[newcoltypesize]; if (coltype_ != NULL) { CoinDisjointCopyN(coltype_, coltypesize_, newcoltype); delete[] coltype_; } coltype_ = newcoltype; coltypesize_ = newcoltypesize; } assert(minsize == 0 || coltype_ != NULL); assert(coltypesize_ >= minsize); } void OsiCpxSolverInterface::freeColType() { debugMessage("OsiCpxSolverInterface::freeColType()\n"); if (coltypesize_ > 0) { delete[] coltype_; coltype_ = NULL; coltypesize_ = 0; } assert(coltype_ == NULL); } //############################################################################# // Solve methods //############################################################################# void OsiCpxSolverInterface::initialSolve() { debugMessage("OsiCpxSolverInterface::initialSolve()\n"); switchToLP(); bool takeHint; OsiHintStrength strength; int algorithm = 0; getHintParam(OsiDoDualInInitial, takeHint, strength); if (strength != OsiHintIgnore) algorithm = takeHint ? -1 : 1; int presolve = 1; getHintParam(OsiDoPresolveInInitial, takeHint, strength); if (strength != OsiHintIgnore) presolve = takeHint ? 1 : 0; CPXLPptr lp = getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS); if (presolve) CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); else CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); // if (messageHandler()->logLevel() == 0) // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_OFF ); // else // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_ON ); if (messageHandler()->logLevel() == 0) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 0); else if (messageHandler()->logLevel() == 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 1); else if (messageHandler()->logLevel() > 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 2); CPXsetintparam(env_, CPX_PARAM_ADVIND, !disableadvbasis); double objoffset; double primalobjlimit; double dualobjlimit; getDblParam(OsiObjOffset, objoffset); getDblParam(OsiPrimalObjectiveLimit, primalobjlimit); getDblParam(OsiDualObjectiveLimit, dualobjlimit); if (getObjSense() == +1) { if (primalobjlimit < COIN_DBL_MAX) CPXsetdblparam(env_, CPX_PARAM_OBJLLIM, primalobjlimit + objoffset); if (dualobjlimit > -COIN_DBL_MAX) CPXsetdblparam(env_, CPX_PARAM_OBJULIM, dualobjlimit + objoffset); } else { if (primalobjlimit > -COIN_DBL_MAX) CPXsetdblparam(env_, CPX_PARAM_OBJULIM, primalobjlimit + objoffset); if (dualobjlimit < COIN_DBL_MAX) CPXsetdblparam(env_, CPX_PARAM_OBJLLIM, dualobjlimit + objoffset); } int term; switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXlpopt", "initialSolve"); #endif break; case 1: term = CPXprimopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXprimopt", "initialSolve"); #endif break; case -1: term = CPXdualopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXdualopt", "initialSolve"); #endif break; } /* If the problem is found infeasible during presolve, resolve it to get a proper term code */ #if CPX_VERSION >= 800 int stat = CPXgetstat(env_, getMutableLpPtr()); if (stat == CPX_STAT_INForUNBD && presolve) { CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); checkCPXerror(term, "CPXlpopt", "initialSolve"); break; case 1: term = CPXprimopt(env_, lp); checkCPXerror(term, "CPXprimopt", "initialSolve"); break; case -1: term = CPXdualopt(env_, lp); checkCPXerror(term, "CPXdualopt", "initialSolve"); break; } CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); } #else if (term == CPXERR_PRESLV_INForUNBD && presolve) { CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); break; case 1: term = CPXprimopt(env_, lp); break; case -1: term = CPXdualopt(env_, lp); break; } CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); } #endif disableadvbasis = false; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::resolve() { debugMessage("OsiCpxSolverInterface::resolve()\n"); switchToLP(); bool takeHint; OsiHintStrength strength; int algorithm = 0; getHintParam(OsiDoDualInResolve, takeHint, strength); if (strength != OsiHintIgnore) algorithm = takeHint ? -1 : 1; int presolve = 0; getHintParam(OsiDoPresolveInResolve, takeHint, strength); if (strength != OsiHintIgnore) presolve = takeHint ? 1 : 0; CPXLPptr lp = getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS); if (presolve) CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); else CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); // if (messageHandler()->logLevel() == 0) // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_OFF ); // else // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_ON ); if (messageHandler()->logLevel() == 0) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 0); else if (messageHandler()->logLevel() == 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 1); else if (messageHandler()->logLevel() > 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 2); CPXsetintparam(env_, CPX_PARAM_ADVIND, !disableadvbasis); int term; switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXlpopt", "resolve"); #endif break; case 1: term = CPXprimopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXprimopt", "resolve"); #endif break; case -1: term = CPXdualopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXdualopt", "resolve"); #endif break; } /* If the problem is found infeasible during presolve, resolve it to get a proper term code */ #if CPX_VERSION >= 800 int stat = CPXgetstat(env_, getMutableLpPtr()); if (stat == CPX_STAT_INForUNBD && presolve) { CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); checkCPXerror(term, "CPXlpopt", "resolve"); break; case 1: term = CPXprimopt(env_, lp); checkCPXerror(term, "CPXprimopt", "resolve"); break; case -1: term = CPXdualopt(env_, lp); checkCPXerror(term, "CPXdualopt", "resolve"); break; } CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); } #else if (term == CPXERR_PRESLV_INForUNBD && presolve) { CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); checkCPXerror(term, "CPXlpopt", "resolve"); break; case 1: term = CPXprimopt(env_, lp); checkCPXerror(term, "CPXprimopt", "resolve"); break; case -1: term = CPXdualopt(env_, lp); checkCPXerror(term, "CPXdualopt", "resolve"); break; } CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); } #endif disableadvbasis = false; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::branchAndBound() { int term; debugMessage("OsiCpxSolverInterface::branchAndBound()\n"); switchToMIP(); if (colsol_ != NULL && domipstart) { int ncols = getNumCols(); int *ind = new int[ncols]; CoinIotaN(ind, ncols, 0); #if 1 int zero = 0; term = CPXaddmipstarts(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ALL), 1, ncols, &zero, ind, colsol_, NULL, NULL); checkCPXerror(term, "CPXaddmipstarts", "branchAndBound"); #else /* deprecated */ term = CPXcopymipstart(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ALL), ncols, ind, colsol_); checkCPXerror(term, "CPXcopymipstart", "branchAndBound"); #endif delete[] ind; CPXsetintparam(env_, CPX_PARAM_ADVIND, CPX_ON); } else CPXsetintparam(env_, CPX_PARAM_ADVIND, CPX_OFF); CPXLPptr lp = getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS); // if (messageHandler()->logLevel() == 0) // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_OFF ); // else // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_ON ); if (messageHandler()->logLevel() == 0) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 0); else if (messageHandler()->logLevel() == 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 1); else if (messageHandler()->logLevel() > 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 2); term = CPXmipopt(env_, lp); checkCPXerror(term, "CPXmipopt", "branchAndBound"); } //############################################################################# // Parameter related methods //############################################################################# bool OsiCpxSolverInterface::setIntParam(OsiIntParam key, int value) { debugMessage("OsiCpxSolverInterface::setIntParam(%d, %d)\n", key, value); bool retval = false; switch (key) { case OsiMaxNumIteration: retval = (CPXsetintparam(env_, CPX_PARAM_ITLIM, value) == 0); // ??? OsiMaxNumIteration == #Simplex-iterations ??? break; case OsiMaxNumIterationHotStart: if (value >= 0) { hotStartMaxIteration_ = value; retval = true; } else retval = false; break; case OsiNameDiscipline: retval = OsiSolverInterface::setIntParam(key, value); break; case OsiLastIntParam: retval = false; break; default: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::setDblParam(OsiDblParam key, double value) { debugMessage("OsiCpxSolverInterface::setDblParam(%d, %g)\n", key, value); bool retval = false; switch (key) { case OsiDualTolerance: retval = (CPXsetdblparam(env_, CPX_PARAM_EPOPT, value) == 0); // ??? OsiDualTolerance == CPLEX Optimality tolerance ??? break; case OsiPrimalTolerance: retval = (CPXsetdblparam(env_, CPX_PARAM_EPRHS, value) == 0); // ??? OsiPrimalTolerance == CPLEX Feasibility tolerance ??? break; case OsiDualObjectiveLimit: case OsiPrimalObjectiveLimit: case OsiObjOffset: retval = OsiSolverInterface::setDblParam(key, value); break; case OsiLastDblParam: retval = false; break; default: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::setStrParam(OsiStrParam key, const std::string &value) { debugMessage("OsiCpxSolverInterface::setStrParam(%d, %s)\n", key, value.c_str()); bool retval = false; switch (key) { case OsiProbName: OsiSolverInterface::setStrParam(key, value); return retval = true; case OsiSolverName: return false; case OsiLastStrParam: return false; default: return false; } return false; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::getIntParam(OsiIntParam key, int &value) const { debugMessage("OsiCpxSolverInterface::getIntParam(%d)\n", key); bool retval = false; switch (key) { case OsiMaxNumIteration: retval = (CPXgetintparam(env_, CPX_PARAM_ITLIM, &value) == 0); // ??? OsiMaxNumIteration == #Simplex-iterations ??? break; case OsiMaxNumIterationHotStart: value = hotStartMaxIteration_; retval = true; break; case OsiNameDiscipline: retval = OsiSolverInterface::getIntParam(key, value); break; case OsiLastIntParam: retval = false; break; default: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::getDblParam(OsiDblParam key, double &value) const { debugMessage("OsiCpxSolverInterface::getDblParam(%d)\n", key); bool retval = false; switch (key) { case OsiDualTolerance: retval = (CPXgetdblparam(env_, CPX_PARAM_EPOPT, &value) == 0); // ??? OsiDualTolerance == CPLEX Optimality tolerance ??? break; case OsiPrimalTolerance: retval = (CPXgetdblparam(env_, CPX_PARAM_EPRHS, &value) == 0); // ??? OsiPrimalTolerance == CPLEX Feasibility tolerance ??? break; case OsiDualObjectiveLimit: case OsiPrimalObjectiveLimit: case OsiObjOffset: retval = OsiSolverInterface::getDblParam(key, value); break; case OsiLastDblParam: retval = false; break; default: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::getStrParam(OsiStrParam key, std::string &value) const { debugMessage("OsiCpxSolverInterface::getStrParam(%d)\n", key); switch (key) { case OsiProbName: OsiSolverInterface::getStrParam(key, value); break; case OsiSolverName: value = "cplex"; break; case OsiLastStrParam: return false; default: return false; } return true; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiCpxSolverInterface::isAbandoned() const { debugMessage("OsiCpxSolverInterface::isAbandoned()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 return (stat == 0 || stat == CPX_STAT_NUM_BEST || stat == CPX_STAT_ABORT_USER); #else return (stat == 0 || stat == CPX_NUM_BEST_FEAS || stat == CPX_NUM_BEST_INFEAS || stat == CPX_ABORT_FEAS || stat == CPX_ABORT_INFEAS || stat == CPX_ABORT_CROSSOVER); #endif } bool OsiCpxSolverInterface::isProvenOptimal() const { debugMessage("OsiCpxSolverInterface::isProvenOptimal()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 return ((probtypemip_ == false && (stat == CPX_STAT_OPTIMAL || stat == CPX_STAT_OPTIMAL_INFEAS)) || (probtypemip_ == true && (stat == CPXMIP_OPTIMAL || stat == CPXMIP_OPTIMAL_TOL))); #else return ((probtypemip_ == false && (stat == CPX_OPTIMAL || stat == CPX_OPTIMAL_INFEAS)) || (probtypemip_ == true && stat == CPXMIP_OPTIMAL)); #endif } bool OsiCpxSolverInterface::isProvenPrimalInfeasible() const { debugMessage("OsiCpxSolverInterface::isProvenPrimalInfeasible()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 // In CPLEX 8, the return code is with respect // to the original problem, regardless of the algorithm used to solve it // --tkr 7/31/03 return (stat == CPX_STAT_INFEASIBLE); // return (method == CPX_ALG_PRIMAL && stat == CPX_STAT_INFEASIBLE || // method == CPX_ALG_DUAL && stat == CPX_STAT_UNBOUNDED); #else int method = CPXgetmethod(env_, getMutableLpPtr()); return ((method == CPX_ALG_PRIMAL && stat == CPX_INFEASIBLE) || (method == CPX_ALG_DUAL && stat == CPX_UNBOUNDED) || stat == CPX_ABORT_PRIM_INFEAS || stat == CPX_ABORT_PRIM_DUAL_INFEAS); #endif } bool OsiCpxSolverInterface::isProvenDualInfeasible() const { debugMessage("OsiCpxSolverInterface::isProvenDualInfeasible()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 // In CPLEX 8, the return code is with respect // to the original problem, regardless of the algorithm used to solve it // --tkr 7/31/03 return (stat == CPX_STAT_UNBOUNDED); //return (method == CPX_ALG_PRIMAL && stat == CPX_STAT_UNBOUNDED || // method == CPX_ALG_DUAL && stat == CPX_STAT_INFEASIBLE); #else int method = CPXgetmethod(env_, getMutableLpPtr()); return ((method == CPX_ALG_PRIMAL && stat == CPX_UNBOUNDED) || (method == CPX_ALG_DUAL && stat == CPX_INFEASIBLE) || stat == CPX_ABORT_DUAL_INFEAS || stat == CPX_ABORT_PRIM_DUAL_INFEAS); #endif } bool OsiCpxSolverInterface::isPrimalObjectiveLimitReached() const { debugMessage("OsiCpxSolverInterface::isPrimalObjectiveLimitReached()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); int method = CPXgetmethod(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 return method == CPX_ALG_PRIMAL && stat == CPX_STAT_ABORT_OBJ_LIM; #else return method == CPX_ALG_PRIMAL && stat == CPX_OBJ_LIM; #endif } bool OsiCpxSolverInterface::isDualObjectiveLimitReached() const { debugMessage("OsiCpxSolverInterface::isDualObjectiveLimitReached()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); int method = CPXgetmethod(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 return method == CPX_ALG_DUAL && stat == CPX_STAT_ABORT_OBJ_LIM; #else return method == CPX_ALG_DUAL && stat == CPX_OBJ_LIM; #endif } bool OsiCpxSolverInterface::isIterationLimitReached() const { debugMessage("OsiCpxSolverInterface::isIterationLimitReached()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 return stat == CPX_STAT_ABORT_IT_LIM; #else return stat == CPX_IT_LIM_FEAS || stat == CPX_IT_LIM_INFEAS; #endif } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart *OsiCpxSolverInterface::getEmptyWarmStart() const { return (dynamic_cast< CoinWarmStart * >(new CoinWarmStartBasis())); } CoinWarmStart *OsiCpxSolverInterface::getWarmStart() const { debugMessage("OsiCpxSolverInterface::getWarmStart()\n"); if (probtypemip_) return getEmptyWarmStart(); CoinWarmStartBasis *ws = NULL; int numcols = getNumCols(); int numrows = getNumRows(); int *cstat = new int[numcols]; int *rstat = new int[numrows]; char *sense = new char[numrows]; int restat, i; restat = CPXgetsense(env_, getMutableLpPtr(), sense, 0, numrows - 1); if (restat == 0) restat = CPXgetbase(env_, getMutableLpPtr(), cstat, rstat); if (restat == 0) { ws = new CoinWarmStartBasis; ws->setSize(numcols, numrows); for (i = 0; i < numrows; ++i) { switch (rstat[i]) { case CPX_BASIC: ws->setArtifStatus(i, CoinWarmStartBasis::basic); break; case CPX_AT_LOWER: if (sense[i] == 'G') ws->setArtifStatus(i, CoinWarmStartBasis::atUpperBound); else ws->setArtifStatus(i, CoinWarmStartBasis::atLowerBound); break; case CPX_AT_UPPER: if (sense[i] == 'L') ws->setArtifStatus(i, CoinWarmStartBasis::atLowerBound); else ws->setArtifStatus(i, CoinWarmStartBasis::atUpperBound); break; default: // unknown row status delete ws; ws = NULL; goto TERMINATE; } } for (i = 0; i < numcols; ++i) { switch (cstat[i]) { case CPX_BASIC: ws->setStructStatus(i, CoinWarmStartBasis::basic); break; case CPX_AT_LOWER: ws->setStructStatus(i, CoinWarmStartBasis::atLowerBound); break; case CPX_AT_UPPER: ws->setStructStatus(i, CoinWarmStartBasis::atUpperBound); break; case CPX_FREE_SUPER: ws->setStructStatus(i, CoinWarmStartBasis::isFree); break; default: // unknown column status delete ws; ws = NULL; goto TERMINATE; } } } TERMINATE: delete[] cstat; delete[] rstat; delete[] sense; return ws; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::setWarmStart(const CoinWarmStart *warmstart) { debugMessage("OsiCpxSolverInterface::setWarmStart(%p)\n", (void *)warmstart); const CoinWarmStartBasis *ws = dynamic_cast< const CoinWarmStartBasis * >(warmstart); int numcols, numrows, i, restat; int *cstat, *rstat; bool retval = false; if (!ws) return false; numcols = getNumCols(); numrows = getNumRows(); /* if too small warm start information is given, we take this as a sign to disable a warm start in the next LP solve */ if (ws->getNumStructural() < numcols || ws->getNumArtificial() < numrows) { disableadvbasis = true; return false; } switchToLP(); cstat = new int[numcols]; rstat = new int[numrows]; for (i = 0; i < numrows; ++i) { switch (ws->getArtifStatus(i)) { case CoinWarmStartBasis::basic: rstat[i] = CPX_BASIC; break; case CoinWarmStartBasis::atLowerBound: rstat[i] = CPX_AT_LOWER; break; case CoinWarmStartBasis::atUpperBound: rstat[i] = CPX_AT_UPPER; break; default: // unknown row status retval = false; goto TERMINATE; } } for (i = 0; i < numcols; ++i) { switch (ws->getStructStatus(i)) { case CoinWarmStartBasis::basic: cstat[i] = CPX_BASIC; break; case CoinWarmStartBasis::atLowerBound: cstat[i] = CPX_AT_LOWER; break; case CoinWarmStartBasis::atUpperBound: cstat[i] = CPX_AT_UPPER; break; case CoinWarmStartBasis::isFree: cstat[i] = CPX_FREE_SUPER; break; default: // unknown row status retval = false; goto TERMINATE; } } // *FIXME* : can this be getMutableLpPtr() ? Does any cached data change by // *FIXME* : setting warmstart? Or at least wouldn't it be sufficient to // *FIXME* : clear the cached results but not the problem data? // -> is fixed by using FREECACHED_RESULTS; only cached solution will be discarded restat = CPXcopybase(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS), cstat, rstat); retval = (restat == 0); TERMINATE: delete[] cstat; delete[] rstat; return retval; } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# void OsiCpxSolverInterface::markHotStart() { debugMessage("OsiCpxSolverInterface::markHotStart()\n"); int err; int numcols, numrows; assert(!probtypemip_); numcols = getNumCols(); numrows = getNumRows(); if (numcols > hotStartCStatSize_) { delete[] hotStartCStat_; hotStartCStatSize_ = static_cast< int >(1.2 * static_cast< double >(numcols)); // get some extra space for future hot starts hotStartCStat_ = new int[hotStartCStatSize_]; } if (numrows > hotStartRStatSize_) { delete[] hotStartRStat_; hotStartRStatSize_ = static_cast< int >(1.2 * static_cast< double >(numrows)); // get some extra space for future hot starts hotStartRStat_ = new int[hotStartRStatSize_]; } err = CPXgetbase(env_, getMutableLpPtr(), hotStartCStat_, hotStartRStat_); checkCPXerror(err, "CPXgetbase", "markHotStart"); } void OsiCpxSolverInterface::solveFromHotStart() { debugMessage("OsiCpxSolverInterface::solveFromHotStart()\n"); int err; int maxiter; switchToLP(); assert(getNumCols() <= hotStartCStatSize_); assert(getNumRows() <= hotStartRStatSize_); err = CPXcopybase(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS), hotStartCStat_, hotStartRStat_); checkCPXerror(err, "CPXcopybase", "solveFromHotStart"); err = CPXgetintparam(env_, CPX_PARAM_ITLIM, &maxiter); checkCPXerror(err, "CPXgetintparam", "solveFromHotStart"); err = CPXsetintparam(env_, CPX_PARAM_ITLIM, hotStartMaxIteration_); checkCPXerror(err, "CPXsetintparam", "solveFromHotStart"); resolve(); err = CPXsetintparam(env_, CPX_PARAM_ITLIM, maxiter); checkCPXerror(err, "CPXsetintparam", "solveFromHotStart"); } void OsiCpxSolverInterface::unmarkHotStart() { debugMessage("OsiCpxSolverInterface::unmarkHotStart()\n"); // ??? be lazy with deallocating memory and do nothing here, deallocate memory in the destructor } //############################################################################# // Problem information methods (original data) //############################################################################# //------------------------------------------------------------------ // Get number of rows, columns, elements, ... //------------------------------------------------------------------ int OsiCpxSolverInterface::getNumCols() const { debugMessage("OsiCpxSolverInterface::getNumCols()\n"); return CPXgetnumcols(env_, getMutableLpPtr()); } int OsiCpxSolverInterface::getNumRows() const { debugMessage("OsiCpxSolverInterface::getNumRows()\n"); return CPXgetnumrows(env_, getMutableLpPtr()); } int OsiCpxSolverInterface::getNumElements() const { debugMessage("OsiCpxSolverInterface::getNumElements()\n"); return CPXgetnumnz(env_, getMutableLpPtr()); } //------------------------------------------------------------------ // Get pointer to rim vectors //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getColLower() const { debugMessage("OsiCpxSolverInterface::getColLower()\n"); if (collower_ == NULL) { int ncols = CPXgetnumcols(env_, getMutableLpPtr()); if (ncols > 0) { collower_ = new double[ncols]; CPXgetlb(env_, getMutableLpPtr(), collower_, 0, ncols - 1); } } return collower_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getColUpper() const { debugMessage("OsiCpxSolverInterface::getColUpper()\n"); if (colupper_ == NULL) { int ncols = CPXgetnumcols(env_, getMutableLpPtr()); if (ncols > 0) { colupper_ = new double[ncols]; CPXgetub(env_, getMutableLpPtr(), colupper_, 0, ncols - 1); } } return colupper_; } //------------------------------------------------------------------ const char *OsiCpxSolverInterface::getRowSense() const { debugMessage("OsiCpxSolverInterface::getRowSense()\n"); if (rowsense_ == NULL) { // rowsense is determined with rhs, so invoke rhs getRightHandSide(); assert(rowsense_ != NULL || getNumRows() == 0); } return rowsense_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRightHandSide() const { debugMessage("OsiCpxSolverInterface::getRightHandSide()\n"); if (rhs_ == NULL) { CPXLPptr lp = getMutableLpPtr(); int nrows = getNumRows(); if (nrows > 0) { rhs_ = new double[nrows]; CPXgetrhs(env_, lp, rhs_, 0, nrows - 1); assert(rowrange_ == NULL); rowrange_ = new double[nrows]; CPXgetrngval(env_, lp, rowrange_, 0, nrows - 1); assert(rowsense_ == NULL); rowsense_ = new char[nrows]; CPXgetsense(env_, lp, rowsense_, 0, nrows - 1); double inf = getInfinity(); int i; for (i = 0; i < nrows; ++i) { if (rowsense_[i] != 'R') rowrange_[i] = 0.0; else { if (rhs_[i] <= -inf) { rowsense_[i] = 'N'; rowrange_[i] = 0.0; rhs_[i] = 0.0; } else { if (rowrange_[i] >= 0.0) rhs_[i] = rhs_[i] + rowrange_[i]; else rowrange_[i] = -rowrange_[i]; } } } } } return rhs_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRowRange() const { debugMessage("OsiCpxSolverInterface::getRowRange()\n"); if (rowrange_ == NULL) { // rowrange is determined with rhs, so invoke rhs getRightHandSide(); assert(rowrange_ != NULL || getNumRows() == 0); } return rowrange_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRowLower() const { debugMessage("OsiCpxSolverInterface::getRowLower()\n"); if (rowlower_ == NULL) { int nrows = getNumRows(); const char *rowsense = getRowSense(); const double *rhs = getRightHandSide(); const double *rowrange = getRowRange(); if (nrows > 0) { rowlower_ = new double[nrows]; double dum1; for (int i = 0; i < nrows; i++) convertSenseToBound(rowsense[i], rhs[i], rowrange[i], rowlower_[i], dum1); } } return rowlower_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRowUpper() const { debugMessage("OsiCpxSolverInterface::getRowUpper()\n"); if (rowupper_ == NULL) { int nrows = getNumRows(); const char *rowsense = getRowSense(); const double *rhs = getRightHandSide(); const double *rowrange = getRowRange(); if (nrows > 0) { rowupper_ = new double[nrows]; double dum1; for (int i = 0; i < nrows; i++) convertSenseToBound(rowsense[i], rhs[i], rowrange[i], dum1, rowupper_[i]); } } return rowupper_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getObjCoefficients() const { debugMessage("OsiCpxSolverInterface::getObjCoefficients()\n"); if (obj_ == NULL) { int ncols = CPXgetnumcols(env_, getMutableLpPtr()); if (ncols > 0) { obj_ = new double[ncols]; int err = CPXgetobj(env_, getMutableLpPtr(), obj_, 0, ncols - 1); checkCPXerror(err, "CPXgetobj", "getObjCoefficients"); } } return obj_; } //------------------------------------------------------------------ double OsiCpxSolverInterface::getObjSense() const { debugMessage("OsiCpxSolverInterface::getObjSense()\n"); if (CPXgetobjsen(env_, getMutableLpPtr()) == CPX_MIN) return +1.0; else return -1.0; } //------------------------------------------------------------------ // Return information on integrality //------------------------------------------------------------------ bool OsiCpxSolverInterface::isContinuous(int colNumber) const { debugMessage("OsiCpxSolverInterface::isContinuous(%d)\n", colNumber); return getCtype()[colNumber] == 'C'; } //------------------------------------------------------------------ // Row and column copies of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix *OsiCpxSolverInterface::getMatrixByRow() const { debugMessage("OsiCpxSolverInterface::getMatrixByRow()\n"); if (matrixByRow_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); int nelems; int *starts = new int[nrows + 1]; int *len = new int[nrows]; int requiredSpace; CPXgetrows(env_, getMutableLpPtr(), &nelems, starts, NULL, NULL, 0, &requiredSpace, 0, nrows - 1); assert(-requiredSpace == getNumElements()); int *indices = new int[-requiredSpace]; double *elements = new double[-requiredSpace]; CPXgetrows(env_, getMutableLpPtr(), &nelems, starts, indices, elements, -requiredSpace, &requiredSpace, 0, nrows - 1); assert(requiredSpace == 0); matrixByRow_ = new CoinPackedMatrix(); // Should be able to pass null for length of packed matrix, // assignMatrix does not seem to allow (even though documentation // say it is possible to do this). // For now compute the length. starts[nrows] = nelems; for (int i = 0; i < nrows; ++i) len[i] = starts[i + 1] - starts[i]; matrixByRow_->assignMatrix(false /* not column ordered */, ncols, nrows, nelems, elements, indices, starts, len /*NULL*/); } return matrixByRow_; } //------------------------------------------------------------------ const CoinPackedMatrix *OsiCpxSolverInterface::getMatrixByCol() const { debugMessage("OsiCpxSolverInterface::getMatrixByCol()\n"); if (matrixByCol_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); int nelems; int *starts = new int[ncols + 1]; int *len = new int[ncols]; int requiredSpace; CPXgetcols(env_, getMutableLpPtr(), &nelems, starts, NULL, NULL, 0, &requiredSpace, 0, ncols - 1); assert(-requiredSpace == getNumElements()); int *indices = new int[-requiredSpace]; double *elements = new double[-requiredSpace]; CPXgetcols(env_, getMutableLpPtr(), &nelems, starts, indices, elements, -requiredSpace, &requiredSpace, 0, ncols - 1); assert(requiredSpace == 0); matrixByCol_ = new CoinPackedMatrix(); // Should be able to pass null for length of packed matrix, // assignMatrix does not seem to allow (even though documentation // say it is possible to do this). // For now compute the length. starts[ncols] = nelems; for (int i = 0; i < ncols; i++) len[i] = starts[i + 1] - starts[i]; matrixByCol_->assignMatrix(true /* column ordered */, nrows, ncols, nelems, elements, indices, starts, len /*NULL*/); assert(matrixByCol_->getNumCols() == ncols); assert(matrixByCol_->getNumRows() == nrows); } return matrixByCol_; } //------------------------------------------------------------------ // Get solver's value for infinity //------------------------------------------------------------------ double OsiCpxSolverInterface::getInfinity() const { debugMessage("OsiCpxSolverInterface::getInfinity()\n"); return CPX_INFBOUND; } //############################################################################# // Problem information methods (results) //############################################################################# // *FIXME*: what should be done if a certain vector doesn't exist??? const double *OsiCpxSolverInterface::getColSolution() const { debugMessage("OsiCpxSolverInterface::getColSolution()\n"); if (colsol_ == NULL) { CPXLPptr lp = getMutableLpPtr(); int ncols = CPXgetnumcols(env_, lp); if (ncols > 0) { colsol_ = new double[ncols]; if (probtypemip_) { #if CPX_VERSION >= 1100 int solntype; CPXsolninfo(env_, lp, NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { int err = CPXgetmipx(env_, lp, colsol_, 0, ncols - 1); checkCPXerror(err, "CPXgetmipx", "getColSolution"); } else { CoinFillN(colsol_, ncols, 0.0); } #else int err = CPXgetmipx(env_, lp, colsol_, 0, ncols - 1); if (err == CPXERR_NO_INT_SOLN) CoinFillN(colsol_, ncols, 0.0); else checkCPXerror(err, "CPXgetmipx", "getColSolution"); #endif } else { int solntype; CPXsolninfo(env_, lp, NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { int err = CPXgetx(env_, lp, colsol_, 0, ncols - 1); checkCPXerror(err, "CPXgetx", "getColSolution"); } else { CoinFillN(colsol_, ncols, 0.0); } } } } return colsol_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRowPrice() const { debugMessage("OsiCpxSolverInterface::getRowPrice()\n"); if (rowsol_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowsol_ = new double[nrows]; int solntype; /* check if a solution exists, if Cplex >= 11.0 */ #if CPX_VERSION >= 1100 CPXsolninfo(env_, getMutableLpPtr(), NULL, &solntype, NULL, NULL); #else solntype = CPX_BASIC_SOLN; #endif if (solntype != CPX_NO_SOLN) { int err = CPXgetpi(env_, getMutableLpPtr(), rowsol_, 0, nrows - 1); checkCPXerror(err, "CPXgetpi", "getRowPrice"); } else { CoinFillN(rowsol_, nrows, 0.0); } } } return rowsol_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getReducedCost() const { debugMessage("OsiCpxSolverInterface::getReducedCost()\n"); if (redcost_ == NULL) { int ncols = CPXgetnumcols(env_, getMutableLpPtr()); if (ncols > 0) { redcost_ = new double[ncols]; int solntype; /* check if a solution exists, if Cplex >= 11.0 */ #if CPX_VERSION >= 1100 CPXsolninfo(env_, getMutableLpPtr(), NULL, &solntype, NULL, NULL); #else solntype = CPX_BASIC_SOLN; #endif if (solntype != CPX_NO_SOLN) { int err = CPXgetdj(env_, getMutableLpPtr(), redcost_, 0, ncols - 1); checkCPXerror(err, "CPXgetdj", "getReducedCost"); } else { CoinFillN(redcost_, ncols, 0.0); } } } return redcost_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRowActivity() const { debugMessage("OsiCpxSolverInterface::getRowActivity()\n"); if (rowact_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowact_ = new double[nrows]; int solntype; if (probtypemip_) { /* check if a solution exists, if Cplex >= 11.0 */ #if CPX_VERSION >= 1100 CPXsolninfo(env_, getMutableLpPtr(), NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { double *rowslack = new double[nrows]; int err = CPXgetmipslack(env_, getMutableLpPtr(), rowslack, 0, nrows - 1); checkCPXerror(err, "CPXgetmipslack", "getRowActivity"); for (int r = 0; r < nrows; ++r) rowact_[r] = getRightHandSide()[r] - rowslack[r]; delete[] rowslack; } else { CoinFillN(rowact_, nrows, 0.0); } #else double *rowslack = new double[nrows]; int err = CPXgetmipslack(env_, getMutableLpPtr(), rowslack, 0, nrows - 1); if (err == CPXERR_NO_SOLN || err == CPXERR_NO_INT_SOLN) { CoinFillN(rowact_, nrows, 0.0); } else { checkCPXerror(err, "CPXgetmipslack", "getRowActivity"); for (int r = 0; r < nrows; ++r) rowact_[r] = getRightHandSide()[r] - rowslack[r]; } delete[] rowslack; #endif } else { CPXsolninfo(env_, getMutableLpPtr(), NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { int err = CPXgetax(env_, getMutableLpPtr(), rowact_, 0, nrows - 1); checkCPXerror(err, "CPXgetax", "getRowActivity"); } else { CoinFillN(rowact_, nrows, 0.0); } } } } return rowact_; } //------------------------------------------------------------------ double OsiCpxSolverInterface::getObjValue() const { debugMessage("OsiCpxSolverInterface::getObjValue()\n"); double objval = 0.0; int err; int solntype; CPXLPptr lp = getMutableLpPtr(); if (probtypemip_) { #if CPX_VERSION >= 1100 CPXsolninfo(env_, lp, NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { err = CPXgetmipobjval(env_, lp, &objval); checkCPXerror(err, "CPXgetmipobjval", "getObjValue"); } else { // => return 0.0 as objective value (?? is this the correct behaviour ??) objval = 0.0; } #else err = CPXgetmipobjval(env_, lp, &objval); if (err == CPXERR_NO_INT_SOLN) // => return 0.0 as objective value (?? is this the correct behaviour ??) objval = 0.0; else checkCPXerror(err, "CPXgetmipobjval", "getObjValue"); #endif } else { CPXsolninfo(env_, lp, NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { err = CPXgetobjval(env_, lp, &objval); checkCPXerror(err, "CPXgetobjval", "getObjValue"); } else { // => return 0.0 as objective value (?? is this the correct behaviour ??) objval = 0.0; } } // Adjust objective function value by constant term in objective function double objOffset; getDblParam(OsiObjOffset, objOffset); objval -= objOffset; return objval; } //------------------------------------------------------------------ int OsiCpxSolverInterface::getIterationCount() const { debugMessage("OsiCpxSolverInterface::getIterationCount()\n"); // CPXgetitcnt prints an error if no solution exists, so check before, if Cplex >= 11.0 #if CPX_VERSION >= 1100 int solntype; CPXsolninfo(env_, getMutableLpPtr(), NULL, &solntype, NULL, NULL); if (solntype == CPX_NO_SOLN) return 0; #endif if (probtypemip_) return CPXgetmipitcnt(env_, getMutableLpPtr()); else return CPXgetitcnt(env_, getMutableLpPtr()); } //------------------------------------------------------------------ std::vector< double * > OsiCpxSolverInterface::getDualRays(int maxNumRays, bool fullRay) const { debugMessage("OsiCpxSolverInterface::getDualRays(%d,%s)\n", maxNumRays, fullRay ? "true" : "false"); if (fullRay == true) { throw CoinError("Full dual rays not yet implemented.", "getDualRays", "OsiCpxSolverInterface"); } OsiCpxSolverInterface solver(*this); const int numcols = getNumCols(); const int numrows = getNumRows(); int *index = new int[CoinMax(numcols, numrows)]; int i; for (i = CoinMax(numcols, numrows) - 1; i >= 0; --i) { index[i] = i; } double *obj = new double[CoinMax(numcols, 2 * numrows)]; CoinFillN(obj, numcols, 0.0); solver.setObjCoeffSet(index, index + numcols, obj); double *clb = new double[2 * numrows]; double *cub = new double[2 * numrows]; const double plusone = 1.0; const double minusone = -1.0; const char *sense = getRowSense(); const CoinPackedVectorBase **cols = new const CoinPackedVectorBase *[2 * numrows]; int newcols = 0; for (i = 0; i < numrows; ++i) { switch (sense[i]) { case 'L': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &minusone, false); break; case 'G': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &plusone, false); break; case 'R': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &minusone, false); cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &plusone, false); break; case 'N': break; } } CoinFillN(obj, newcols, 1.0); CoinFillN(clb, newcols, 0.0); CoinFillN(cub, newcols, getInfinity()); solver.addCols(newcols, cols, clb, cub, obj); delete[] index; delete[] cols; delete[] clb; delete[] cub; delete[] obj; solver.setObjSense(1.0); // minimize solver.initialSolve(); const double *solverpi = solver.getRowPrice(); double *pi = new double[numrows]; for (i = numrows - 1; i >= 0; --i) { pi[i] = -solverpi[i]; } return std::vector< double * >(1, pi); } //------------------------------------------------------------------ std::vector< double * > OsiCpxSolverInterface::getPrimalRays(int maxNumRays) const { debugMessage("OsiCpxSolverInterface::getPrimalRays(%d)\n", maxNumRays); double *ray = new double[getNumCols()]; int err = CPXgetray(env_, getMutableLpPtr(), ray); checkCPXerror(err, "CPXgetray", "getPrimalRays"); return std::vector< double * >(1, ray); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# void OsiCpxSolverInterface::setObjCoeff(int elementIndex, double elementValue) { debugMessage("OsiCpxSolverInterface::setObjCoeff(%d, %g)\n", elementIndex, elementValue); // int err = CPXchgobj(env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_COLUMN ), 1, &elementIndex, &elementValue); int err = CPXchgobj(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &elementIndex, &elementValue); checkCPXerror(err, "CPXchgobj", "setObjCoeff"); if (obj_ != NULL) { obj_[elementIndex] = elementValue; } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList) { debugMessage("OsiCpxSolverInterface::setObjCoeffSet(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)coeffList); const long int cnt = indexLast - indexFirst; // int err = CPXchgobj(env_, // getLpPtr(OsiCpxSolverInterface::FREECACHED_COLUMN), cnt, // const_cast(indexFirst), // const_cast(coeffList)); int err = CPXchgobj(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), static_cast< int >(cnt), const_cast< int * >(indexFirst), const_cast< double * >(coeffList)); checkCPXerror(err, "CPXchgobj", "setObjCoeffSet"); if (obj_ != NULL) { for (int i = 0; i < cnt; ++i) { obj_[indexFirst[i]] = coeffList[i]; } } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setColLower(int elementIndex, double elementValue) { debugMessage("OsiCpxSolverInterface::setColLower(%d, %g)\n", elementIndex, elementValue); char c = 'L'; // int err = CPXchgbds( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_COLUMN ), 1, &elementIndex, &c, &elementValue ); int err = CPXchgbds(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &elementIndex, &c, &elementValue); checkCPXerror(err, "CPXchgbds", "setColLower"); if (collower_ != NULL) { collower_[elementIndex] = elementValue; } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setColUpper(int elementIndex, double elementValue) { debugMessage("OsiCpxSolverInterface::setColUpper(%d, %g)\n", elementIndex, elementValue); char c = 'U'; // int err = CPXchgbds( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_COLUMN ), 1, &elementIndex, &c, &elementValue ); int err = CPXchgbds(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &elementIndex, &c, &elementValue); checkCPXerror(err, "CPXchgbds", "setColUpper"); if (colupper_ != NULL) { colupper_[elementIndex] = elementValue; } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setColBounds(int elementIndex, double lower, double upper) { debugMessage("OsiCpxSolverInterface::setColBounds(%d, %g, %g)\n", elementIndex, lower, upper); char c[2] = { 'L', 'U' }; int ind[2]; double bd[2]; int err; ind[0] = elementIndex; ind[1] = elementIndex; bd[0] = lower; bd[1] = upper; // err = CPXchgbds( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_COLUMN ), 2, ind, c, bd ); err = CPXchgbds(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 2, ind, c, bd); checkCPXerror(err, "CPXchgbds", "setColBounds"); if (collower_ != NULL) { collower_[elementIndex] = lower; } if (colupper_ != NULL) { colupper_[elementIndex] = upper; } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { debugMessage("OsiCpxSolverInterface::setColSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; char *c = new char[2 * cnt]; int *ind = new int[2 * cnt]; for (int i = 0; i < cnt; ++i) { register const int j = 2 * i; c[j] = 'L'; c[j + 1] = 'U'; const int colind = indexFirst[i]; ind[j] = colind; ind[j + 1] = colind; if (collower_ != NULL) { collower_[colind] = boundList[2 * i]; } if (colupper_ != NULL) { colupper_[colind] = boundList[2 * i + 1]; } } // int err = CPXchgbds( env_, // getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW ), // 2*cnt, ind, c, // const_cast(boundList) ); int err = CPXchgbds(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 2 * static_cast< int >(cnt), ind, c, const_cast< double * >(boundList)); checkCPXerror(err, "CPXchgbds", "setColSetBounds"); delete[] ind; delete[] c; // OsiSolverInterface::setColSetBounds( indexFirst, indexLast, boundList ); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowLower(int i, double elementValue) { debugMessage("OsiCpxSolverInterface::setRowLower(%d, %g)\n", i, elementValue); double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (lower != elementValue) { convertBoundToSense(elementValue, upper, sense, rhs, range); setRowType(i, sense, rhs, range); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowUpper(int i, double elementValue) { debugMessage("OsiCpxSolverInterface::setRowUpper(%d, %g)\n", i, elementValue); double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (upper != elementValue) { convertBoundToSense(lower, elementValue, sense, rhs, range); setRowType(i, sense, rhs, range); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowBounds(int elementIndex, double lower, double upper) { debugMessage("OsiCpxSolverInterface::setRowBounds(%d, %g, %g)\n", elementIndex, lower, upper); double rhs, range; char sense; convertBoundToSense(lower, upper, sense, rhs, range); setRowType(elementIndex, sense, rhs, range); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowType(int i, char sense, double rightHandSide, double range) { debugMessage("OsiCpxSolverInterface::setRowType(%d, %c, %g, %g)\n", i, sense, rightHandSide, range); int err; // in CPLEX, ranged constraints are interpreted as rhs <= coeff*x <= rhs+range, which is different from Osi double cpxrhs = rightHandSide; if (sense == 'R') { assert(range >= 0.0); cpxrhs -= range; } if (sense == 'N') { sense = 'R'; cpxrhs = -getInfinity(); range = 2 * getInfinity(); } /************** err = CPXchgsense( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_ROW ), 1, &i, &sense ); checkCPXerror( err, "CPXchgsense", "setRowType" ); err = CPXchgrhs( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_ROW ), 1, &i, &rightHandSide ); checkCPXerror( err, "CPXchgrhs", "setRowType" ); err = CPXchgrngval( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_ROW ), 1, &i, &range ); checkCPXerror( err, "CPXchgrngval", "setRowType" ); ***************/ err = CPXchgsense(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &i, &sense); checkCPXerror(err, "CPXchgsense", "setRowType"); if (rowsense_ != NULL) { rowsense_[i] = sense; } err = CPXchgrhs(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &i, &cpxrhs); checkCPXerror(err, "CPXchgrhs", "setRowType"); if (rhs_ != NULL) { rhs_[i] = rightHandSide; } err = CPXchgrngval(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &i, &range); checkCPXerror(err, "CPXchgrngval", "setRowType"); if (rowrange_ != NULL) { rowrange_[i] = range; } if (rowlower_ != NULL || rowupper_ != NULL) { double dummy; convertSenseToBound(sense, rightHandSide, range, rowlower_ ? rowlower_[i] : dummy, rowupper_ ? rowupper_[i] : dummy); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { debugMessage("OsiCpxSolverInterface::setRowSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; char *sense = new char[cnt]; double *rhs = new double[cnt]; double *range = new double[cnt]; for (int i = 0; i < cnt; ++i) { convertBoundToSense(boundList[2 * i], boundList[2 * i + 1], sense[i], rhs[i], range[i]); } setRowSetTypes(indexFirst, indexLast, sense, rhs, range); delete[] range; delete[] rhs; delete[] sense; // OsiSolverInterface::setRowSetBounds( indexFirst, indexLast, boundList ); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList) { debugMessage("OsiCpxSolverInterface::setRowSetTypes(%p, %p, %p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)senseList, (void *)rhsList, (void *)rangeList); const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; char *sense = new char[cnt]; double *rhs = new double[cnt]; double *range = new double[cnt]; int *rangeind = new int[cnt]; int rangecnt = 0; for (int i = 0; i < cnt; ++i) { sense[i] = senseList[i]; rhs[i] = rhsList[i]; if (sense[i] == 'R') { assert(rangeList[i] >= 0.0); rhs[i] -= rangeList[i]; rangeind[rangecnt] = indexFirst[i]; range[rangecnt] = rangeList[i]; ++rangecnt; } if (sense[i] == 'N') { sense[i] = 'R'; rhs[i] = -getInfinity(); rangeind[rangecnt] = indexFirst[i]; range[rangecnt] = 2 * getInfinity(); ++rangecnt; } } int err; /****************** err = CPXchgsense(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), cnt, const_cast(indexFirst), sense); checkCPXerror( err, "CPXchgsense", "setRowSetTypes" ); err = CPXchgrhs(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), cnt, const_cast(indexFirst), rhs); checkCPXerror( err, "CPXchgrhs", "setRowSetTypes" ); err = CPXchgrngval(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), rangecnt, rangeind, range); checkCPXerror( err, "CPXchgrngval", "setRowSetTypes" ); ********************/ err = CPXchgsense(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ROW), static_cast< int >(cnt), const_cast< int * >(indexFirst), sense); checkCPXerror(err, "CPXchgsense", "setRowSetTypes"); err = CPXchgrhs(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), static_cast< int >(cnt), const_cast< int * >(indexFirst), rhs); checkCPXerror(err, "CPXchgrhs", "setRowSetTypes"); err = CPXchgrngval(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), rangecnt, rangeind, range); checkCPXerror(err, "CPXchgrngval", "setRowSetTypes"); int j; if (rowsense_ != NULL) { for (j = 0; j < cnt; j++) { rowsense_[indexFirst[j]] = sense[j]; } } if (rhs_ != NULL) { for (j = 0; j < cnt; j++) { rhs_[indexFirst[j]] = rhs[j]; } } if (rowrange_ != NULL) { for (j = 0; j < rangecnt; j++) { rowrange_[rangeind[j]] = range[j]; } } delete[] rangeind; delete[] range; delete[] rhs; delete[] sense; // OsiSolverInterface::setRowSetTypes( indexFirst, indexLast, senseList, // rhsList, rangeList ); } //############################################################################# void OsiCpxSolverInterface::setContinuous(int index) { debugMessage("OsiCpxSolverInterface::setContinuous(%d)\n", index); assert(coltype_ != NULL); assert(coltypesize_ >= getNumCols()); coltype_[index] = 'C'; if (probtypemip_) { CPXLPptr lp = getMutableLpPtr(); int err; err = CPXchgctype(env_, lp, 1, &index, &coltype_[index]); checkCPXerror(err, "CPXchgctype", "setContinuous"); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setInteger(int index) { debugMessage("OsiCpxSolverInterface::setInteger(%d)\n", index); assert(coltype_ != NULL); assert(coltypesize_ >= getNumCols()); if (getColLower()[index] == 0.0 && getColUpper()[index] == 1.0) coltype_[index] = 'B'; else coltype_[index] = 'I'; if (probtypemip_) { CPXLPptr lp = getMutableLpPtr(); int err; err = CPXchgctype(env_, lp, 1, &index, &coltype_[index]); checkCPXerror(err, "CPXchgctype", "setInteger"); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setContinuous(const int *indices, int len) { debugMessage("OsiCpxSolverInterface::setContinuous(%p, %d)\n", (void *)indices, len); for (int i = 0; i < len; ++i) setContinuous(indices[i]); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setInteger(const int *indices, int len) { debugMessage("OsiCpxSolverInterface::setInteger(%p, %d)\n", (void *)indices, len); for (int i = 0; i < len; ++i) setInteger(indices[i]); } //############################################################################# void OsiCpxSolverInterface::setObjSense(double s) { debugMessage("OsiCpxSolverInterface::setObjSense(%g)\n", s); if (s == +1.0) CPXchgobjsen(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS), CPX_MIN); else CPXchgobjsen(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS), CPX_MAX); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setColSolution(const double *cs) { debugMessage("OsiCpxSolverInterface::setColSolution(%p)\n", (void *)cs); int nc = getNumCols(); if (cs == NULL) freeCachedResults(); else if (nc > 0) { // If colsol isn't allocated, then allocate it if (colsol_ == NULL) colsol_ = new double[nc]; // Copy in new col solution. CoinDisjointCopyN(cs, nc, colsol_); // CPLEX < 7.0 doesn't support setting a col solution without a row solution // -> if a row solution exists or CPLEX version >= 7, then pass into CPLEX #if CPX_VERSION < 700 if (rowsol_ != NULL) #endif { int err = CPXcopystart(env_, getMutableLpPtr(), NULL, NULL, const_cast< double * >(colsol_), const_cast< double * >(rowsol_), NULL, NULL); checkCPXerror(err, "CPXcopystart", "setColSolution"); } } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowPrice(const double *rs) { debugMessage("OsiCpxSolverInterface::setRowPrice(%p)\n", (void *)rs); int nr = getNumRows(); if (rs == NULL) freeCachedResults(); else if (nr > 0) { // If rowsol isn't allocated, then allocate it if (rowsol_ == NULL) rowsol_ = new double[nr]; // Copy in new row solution. CoinDisjointCopyN(rs, nr, rowsol_); // if a col solution exists, then pass into CPLEX if (colsol_ != NULL) { int err = CPXcopystart(env_, getMutableLpPtr(), NULL, NULL, const_cast< double * >(colsol_), const_cast< double * >(rowsol_), NULL, NULL); checkCPXerror(err, "CPXcopystart", "setRowPrice"); } } } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiCpxSolverInterface::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) { debugMessage("OsiCpxSolverInterface::addCol(%p, %g, %g, %g)\n", (void *)&vec, collb, colub, obj); int nc = getNumCols(); assert(coltypesize_ >= nc); resizeColType(nc + 1); coltype_[nc] = 'C'; int err; int cmatbeg[2] = { 0, vec.getNumElements() }; err = CPXaddcols(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ROW), 1, vec.getNumElements(), const_cast< double * >(&obj), cmatbeg, const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()), const_cast< double * >(&collb), const_cast< double * >(&colub), NULL); checkCPXerror(err, "CPXaddcols", "addCol"); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj) { debugMessage("OsiCpxSolverInterface::addCols(%d, %p, %p, %p, %p)\n", numcols, (void *)cols, (void *)collb, (void *)colub, (void *)obj); int nc = getNumCols(); assert(coltypesize_ >= nc); resizeColType(nc + numcols); CoinFillN(&coltype_[nc], numcols, 'C'); int i; int nz = 0; for (i = 0; i < numcols; ++i) nz += cols[i]->getNumElements(); int *index = new int[nz]; double *elem = new double[nz]; int *start = new int[numcols + 1]; nz = 0; start[0] = 0; for (i = 0; i < numcols; ++i) { const CoinPackedVectorBase *col = cols[i]; const int len = col->getNumElements(); CoinDisjointCopyN(col->getIndices(), len, index + nz); CoinDisjointCopyN(col->getElements(), len, elem + nz); nz += len; start[i + 1] = nz; } int err = CPXaddcols(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ROW), numcols, nz, const_cast< double * >(obj), start, index, elem, const_cast< double * >(collb), const_cast< double * >(colub), NULL); checkCPXerror(err, "CPXaddcols", "addCols"); delete[] start; delete[] elem; delete[] index; // int i; // for( i = 0; i < numcols; ++i ) // addCol( *(cols[i]), collb[i], colub[i], obj[i] ); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::deleteCols(const int num, const int *columnIndices) { debugMessage("OsiCpxSolverInterface::deleteCols(%d, %p)\n", num, (void *)columnIndices); int ncols = getNumCols(); int *delstat = new int[ncols]; int i, err; CoinFillN(delstat, ncols, 0); for (i = 0; i < num; ++i) delstat[columnIndices[i]] = 1; err = CPXdelsetcols(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ROW), delstat); checkCPXerror(err, "CPXdelsetcols", "deleteCols"); for (i = 0; i < ncols; ++i) { assert(delstat[i] <= i); if (delstat[i] != -1) coltype_[delstat[i]] = coltype_[i]; } delete[] delstat; //--- //--- MVG: took from OsiClp for updating names //--- int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (num && nameDiscipline) { // Very clumsy (and inefficient) - need to sort and then go backwards in ? chunks int *indices = CoinCopyOfArray(columnIndices, num); std::sort(indices, indices + num); int num2 = num; while (num2) { int next = indices[num2 - 1]; int firstDelete = num2 - 1; int i; for (i = num2 - 2; i >= 0; --i) { if (indices[i] + 1 == next) { --next; firstDelete = i; } else { break; } } OsiSolverInterface::deleteColNames(indices[firstDelete], num2 - firstDelete); num2 = firstDelete; assert(num2 >= 0); } delete[] indices; } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) { debugMessage("OsiCpxSolverInterface::addRow(%p, %g, %g)\n", (void *)&vec, rowlb, rowub); char sense; double rhs, range; convertBoundToSense(rowlb, rowub, sense, rhs, range); addRow(vec, sense, rhs, range); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) { debugMessage("OsiCpxSolverInterface::addRow(%p, %c, %g, %g)\n", (void *)&vec, rowsen, rowrhs, rowrng); int err; int rmatbeg = 0; double rhs; double range; char sense = rowsen; switch (rowsen) { case 'R': //assert(rowrng >= 0.0); rhs = rowrhs - rowrng; range = rowrng; break; case 'N': sense = 'R'; rhs = -getInfinity(); range = 2 * getInfinity(); break; default: rhs = rowrhs; range = 0.0; } err = CPXaddrows(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_COLUMN), 0, 1, vec.getNumElements(), &rhs, &sense, &rmatbeg, const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()), NULL, NULL); checkCPXerror(err, "CPXaddrows", "addRow"); if (sense == 'R') { int row = getNumRows() - 1; err = CPXchgrngval(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), 1, &row, &range); checkCPXerror(err, "CPXchgrngval", "addRow"); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub) { debugMessage("OsiCpxSolverInterface::addRows(%d, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowlb, (void *)rowub); int i; for (i = 0; i < numrows; ++i) addRow(*(rows[i]), rowlb[i], rowub[i]); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiCpxSolverInterface::addRows(%d, %p, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowsen, (void *)rowrhs, (void *)rowrng); int i; for (i = 0; i < numrows; ++i) addRow(*(rows[i]), rowsen[i], rowrhs[i], rowrng[i]); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::deleteRows(const int num, const int *rowIndices) { debugMessage("OsiCpxSolverInterface::deleteRows(%d, %p)\n", num, (void *)rowIndices); int nrows = getNumRows(); int *delstat = new int[nrows]; int i, err; CoinFillN(delstat, nrows, 0); for (i = 0; i < num; ++i) delstat[rowIndices[i]] = 1; err = CPXdelsetrows(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_COLUMN), delstat); checkCPXerror(err, "CPXdelsetrows", "deleteRows"); delete[] delstat; //--- //--- SV: took from OsiClp for updating names //--- int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (num && nameDiscipline) { // Very clumsy (and inefficient) - need to sort and then go backwards in ? chunks int *indices = CoinCopyOfArray(rowIndices, num); std::sort(indices, indices + num); int num2 = num; while (num2) { int next = indices[num2 - 1]; int firstDelete = num2 - 1; int i; for (i = num2 - 2; i >= 0; --i) { if (indices[i] + 1 == next) { --next; firstDelete = i; } else { break; } } OsiSolverInterface::deleteRowNames(indices[firstDelete], num2 - firstDelete); num2 = firstDelete; assert(num2 >= 0); } delete[] indices; } } //############################################################################# // Methods to input a problem //############################################################################# void OsiCpxSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { debugMessage("OsiCpxSolverInterface::loadProblem(1)(%p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowlb, (void *)rowub); const double inf = getInfinity(); int nrows = matrix.getNumRows(); char *rowSense = new char[nrows]; double *rowRhs = new double[nrows]; double *rowRange = new double[nrows]; int i; for (i = nrows - 1; i >= 0; --i) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense(lower, upper, rowSense[i], rowRhs[i], rowRange[i]); } loadProblem(matrix, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) { debugMessage("OsiCpxSolverInterface::assignProblem()\n"); loadProblem(*matrix, collb, colub, obj, rowlb, rowub); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowlb; rowlb = 0; delete[] rowub; rowub = 0; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiCpxSolverInterface::loadProblem(2)(%p, %p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); char *lclRowsen = NULL; double *lclRowrhs = NULL; int nc = matrix.getNumCols(); int nr = matrix.getNumRows(); if (nr == 0 && nc == 0) { // empty LP if (lp_ != NULL) { // kill old LP int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "loadProblem"); lp_ = NULL; freeAllMemory(); CPXchgobjsen(env_, getLpPtr(), objDirection); } return; } if (nr == 0) { int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); if (lp_ != NULL) { // kill old LP int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "loadProblem"); lp_ = NULL; freeAllMemory(); } // getLpPtr() call will create new LP int err = CPXnewcols(env_, getLpPtr(), nc, obj, collb, colub, NULL, NULL); checkCPXerror(err, "CPXcopylp", "loadProblem"); CPXchgobjsen(env_, getLpPtr(), objDirection); return; } if (rowsen == NULL) { lclRowsen = new char[nr]; CoinFillN(lclRowsen, nr, 'G'); rowsen = lclRowsen; } if (rowrhs == NULL) { lclRowrhs = new double[nr]; CoinFillN(lclRowrhs, nr, 0.0); rowrhs = lclRowrhs; } int i; // Set column values to defaults if NULL pointer passed double *clb; double *cub; double *ob; double *rr = NULL; double *rhs; if (collb != NULL) clb = const_cast< double * >(collb); else { clb = new double[nc]; CoinFillN(clb, nc, 0.0); } if (colub != NULL) cub = const_cast< double * >(colub); else { cub = new double[nc]; CoinFillN(cub, nc, getInfinity()); } if (obj != NULL) ob = const_cast< double * >(obj); else { ob = new double[nc]; CoinFillN(ob, nc, 0.0); } if (rowrng != NULL) { rhs = new double[nr]; rr = new double[nr]; for (i = 0; i < nr; i++) { if (rowsen[i] == 'R') { if (rowrng[i] >= 0) { rhs[i] = rowrhs[i] - rowrng[i]; rr[i] = rowrng[i]; } else { rhs[i] = rowrhs[i]; rr[i] = -rowrng[i]; } } else { rhs[i] = rowrhs[i]; rr[i] = 0.0; } } } else rhs = const_cast< double * >(rowrhs); bool freeMatrixRequired = false; CoinPackedMatrix *m = NULL; if (!matrix.isColOrdered()) { m = new CoinPackedMatrix(); m->reverseOrderedCopyOf(matrix); freeMatrixRequired = true; } else m = const_cast< CoinPackedMatrix * >(&matrix); assert(nc == m->getNumCols()); assert(nr == m->getNumRows()); assert(m->isColOrdered()); int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); int err = CPXcopylp(env_, getLpPtr(), nc, nr, // Leave ObjSense alone(set to current value). objDirection, ob, rhs, const_cast< char * >(rowsen), const_cast< int * >(m->getVectorStarts()), const_cast< int * >(m->getVectorLengths()), const_cast< int * >(m->getIndices()), const_cast< double * >(m->getElements()), const_cast< double * >(clb), const_cast< double * >(cub), rr); checkCPXerror(err, "CPXcopylp", "loadProblem"); if (collb == NULL) delete[] clb; if (colub == NULL) delete[] cub; if (obj == NULL) delete[] ob; if (rowrng != NULL) { delete[] rr; delete[] rhs; } if (freeMatrixRequired) delete m; resizeColType(nc); CoinFillN(coltype_, nc, 'C'); if (lclRowsen != NULL) delete[] lclRowsen; if (lclRowrhs != NULL) delete[] lclRowrhs; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) { debugMessage("OsiCpxSolverInterface::assignProblem()\n"); loadProblem(*matrix, collb, colub, obj, rowsen, rowrhs, rowrng); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowsen; rowsen = 0; delete[] rowrhs; rowrhs = 0; delete[] rowrng; rowrng = 0; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { debugMessage("OsiCpxSolverInterface::loadProblem(3)()\n"); const double inf = getInfinity(); char *rowSense = new char[numrows]; double *rowRhs = new double[numrows]; double *rowRange = new double[numrows]; for (int i = numrows - 1; i >= 0; --i) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense(lower, upper, rowSense[i], rowRhs[i], rowRange[i]); } loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiCpxSolverInterface::loadProblem(4)(%d, %d, %p, %p, %p, %p, %p, %p, %p, %p, %p)\n", numcols, numrows, (void *)start, (void *)index, (void *)value, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); const int nc = numcols; const int nr = numrows; if (nr == 0 && nc == 0) { // empty LP if (lp_ != NULL) { // kill old LP int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "loadProblem"); lp_ = NULL; freeAllMemory(); CPXchgobjsen(env_, getLpPtr(), objDirection); } return; } if (nr == 0) { int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); if (lp_ != NULL) { // kill old LP int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "loadProblem"); lp_ = NULL; freeAllMemory(); } // getLpPtr() call will create new LP int err = CPXnewcols(env_, getLpPtr(), nc, obj, collb, colub, NULL, NULL); checkCPXerror(err, "CPXcopylp", "loadProblem"); CPXchgobjsen(env_, getLpPtr(), objDirection); return; } char *lclRowsen = NULL; double *lclRowrhs = NULL; if (rowsen == NULL) { lclRowsen = new char[nr]; CoinFillN(lclRowsen, nr, 'G'); rowsen = lclRowsen; } if (rowrhs == NULL) { lclRowrhs = new double[nr]; CoinFillN(lclRowrhs, nr, 0.0); } int i; // Set column values to defaults if NULL pointer passed int *len = new int[nc]; double *clb = new double[nc]; double *cub = new double[nc]; double *ob = new double[nc]; double *rr = new double[nr]; double *rhs = new double[nr]; char *sen = new char[nr]; for (i = 0; i < nc; ++i) { len[i] = start[i + 1] - start[i]; } if (collb != NULL) CoinDisjointCopyN(collb, nc, clb); else CoinFillN(clb, nc, 0.0); if (colub != NULL) CoinDisjointCopyN(colub, nc, cub); else CoinFillN(cub, nc, getInfinity()); if (obj != NULL) CoinDisjointCopyN(obj, nc, ob); else CoinFillN(ob, nc, 0.0); if (rowrng != NULL) { for (i = 0; i < nr; i++) { if (rowsen[i] == 'R') { if (rowrng[i] >= 0) { rhs[i] = rowrhs[i] - rowrng[i]; rr[i] = rowrng[i]; } else { rhs[i] = rowrhs[i]; rr[i] = -rowrng[i]; } } else { rhs[i] = rowrhs[i]; rr[i] = 0.0; } } } else { CoinDisjointCopyN(rowrhs, nr, rhs); } CoinDisjointCopyN(rowsen, nr, sen); int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); int err = CPXcopylp(env_, getLpPtr(), nc, nr, // Leave ObjSense alone(set to current value). objDirection, ob, rhs, sen, const_cast< int * >(start), len, const_cast< int * >(index), const_cast< double * >(value), clb, cub, rr); checkCPXerror(err, "CPXcopylp", "loadProblem"); delete[] len; delete[] clb; delete[] cub; delete[] ob; delete[] rr; delete[] rhs; delete[] sen; if (lclRowsen != NULL) delete[] lclRowsen; if (lclRowrhs != NULL) delete[] lclRowrhs; resizeColType(nc); CoinFillN(coltype_, nc, 'C'); } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- int OsiCpxSolverInterface::readMps(const char *filename, const char *extension) { debugMessage("OsiCpxSolverInterface::readMps(%s, %s)\n", filename, extension); #if 0 std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; int err = CPXreadcopyprob( env_, getLpPtr(), const_cast( fullname.c_str() ), NULL ); checkCPXerror( err, "CPXreadcopyprob", "readMps" ); #endif // just call base class method return OsiSolverInterface::readMps(filename, extension); } //----------------------------------------------------------------------------- // Write mps files //----------------------------------------------------------------------------- void OsiCpxSolverInterface::writeMps(const char *filename, const char *extension, double objSense) const { debugMessage("OsiCpxSolverInterface::writeMps(%s, %s, %g)\n", filename, extension, objSense); // *FIXME* : this will not output ctype information to the MPS file char filetype[4] = "MPS"; std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; int err = CPXwriteprob(env_, getMutableLpPtr(), const_cast< char * >(fullname.c_str()), filetype); checkCPXerror(err, "CPXwriteprob", "writeMps"); } void OsiCpxSolverInterface::passInMessageHandler(CoinMessageHandler *handler) { int err; CPXCHANNELptr cpxresults; CPXCHANNELptr cpxwarning; CPXCHANNELptr cpxerror; CPXCHANNELptr cpxlog; err = CPXgetchannels(env_, &cpxresults, &cpxwarning, &cpxerror, &cpxlog); checkCPXerror(err, "CPXgetchannels", "gutsOfConstructor"); err = CPXdelfuncdest(env_, cpxresults, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXdelfuncdest", "gutsOfConstructor"); err = CPXdelfuncdest(env_, cpxlog, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXdelfuncdest", "gutsOfConstructor"); err = CPXdelfuncdest(env_, cpxwarning, messageHandler(), OsiCpxMessageCallbackWarning); checkCPXerror(err, "CPXdelfuncdest", "gutsOfConstructor"); err = CPXdelfuncdest(env_, cpxerror, messageHandler(), OsiCpxMessageCallbackError); checkCPXerror(err, "CPXdelfuncdest", "gutsOfConstructor"); OsiSolverInterface::passInMessageHandler(handler); err = CPXaddfuncdest(env_, cpxresults, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxlog, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxwarning, messageHandler(), OsiCpxMessageCallbackWarning); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxerror, messageHandler(), OsiCpxMessageCallbackError); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); } //############################################################################# // CPX specific public interfaces //############################################################################# CPXENVptr OsiCpxSolverInterface::getEnvironmentPtr() { assert(env_ != NULL); return env_; } CPXLPptr OsiCpxSolverInterface::getLpPtr(int keepCached) { freeCachedData(keepCached); return getMutableLpPtr(); } //----------------------------------------------------------------------------- const char *OsiCpxSolverInterface::getCtype() const { debugMessage("OsiCpxSolverInterface::getCtype()\n"); return coltype_; } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiCpxSolverInterface::OsiCpxSolverInterface() : OsiSolverInterface() , env_(NULL) , lp_(NULL) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(1000000) , // ??? default iteration limit for strong branching is large obj_(NULL) , collower_(NULL) , colupper_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowlower_(NULL) , rowupper_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , coltype_(NULL) , coltypesize_(0) , probtypemip_(false) , domipstart(false) , disableadvbasis(false) { debugMessage("OsiCpxSolverInterface::OsiCpxSolverInterface()\n"); gutsOfConstructor(); } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiSolverInterface *OsiCpxSolverInterface::clone(bool copyData) const { debugMessage("OsiCpxSolverInterface::clone(%d)\n", copyData); return (new OsiCpxSolverInterface(*this)); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiCpxSolverInterface::OsiCpxSolverInterface(const OsiCpxSolverInterface &source) : OsiSolverInterface(source) , env_(NULL) , lp_(NULL) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(source.hotStartMaxIteration_) , obj_(NULL) , collower_(NULL) , colupper_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowlower_(NULL) , rowupper_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , coltype_(NULL) , coltypesize_(0) , probtypemip_(false) , domipstart(false) , disableadvbasis(false) { debugMessage("OsiCpxSolverInterface::OsiCpxSolverInterface(%p)\n", (void *)&source); gutsOfConstructor(); gutsOfCopy(source); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiCpxSolverInterface::~OsiCpxSolverInterface() { debugMessage("OsiCpxSolverInterface::~OsiCpxSolverInterface()\n"); gutsOfDestructor(); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiCpxSolverInterface &OsiCpxSolverInterface::operator=(const OsiCpxSolverInterface &rhs) { debugMessage("OsiCpxSolverInterface::operator=(%p)\n", (void *)&rhs); if (this != &rhs) { OsiSolverInterface::operator=(rhs); gutsOfDestructor(); gutsOfConstructor(); if (rhs.lp_ != NULL) gutsOfCopy(rhs); } return *this; } //############################################################################# // Applying cuts //############################################################################# void OsiCpxSolverInterface::applyColCut(const OsiColCut &cc) { debugMessage("OsiCpxSolverInterface::applyColCut(%p)\n", (void *)&cc); const double *cplexColLB = getColLower(); const double *cplexColUB = getColUpper(); const CoinPackedVector &lbs = cc.lbs(); const CoinPackedVector &ubs = cc.ubs(); int i; for (i = 0; i < lbs.getNumElements(); ++i) if (lbs.getElements()[i] > cplexColLB[lbs.getIndices()[i]]) setColLower(lbs.getIndices()[i], lbs.getElements()[i]); for (i = 0; i < ubs.getNumElements(); ++i) if (ubs.getElements()[i] < cplexColUB[ubs.getIndices()[i]]) setColUpper(ubs.getIndices()[i], ubs.getElements()[i]); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::applyRowCut(const OsiRowCut &rowCut) { debugMessage("OsiCpxSolverInterface::applyRowCut(%p)\n", (void *)&rowCut); int err = 0; double rhs = 0.0; double rng = 0.0; char sns; double lb = rowCut.lb(); double ub = rowCut.ub(); if (lb <= -getInfinity() && ub >= getInfinity()) // free constraint { rhs = -getInfinity(); rng = 2 * getInfinity(); // CPLEX doesn't support free constraints sns = 'R'; // -> implement them as ranged rows with infinite bounds } else if (lb <= -getInfinity()) // <= constraint { rhs = ub; sns = 'L'; } else if (ub >= getInfinity()) // >= constraint { rhs = lb; sns = 'G'; } else if (ub == lb) // = constraint { rhs = ub; sns = 'E'; } else // range constraint { rhs = lb; rng = ub - lb; sns = 'R'; } int rmatbeg = 0; err = CPXaddrows(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_COLUMN), 0, 1, rowCut.row().getNumElements(), &rhs, &sns, &rmatbeg, const_cast< int * >(rowCut.row().getIndices()), const_cast< double * >(rowCut.row().getElements()), NULL, NULL); checkCPXerror(err, "CPXaddrows", "applyRowCut"); if (sns == 'R') { err = CPXchgcoef(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_COLUMN), CPXgetnumrows(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_COLUMN)) - 1, -2, rng); checkCPXerror(err, "CPXchgcoef", "applyRowCut"); } } //############################################################################# // Private methods (non-static and static) and static data //############################################################################# //------------------------------------------------------------------- // Get pointer to CPXLPptr. // const methods should use getMutableLpPtr(). // non-const methods should use getLpPtr(). //------------------------------------------------------------------- CPXLPptr OsiCpxSolverInterface::getMutableLpPtr() const { if (lp_ == NULL) { int err; assert(env_ != NULL); #if 0 //char pn[] = "OSI_CPLEX"; lp_ = CPXcreateprob( env_, &err, pn ); #else std::string pn; getStrParam(OsiProbName, pn); lp_ = CPXcreateprob(env_, &err, const_cast< char * >(pn.c_str())); #endif checkCPXerror(err, "CPXcreateprob", "getMutableLpPtr"); // err = CPXchgprobtype(env_,lp_,CPXPROB_LP); // checkCPXerror( err, "CPXchgprobtype", "getMutableLpPtr" ); assert(lp_ != NULL); } return lp_; } //------------------------------------------------------------------- CPXENVptr OsiCpxSolverInterface::getMutableEnvironmentPtr() const { assert(env_ != NULL); return env_; } //------------------------------------------------------------------- void OsiCpxSolverInterface::gutsOfCopy(const OsiCpxSolverInterface &source) { // Set Objective Sense setObjSense(source.getObjSense()); // Set Rim and constraints const double *obj = source.getObjCoefficients(); const double *rhs = source.getRightHandSide(); const char *sense = source.getRowSense(); const CoinPackedMatrix *cols = source.getMatrixByCol(); const double *lb = source.getColLower(); const double *ub = source.getColUpper(); loadProblem(*cols, lb, ub, obj, sense, rhs, source.getRowRange()); // Set MIP information resizeColType(source.coltypesize_); CoinDisjointCopyN(source.coltype_, source.coltypesize_, coltype_); // Set Solution setColSolution(source.getColSolution()); setRowPrice(source.getRowPrice()); // Should also copy row and col names. #if 0 char** cname = new char*[numcols]; char* cnamestore = NULL; int surplus; err = CPXgetcolname( env_, source.lp_, cname, NULL, 0, &surplus, 0, numcols-1 ); if( err != CPXERR_NO_NAMES ) { cnamestore = new char[-surplus]; err = CPXgetcolname( env_, source.lp_, cname, cnamestore, -surplus, &surplus, 0, numcols-1 ); checkCPXerror( err, "CPXgetcolname", "gutsOfCopy" ); assert( surplus == 0 ); } else { delete [] cname; cname = NULL; } char** rname = new char*[numrows]; char* rnamestore = NULL; err = CPXgetrowname( env_, source.lp_, rname, NULL, 0, &surplus, 0, numrows-1 ); if( err != CPXERR_NO_NAMES ) { rnamestore = new char[-surplus]; err = CPXgetrowname( env_, source.lp_, rname, rnamestore, -surplus, &surplus, 0, numrows-1 ); checkCPXerror( err, "CPXgetrowname", "gutsOfCopy" ); assert( surplus == 0 ); } else { delete [] rname; rname = NULL; } err = CPXcopylpwnames( env_, getLpPtr(), numcols, numrows, objsen, const_cast(obj), const_cast(rhs), const_cast(sense), const_cast(cols->vectorStarts()), const_cast(cols->vectorLengths()), const_cast(cols->indices()), const_cast(cols->elements()), const_cast(lb), const_cast(ub), rng, cname, rname); checkCPXerror( err, "CPXcopylpwnames", "gutsOfCopy" ); if( rname != NULL ) { delete [] rnamestore; delete [] rname; } if( cname != NULL ) { delete [] cnamestore; delete [] cname; } delete [] rng; #endif } //------------------------------------------------------------------- void OsiCpxSolverInterface::gutsOfConstructor() { int err; #if CPX_VERSION >= 800 env_ = CPXopenCPLEX(&err); #else env_ = CPXopenCPLEXdevelop(&err); #endif checkCPXerror(err, "CPXopenCPLEXdevelop", "gutsOfConstructor"); assert(env_ != NULL); CPXCHANNELptr cpxresults; CPXCHANNELptr cpxwarning; CPXCHANNELptr cpxerror; CPXCHANNELptr cpxlog; err = CPXgetchannels(env_, &cpxresults, &cpxwarning, &cpxerror, &cpxlog); checkCPXerror(err, "CPXgetchannels", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxresults, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxlog, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxwarning, messageHandler(), OsiCpxMessageCallbackWarning); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxerror, messageHandler(), OsiCpxMessageCallbackError); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); /* turn off all output to screen */ err = CPXsetintparam(env_, CPX_PARAM_SCRIND, CPX_OFF); checkCPXerror(err, "CPXsetintparam", "gutsOfConstructor"); #if 0 // CPXcreateprob was moved to getLpPtr() method. lp_ = CPXcreateprob( env_, &err, "OSI_CPLEX" ); checkCPXerror( err, "CPXcreateprob", "gutsOfConstructor" ); // err = CPXchgprobtype(env_,lp_,CPXPROB_LP); // checkCPXerror( err, "CPXchgprobtype", "getMutableLpPtr" ); assert( lp_ != NULL ); #endif } //------------------------------------------------------------------- void OsiCpxSolverInterface::gutsOfDestructor() { if (lp_ != NULL) { int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "gutsOfDestructor"); lp_ = NULL; freeAllMemory(); } if (env_ != NULL) { int err = CPXcloseCPLEX(&env_); checkCPXerror(err, "CPXcloseCPLEX", "gutsOfDestructor"); env_ = NULL; } assert(lp_ == NULL); assert(env_ == NULL); assert(obj_ == NULL); assert(collower_ == NULL); assert(colupper_ == NULL); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(rowlower_ == NULL); assert(rowupper_ == NULL); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(redcost_ == NULL); assert(rowact_ == NULL); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); assert(coltype_ == NULL); assert(coltypesize_ == 0); } //------------------------------------------------------------------- /// free cached vectors void OsiCpxSolverInterface::freeCachedColRim() { freeCacheDouble(obj_); freeCacheDouble(collower_); freeCacheDouble(colupper_); assert(obj_ == NULL); assert(collower_ == NULL); assert(colupper_ == NULL); } void OsiCpxSolverInterface::freeCachedRowRim() { freeCacheChar(rowsense_); freeCacheDouble(rhs_); freeCacheDouble(rowrange_); freeCacheDouble(rowlower_); freeCacheDouble(rowupper_); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(rowlower_ == NULL); assert(rowupper_ == NULL); } void OsiCpxSolverInterface::freeCachedMatrix() { freeCacheMatrix(matrixByRow_); freeCacheMatrix(matrixByCol_); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); } void OsiCpxSolverInterface::freeCachedResults() { freeCacheDouble(colsol_); freeCacheDouble(rowsol_); freeCacheDouble(redcost_); freeCacheDouble(rowact_); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(redcost_ == NULL); assert(rowact_ == NULL); } void OsiCpxSolverInterface::freeCachedData(int keepCached) { if (!(keepCached & OsiCpxSolverInterface::KEEPCACHED_COLUMN)) freeCachedColRim(); if (!(keepCached & OsiCpxSolverInterface::KEEPCACHED_ROW)) freeCachedRowRim(); if (!(keepCached & OsiCpxSolverInterface::KEEPCACHED_MATRIX)) freeCachedMatrix(); if (!(keepCached & OsiCpxSolverInterface::KEEPCACHED_RESULTS)) freeCachedResults(); } void OsiCpxSolverInterface::freeAllMemory() { freeCachedData(); if (hotStartCStat_ != NULL) delete[] hotStartCStat_; if (hotStartRStat_ != NULL) delete[] hotStartRStat_; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; freeColType(); } //############################################################################# // Resets as if default constructor void OsiCpxSolverInterface::reset() { int err; CPXCHANNELptr cpxresults; CPXCHANNELptr cpxwarning; CPXCHANNELptr cpxerror; CPXCHANNELptr cpxlog; err = CPXgetchannels(env_, &cpxresults, &cpxwarning, &cpxerror, &cpxlog); err = CPXdelfuncdest(env_, cpxresults, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXdelfuncdest", "reset"); err = CPXdelfuncdest(env_, cpxlog, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXdelfuncdest", "reset"); err = CPXdelfuncdest(env_, cpxwarning, messageHandler(), OsiCpxMessageCallbackWarning); checkCPXerror(err, "CPXdelfuncdest", "reset"); err = CPXdelfuncdest(env_, cpxerror, messageHandler(), OsiCpxMessageCallbackError); checkCPXerror(err, "CPXdelfuncdest", "reset"); setInitialData(); // clear base class (this may reset the message handler, too) err = CPXaddfuncdest(env_, cpxresults, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "reset"); err = CPXaddfuncdest(env_, cpxlog, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "reset"); err = CPXaddfuncdest(env_, cpxwarning, messageHandler(), OsiCpxMessageCallbackWarning); checkCPXerror(err, "CPXaddfuncdest", "reset"); err = CPXaddfuncdest(env_, cpxerror, messageHandler(), OsiCpxMessageCallbackError); checkCPXerror(err, "CPXaddfuncdest", "reset"); if (lp_ != NULL) { // kill old LP int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "loadProblem"); lp_ = NULL; freeAllMemory(); } } #if CPX_VERSION >= 900 /**********************************************************************/ /* Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ int OsiCpxSolverInterface::canDoSimplexInterface() const { return 1; } /**********************************************************************/ bool OsiCpxSolverInterface::basisIsAvailable() const { CPXLPptr lp = getMutableLpPtr(); int solnmethod, solntype, pfeasind, dfeasind; int status = CPXsolninfo(env_, lp, &solnmethod, &solntype, &pfeasind, &dfeasind); if (status) { return false; } if (solntype == CPX_BASIC_SOLN) { return true; } return false; } /**********************************************************************/ /* CPLEX return codes: For cstat: CPX_AT_LOWER 0 : variable at lower bound CPX_BASIC 1 : variable is basic CPX_AT_UPPER 2 : variable at upper bound CPX_FREE_SUPER 3 : variable free and non-basic For rstat: Non ranged rows: CPX_AT_LOWER 0 : associated slack/surplus/artificial variable non-basic at value 0.0 CPX_BASIC 1 : associated slack/surplus/artificial variable basic Ranged rows: CPX_AT_LOWER 0 : associated slack/surplus/artificial variable non-basic at its lower bound CPX_BASIC 1 : associated slack/surplus/artificial variable basic CPX_AT_UPPER 2 : associated slack/surplus/artificial variable non-basic at upper bound Cplex adds a slack with coeff +1 in <= and =, with coeff -1 in >=, slack being non negative. We switch in order to get a "Clp tableau" where all the slacks have coeff +1. If a slack for >= is non basic, invB is not changed; column of the slack in opt tableau is flipped. If slack for >= is basic, corresp. row of invB is flipped; whole row of opt tableau is flipped; then whole column for the slack in opt tableau is flipped. */ /* Osi return codes: 0: free 1: basic 2: upper 3: lower */ void OsiCpxSolverInterface::getBasisStatus(int *cstat, int *rstat) const { CPXLPptr lp = getMutableLpPtr(); int status = CPXgetbase(env_, lp, cstat, rstat); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): Unable to get base\n"); exit(1); } int ncol = getNumCols(); int nrow = getNumRows(); const int objsense = (int)getObjSense(); const double *dual = getRowPrice(); const double *row_act = getRowActivity(); const double *rowLower = getRowLower(); const double *rowUpper = getRowUpper(); char *sense = new char[nrow]; status = CPXgetsense(env_, lp, sense, 0, nrow - 1); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): Unable to get sense for the rows\n"); exit(1); } for (int i = 0; i < ncol; i++) { switch (cstat[i]) { case 0: cstat[i] = 3; break; case 1: break; case 2: break; case 3: cstat[i] = 0; break; default: printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): unknown column status: %d\n", cstat[i]); break; } } if (objsense == 1) { for (int i = 0; i < nrow; i++) { switch (rstat[i]) { case 0: rstat[i] = 3; if (sense[i] == 'E') { if (dual[i] > 0) { rstat[i] = 2; } } if (sense[i] == 'R') { if (rowUpper[i] > rowLower[i] + 1e-6) { if (row_act[i] < rowUpper[i] - 1e-6) { rstat[i] = 2; } } else { if (dual[i] > 0) { rstat[i] = 2; } } } if (sense[i] == 'G') { rstat[i] = 2; } break; case 1: break; case 2: if (sense[i] == 'E') { if (dual[i] < 0) { rstat[i] = 3; } } if (sense[i] == 'R') { if (rowUpper[i] > rowLower[i] + 1e-6) { if (row_act[i] > rowLower[i] + 1e-6) { rstat[i] = 3; } } else { if (dual[i] < 0) { rstat[i] = 3; } } } break; default: printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): unknown row status: %d\n", rstat[i]); break; } } } else { // objsense == -1 for (int i = 0; i < nrow; i++) { switch (rstat[i]) { case 0: rstat[i] = 3; if (sense[i] == 'E') { if (dual[i] < 0) { rstat[i] = 2; } } if (sense[i] == 'R') { if (rowUpper[i] > rowLower[i] + 1e-6) { if (row_act[i] < rowUpper[i] - 1e-6) { rstat[i] = 2; } } else { if (dual[i] < 0) { rstat[i] = 2; } } } if (sense[i] == 'G') { rstat[i] = 2; } break; case 1: break; case 2: if (sense[i] == 'E') { if (dual[i] > 0) { rstat[i] = 3; } } if (sense[i] == 'R') { if (rowUpper[i] > rowLower[i] + 1e-6) { if (row_act[i] > rowLower[i] + 1e-6) { rstat[i] = 3; } } else { if (dual[i] > 0) { rstat[i] = 3; } } } break; default: printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): unknown row status: %d\n", rstat[i]); break; } } } delete[] sense; } /**********************************************************************/ void OsiCpxSolverInterface::getBInvARow(int row, double *z, double *slack) const { CPXLPptr lp = getMutableLpPtr(); int nrow = getNumRows(); int ncol = getNumCols(); char *sense = new char[nrow]; int status = CPXgetsense(env_, lp, sense, 0, nrow - 1); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvARow(): Unable to get senses for the rows\n"); exit(1); } status = CPXbinvarow(env_, lp, row, z); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvARow(): Unable to get row %d of the tableau\n", row); exit(1); } if (slack != NULL) { status = CPXbinvrow(env_, lp, row, slack); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvARow(): Unable to get row %d of B inverse\n", row); exit(1); } // slack contains now the row of BInv(cplex); // slack(cplex) is obtained by flipping in slack all entries for >= constr // slack(clp) is obtained by flipping the same entries in slack(cplex) // i.e. slack(clp) is the current slack. } if (sense[row] == 'G') { int *ind_bas = new int[nrow]; int ind_slack = ncol + row; getBasics(ind_bas); for (int i = 0; i < nrow; i++) { if (ind_bas[i] == ind_slack) { // slack for row is basic; whole row // must be flipped for (int j = 0; j < nrow; j++) { z[j] = -z[j]; } if (slack != NULL) { for (int j = 0; j < nrow; j++) { slack[j] = -slack[j]; } } } break; } delete[] ind_bas; } delete[] sense; } /* getBInvARow */ /**********************************************************************/ void OsiCpxSolverInterface::getBInvRow(int row, double *z) const { CPXLPptr lp = getMutableLpPtr(); int nrow = getNumRows(); int ncol = getNumCols(); int status = CPXbinvrow(env_, lp, row, z); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvRow(): Unable to get row %d of the basis inverse\n", row); exit(1); } int *ind_bas = new int[nrow]; getBasics(ind_bas); if (ind_bas[row] >= ncol) { // binv row corresponds to a slack variable int Arow = ind_bas[row] - ncol; // Arow is the number of the row in the problem matrix which this slack belongs to char sense; status = CPXgetsense(env_, lp, &sense, Arow, Arow); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvRow(): Unable to get senses for row %d\n", Arow); exit(1); } if (sense == 'G') { // slack has coeff -1 in Cplex; thus row in binv must be flipped for (int j = 0; j < nrow; j++) { z[j] = -z[j]; } } } delete[] ind_bas; /* char sense; status = CPXgetsense(env_, lp, &sense, row, row); if(status) { printf("### ERROR: OsiCpxSolverInterface::getBInvRow(): Unable to get senses for row %d\n", row); exit(1); } if(sense == 'G') { int *ind_bas = new int[nrow]; getBasics(ind_bas); for(int i=0; i ncol && sense[ind_bas[i] - ncol] == 'G') vec[i] = -vec[i]; // slack for row is basic; whole row must be flipped delete[] sense; delete[] ind_bas; } /* getBInvACol */ /**********************************************************************/ void OsiCpxSolverInterface::getBInvCol(int col, double *vec) const { CPXLPptr lp = getMutableLpPtr(); int status = CPXbinvcol(env_, lp, col, vec); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvCol(): Unable to get column %d of the basis inverse\n", col); exit(1); } int nrow = getNumRows(); int ncol = getNumCols(); char *sense = new char[nrow]; status = CPXgetsense(env_, lp, sense, 0, nrow - 1); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvCol(): Unable to get senses for the rows\n"); exit(1); } int *ind_bas = new int[nrow]; getBasics(ind_bas); for (int i = 0; i < nrow; i++) if (ind_bas[i] > ncol && sense[ind_bas[i] - ncol] == 'G') vec[i] = -vec[i]; // slack for row i is basic; whole row must be flipped delete[] sense; delete[] ind_bas; } /* getBInvCol */ /**********************************************************************/ void OsiCpxSolverInterface::getBasics(int *index) const { int ncol = getNumCols(); int nrow = getNumRows(); CPXLPptr lp = getMutableLpPtr(); double *cplex_trash = new double[nrow]; int status = CPXgetbhead(env_, lp, index, cplex_trash); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBasics(): Unable to get basis head\n"); exit(1); } for (int i = 0; i < nrow; i++) { if (index[i] < 0) { index[i] = ncol - 1 - index[i]; } } delete[] cplex_trash; } /* getBasics */ #else /* not CPX_VERSION >= 900 */ /**********************************************************************/ /* Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ int OsiCpxSolverInterface::canDoSimplexInterface() const { return 0; } /**********************************************************************/ bool OsiCpxSolverInterface::basisIsAvailable() const { printf("### ERROR: OsiCpxSolverInterface::basisIsAvailable(): Cplex version lower than 9.0\n"); exit(1); return false; } /**********************************************************************/ void OsiCpxSolverInterface::getBasisStatus(int *cstat, int *rstat) const { printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): Cplex version lower than 9.0\n"); exit(1); } /**********************************************************************/ void OsiCpxSolverInterface::getBInvARow(int row, double *z, double *slack) const { printf("### ERROR: OsiCpxSolverInterface::getBInvARow(): Cplex version lower than 9.0\n"); exit(1); } /* getBInvARow */ /**********************************************************************/ void OsiCpxSolverInterface::getBInvRow(int row, double *z) const { printf("### ERROR: OsiCpxSolverInterface::getBInvRow(): Cplex version lower than 9.0\n"); exit(1); } /* getBInvRow */ /**********************************************************************/ void OsiCpxSolverInterface::getBInvACol(int col, double *vec) const { printf("### ERROR: OsiCpxSolverInterface::getBInvACol(): Cplex version lower than 9.0\n"); exit(1); } /* getBInvACol */ /**********************************************************************/ void OsiCpxSolverInterface::getBInvCol(int col, double *vec) const { printf("### ERROR: OsiCpxSolverInterface::getBInvCol(): Cplex version lower than 9.0\n"); exit(1); } /* getBInvCol */ /**********************************************************************/ void OsiCpxSolverInterface::getBasics(int *index) const { printf("### ERROR: OsiCpxSolverInterface::getBasics(): Cplex version lower than 9.0\n"); exit(1); } /* getBasics */ #endif /* not CPX_VERSION >= 900 */ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiCommonTest/0000755000175000017500000000000013434204224015375 5ustar sudipsudipVol-1.5.4/Osi/src/OsiCommonTest/OsiSolverInterfaceTest.cpp0000644000175000017500000056362113434062050022523 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* !! MAINTAINERS PLEASE READ !! The OSI unit test is gradually undergoing a conversion. Over time, the goal is to factor the original monolith into separate files and routines. Individual routines should collect test outcomes in the global OsiUnitTest::outcomes object using the OSIUNITTEST_* macros defined in OsiUnitTests.hpp. Ideally, the implementor of an OsiXXX could indicated expected failures, to avoid the current practice of modifying the unit test to avoid attempting the test for a particular OsiXXX. The original approach was to use asserts in tests; the net effect is that the unit test chokes and dies as soon as something goes wrong. The current approach is to soldier on until something has gone wrong which makes further testing pointless if OsiUnitTest::haltonerror is set to 0, to hold and ask the user for pressing a key if OsiUnitTest::haltonerror is set to 1, and to stop immediately if OsiUnitTest::haltonerror is set to 2 (but only in case of an error, not for warnings). The general idea is to return the maximum amount of useful information with each run. The OsiUnitTest::verbosity variable should be used to decide on the amount of information to be printed. At level 0, only minimal output should be printed, at level 1, more information about failed tests should be printed, while at level 2, also information on passed tests and other details should be printed. If you work on this code, please keep these conventions in mind: * Tests should be encapsulated in subroutines. If you have a moment, factor something out of the main routine --- it'd be nice to get it down under 500 lines. * All local helper routines should be defined in the file-local namespace. * This unit test is meant as a certification that OsiXXX correctly implements the OSI API specification. Don't step around it! If OsiXXX is not capable of meeting a particular requirement and you edit the unit test code to avoid the test, don't just sweep it under the rug! Print a failure message saying the test has been skipped, or something else informative. OsiVol is the worst offender for this (the underlying algorithm is not simplex and imposes serious limitations on the type of lp that vol can handle). Any simplex-oriented solver should *NOT* be exempted from any test. If it's pointless to even try, print a failure message. -- lh, 08.01.07, 10.08.26 -- */ #include "CoinPragma.hpp" #include "OsiConfig.h" #include #include #include #include #include #include /* A utility definition which allows for easy suppression of unused variable warnings from GCC. Handy in this environment, where we're constantly def'ing things in and out. */ #ifndef UNUSED #if defined(__GNUC__) #define UNUSED __attribute__((unused)) #else #define UNUSED #endif #endif #include "OsiUnitTests.hpp" #include "OsiSolverInterface.hpp" #include "CoinTime.hpp" #include "CoinFloatEqual.hpp" #include "CoinPackedVector.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiRowCut.hpp" #include "OsiCuts.hpp" #include "OsiPresolve.hpp" /* Define helper routines in the file-local namespace. */ namespace OsiUnitTest { extern void testSimplexAPI(const OsiSolverInterface *emptySi, const std::string &mpsDir); } using namespace OsiUnitTest; namespace { //############################################################################# // A routine to build a CoinPackedMatrix matching the exmip1 example. //############################################################################# const CoinPackedMatrix *BuildExmip1Mtx() /* Simple function to build a packed matrix for the exmip1 example used in tests. The function exists solely to hide the intermediate variables. Probably could be written as an initialised declaration. See COIN/Mps/Sample/exmip1.mps for a human-readable presentation. Don't forget to dispose of the matrix when you're done with it. Ordered triples seem easiest. They're listed in row-major order. */ { int rowndxs[] = { 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4 }; int colndxs[] = { 0, 1, 3, 4, 7, 1, 2, 2, 5, 3, 6, 0, 4, 7 }; double coeffs[] = { 3.0, 1.0, -2.0, -1.0, -1.0, 2.0, 1.1, 1.0, 1.0, 2.8, -1.2, 5.6, 1.0, 1.9 }; CoinPackedMatrix *mtx = new CoinPackedMatrix(true, &rowndxs[0], &colndxs[0], &coeffs[0], 14); return (mtx); } //############################################################################# // Short tests contributed by Vivian DeSmedt. Thanks! //############################################################################# /* DeSmedt Problem #1 Initially, max 3*x1 + x2 x* = [ 5 0 ] 2*x1 + x2 <= 10 row_act = [ 10 5 ] x1 + 3*x2 <= 15 Test for solver status, expected solution, row activity. Then change objective to [1 1], resolve, check again for solver status, expected solution [3 4] and expected row activity [10 15]. */ bool test1VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedMatrix m; m.transpose(); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); m.appendRow(r0); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); m.appendRow(r1); int numcol = 2; double *obj = new double[numcol]; obj[0] = 3; obj[1] = 1; double *collb = new double[numcol]; collb[0] = 0; collb[1] = 0; double *colub = new double[numcol]; colub[0] = inf; colub[1] = inf; int numrow = 2; double *rowlb = new double[numrow]; rowlb[0] = -inf; rowlb[1] = -inf; double *rowub = new double[numrow]; rowub[0] = 10; rowub[1] = 15; s->loadProblem(m, collb, colub, obj, rowlb, rowub); delete[] obj; delete[] collb; delete[] colub; delete[] rowlb; delete[] rowub; s->setObjSense(-1); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test2VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedMatrix m; m.transpose(); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); m.appendRow(r0); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); m.appendRow(r1); CoinPackedVector r2; r2.insert(0, 1); r2.insert(1, 1); m.appendRow(r2); int numcol = 2; double *obj = new double[numcol]; obj[0] = 3; obj[1] = 1; double *collb = new double[numcol]; collb[0] = 0; collb[1] = 0; double *colub = new double[numcol]; colub[0] = inf; colub[1] = inf; int numrow = 3; double *rowlb = new double[numrow]; rowlb[0] = -inf; rowlb[1] = -inf; rowlb[2] = 1; double *rowub = new double[numrow]; rowub[0] = 10; rowub[1] = 15; rowub[2] = inf; s->loadProblem(m, collb, colub, obj, rowlb, rowub); delete[] obj; delete[] collb; delete[] colub; delete[] rowlb; delete[] rowub; s->setObjSense(-1); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 5, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 3); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15, 7 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 3); return ret; } //-------------------------------------------------------------------------- bool test3VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; //double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, 0, 10, 3); s->addCol(empty, 0, 10, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, 0, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test4VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, 0, inf, 3); s->addCol(empty, 0, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, -inf, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, -inf, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- /* Constructs the system max 3x1 + x2 -inf <= 2x1 + x2 <= 10 -inf <= x1 + 3x2 <= 15 The optimal solution is unbounded. Objective is then changed to max x1 + x2 which has a bounded optimum at x1 = 3, x2 = 4. */ bool test5VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, -inf, inf, 3); s->addCol(empty, -inf, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, -inf, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, -inf, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && !s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && s->isProvenDualInfeasible(); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test6VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, 0, inf, 3); s->addCol(empty, 0, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, 0, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test7VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, 4, inf, 3); s->addCol(empty, 3, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, 0, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && !s->isProvenOptimal(); ret = ret && s->isProvenPrimalInfeasible(); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && !s->isProvenOptimal(); ret = ret && s->isProvenPrimalInfeasible(); return ret; } //-------------------------------------------------------------------------- bool test8VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, -inf, inf, 3); s->addCol(empty, -inf, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, 0, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 6, -2 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test9VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, -inf, inf, 3); s->addCol(empty, -inf, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, 0, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); CoinPackedVector r2; r2.insert(0, 1); r2.insert(1, 4); s->addRow(r2, 12, inf); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 4, 2 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 10, 12 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 3); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15, 19 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 3); return ret; } //-------------------------------------------------------------------------- bool test10VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); int numcols = 2; int numrows = 2; const CoinBigIndex start[] = { 0, 2, 4 }; const int index[] = { 0, 1, 0, 1 }; const double value[] = { 4, 1, 2, 3 }; const double collb[] = { 0, 0 }; const double colub[] = { inf, inf }; double obj[] = { 3, 1 }; char rowsen[] = { 'R', 'R' }; double rowrhs[] = { 20, 15 }; double rowrng[] = { 20, 15 }; s->loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowsen, rowrhs, rowrng); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test11VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); int numcols = 2; int numrows = 2; const CoinBigIndex start[] = { 0, 2, 4 }; const int index[] = { 0, 1, 0, 1 }; const double value[] = { 4, 1, 2, 3 }; const double collb[] = { 0, 0 }; const double colub[] = { inf, inf }; double obj[] = { 3, 1 }; double rowlb[] = { 0, 0 }; double rowub[] = { 20, 15 }; s->loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowlb, rowub); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test12VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedMatrix m; m.transpose(); CoinPackedVector r0; r0.insert(0, 4); r0.insert(1, 2); m.appendRow(r0); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); m.appendRow(r1); int numcol = 2; double *obj = new double[numcol]; obj[0] = 3; obj[1] = 1; double *collb = new double[numcol]; collb[0] = 0; collb[1] = 0; double *colub = new double[numcol]; colub[0] = inf; colub[1] = inf; int numrow = 2; double *rowlb = new double[numrow]; rowlb[0] = 0; rowlb[1] = 0; double *rowub = new double[numrow]; rowub[0] = 20; rowub[1] = 15; s->loadProblem(m, collb, colub, obj, rowlb, rowub); delete[] obj; delete[] collb; delete[] colub; delete[] rowlb; delete[] rowub; s->setObjSense(-1); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test13VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedMatrix m; CoinPackedVector c0; c0.insert(0, 4); c0.insert(1, 1); m.appendCol(c0); CoinPackedVector c1; c1.insert(0, 2); c1.insert(1, 3); m.appendCol(c1); int numcol = 2; double *obj = new double[numcol]; obj[0] = 3; obj[1] = 1; double *collb = new double[numcol]; collb[0] = 0; collb[1] = 0; double *colub = new double[numcol]; colub[0] = inf; colub[1] = inf; int numrow = 2; double *rowlb = new double[numrow]; rowlb[0] = 0; rowlb[1] = 0; double *rowub = new double[numrow]; rowub[0] = 20; rowub[1] = 15; s->loadProblem(m, collb, colub, obj, rowlb, rowub); delete[] obj; delete[] collb; delete[] colub; delete[] rowlb; delete[] rowub; s->setObjSense(-1); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test14VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, 0, inf, 3); s->addCol(empty, 0, inf, 1); CoinPackedVector r0; r0.insert(0, 4); r0.insert(1, 2); s->addRow(r0, 0, 20); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test15VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addRow(empty, 0, 20); s->addRow(empty, 0, 15); CoinPackedVector c0; c0.insert(0, 4); c0.insert(1, 1); s->addCol(c0, 0, inf, 3); CoinPackedVector c1; c1.insert(0, 2); c1.insert(1, 3); s->addCol(c1, 0, inf, 1); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } /* Another test case submitted by Vivian De Smedt. The test is to modify the objective function and check that the solver's optimum point tracks correctly. The initial problem is max 3*x1 + x2 s.t. 2*x1 + x2 <= 10 x1 + 3*x2 <= 15 with optimum z* = 15 at (x1,x2) = (5,0). Then the objective is changed to x1 + x2, with new optimum z* = 7 at (3,4). The volume algorithm doesn't return exact solution values, so relax the test for correctness when we're checking the solution. */ void changeObjAndResolve(const OsiSolverInterface *emptySi) { OsiSolverInterface *s = emptySi->clone(); double dEmpty = 0; int iEmpty = 0; CoinBigIndex iEmpty2 = 0; /* Establish an empty problem. Establish empty columns with bounds and objective coefficient only. Finally, insert constraint coefficients and set for maximisation. */ s->loadProblem(0, 0, &iEmpty2, &iEmpty, &dEmpty, &dEmpty, &dEmpty, &dEmpty, &dEmpty, &dEmpty); CoinPackedVector c; s->addCol(c, 0, 10, 3); s->addCol(c, 0, 10, 1); double inf = s->getInfinity(); CoinPackedVector r1; r1.insert(0, 2); r1.insert(1, 1); s->addRow(r1, -inf, 10); r1.clear(); r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, -inf, 15); s->setObjSense(-1); /* Optimise for 3*x1 + x2 and check for correctness. */ s->initialSolve(); const double *colSol = s->getColSolution(); OSIUNITTEST_ASSERT_ERROR(colSol[0] >= 4.5, {}, *s, "changeObjAndResolve"); OSIUNITTEST_ASSERT_ERROR(colSol[1] <= 0.5, {}, *s, "changeObjAndResolve"); /* Set objective to x1 + x2 and reoptimise. */ s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); colSol = s->getColSolution(); OSIUNITTEST_ASSERT_ERROR(colSol[0] >= 2.3 && colSol[0] <= 3.7, {}, *s, "changeObjAndResolve"); OSIUNITTEST_ASSERT_ERROR(colSol[1] >= 3.5 && colSol[1] <= 4.5, {}, *s, "changeObjAndResolve"); delete s; } /* This code is taken from some bug reports of Sebastian Nowozin. It demonstrates some issues he had with OsiClp. https://projects.coin-or.org/Osi/ticket/54 https://projects.coin-or.org/Osi/ticket/55 https://projects.coin-or.org/Osi/ticket/56 https://projects.coin-or.org/Osi/ticket/58 The short summary is that enabling/disabling the level 2 simplex interface (controllable pivoting) with an empty constraint matrix caused problems. For solvers that don't support simplex level 2, all we're testing is constraint system mods and resolve. Query (lh): The original comments with this code referred to use of Binv to generate cuts Binv et al. are level 1 simplex interface routines. Perhaps the test should use level 1. */ bool test16SebastianNowozin(OsiSolverInterface *si) { CoinAbsFltEq fltEq; CoinPackedMatrix *matrix = new CoinPackedMatrix(false, 0, 0); matrix->setDimensions(0, 4); double objective[] = { 0.1, 0.2, -0.1, -0.2 }; double varLB[] = { 0.0, 0.0, 0.0, 0.0 }; double varUB[] = { 1.0, 1.0, 1.0, 1.0 }; si->loadProblem(*matrix, varLB, varUB, objective, NULL, NULL); delete matrix; /* Set objective sense prior to objective, just to catch the unwary. */ si->setObjSense(1); si->setObjective(objective); /* The code provided with ticket 54 is illegal --- this first call cannot be resolve(). The first solve must be an initialSolve, for the benefit of solvers which use it for initialisation. -- lh, 080903 -- */ si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return false, *si, "test16SebastianNowozin initial solve"); OSIUNITTEST_ASSERT_ERROR(fltEq(si->getObjValue(), -0.3), return false, *si, "test16SebastianNowozin initial solve"); /* Expected: primal = [ 0 0 1 1 ] */ OSIUNITTEST_ASSERT_ERROR(si->getColSolution() != NULL, return false, *si, "test16SebastianNowozin initial solve"); /* Simulate a constraint generation interval that will require the simplex interface. Enable, then disable level 2 simplex interface (controllable pivoting), if the solver has it. */ if (si->canDoSimplexInterface() >= 2) { OSIUNITTEST_CATCH_ERROR(si->enableFactorization(), return false, *si, "test16SebastianNowozin initial solve"); OSIUNITTEST_CATCH_ERROR(si->enableSimplexInterface(true), return false, *si, "test16SebastianNowozin initial solve"); // try // { si->enableFactorization() ; // si->enableSimplexInterface(true) ; } // catch (CoinError e) // { std::string errmsg ; // errmsg = "first enableFactorization or enableSimplexInterface" ; // errmsg = errmsg + " threw CoinError: " + e.message() ; // OSIUNITTEST_ADD_OUTCOME(*si, "test16SebastianNowozin first enableFactorization or enableSimplexInterface", errmsg.c_str(), TestOutcome::ERROR, false); // failureMessage(*si,errmsg) ; // return (false) ; } // OSIUNITTEST_ADD_OUTCOME(*si, "test16SebastianNowozin first enableFactorization or enableSimplexInterface", "no exception", TestOutcome::PASSED, false); // (...) constraint generation here si->disableFactorization(); } /* Add two constraints and resolve */ CoinPackedVector row1; // x_2 + x_3 - x_0 <= 0 row1.insert(0, -1.0); row1.insert(2, 1.0); row1.insert(3, 1.0); si->addRow(row1, -si->getInfinity(), 0.0); CoinPackedVector row2; // x_0 + x_1 - x_3 <= 0 row2.insert(0, 1.0); row2.insert(1, 1.0); row2.insert(3, -1.0); si->addRow(row2, -si->getInfinity(), 0.0); si->resolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return false, *si, "test16SebastianNowozin first resolve"); OSIUNITTEST_ASSERT_ERROR(fltEq(si->getObjValue(), -0.1), return false, *si, "test16SebastianNowozin first resolve"); /* Expected: primal = [ 1 0 0 1 ] */ OSIUNITTEST_ASSERT_ERROR(si->getColSolution() != NULL, return false, *si, "test16SebastianNowozin first resolve"); /* Simulate another constraint generation run. */ if (si->canDoSimplexInterface() >= 2) { OSIUNITTEST_CATCH_ERROR(si->enableFactorization(), return false, *si, "test16SebastianNowozin first resolve"); OSIUNITTEST_CATCH_ERROR(si->enableSimplexInterface(true), return false, *si, "test16SebastianNowozin first resolve"); // try // { si->enableFactorization() ; // si->enableSimplexInterface(true) ; } // catch (CoinError e) // { std::string errmsg ; // errmsg = "second enableFactorization or enableSimplexInterface" ; // errmsg = errmsg + " threw CoinError: " + e.message() ; // failureMessage(*si,errmsg) ; // OSIUNITTEST_ADD_OUTCOME(*si, "test16SebastianNowozin second enableFactorization or enableSimplexInterface", errmsg.c_str(), TestOutcome::ERROR, false); // return (false) ; } // OSIUNITTEST_ADD_OUTCOME(*si, "test16SebastianNowozin second enableFactorization or enableSimplexInterface", "no exception", TestOutcome::PASSED, false); // (...) constraint generation here si->disableFactorization(); } /* Remove a constraint, add .15 to the objective coefficients, and resolve. */ int rows_to_delete_arr[] = { 0 }; si->deleteRows(1, rows_to_delete_arr); std::transform(objective, objective + 4, objective, std::bind2nd(std::plus< double >(), 0.15)); si->setObjective(objective); si->resolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return false, *si, "test16SebastianNowozin second resolve"); OSIUNITTEST_ASSERT_ERROR(fltEq(si->getObjValue(), -0.05), return false, *si, "test16SebastianNowozin second resolve"); /* Expected: obj = [ .25 .35 .05 -.05], primal = [ 0 0 0 1 ] */ OSIUNITTEST_ASSERT_ERROR(si->getColSolution() != NULL, return false, *si, "test16SebastianNowozin second resolve"); return true; } /* This code checks an issue reported by Sebastian Nowozin in OsiClp ticket 57. He said that OsiClpSolverInterface::getReducedGradient() requires a prior call to both enableSimplexInterface(true) and enableFactorization(), but only checks/asserts the simplex interface. Same comment as test16 --- would simplex level 1 suffice? */ bool test17SebastianNowozin(OsiSolverInterface *si) { if (si->canDoSimplexInterface() < 2) { return (true); } CoinPackedMatrix *matrix = new CoinPackedMatrix(false, 0, 0); matrix->setDimensions(0, 4); double objective[] = { 0.1, 0.2, -0.1, -0.2, }; double varLB[] = { 0.0, 0.0, 0.0, 0.0, }; double varUB[] = { 1.0, 1.0, 1.0, 1.0, }; si->loadProblem(*matrix, varLB, varUB, objective, NULL, NULL); si->setObjSense(1); delete matrix; CoinPackedVector row1; // x_2 + x_3 - x_0 <= 0 row1.insert(0, -1.0); row1.insert(2, 1.0); row1.insert(3, 1.0); si->addRow(row1, -si->getInfinity(), 0.0); si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return false, *si, "test17SebastianNowozin"); if (!si->isProvenOptimal()) return false; /* Unlike test16, here we do not call si->enableFactorization() first. */ OSIUNITTEST_CATCH_ERROR(si->enableSimplexInterface(true), return false, *si, "test17SebastianNowozin"); /* Now check that getReducedGradient works. */ double dummy[4] = { 1., 1., 1., 1. }; OSIUNITTEST_CATCH_ERROR(si->getReducedGradient(dummy, dummy, dummy), return false, *si, "test17SebastianNowozin"); return true; } //############################################################################# // Routines to test various feature groups //############################################################################# /*! \brief Test row and column name manipulation emptySi should be an empty solver interface, fn the path to the exmpi1 example. */ void testNames(const OsiSolverInterface *emptySi, std::string fn) { bool recognisesOsiNames = true; bool ok; OsiSolverInterface *si = emptySi->clone(); std::string exmip1ObjName = "OBJ"; OsiSolverInterface::OsiNameVec exmip1RowNames(0); exmip1RowNames.push_back("ROW01"); exmip1RowNames.push_back("ROW02"); exmip1RowNames.push_back("ROW03"); exmip1RowNames.push_back("ROW04"); exmip1RowNames.push_back("ROW05"); OsiSolverInterface::OsiNameVec exmip1ColNames(0); exmip1ColNames.push_back("COL01"); exmip1ColNames.push_back("COL02"); exmip1ColNames.push_back("COL03"); exmip1ColNames.push_back("COL04"); exmip1ColNames.push_back("COL05"); exmip1ColNames.push_back("COL06"); exmip1ColNames.push_back("COL07"); exmip1ColNames.push_back("COL08"); testingMessage("Testing row/column name handling ..."); /* Try to get the solver name, but don't immediately abort. */ std::string solverName = "Unknown solver"; OSIUNITTEST_ASSERT_WARNING(si->getStrParam(OsiSolverName, solverName) == true, {}, solverName, "testNames: getStrParam(OsiSolverName)"); /* Checking default names. dfltRowColName is pretty liberal about indices, but they should never be negative. Since default row/column names are a letter plus n digits, asking for a length of 5 on the objective gets you a leading 'O' plus five more letters. */ std::string dfltName = si->dfltRowColName('o', 0, 5); std::string expName = "OBJECT"; OSIUNITTEST_ASSERT_WARNING(dfltName == expName, {}, solverName, "testNames: default objective name"); dfltName = si->dfltRowColName('r', -1, 5); expName = "!!invalid Row -1!!"; OSIUNITTEST_ASSERT_WARNING(dfltName == expName, {}, solverName, "testNames: default name for invalid row"); dfltName = si->dfltRowColName('c', -1, 5); expName = "!!invalid Col -1!!"; OSIUNITTEST_ASSERT_WARNING(dfltName == expName, {}, solverName, "testNames: default name for invalid col"); /* Start by telling the SI to use lazy names and see if it comes up with the right names from the MPS file. There's no point in proceeding further if we can't read an MPS file. */ // std::cout << "Testing lazy names from MPS input file." << std::endl ; OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(si->setIntParam(OsiNameDiscipline, 1) == true, recognisesOsiNames = false, solverName, "testNames: switch to lazy names", TestOutcome::NOTE, false); OSIUNITTEST_ASSERT_ERROR(si->readMps(fn.c_str(), "mps") == 0, delete si; return, solverName, "testNames: read MPS"); OsiSolverInterface::OsiNameVec rowNames; int rowNameCnt; OsiSolverInterface::OsiNameVec colNames; int colNameCnt; int m = si->getNumRows(); if (recognisesOsiNames) { std::string objName = si->getObjName(); OSIUNITTEST_ASSERT_WARNING(objName == exmip1ObjName, {}, solverName, "testNames lazy names: objective name"); OSIUNITTEST_ASSERT_WARNING(si->getRowName(m) == exmip1ObjName, {}, solverName, "testNames lazy names: name of one after last row is objective name"); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == static_cast< int >(exmip1RowNames.size()), {}, solverName, "testNames lazy names: row names count"); ok = true; for (int i = 0; i < rowNameCnt; i++) { if (rowNames[i] != exmip1RowNames[i]) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << exmip1RowNames[i] << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: row names"); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == static_cast< int >(exmip1ColNames.size()), {}, solverName, "testNames lazy names: column names count"); ok = true; for (int j = 0; j < colNameCnt; j++) { if (colNames[j] != exmip1ColNames[j]) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is " << colNames[j] << "\" expected \"" << exmip1ColNames[j] << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: column names"); /* Switch back to name discipline 0. We should revert to default names. Failure to switch back to discipline 0 after successfully switching to discipline 1 is some sort of internal confusion in the Osi; abort the test. */ // std::cout << "Switching to no names (aka default names)." << std::endl ; OSIUNITTEST_ASSERT_WARNING(si->setIntParam(OsiNameDiscipline, 0) == true, delete si; return, solverName, "testNames: switch to no names"); } /* This block of tests for default names should pass even if the underlying Osi doesn't recognise OsiNameDiscipline. When using default names, name vectors are not necessary, hence should have size zero. */ rowNames = si->getRowNames(); OSIUNITTEST_ASSERT_WARNING(rowNames.size() == 0, {}, solverName, "testNames no names: row names count"); ok = true; for (int i = 0; i < m; i++) { if (si->getRowName(i) != si->dfltRowColName('r', i)) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << si->getRowName(i) << "\" expected \"" << si->dfltRowColName('r', i) << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames no names: row names"); colNames = si->getColNames(); OSIUNITTEST_ASSERT_WARNING(colNames.size() == 0, {}, solverName, "testNames no names: column names count"); int n = si->getNumCols(); ok = true; for (int j = 0; j < n; j++) { if (si->getColName(j) != si->dfltRowColName('c', j)) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is \"" << si->getColName(j) << "\" expected \"" << si->dfltRowColName('c', j) << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames no names: column names"); /* This is as much as we can ask if the underlying solver doesn't recognise OsiNameDiscipline. Return if that's the case. */ if (!recognisesOsiNames) { delete si; return; } /* Switch back to lazy names. The previous names should again be available. */ // std::cout << "Switching back to lazy names." << std::endl ; OSIUNITTEST_ASSERT_WARNING(si->setIntParam(OsiNameDiscipline, 1) == true, delete si; return, solverName, "testNames: switch to lazy names"); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == static_cast< int >(exmip1RowNames.size()), {}, solverName, "testNames lazy names: row names count"); ok = true; for (int i = 0; i < rowNameCnt; i++) { if (rowNames[i] != exmip1RowNames[i]) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << exmip1RowNames[i] << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: row names"); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == static_cast< int >(exmip1ColNames.size()), {}, solverName, "testNames lazy names: column names count"); ok = true; for (int j = 0; j < colNameCnt; j++) { if (colNames[j] != exmip1ColNames[j]) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is " << colNames[j] << "\" expected \"" << exmip1ColNames[j] << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: column names"); /* Add a row. We should see no increase in the size of the row name vector, and asking for the name of the new row should return a default name. */ int nels = 5; int indices[5] = { 0, 2, 3, 5, 7 }; double els[5] = { 1.0, 3.0, 4.0, 5.0, 42.0 }; CoinPackedVector newRow(nels, indices, els); si->addRow(newRow, -4.2, .42); OSIUNITTEST_ASSERT_WARNING(si->getNumRows() == m + 1, delete si; return, solverName, "testNames lazy names: added a row"); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == m, {}, solverName, "testNames lazy names: row names count after row addition"); OSIUNITTEST_ASSERT_WARNING(si->getRowName(m) == si->dfltRowColName('r', m), {}, solverName, "testNames lazy names: default name for added row"); /* Now set a name for the row. */ std::string newRowName = "NewRow"; si->setRowName(m, newRowName); OSIUNITTEST_ASSERT_WARNING(si->getRowName(m) == newRowName, {}, solverName, "testNames lazy names: setting new row name"); /* Ok, who are we really talking with? Delete row 0 and see if the names change appropriately. Since deleteRows is pure virtual, the names will change only if the underlying OsiXXX supports names (i.e., it must make a call to deleteRowNames). */ // std::cout << "Testing row deletion." << std::endl ; si->deleteRows(1, indices); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == m, {}, solverName, "testNames lazy names: row names count after deleting row"); ok = true; for (int i = 0; i < rowNameCnt; i++) { std::string expected; if (i != m - 1) { expected = exmip1RowNames[i + 1]; } else { expected = newRowName; } if (rowNames[i] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: row names after deleting row"); /* Add/delete a column and do the same tests. Expected results as above. */ nels = 3; indices[0] = 0; indices[1] = 2; indices[2] = 4; els[0] = 1.0; els[1] = 4.0; els[2] = 24.0; CoinPackedVector newCol(nels, indices, els); si->addCol(newCol, -4.2, .42, 42.0); OSIUNITTEST_ASSERT_ERROR(si->getNumCols() == n + 1, delete si; return, solverName, "testNames lazy names: columns count after adding column"); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == n, {}, solverName, "testNames lazy names: columns names count after adding column"); OSIUNITTEST_ASSERT_WARNING(si->getColName(n) == si->dfltRowColName('c', n), {}, solverName, "testNames lazy names default column name after adding column"); std::string newColName = "NewCol"; si->setColName(n, newColName); OSIUNITTEST_ASSERT_WARNING(si->getColName(n) == newColName, {}, solverName, "testNames lazy names: setting column name"); // std::cout << "Testing column deletion." << std::endl ; si->deleteCols(1, indices); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == n, {}, solverName, "testNames lazy names: column names count after deleting column"); ok = true; for (int j = 0; j < colNameCnt; j++) { std::string expected; if (j != n - 1) { expected = exmip1ColNames[j + 1]; } else { expected = newColName; } if (colNames[j] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is \"" << colNames[j] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: column names after deleting column"); /* Interchange row and column names. */ // std::cout << "Testing bulk replacement of names." << std::endl ; si->setRowNames(exmip1ColNames, 0, 3, 2); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == m, {}, solverName, "testNames lazy names: row names count after bulk replace"); ok = true; for (int i = 0; i < rowNameCnt; i++) { std::string expected; if (i < 2) { expected = exmip1RowNames[i + 1]; } else if (i >= 2 && i <= 4) { expected = exmip1ColNames[i - 2]; } else { expected = newRowName; } if (rowNames[i] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: row names after bulk replace"); si->setColNames(exmip1RowNames, 3, 2, 0); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == n, {}, solverName, "testNames lazy names: column names count after bulk replace"); ok = true; for (int j = 0; j < colNameCnt; j++) { std::string expected; if (j < 2) { expected = exmip1RowNames[j + 3]; } else if (j >= 2 && j <= 6) { expected = exmip1ColNames[j + 1]; } else { expected = newColName; } if (colNames[j] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is \"" << colNames[j] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: column names after bulk replace"); /* Delete a few row and column names (directly, as opposed to deleting rows or columns). Names should shift downward. */ // std::cout << "Testing name deletion." << std::endl ; si->deleteRowNames(0, 2); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == m - 2, {}, solverName, "testNames lazy names: row names count after deleting 2 rows"); ok = true; for (int i = 0; i < rowNameCnt; i++) { std::string expected; if (i < rowNameCnt) { expected = exmip1ColNames[i]; } if (rowNames[i] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: row names after deleting 2 rows"); si->deleteColNames(5, 3); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == n - 3, {}, solverName, "testNames lazy names: column names count after deleting 3 columns"); ok = true; for (int j = 0; j < colNameCnt; j++) { std::string expected; if (j < 2) { expected = exmip1RowNames[j + 3]; } else if (j >= 2 && j < colNameCnt) { expected = exmip1ColNames[j + 1]; } if (colNames[j] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is \"" << colNames[j] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: column names after deleting 3 columns"); /* Finally, switch to full names, and make sure we retrieve full length vectors. */ // std::cout << "Switching to full names." << std::endl ; OSIUNITTEST_ASSERT_WARNING(si->setIntParam(OsiNameDiscipline, 2), delete si; return, solverName, "testNames lazy names: change name discipline"); m = si->getNumRows(); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == m + 1, {}, solverName, "testNames full names: row names count"); OSIUNITTEST_ASSERT_WARNING(rowNames[m] == exmip1ObjName, {}, solverName, "testNames full names: objective name"); ok = true; for (int i = 0; i < rowNameCnt - 1; i++) { std::string expected; if (i < 3) { expected = exmip1ColNames[i]; } else { expected = si->dfltRowColName('r', i); } if (rowNames[i] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames full names: row names"); n = si->getNumCols(); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == n, {}, solverName, "testNames full names: column names count"); ok = true; for (int j = 0; j < colNameCnt; j++) { std::string expected; if (j < 2) { expected = exmip1RowNames[j + 3]; } else if (j >= 2 && j <= 4) { expected = exmip1ColNames[j + 1]; } else { expected = si->dfltRowColName('c', j); } if (colNames[j] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is " << colNames[j] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames full names: column names"); delete si; } //-------------------------------------------------------------------------- /*! \brief Tests for a solution imposed by the user. Checks the routines setColSolution (primal variables) and setRowSolution (dual variables). Goes on to check that getReducedCost and getRowActivity use the imposed solution. The prototype OSI supplied as the parameter should be loaded with a smallish problem. */ void testSettingSolutions(OsiSolverInterface &proto) { OsiSolverInterface *si = proto.clone(); bool allOK = true; int i; int m = si->getNumRows(); int n = si->getNumCols(); double mval, cval, rval; const double *rowVec, *colVec, *objVec; double *colShouldBe = new double[m]; double *rowShouldBe = new double[n]; CoinAbsFltEq fltEq; testingMessage("Checking that solver can set row and column solutions ..."); /* Create dummy solution vectors. */ double *dummyColSol = new double[n]; for (i = 0; i < n; i++) { dummyColSol[i] = i + .5; } double *dummyRowSol = new double[m]; for (i = 0; i < m; i++) { dummyRowSol[i] = i - .5; } /* First the values we can set directly: primal (column) and dual (row) solutions. The osi should copy the vector, hence the pointer we get back should not be the pointer we supply. But it's reasonable to expect exact equality, as no arithmetic should be performed. */ si->setColSolution(dummyColSol); OSIUNITTEST_ASSERT_ERROR(dummyColSol != si->getColSolution(), allOK = false, *si, "setting solutions: solver should not return original pointer"); rowVec = si->getColSolution(); bool ok = true; for (i = 0; i < n; i++) { mval = rowVec[i]; rval = dummyColSol[i]; if (mval != rval) { ok = false; std::cout << "x<" << i << "> = " << mval << ", expecting " << rval << ", |error| = " << (mval - rval) << "." << std::endl; } } OSIUNITTEST_ASSERT_ERROR(ok == true, allOK = false, *si, "setting solutions: solver stored column solution correctly"); si->setRowPrice(dummyRowSol); OSIUNITTEST_ASSERT_ERROR(dummyRowSol != si->getRowPrice(), allOK = false, *si, "setting solutions: solver should not return original pointer"); colVec = si->getRowPrice(); if (colVec != NULL) { ok = true; for (i = 0; i < m; i++) { mval = colVec[i]; cval = dummyRowSol[i]; if (mval != cval) { ok = false; std::cout << "y<" << i << "> = " << mval << ", expecting " << cval << ", |error| = " << (mval - cval) << "." << std::endl; } } } else ok = false; OSIUNITTEST_ASSERT_ERROR(ok == true, allOK = false, *si, "setting solutions: solver stored row price correctly"); /* Now let's get serious. Check that reduced costs and row activities match the values we just specified for row and column solutions. Absolute equality cannot be assumed here. Reduced costs first: c - yA */ rowVec = si->getReducedCost(); objVec = si->getObjCoefficients(); const CoinPackedMatrix *mtx = si->getMatrixByCol(); mtx->transposeTimes(dummyRowSol, rowShouldBe); if (rowVec != NULL) { ok = true; for (i = 0; i < n; i++) { mval = rowVec[i]; rval = objVec[i] - rowShouldBe[i]; if (!fltEq(mval, rval)) { ok = false; std::cout << "cbar<" << i << "> = " << mval << ", expecting " << rval << ", |error| = " << (mval - rval) << "." << std::endl; } } } else ok = false; OSIUNITTEST_ASSERT_WARNING(ok == true, allOK = false, *si, "setting solutions: reduced costs from solution set with setRowPrice"); /* Row activity: Ax */ colVec = si->getRowActivity(); mtx->times(dummyColSol, colShouldBe); ok = true; for (i = 0; i < m; i++) { mval = colVec[i]; cval = colShouldBe[i]; if (!fltEq(mval, cval)) { ok = false; std::cout << "lhs<" << i << "> = " << mval << ", expecting " << cval << ", |error| = " << (mval - cval) << "." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, allOK = false, *si, "setting solutions: row activity from solution set with setColSolution"); if (allOK) { testingMessage(" ok.\n"); } else { failureMessage(*si, "Errors handling imposed column/row solutions."); } delete[] dummyColSol; delete[] colShouldBe; delete[] dummyRowSol; delete[] rowShouldBe; delete si; return; } //-------------------------------------------------------------------------- /*! \brief Helper routines to test OSI parameters. A set of helper routines to test integer, double, and hint parameter set/get routines. */ bool testIntParam(OsiSolverInterface *si, int k, int val) { int i = 123456789, orig = 123456789; bool ret; OsiIntParam key = static_cast< OsiIntParam >(k); si->getIntParam(key, orig); if (si->setIntParam(key, val)) { ret = (si->getIntParam(key, i) == true) && (i == val); } else { ret = (si->getIntParam(key, i) == true) && (i == orig); } return ret; } bool testDblParam(OsiSolverInterface *si, int k, double val) { double d = 123456789.0, orig = 123456789.0; bool ret; OsiDblParam key = static_cast< OsiDblParam >(k); si->getDblParam(key, orig); if (si->setDblParam(key, val)) { ret = (si->getDblParam(key, d) == true) && (d == val); } else { ret = (si->getDblParam(key, d) == true) && (d == orig); } return ret; } bool testHintParam(OsiSolverInterface *si, int k, bool sense, OsiHintStrength strength, int *throws) /* Tests for proper behaviour of [set,get]HintParam methods. The initial get tests the return value to see if the hint is implemented; the values returned for sense and strength are not checked. If the hint is implemented, a pair of set/get calls is performed at the strength specified by the parameter. The set can return true or, at strength OsiForceDo, throw an exception if the solver cannot comply. The rationale would be that only OsiForceDo must be obeyed, so anything else should return true regardless of whether the solver followed the hint. The test checks that the value and strength returned by getHintParam matches the previous call to setHintParam. This is arguably wrong --- one can argue that it should reflect the solver's ability to comply with the hint. But that's how the OSI interface standard has evolved up to now. If the hint is not implemented, attempting to set the hint should return false, or throw an exception at strength OsiForceDo. The testing code which calls testHintParam is set up so that a successful return is defined as true if the hint is implemented, false if it is not. Information printing is suppressed; uncomment and recompile if you want it. */ { bool post_sense; OsiHintStrength post_strength; bool ret; OsiHintParam key = static_cast< OsiHintParam >(k); if (si->getHintParam(key, post_sense, post_strength)) { ret = false; std::ostringstream tstname; tstname << "testHintParam: hint " << static_cast< int >(key) << " sense " << sense << " strength " << static_cast< int >(strength); if (strength == OsiForceDo) { try { if (si->setHintParam(key, sense, strength)) { ret = (si->getHintParam(key, post_sense, post_strength) == true) && (post_strength == strength) && (post_sense == sense); } } catch (CoinError &e) { std::cout << tstname.str() << " catched CoinError exception " << e.message() << std::endl; ret = true; (*throws)++; } } else { OSIUNITTEST_CATCH_WARNING( if (si->setHintParam(key, sense, strength)) { ret = (si->getHintParam(key, post_sense, post_strength) == true) && (post_strength == strength) && (post_sense == sense); }, (*throws)++; ret = (strength == OsiForceDo), *si, tstname.str()); } } else { ret = true; std::ostringstream tstname; tstname << "testHintParam: hint " << static_cast< int >(key) << " sense " << sense << " strength " << static_cast< int >(strength); OSIUNITTEST_CATCH_WARNING(ret = si->setHintParam(key, sense, strength), (*throws)++; ret = !(strength == OsiForceDo), *si, tstname.str()); } return ret; } /* Test functionality related to the objective function: * Does the solver properly handle a constant offset? * Does the solver properly handle primal and dual objective limits? This routine only checks for the correct answers. It does not check whether the solver stops early due to objective limits. * Does the solver properly handle minimisation / maximisation via setObjSense? The return value is the number of failures recorded by the routine. */ void testObjFunctions(const OsiSolverInterface *emptySi, const std::string &mpsDir) { OsiSolverInterface *si = emptySi->clone(); CoinRelFltEq eq; int i; std::cout << "Testing functionality related to the objective." << std::endl; std::string solverName = "Unknown solver"; si->getStrParam(OsiSolverName, solverName); /* Check for default objective sense. This should be minimisation. */ OSIUNITTEST_ASSERT_ERROR(si->getObjSense() == 1.0 || si->getObjSense() == -1.0, {}, solverName, "testObjFunctions: default objective sense is determinant value"); OSIUNITTEST_ASSERT_WARNING(si->getObjSense() == 1.0, {}, solverName, "testObjFunctions: default objective sense is minimization"); /* Read in e226; chosen because it has an offset defined in the mps file. We can't continue if we can't read the test problem. */ std::string fn = mpsDir + "e226"; OSIUNITTEST_ASSERT_ERROR(si->readMps(fn.c_str(), "mps") == 0, delete si; return, solverName, "testObjFunctions: read MPS"); /* Solve and test for the correct objective value. */ si->initialSolve(); double objValue = si->getObjValue(); double objNoOffset = -18.751929066; double objOffset = +7.113; OSIUNITTEST_ASSERT_ERROR(eq(objValue, (objNoOffset + objOffset)), {}, solverName, "testObjFunctions: getObjValue with constant in objective"); /* Test objective limit methods. If no limit has been specified, they should return false. */ OSIUNITTEST_ASSERT_ERROR(!si->isPrimalObjectiveLimitReached(), {}, solverName, "testObjFunctions: isPrimalObjectiveLimitReached without limit (min)"); OSIUNITTEST_ASSERT_ERROR(!si->isDualObjectiveLimitReached(), {}, solverName, "testObjFunctions: isDualObjectiveLimitReached without limit (min)"); /* One could think that also no limit should be reached in case of maximization. * However, by default primal and dual limits are not unset, but set to plus or minus infinity. * So, if we change the objective sense, we need to remember to set also the limits to a nonlimiting value. */ si->setObjSense(-1.0); si->setDblParam(OsiPrimalObjectiveLimit, COIN_DBL_MAX); si->setDblParam(OsiDualObjectiveLimit, -COIN_DBL_MAX); OSIUNITTEST_ASSERT_ERROR(!si->isPrimalObjectiveLimitReached(), {}, solverName, "testObjFunctions: isPrimalObjectiveLimitReached without limit (max)"); OSIUNITTEST_ASSERT_ERROR(!si->isDualObjectiveLimitReached(), {}, solverName, "testObjFunctions: isDualObjectiveLimitReached without limit (max)"); si->setObjSense(1.0); si->setDblParam(OsiPrimalObjectiveLimit, -COIN_DBL_MAX); si->setDblParam(OsiDualObjectiveLimit, COIN_DBL_MAX); /* Test objective limit methods. There's no attempt to see if the solver stops early when given a limit that's tighter than the optimal objective. All we're doing here is checking that the routines return the correct value when the limits are exceeded. For minimisation (maximisation) the primal limit represents an acceptable level of `goodness'; to be true, we should be below (above) it. The dual limit represents an unacceptable level of `badness'; to be true, we should be above (below) it. The loop performs two iterations, first for maximisation, then for minimisation. For maximisation, z* = 111.65096. The second iteration is sort of redundant, but it does test the ability to switch back to minimisation. */ double expectedObj[2] = { 111.650960689, objNoOffset + objOffset }; double primalObjLim[2] = { 100.0, -5.0 }; double dualObjLim[2] = { 120.0, -15.0 }; double optSense[2] = { -1.0, 1.0 }; for (i = 0; i <= 1; i++) { si->setObjSense(optSense[i]); // reset objective limits to infinity si->setDblParam(OsiPrimalObjectiveLimit, -optSense[i] * COIN_DBL_MAX); si->setDblParam(OsiDualObjectiveLimit, optSense[i] * COIN_DBL_MAX); si->initialSolve(); objValue = si->getObjValue(); OSIUNITTEST_ASSERT_ERROR(eq(objValue, expectedObj[i]), {}, solverName, "testObjFunctions: optimal value during max/min switch"); si->setDblParam(OsiPrimalObjectiveLimit, primalObjLim[i]); si->setDblParam(OsiDualObjectiveLimit, dualObjLim[i]); OSIUNITTEST_ASSERT_WARNING(si->isPrimalObjectiveLimitReached(), {}, solverName, "testObjFunctions: primal objective limit"); OSIUNITTEST_ASSERT_WARNING(si->isDualObjectiveLimitReached(), {}, solverName, "testObjFunctions: dual objective limit"); } delete si; si = 0; /* Finally, check that the objective sense is treated as a parameter of the solver, not a property of the problem. The test clones emptySi, inverts the default objective sense, clones a second solver, then loads and optimises e226. */ si = emptySi->clone(); double dfltSense = si->getObjSense(); dfltSense = -dfltSense; si->setObjSense(dfltSense); OsiSolverInterface *si2 = si->clone(); delete si; si = NULL; OSIUNITTEST_ASSERT_ERROR(si2->getObjSense() == dfltSense, {}, solverName, "testObjFunctions: objective sense preserved by clone"); OSIUNITTEST_ASSERT_ERROR(si2->readMps(fn.c_str(), "mps") == 0, delete si; return, solverName, "testObjFunctions: 2nd read MPS"); OSIUNITTEST_ASSERT_ERROR(si2->getObjSense() == dfltSense, {}, solverName, "testObjFunctions: objective sense preserved by problem load"); si2->initialSolve(); if (dfltSense < 0) { i = 0; } else { i = 1; } objValue = si2->getObjValue(); OSIUNITTEST_ASSERT_ERROR(eq(objValue, expectedObj[i]), {}, solverName, "testObjFunctions: optimal value of load problem after set objective sense"); delete si2; } /* Check that solver returns the proper status for artificial variables. The OSI convention is that this status should be reported as if the artificial uses a positive coefficient. Specifically: ax <= b ==> ax + s = b, 0 <= s <= infty ax >= b ==> ax + s = b, -infty <= s <= 0 If the constraint is tight at optimum, then the status should be atLowerBound for a <= constraint, atUpperBound for a >= constraint. The test problem is x1 >= -5 (c0) x1 <= 2 (c1) x2 >= 44 (c2) x2 <= 51 (c3) This is evaluated for two objectives, so that we have all combinations of tight constraints under minimisation and maximisation. max x1-x2 min x1-x2 obj -42 -56 c0 basic upper c1 lower basic c2 upper basic c3 basic lower */ void testArtifStatus(const OsiSolverInterface *emptySi) { OsiSolverInterface *si = emptySi->clone(); double infty = si->getInfinity(); testingMessage("Testing status for artificial variables.\n"); /* Set up the example problem in packed column-major vector format and load it into the solver. */ int colCnt = 2; int rowCnt = 4; int indices[] = { 0, 1, 2, 3 }; double coeffs[] = { 1.0, 1.0, 1.0, 1.0 }; CoinBigIndex starts[] = { 0, 2, 4 }; double obj[] = { 1.0, -1.0 }; double vubs[] = { infty, infty }; double vlbs[] = { -infty, -infty }; double rubs[] = { infty, 2.0, infty, 51.0 }; double rlbs[] = { -5.0, -infty, 44.0, -infty }; std::string contype[] = { ">=", "<=", ">=", "<=" }; std::string statCode[] = { "isFree", "basic", "atUpperBound", "atLowerBound" }; std::string sense[] = { "maximise", "minimise" }; si->loadProblem(colCnt, rowCnt, starts, indices, coeffs, vlbs, vubs, obj, rlbs, rubs); /* Vectors for objective sense and correct answers. Maximise first. */ double objSense[] = { -1.0, 1.0 }; double zopt[] = { -42.0, -56 }; CoinWarmStartBasis::Status goodStatus[] = { CoinWarmStartBasis::basic, CoinWarmStartBasis::atLowerBound, CoinWarmStartBasis::atUpperBound, CoinWarmStartBasis::basic, CoinWarmStartBasis::atUpperBound, CoinWarmStartBasis::basic, CoinWarmStartBasis::basic, CoinWarmStartBasis::atLowerBound }; /* Get to work. Open a loop, set the objective sense, solve the problem, and then check the results: We should have an optimal solution, with the correct objective. We should be able to ask for a warm start basis, and it should show the correct status. */ CoinRelFltEq eq; for (int iter = 0; iter <= 1; iter++) { si->setObjSense(objSense[iter]); si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), {}; continue, *si, "testArtifStatus: initial solve"); OSIUNITTEST_ASSERT_ERROR(eq(si->getObjValue(), zopt[iter]), {}; continue, *si, "testArtifStatus: initial solve optimal value"); CoinWarmStart *ws = si->getWarmStart(); CoinWarmStartBasis *wsb = dynamic_cast< CoinWarmStartBasis * >(ws); OSIUNITTEST_ASSERT_ERROR(wsb != NULL, {}; continue, *si, "testArtifStatus: initial solve warm start basis"); CoinWarmStartBasis::Status stati; bool ok = true; for (int i = 0; i < rowCnt; i++) { stati = wsb->getArtifStatus(i); if (stati != goodStatus[iter * rowCnt + i]) { ok = false; std::cout << "Incorrect status " << statCode[stati] << " for " << contype[i] << " constraint c" << i << " (" << sense[iter] << "), expected " << statCode[goodStatus[iter * rowCnt + i]] << "." << std::endl; } } OSIUNITTEST_ASSERT_ERROR(ok == true, {}, *si, "testArtifStatus: artifical variable status"); delete ws; } /* Clean up. */ delete si; } /* This method checks [cbar cbar] = [c-yB c-yN] = [0 (c - yN)] for the architectural variables. (But note there's no need to discriminate between basic and nonbasic columns in the tests below.) This provides a moderately strong check on the correctness of y (getRowPrice) and cbar (getReducedCosts). The method also checks that the sign of cbar is appropriate for the status of the variables. */ void testReducedCosts(const OsiSolverInterface *emptySi, const std::string &sampleDir) { OsiSolverInterface *si = emptySi->clone(); std::string solverName; si->getStrParam(OsiSolverName, solverName); si->setHintParam(OsiDoReducePrint, true, OsiHintDo); std::cout << "Testing duals and reduced costs ... "; /* Read p0033 and solve to optimality (minimisation). */ std::string fn = sampleDir + "p0033"; si->readMps(fn.c_str(), "mps"); si->setObjSense(1.0); si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return, solverName, "testReducedCosts: solving p0033"); if (OsiUnitTest::verbosity >= 1) { std::cout << " " << solverName << " solved p0033 z = " << si->getObjValue() << "." << std::endl; } /* Get the unchanging components: size, matrix, objective. */ int n = si->getNumCols(); double *cbarCalc = new double[n]; double dualTol; si->getDblParam(OsiDualTolerance, dualTol); CoinRelFltEq eq; std::string statNames[] = { "NBFR", "B", "NBUB", "NBLB" }; /* Resolve, first as maximisation, then minimisation, and do the tests. */ double minmax[] = { -1.0, 1.0 }; for (int ndx = 0; ndx < 2; ndx++) { si->setObjSense(minmax[ndx]); si->resolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return, solverName, "testReducedCosts: solving p0033 after changing objective sense"); if (OsiUnitTest::verbosity >= 1) { std::cout << " " << solverName << ((si->getObjSense() < 0) ? " maximised" : " minimised") << " p0033 z = " << si->getObjValue() << "." << std::endl; } /* Retrieve status, duals, and reduced costs. Calculate c - yA. */ const CoinPackedMatrix *mtx = si->getMatrixByCol(); const double *c = si->getObjCoefficients(); const CoinWarmStartBasis *wsb = dynamic_cast< CoinWarmStartBasis * >(si->getWarmStart()); double dir = si->getObjSense(); const double *y = si->getRowPrice(); const double *cbar = si->getReducedCost(); mtx->transposeTimes(y, cbarCalc); std::transform(c, c + n, cbarCalc, cbarCalc, std::minus< double >()); /* Walk the architecturals and check that cbar = c - ya and has the correct sign given the status and objective sense (max/min). */ bool cbarCalcj_ok = true; bool testcbarj_ok = true; for (int j = 0; j < n; j++) { CoinWarmStartBasis::Status statj = wsb->getStructStatus(j); double cbarj = cbar[j]; double cbarCalcj = cbarCalc[j]; if (OsiUnitTest::verbosity >= 1) { std::cout << " x<" << j << "> " << statNames[statj] << ", cbar<" << j << "> = " << cbarj << "." << std::endl; } if (!eq(cbarj, cbarCalcj)) { cbarCalcj_ok = false; if (OsiUnitTest::verbosity >= 1) { std::cout << " " << cbarj << " = cbar<" << j << "> != c<" << j << "> - ya<" << j << "> = " << cbarCalcj << ", diff = " << cbarj - cbarCalcj << "." << std::endl; } } double testcbarj = dir * cbarj; switch (statj) { case CoinWarmStartBasis::atUpperBound: { if (testcbarj > dualTol) { testcbarj_ok = false; if (OsiUnitTest::verbosity >= 1) { std::cout << " cbar<" << j << "> = " << cbarj << " has the wrong sign for a NBUB variable." << std::endl; } } break; } case CoinWarmStartBasis::atLowerBound: { if (testcbarj < -dualTol) { testcbarj_ok = false; if (OsiUnitTest::verbosity >= 1) { std::cout << " cbar<" << j << "> = " << cbarj << " has the wrong sign for a NBLB variable." << std::endl; } } break; } case CoinWarmStartBasis::isFree: { if (CoinAbs(testcbarj) > dualTol) { testcbarj_ok = false; if (OsiUnitTest::verbosity >= 1) { std::cout << " cbar<" << j << "> = " << cbarj << " should be zero for a NBFR variable." << std::endl; } } break; } case CoinWarmStartBasis::basic: { if (CoinAbs(testcbarj) > dualTol) { testcbarj_ok = false; if (OsiUnitTest::verbosity >= 1) { std::cout << " cbar<" << j << "> = " << cbarj << " should be zero for a basic variable." << std::endl; } } break; } default: { break; } } } OSIUNITTEST_ASSERT_ERROR(cbarCalcj_ok == true, {}, solverName, "testReducedCosts: reduced costs"); OSIUNITTEST_ASSERT_ERROR(testcbarj_ok == true, {}, solverName, "testReducedCosts: basis status of structural variable"); delete wsb; } delete[] cbarCalc; } /* Test the writeMps and writeMpsNative functions by loading a problem, writing it out to a file, reloading it, and solving. Implicitly assumes readMps has already been tested. fn should be the path to exmip1. */ void testWriteMps(const OsiSolverInterface *emptySi, std::string fn) { testingMessage("Testing writeMps and writeMpsNative.\n"); CoinRelFltEq eq(1.0e-8); OsiSolverInterface *si1 = emptySi->clone(); OsiSolverInterface *si2 = emptySi->clone(); OsiSolverInterface *si3 = emptySi->clone(); /* Sanity test. Read in exmip1 and do an initialSolve. */ OSIUNITTEST_ASSERT_ERROR(si1->readMps(fn.c_str(), "mps") == 0, return, *si1, "testWriteMps: read MPS"); bool solved = true; OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si1->initialSolve(), solved = false, *si1, "testWriteMps: solving LP", TestOutcome::ERROR, e.className() == "OsiVolSolverInterface" || e.className() == "OsiTestSolverInterface"); double soln = si1->getObjValue(); /* Write a test output file with writeMpsNative, then read and solve. See if we get the right answer. FIXME: Really, this test should verify values --- Vol could participate in that (lh, 070726). */ si1->writeMpsNative("test.out", NULL, NULL); OSIUNITTEST_ASSERT_ERROR(si2->readMps("test.out", "") == 0, return, *si1, "testWriteMps: read LP written by writeMpsNative"); if (solved) { OSIUNITTEST_CATCH_ERROR(si2->initialSolve(), return, *si1, "testWriteMps: solving LP written by writeMpsNative"); OSIUNITTEST_ASSERT_ERROR(eq(soln, si2->getObjValue()), return, *si1, "testWriteMps: solving LP written by writeMpsNative"); } /* Repeat with writeMps. */ si1->writeMps("test2", "out"); OSIUNITTEST_ASSERT_ERROR(si3->readMps("test2.out", "") == 0, return, *si1, "testWriteMps: read LP written by writeMps"); if (solved) { OSIUNITTEST_CATCH_ERROR(si3->initialSolve(), return, *si1, "testWriteMps: solving LP written by writeMps"); OSIUNITTEST_ASSERT_ERROR(eq(soln, si3->getObjValue()), return, *si1, "testWriteMps: solving LP written by writeMps"); } /* Clean up. */ delete si1; delete si2; delete si3; } /* Test writeLp and writeLpNative. Same sequence as for testWriteMps, above. Implicitly assumes readLp has been tested, but in fact that's not the case at present (lh, 070726). */ void testWriteLp(const OsiSolverInterface *emptySi, std::string fn) { testingMessage("Testing writeLp and writeLpNative.\n"); CoinRelFltEq eq(1.0e-8); OsiSolverInterface *si1 = emptySi->clone(); OsiSolverInterface *si2 = emptySi->clone(); OsiSolverInterface *si3 = emptySi->clone(); OSIUNITTEST_ASSERT_ERROR(si1->readMps(fn.c_str(), "mps") == 0, return, *si1, "testWriteLp: read MPS"); bool solved = true; OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si1->initialSolve(), solved = false, *si1, "testWriteLp: solving LP", TestOutcome::ERROR, e.className() == "OsiVolSolverInterface" || e.className() == "OsiTestSolverInterface"); double soln = si1->getObjValue(); si1->writeLpNative("test.lp", NULL, NULL, 1.0e-9, 10, 8); OSIUNITTEST_ASSERT_ERROR(si2->readLp("test.lp") == 0, return, *si1, "testWriteLp: read LP written by writeLpNative"); if (solved) { OSIUNITTEST_CATCH_ERROR(si2->initialSolve(), return, *si1, "testWriteLp: solving LP written by writeLpNative"); OSIUNITTEST_ASSERT_ERROR(eq(soln, si2->getObjValue()), return, *si1, "testWriteLp: solving LP written by writeLpNative"); } si1->writeLp("test2"); OSIUNITTEST_ASSERT_ERROR(si3->readLp("test2.lp") == 0, return, *si1, "testWriteLp: read LP written by writeLp"); if (solved) { OSIUNITTEST_CATCH_ERROR(si3->initialSolve(), return, *si1, "testWriteLp: solving LP written by writeLp"); OSIUNITTEST_ASSERT_ERROR(eq(soln, si3->getObjValue()), return, *si1, "testWriteLp: solving LP written by writeLp"); } delete si1; delete si2; delete si3; } /* Test load and assign problem. The first batch of tests loads up eight solvers, using each variant of loadProblem and assignProblem, runs initialSolve for all, then checks all values for all variants. */ void testLoadAndAssignProblem(const OsiSolverInterface *emptySi, const OsiSolverInterface *exmip1Si) { CoinRelFltEq eq(1.0e-8); std::string solverName; if (!emptySi->getStrParam(OsiSolverName, solverName)) solverName = "unknown"; /* Test each variant of loadProblem and assignProblem. Clone a whack of solvers and use one for each variant. Then run initialSolve() on each solver. Then check that all values are as they should be. Note that we are not testing the variants that supply the matrix as a set of vectors (row/col starts, col/row indices, coefficients). To be really thorough, we should do another eight ... */ { testingMessage("Testing loadProblem and assignProblem methods.\n"); OsiSolverInterface *base = exmip1Si->clone(); OsiSolverInterface *si1 = emptySi->clone(); OsiSolverInterface *si2 = emptySi->clone(); OsiSolverInterface *si3 = emptySi->clone(); OsiSolverInterface *si4 = emptySi->clone(); OsiSolverInterface *si5 = emptySi->clone(); OsiSolverInterface *si6 = emptySi->clone(); OsiSolverInterface *si7 = emptySi->clone(); OsiSolverInterface *si8 = emptySi->clone(); si1->loadProblem(*base->getMatrixByCol(), base->getColLower(), base->getColUpper(), base->getObjCoefficients(), base->getRowSense(), base->getRightHandSide(), base->getRowRange()); si2->loadProblem(*base->getMatrixByRow(), base->getColLower(), base->getColUpper(), base->getObjCoefficients(), base->getRowSense(), base->getRightHandSide(), base->getRowRange()); si3->loadProblem(*base->getMatrixByCol(), base->getColLower(), base->getColUpper(), base->getObjCoefficients(), base->getRowLower(), base->getRowUpper()); si4->loadProblem(*base->getMatrixByCol(), base->getColLower(), base->getColUpper(), base->getObjCoefficients(), base->getRowLower(), base->getRowUpper()); { double objOffset; base->getDblParam(OsiObjOffset, objOffset); si1->setDblParam(OsiObjOffset, objOffset); si2->setDblParam(OsiObjOffset, objOffset); si3->setDblParam(OsiObjOffset, objOffset); si4->setDblParam(OsiObjOffset, objOffset); si5->setDblParam(OsiObjOffset, objOffset); si6->setDblParam(OsiObjOffset, objOffset); si7->setDblParam(OsiObjOffset, objOffset); si8->setDblParam(OsiObjOffset, objOffset); } /* Assign methods should set their parameters to NULL, so check for that. */ CoinPackedMatrix *pm = new CoinPackedMatrix(*base->getMatrixByCol()); double *clb = new double[base->getNumCols()]; std::copy(base->getColLower(), base->getColLower() + base->getNumCols(), clb); double *cub = new double[base->getNumCols()]; std::copy(base->getColUpper(), base->getColUpper() + base->getNumCols(), cub); double *objc = new double[base->getNumCols()]; std::copy(base->getObjCoefficients(), base->getObjCoefficients() + base->getNumCols(), objc); double *rlb = new double[base->getNumRows()]; std::copy(base->getRowLower(), base->getRowLower() + base->getNumRows(), rlb); double *rub = new double[base->getNumRows()]; std::copy(base->getRowUpper(), base->getRowUpper() + base->getNumRows(), rub); si5->assignProblem(pm, clb, cub, objc, rlb, rub); OSIUNITTEST_ASSERT_ERROR(pm == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(clb == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(cub == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(objc == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rlb == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rub == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); pm = new CoinPackedMatrix(*base->getMatrixByRow()); clb = new double[base->getNumCols()]; std::copy(base->getColLower(), base->getColLower() + base->getNumCols(), clb); cub = new double[base->getNumCols()]; std::copy(base->getColUpper(), base->getColUpper() + base->getNumCols(), cub); objc = new double[base->getNumCols()]; std::copy(base->getObjCoefficients(), base->getObjCoefficients() + base->getNumCols(), objc); rlb = new double[base->getNumRows()]; std::copy(base->getRowLower(), base->getRowLower() + base->getNumRows(), rlb); rub = new double[base->getNumRows()]; std::copy(base->getRowUpper(), base->getRowUpper() + base->getNumRows(), rub); si6->assignProblem(pm, clb, cub, objc, rlb, rub); OSIUNITTEST_ASSERT_ERROR(pm == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(clb == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(cub == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(objc == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rlb == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rub == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); pm = new CoinPackedMatrix(*base->getMatrixByCol()); clb = new double[base->getNumCols()]; std::copy(base->getColLower(), base->getColLower() + base->getNumCols(), clb); cub = new double[base->getNumCols()]; std::copy(base->getColUpper(), base->getColUpper() + base->getNumCols(), cub); objc = new double[base->getNumCols()]; std::copy(base->getObjCoefficients(), base->getObjCoefficients() + base->getNumCols(), objc); char *rsen = new char[base->getNumRows()]; std::copy(base->getRowSense(), base->getRowSense() + base->getNumRows(), rsen); double *rhs = new double[base->getNumRows()]; std::copy(base->getRightHandSide(), base->getRightHandSide() + base->getNumRows(), rhs); double *rng = new double[base->getNumRows()]; std::copy(base->getRowRange(), base->getRowRange() + base->getNumRows(), rng); si7->assignProblem(pm, clb, cub, objc, rsen, rhs, rng); OSIUNITTEST_ASSERT_ERROR(pm == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(clb == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(cub == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(objc == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rsen == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rhs == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rng == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); pm = new CoinPackedMatrix(*base->getMatrixByCol()); clb = new double[base->getNumCols()]; std::copy(base->getColLower(), base->getColLower() + base->getNumCols(), clb); cub = new double[base->getNumCols()]; std::copy(base->getColUpper(), base->getColUpper() + base->getNumCols(), cub); objc = new double[base->getNumCols()]; std::copy(base->getObjCoefficients(), base->getObjCoefficients() + base->getNumCols(), objc); rsen = new char[base->getNumRows()]; std::copy(base->getRowSense(), base->getRowSense() + base->getNumRows(), rsen); rhs = new double[base->getNumRows()]; std::copy(base->getRightHandSide(), base->getRightHandSide() + base->getNumRows(), rhs); rng = new double[base->getNumRows()]; std::copy(base->getRowRange(), base->getRowRange() + base->getNumRows(), rng); si8->assignProblem(pm, clb, cub, objc, rsen, rhs, rng); OSIUNITTEST_ASSERT_ERROR(pm == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(clb == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(cub == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(objc == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rsen == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rhs == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rng == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); // Create an indices vector CoinPackedVector basePv, pv; OSIUNITTEST_ASSERT_ERROR(base->getNumCols() < 10, return, solverName, "testLoadAndAssignProblem"); OSIUNITTEST_ASSERT_ERROR(base->getNumRows() < 10, return, solverName, "testLoadAndAssignProblem"); int indices[10]; int i; for (i = 0; i < 10; i++) indices[i] = i; // Test solve methods. // Vol solver interface is expected to throw // an error if the data has a ranged row. // Prepare test that there is non-zero range basePv.setFull(base->getNumRows(), base->getRowRange()); pv.setConstant(base->getNumRows(), indices, 0.0); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(base->initialSolve(), return, *base, "testLoadAndAssignProblem: base initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si1->initialSolve(), return, *base, "testLoadAndAssignProblem: si1 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si2->initialSolve(), return, *base, "testLoadAndAssignProblem: si2 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si3->initialSolve(), return, *base, "testLoadAndAssignProblem: si3 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si4->initialSolve(), return, *base, "testLoadAndAssignProblem: si4 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si5->initialSolve(), return, *base, "testLoadAndAssignProblem: si5 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si6->initialSolve(), return, *base, "testLoadAndAssignProblem: si6 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si7->initialSolve(), return, *base, "testLoadAndAssignProblem: si7 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si8->initialSolve(), return, *base, "testLoadAndAssignProblem: si8 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); // Test collower basePv.setVector(base->getNumCols(), indices, base->getColLower()); pv.setVector(si1->getNumCols(), indices, si1->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 column lower bounds"); pv.setVector(si2->getNumCols(), indices, si2->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 column lower bounds"); pv.setVector(si3->getNumCols(), indices, si3->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 column lower bounds"); pv.setVector(si4->getNumCols(), indices, si4->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 column lower bounds"); pv.setVector(si5->getNumCols(), indices, si5->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 column lower bounds"); pv.setVector(si6->getNumCols(), indices, si6->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 column lower bounds"); pv.setVector(si7->getNumCols(), indices, si7->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 column lower bounds"); pv.setVector(si8->getNumCols(), indices, si8->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 column lower bounds"); // Test colupper basePv.setVector(base->getNumCols(), indices, base->getColUpper()); pv.setVector(si1->getNumCols(), indices, si1->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 column upper bounds"); pv.setVector(si2->getNumCols(), indices, si2->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 column upper bounds"); pv.setVector(si3->getNumCols(), indices, si3->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 column upper bounds"); pv.setVector(si4->getNumCols(), indices, si4->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 column upper bounds"); pv.setVector(si5->getNumCols(), indices, si5->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 column upper bounds"); pv.setVector(si6->getNumCols(), indices, si6->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 column upper bounds"); pv.setVector(si7->getNumCols(), indices, si7->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 column upper bounds"); pv.setVector(si8->getNumCols(), indices, si8->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 column upper bounds"); // Test getObjCoefficients basePv.setVector(base->getNumCols(), indices, base->getObjCoefficients()); pv.setVector(si1->getNumCols(), indices, si1->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 objective coefficients"); pv.setVector(si2->getNumCols(), indices, si2->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 objective coefficients"); pv.setVector(si3->getNumCols(), indices, si3->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 objective coefficients"); pv.setVector(si4->getNumCols(), indices, si4->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 objective coefficients"); pv.setVector(si5->getNumCols(), indices, si5->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 objective coefficients"); pv.setVector(si6->getNumCols(), indices, si6->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 objective coefficients"); pv.setVector(si7->getNumCols(), indices, si7->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 objective coefficients"); pv.setVector(si8->getNumCols(), indices, si8->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 objective coefficients"); // Test rowrhs basePv.setFull(base->getNumRows(), base->getRightHandSide()); pv.setFull(si1->getNumRows(), si1->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 right hand side"); pv.setFull(si2->getNumRows(), si2->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 right hand side"); pv.setFull(si3->getNumRows(), si3->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 right hand side"); pv.setFull(si4->getNumRows(), si4->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 right hand side"); pv.setFull(si5->getNumRows(), si5->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 right hand side"); pv.setFull(si6->getNumRows(), si6->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 right hand side"); pv.setFull(si7->getNumRows(), si7->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 right hand side"); pv.setFull(si8->getNumRows(), si8->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 right hand side"); // Test rowrange basePv.setFull(base->getNumRows(), base->getRowRange()); pv.setFull(si1->getNumRows(), si1->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 row range"); pv.setFull(si2->getNumRows(), si2->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 row range"); pv.setFull(si3->getNumRows(), si3->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 row range"); pv.setFull(si4->getNumRows(), si4->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 row range"); pv.setFull(si5->getNumRows(), si5->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 row range"); pv.setFull(si6->getNumRows(), si6->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 row range"); pv.setFull(si7->getNumRows(), si7->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 row range"); pv.setFull(si8->getNumRows(), si8->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 row range"); // Test row sense { const char *cb = base->getRowSense(); const char *c1 = si1->getRowSense(); const char *c2 = si2->getRowSense(); const char *c3 = si3->getRowSense(); const char *c4 = si4->getRowSense(); const char *c5 = si5->getRowSense(); const char *c6 = si6->getRowSense(); const char *c7 = si7->getRowSense(); const char *c8 = si8->getRowSense(); int nr = base->getNumRows(); bool rowsense_ok1 = true; bool rowsense_ok2 = true; bool rowsense_ok3 = true; bool rowsense_ok4 = true; bool rowsense_ok5 = true; bool rowsense_ok6 = true; bool rowsense_ok7 = true; bool rowsense_ok8 = true; for (i = 0; i < nr; i++) { rowsense_ok1 &= cb[i] == c1[i]; rowsense_ok2 &= cb[i] == c2[i]; rowsense_ok3 &= cb[i] == c3[i]; rowsense_ok4 &= cb[i] == c4[i]; rowsense_ok5 &= cb[i] == c5[i]; rowsense_ok6 &= cb[i] == c6[i]; rowsense_ok7 &= cb[i] == c7[i]; rowsense_ok8 &= cb[i] == c8[i]; } OSIUNITTEST_ASSERT_ERROR(rowsense_ok1, return, solverName, "testLoadAndAssignProblem: si1 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok2, return, solverName, "testLoadAndAssignProblem: si2 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok3, return, solverName, "testLoadAndAssignProblem: si3 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok4, return, solverName, "testLoadAndAssignProblem: si4 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok5, return, solverName, "testLoadAndAssignProblem: si5 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok6, return, solverName, "testLoadAndAssignProblem: si6 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok7, return, solverName, "testLoadAndAssignProblem: si7 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok8, return, solverName, "testLoadAndAssignProblem: si8 row sense"); } // Test rowlower basePv.setVector(base->getNumRows(), indices, base->getRowLower()); pv.setVector(si1->getNumRows(), indices, si1->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 row lower bounds"); pv.setVector(si2->getNumRows(), indices, si2->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 row lower bounds"); pv.setVector(si3->getNumRows(), indices, si3->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 row lower bounds"); pv.setVector(si4->getNumRows(), indices, si4->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 row lower bounds"); pv.setVector(si5->getNumRows(), indices, si5->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 row lower bounds"); pv.setVector(si6->getNumRows(), indices, si6->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 row lower bounds"); pv.setVector(si7->getNumRows(), indices, si7->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 row lower bounds"); pv.setVector(si8->getNumRows(), indices, si8->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 row lower bounds"); // Test rowupper basePv.setVector(base->getNumRows(), indices, base->getRowUpper()); pv.setVector(si1->getNumRows(), indices, si1->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 row upper bounds"); pv.setVector(si2->getNumRows(), indices, si2->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 row upper bounds"); pv.setVector(si3->getNumRows(), indices, si3->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 row upper bounds"); pv.setVector(si4->getNumRows(), indices, si4->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 row upper bounds"); pv.setVector(si5->getNumRows(), indices, si5->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 row upper bounds"); pv.setVector(si6->getNumRows(), indices, si6->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 row upper bounds"); pv.setVector(si7->getNumRows(), indices, si7->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 row upper bounds"); pv.setVector(si8->getNumRows(), indices, si8->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 row upper bounds"); // Test Constraint Matrix OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si1->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si1 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si1->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si1 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si2->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si2 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si2->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si2 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si3->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si3 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si3->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si3 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si4->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si4 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si4->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si4 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si5->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si5 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si5->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si5 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si6->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si6 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si6->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si6 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si7->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si7 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si7->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si7 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si8->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si8 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si8->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si8 constraint matrix"); // Test Objective Value OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si1->getObjValue()), return, solverName, "testLoadAndAssignProblem: si1 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si2->getObjValue()), return, solverName, "testLoadAndAssignProblem: si2 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si3->getObjValue()), return, solverName, "testLoadAndAssignProblem: si3 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si4->getObjValue()), return, solverName, "testLoadAndAssignProblem: si4 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si5->getObjValue()), return, solverName, "testLoadAndAssignProblem: si5 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si6->getObjValue()), return, solverName, "testLoadAndAssignProblem: si6 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si7->getObjValue()), return, solverName, "testLoadAndAssignProblem: si7 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si8->getObjValue()), return, solverName, "testLoadAndAssignProblem: si8 objective value"); // Clean-up delete si8; delete si7; delete si6; delete si5; delete si4; delete si3; delete si2; delete si1; delete base; } /* The OSI interface spec says any of the parameters to loadProblem can default to null. Let's see if that works. Test the rowub, rowlb and sense, rhs, range variants. Arguably we should check all variants again, but let's hope that OSI implementors carry things over from one variant to another. For Gurobi, this does not work. Since Gurobi does not know about free rows (rowtype 'N'), OsiGrb translates free rows into 'L' (lower-equal) rows with a -infty right-hand side. This makes some of the tests below fail. Ok, gurobi has quirks. As do other solvers. But those quirks should be hidden from users of OsiGrb -- i.e., the translation should be done within OsiGrb, and should not be visible to the user (or this test). That's the point of OSI. It's an implementation failure and should not be swept under the rug here. -- lh, 100826 -- OsiGrb does quite some attempts to hide this translation from the user, need to check further what could be done. -- sv, 110306 -- ps: it's just coincidence that I actually see your messages here... */ if (solverName != "gurobi") { int i; OsiSolverInterface *si1 = emptySi->clone(); OsiSolverInterface *si2 = emptySi->clone(); si1->loadProblem(*exmip1Si->getMatrixByCol(), NULL, NULL, NULL, NULL, NULL); si2->loadProblem(*exmip1Si->getMatrixByCol(), NULL, NULL, NULL, NULL, NULL, NULL); // Test column settings OSIUNITTEST_ASSERT_ERROR(si1->getNumCols() == exmip1Si->getNumCols(), return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); bool collower_ok = true; bool colupper_ok = true; bool colobjcoef_ok = true; for (i = 0; i < si1->getNumCols(); i++) { collower_ok &= eq(si1->getColLower()[i], 0.0); colupper_ok &= eq(si1->getColUpper()[i], si1->getInfinity()); colobjcoef_ok &= eq(si1->getObjCoefficients()[i], 0.0); } OSIUNITTEST_ASSERT_ERROR(collower_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(colupper_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(colobjcoef_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); // Test row settings OSIUNITTEST_ASSERT_ERROR(si1->getNumRows() == exmip1Si->getNumRows(), return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); const double *rh = si1->getRightHandSide(); const double *rr = si1->getRowRange(); const char *rs = si1->getRowSense(); const double *rl = si1->getRowLower(); const double *ru = si1->getRowUpper(); bool rowrhs_ok = true; bool rowrange_ok = true; bool rowsense_ok = true; bool rowlower_ok = true; bool rowupper_ok = true; for (i = 0; i < si1->getNumRows(); i++) { rowrhs_ok &= eq(rh[i], 0.0); rowrange_ok &= eq(rr[i], 0.0); rowsense_ok &= 'N' == rs[i]; rowlower_ok &= eq(rl[i], -si1->getInfinity()); rowupper_ok &= eq(ru[i], si1->getInfinity()); } OSIUNITTEST_ASSERT_ERROR(rowrhs_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowrange_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowlower_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowupper_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); // And repeat for si2 OSIUNITTEST_ASSERT_ERROR(si2->getNumCols() == exmip1Si->getNumCols(), return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); collower_ok = true; colupper_ok = true; colobjcoef_ok = true; for (i = 0; i < si2->getNumCols(); i++) { collower_ok &= eq(si2->getColLower()[i], 0.0); colupper_ok &= eq(si2->getColUpper()[i], si2->getInfinity()); colobjcoef_ok &= eq(si2->getObjCoefficients()[i], 0.0); } OSIUNITTEST_ASSERT_ERROR(collower_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(colupper_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(colobjcoef_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); // OSIUNITTEST_ASSERT_ERROR(si2->getNumRows() == exmip1Si->getNumRows(), return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); rh = si2->getRightHandSide(); rr = si2->getRowRange(); rs = si2->getRowSense(); rl = si2->getRowLower(); ru = si2->getRowUpper(); rowrhs_ok = true; rowrange_ok = true; rowsense_ok = true; rowlower_ok = true; rowupper_ok = true; for (i = 0; i < si2->getNumRows(); i++) { rowrhs_ok &= eq(rh[i], 0.0); rowrange_ok &= eq(rr[i], 0.0); rowsense_ok &= 'G' == rs[i]; rowlower_ok &= eq(rl[i], 0.0); rowupper_ok &= eq(ru[i], si2->getInfinity()); } OSIUNITTEST_ASSERT_ERROR(rowrhs_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowrange_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowlower_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowupper_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); delete si1; delete si2; } else { failureMessage(solverName, "OsiGrb exposes inability to handle 'N' constraints (expected)."); OSIUNITTEST_ADD_OUTCOME(solverName, "testLoadAndAssignProblem", "ability to handle 'N' constraints", TestOutcome::ERROR, true); } /* Load problem with row rhs, sense and range, but leave column bounds and objective at defaults. A belt-and-suspenders kind of test. Arguably we should have the symmetric case, with column bounds valid and row values at default. */ { int i; OsiSolverInterface *si = emptySi->clone(); si->loadProblem(*exmip1Si->getMatrixByRow(), NULL, NULL, NULL, exmip1Si->getRowSense(), exmip1Si->getRightHandSide(), exmip1Si->getRowRange()); // Test column settings OSIUNITTEST_ASSERT_ERROR(si->getNumCols() == exmip1Si->getNumCols(), return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); bool collower_ok = true; bool colupper_ok = true; bool colobjcoef_ok = true; for (i = 0; i < si->getNumCols(); i++) { collower_ok &= eq(si->getColLower()[i], 0.0); colupper_ok &= eq(si->getColUpper()[i], si->getInfinity()); colobjcoef_ok &= eq(si->getObjCoefficients()[i], 0.0); } OSIUNITTEST_ASSERT_ERROR(collower_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(colupper_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(colobjcoef_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); // Test row settings OSIUNITTEST_ASSERT_ERROR(si->getNumRows() == exmip1Si->getNumRows(), return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); bool rowrhs_ok = true; bool rowrange_ok = true; bool rowsense_ok = true; bool rowlower_ok = true; bool rowupper_ok = true; for (i = 0; i < si->getNumRows(); i++) { rowrhs_ok &= eq(si->getRightHandSide()[i], exmip1Si->getRightHandSide()[i]); rowrange_ok &= eq(si->getRowRange()[i], exmip1Si->getRowRange()[i]); rowsense_ok &= si->getRowSense()[i] == exmip1Si->getRowSense()[i]; char s = si->getRowSense()[i]; if (s == 'G') { rowlower_ok &= eq(si->getRowLower()[i], exmip1Si->getRightHandSide()[i]); rowupper_ok &= eq(si->getRowUpper()[i], si->getInfinity()); } else if (s == 'L') { rowlower_ok &= eq(si->getRowLower()[i], -si->getInfinity()); rowupper_ok &= eq(si->getRowUpper()[i], exmip1Si->getRightHandSide()[i]); } else if (s == 'E') { rowlower_ok &= eq(si->getRowLower()[i], si->getRowUpper()[i]); rowupper_ok &= eq(si->getRowUpper()[i], exmip1Si->getRightHandSide()[i]); } else if (s == 'N') { rowlower_ok &= eq(si->getRowLower()[i], -si->getInfinity()); rowupper_ok &= eq(si->getRowUpper()[i], si->getInfinity()); } else if (s == 'R') { rowlower_ok &= eq(si->getRowLower()[i], exmip1Si->getRightHandSide()[i] - exmip1Si->getRowRange()[i]); rowupper_ok &= eq(si->getRowUpper()[i], exmip1Si->getRightHandSide()[i]); } } OSIUNITTEST_ASSERT_ERROR(rowrhs_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(rowrange_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(rowlower_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(rowupper_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); delete si; } return; } /* Test adding rows and columns to an empty constraint system. */ void testAddToEmptySystem(const OsiSolverInterface *emptySi, bool volSolverInterface) { CoinRelFltEq eq(1.0e-7); std::string solverName = "Unknown solver"; emptySi->getStrParam(OsiSolverName, solverName); /* Add rows to an empty system. Begin by creating empty columns, then add some rows. */ { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int column[] = { 0, 1, 2 }; double row1E[] = { 4.0, 7.0, 5.0 }; double row2E[] = { 7.0, 4.0, 5.0 }; CoinPackedVector row1(3, column, row1E); CoinPackedVector row2(3, column, row2E); double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty columns for (i = 0; i < 3; i++) { const CoinPackedVector reqdBySunCC; si->addCol(reqdBySunCC, 0.0, 10.0, objective[i]); } // Add rows si->addRow(row1, 2.0, 100.0); si->addRow(row2, 2.0, 100.0); // Vol can not solve problem of this form if (!volSolverInterface) { // solve si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(eq(si->getObjValue(), 2.0), {}, solverName, "testAddToEmptySystem: getObjValue after adding empty columns"); } } delete si; } // Test adding rows to NULL - alternative row vector format { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int column[] = { 0, 1, 2, 0, 1, 2 }; double row1E[] = { 4.0, 7.0, 5.0 }; double row2E[] = { 7.0, 4.0, 5.0 }; double row12E[] = { 4.0, 7.0, 5.0, 7.0, 4.0, 5.0 }; CoinBigIndex starts[] = { 0, 3, 6 }; double ub[] = { 100.0, 100.0 }; double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty columns for (i = 0; i < 3; i++) { const CoinPackedVector reqdBySunCC; si->addCol(reqdBySunCC, 0.0, 10.0, objective[i]); } // Add rows si->addRows(2, starts, column, row12E, NULL, ub); // and again si->addRow(3, column, row1E, 2.0, 100.0); si->addRow(3, column, row2E, 2.0, 100.0); // Vol can not solve problem of this form if (!volSolverInterface) { // solve si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(eq(si->getObjValue(), 2.0), {}, solverName, "testAddToEmptySystem: getObjValue after adding empty columns and then rows"); } } delete si; } /* Add columns to an empty system. Start by creating empty rows, then add some columns. */ { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int row[] = { 0, 1 }; double col1E[] = { 4.0, 7.0 }; double col2E[] = { 7.0, 4.0 }; double col3E[] = { 5.0, 5.0 }; CoinPackedVector col1(2, row, col1E); CoinPackedVector col2(2, row, col2E); CoinPackedVector col3(2, row, col3E); double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty rows for (i = 0; i < 2; i++) { const CoinPackedVector reqdBySunCC; si->addRow(reqdBySunCC, 2.0, 100.0); } // Add columns if (volSolverInterface) { // FIXME: this test could be done w/ the volume, but the rows must not be ranged. OSIUNITTEST_ADD_OUTCOME(solverName, "testAddToEmptySystem", "addCol adds columns to NULL", TestOutcome::WARNING, true); failureMessage(solverName, "addCol add columns to null"); } else { si->addCol(col1, 0.0, 10.0, objective[0]); si->addCol(col2, 0.0, 10.0, objective[1]); si->addCol(col3, 0.0, 10.0, objective[2]); // solve si->initialSolve(); CoinRelFltEq eq(1.0e-7); OSIUNITTEST_ASSERT_ERROR(eq(si->getObjValue(), 2.0), {}, solverName, "testAddToEmptySystem: getObjValue after adding empty rows and then columns"); } } delete si; } // Test adding columns to NULL - alternative column vector format { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int row[] = { 0, 1 }; double col1E[] = { 4.0, 7.0 }; double col23E[] = { 7.0, 4.0, 5.0, 5.0 }; int row23E[] = { 0, 1, 0, 1 }; CoinBigIndex start23E[] = { 0, 2, 4 }; double ub23E[] = { 10.0, 10.0 }; double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty rows for (i = 0; i < 2; i++) { const CoinPackedVector reqdBySunCC; si->addRow(reqdBySunCC, 2.0, 100.0); } // Add columns if (volSolverInterface) { // FIXME: this test could be done w/ the volume, but the rows must not be ranged. OSIUNITTEST_ADD_OUTCOME(solverName, "testAddToEmptySystem", "addCol adds columns to NULL", TestOutcome::WARNING, true); } else { si->addCols(2, start23E, row23E, col23E, NULL, ub23E, objective + 1); si->addCol(2, row, col1E, 0.0, 10.0, objective[0]); // solve si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(eq(si->getObjValue(), 2.0), {}, solverName, "testAddToEmptySystem: getObjValue after adding empty rows and then columns (alternative format)"); } } delete si; } /* Add contradicting columns to an empty system. Either the OSI rejects these column via an exception or the LP is proven infeasible. */ { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int row[] = { 0, 1 }; double col1E[] = { 4.0, 7.0 }; double col2E[] = { 7.0, 4.0 }; double col3E[] = { 5.0, 5.0 }; CoinPackedVector col1(2, row, col1E); CoinPackedVector col2(2, row, col2E); CoinPackedVector col3(2, row, col3E); double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty rows for (i = 0; i < 2; i++) { const CoinPackedVector reqdBySunCC; si->addRow(reqdBySunCC, 100.0, 100.0); } // Add columns try { si->addCol(col1, 10.0, -10.0, objective[0]); si->addCol(col2, si->getInfinity(), 0.0, objective[1]); si->addCol(col3, si->getInfinity(), si->getInfinity(), objective[2]); // solve si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isAbandoned() || si->isProvenPrimalInfeasible(), {}, solverName, "testAddToEmptySystem: not infeasible or abandoned after adding contradicting columns"); } catch( CoinError& e ) { OSIUNITTEST_ADD_OUTCOME(solverName, "testAddToEmptySystem", "addCol adds contradicting columns threw CoinError", TestOutcome::PASSED, true); } } delete si; } /* Add rows with contradicting sides to an empty system. Begin by creating empty columns, then add some rows. */ { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int column[] = { 0, 1, 2 }; double row1E[] = { 4.0, 7.0, 5.0 }; double row2E[] = { 7.0, 4.0, 5.0 }; CoinPackedVector row1(3, column, row1E); CoinPackedVector row2(3, column, row2E); double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty columns for (i = 0; i < 3; i++) { const CoinPackedVector reqdBySunCC; si->addCol(reqdBySunCC, 0.0, 10.0, objective[i]); } try { // Add rows si->addRow(row1, -100.0, 100.0); si->addRow(row2, si->getInfinity(), -si->getInfinity()); // Vol can not solve problem of this form if (!volSolverInterface) { // solve si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isAbandoned() || si->isProvenPrimalInfeasible(), {}, solverName, "testAddToEmptySystem: infeasible or abandoned after adding rows with contradicting sides"); } } catch( CoinError& e ) { OSIUNITTEST_ADD_OUTCOME(solverName, "testAddToEmptySystem", "addRow for rows with contradicting sides threw CoinError", TestOutcome::PASSED, true); } } delete si; } } /* OsiPresolve has the property that it will report the correct (untransformed) objective for the presolved problem. Test OsiPresolve by checking the objective that we get by optimising the presolved problem. Then postsolve to get back to the original problem statement and check that we have the same objective without further iterations. This is much more a check on OsiPresolve than on the OsiXXX under test. OsiPresolve simply calls the underlying OsiXXX when it needs to solve a model. All the work involved with presolve and postsolve transforms is handled in OsiPresolve. The problems are a selection of problems from Data/Sample. In particular, e226 is in the list by virtue of having a constant offset (7.113) defined for the objective, and p0201 is in the list because presolve (as of 071015) finds no reductions. The objective for finnis (1.7279106559e+05) is not the same as the objective used by Netlib (1.7279096547e+05), but solvers clp, dylp, glpk, and cplex agree that it's correct. This test could be made stronger, but more brittle, by checking for the expected size of the constraint system after presolve. It would also be good to add a maximisation problem and check for signs of reduced costs and duals. Returns the number of errors encountered. */ int testOsiPresolve(const OsiSolverInterface *emptySi, const std::string &sampleDir) { typedef std::pair< std::string, double > probPair; std::vector< probPair > sampleProbs; sampleProbs.push_back(probPair("brandy", 1.5185098965e+03)); sampleProbs.push_back(probPair("e226", (-18.751929066 + 7.113))); //#ifdef COIN_HAS_GRB // // for the demo license of Gurobi, model "finnis" is too large, so we skip it in this case // if( dynamic_cast(emptySi) && dynamic_cast(emptySi)->isDemoLicense() ) // std::cout << "Skip model finnis in test of OsiPresolve with Gurobi, since we seem to have only a demo license of Gurobi." << std::endl; // else //#endif sampleProbs.push_back(probPair("finnis", 1.7279106559e+05)); sampleProbs.push_back(probPair("p0201", 6875)); CoinRelFltEq eq(1.0e-8); int errs = 0; int warnings = 0; std::string solverName = "Unknown solver"; OSIUNITTEST_ASSERT_ERROR(emptySi->getStrParam(OsiSolverName, solverName) == true, ++errs, solverName, "testOsiPresolve: getStrParam(OsiSolverName)"); std::cout << "Testing OsiPresolve ... " << std::endl; for (unsigned i = 0; i < sampleProbs.size(); i++) { OsiSolverInterface *si = emptySi->clone(); if (!si->setIntParam(OsiNameDiscipline, 1)) std::cout << " attempt to switch to lazy names failed."; std::string mpsName = sampleProbs[i].first; double correctObj = sampleProbs[i].second; std::cout << " testing presolve on " << mpsName << "." << std::endl; std::string fn = sampleDir + mpsName; OSIUNITTEST_ASSERT_ERROR(si->readMps(fn.c_str(), "mps") == 0, delete si; ++errs; continue, solverName, "testOsiPresolve: read MPS"); /* Set up for presolve. Allow very slight (1.0e-8) bound relaxation to retain feasibility. Discard integrality information (false) and limit the number of presolve passes to 5. */ OsiSolverInterface *presolvedModel; OsiPresolve pinfo; presolvedModel = pinfo.presolvedModel(*si, 1.0e-8, false, 5); OSIUNITTEST_ASSERT_ERROR(presolvedModel != NULL, delete si; ++errs; continue, solverName, "testOsiPresolve"); /* Optimise the presolved model and check the objective. We need to turn off any native presolve, which may or may not affect the objective. */ presolvedModel->setHintParam(OsiDoPresolveInInitial, false, OsiHintDo); presolvedModel->initialSolve(); OSIUNITTEST_ASSERT_ERROR(eq(correctObj, presolvedModel->getObjValue()), delete si; ++errs; continue, solverName, "testOsiPresolve"); /* Postsolve to return to the original formulation. The presolvedModel should no longer be needed once we've executed postsolve. Check that we get the correct objective without iterations. As before, turn off any native presolve. */ pinfo.postsolve(true); delete presolvedModel; si->setHintParam(OsiDoPresolveInResolve, false, OsiHintDo); si->resolve(); OSIUNITTEST_ASSERT_ERROR(eq(correctObj, si->getObjValue()), ++errs, solverName, "testOsiPresolve: postsolve objective value"); OSIUNITTEST_ASSERT_WARNING(si->getIterationCount() == 0, ++warnings, solverName, "testOsiPresolve: postsolve number of iterations"); delete si; } if (errs == 0) { std::cout << "OsiPresolve test ok with " << warnings << " warnings." << std::endl; } else { failureMessage(solverName, "errors during OsiPresolve test."); } return (errs); } /* Test the values returned by an empty solver interface. */ void testEmptySi(const OsiSolverInterface *emptySi) { std::string solverName; const OsiSolverInterface *si = emptySi->clone(); std::cout << "Testing empty solver interface ... " << std::endl; si->getStrParam(OsiSolverName, solverName); OSIUNITTEST_ASSERT_ERROR(si->getNumRows() == 0, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getNumCols() == 0, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getNumElements() == 0, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getColLower() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getColUpper() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getColSolution() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getObjCoefficients() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getRowRange() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getRightHandSide() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getRowSense() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getRowLower() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getRowUpper() == NULL, {}, solverName, "testEmptySi"); delete si; } /* This routine uses the problem galenet (included in Data/Sample) to check getDualRays. Galenet is a primal infeasible flow problem: s1: t14 <= 20 s2: t24 + t25 <= 20 s3: t35 <= 20 n4: t14 + t24 - t46 - t47 = 0 n5: t25 + t35 - t57 - t58 = 0 d6: t46 >= 10 d7: t47 + t57 >= 20 d8: t58 >= 30 t14,t58 <= 30 tt24, t57 <= 20 t25, t35, t46 <= 10 t47 <= 2 Galenet is the original form, with mixed explicit constraints and implicit bound constraints. Galenetbnds is the same problem, but with implicit bounds converted to explicit constraints and all constraints converted to inequalities so that the algebraic test still works. The routine doesn't actually test for specific dual rays; rather, it tests for rA >= 0 and rb < 0, on the assumption that the dual constraint system matches the canonical form min yb yA >= c. (More accurately, on the assumption that the sign convention of the ray is correct for the canonical form.) The strategy is to check first for the ability to return a ray with row and column components, then a ray with row components only. If both of these result in a throw, conclude that the solver does not implement getDualRays. */ void testDualRays(const OsiSolverInterface *emptySi, const std::string &sampleDir) { unsigned int rayNdx, raysReturned; bool hasGetDualRays = false; std::string solverName; OsiSolverInterface *si = 0; std::vector< double * > rays; const int raysRequested = 5; const std::string mpsNames[] = { "galenet", "galenetbnds" }; const bool rayTypes[] = { true, false }; std::cout << "Testing getDualRays ..." << std::endl; /* Figure out what we can test. getDualRays only makes sense after solving a problem, so the strategy is to solve galenet and try for full rays. If that fails, solve galenetbnds and try for row-component rays. If that fails, conclude that the solver doesn't implement getDualRays. */ for (int iter = 0; iter <= 1; iter++) { const bool fullRay = rayTypes[iter]; const std::string mpsName = mpsNames[iter]; const std::string fn = sampleDir + mpsName; si = emptySi->clone(); si->getStrParam(OsiSolverName, solverName); std::cout << " checking if " << solverName << " implements getDualRays(maxRays" << ((fullRay == true) ? ",true" : "") << ") ... "; si->setIntParam(OsiNameDiscipline, 1); OSIUNITTEST_ASSERT_ERROR(si->readMps(fn.c_str(), "mps") == 0, delete si; return, solverName, "testDualRays: read MPS"); /* Solve and report the result. We should be primal infeasible, and not optimal. Specify maximisation just for kicks. */ si->setObjSense(-1.0); si->setHintParam(OsiDoPresolveInInitial, false, OsiHintDo); si->setHintParam(OsiDoReducePrint, true, OsiHintDo); si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(!si->isProvenOptimal(), {}, solverName, "testDualRays: infeasible instance not proven optimal"); OSIUNITTEST_ASSERT_ERROR(si->isProvenPrimalInfeasible(), {}, solverName, "testDualRays: recognize infeasiblity of instance"); /* Try a call to getDualRays. If the call throws, abort this iteration and try again. */ try { rays = si->getDualRays(raysRequested, fullRay); hasGetDualRays = true; std::cout << "yes." << std::endl; } catch (CoinError &err) { std::cout << "no." << std::endl; delete si; si = 0; continue; } /* We have rays. Check to see how many. There should be at least one, and no more than the number requested. If there are none, bail out now. */ raysReturned = static_cast< unsigned int >(rays.size()); OSIUNITTEST_ASSERT_ERROR(raysReturned >= 1, break, solverName, "testDualRays: number of returned rays"); OSIUNITTEST_ASSERT_WARNING(static_cast< int >(raysReturned) <= raysRequested, {}, solverName, "testDualRays: number of returned rays"); /* Do a bit of setup before checking each ray. If we're dealing with a full ray, we'll need variable bounds, solution value, and status. Acquire the bounds arrays, and acquire a warm start object so we can ask for column status. Failure to retrieve a warm start aborts the test. */ unsigned int m, n, i, j; m = si->getNumRows(); n = si->getNumCols(); unsigned int rayLen = m; CoinWarmStartBasis *wsb = 0; const double *vlbs = 0; const double *vubs = 0; const double *xvals = 0; const double *rhs = si->getRightHandSide(); const char *sense = si->getRowSense(); if (fullRay == true) { rayLen += n; wsb = dynamic_cast< CoinWarmStartBasis * >(si->getWarmStart()); OSIUNITTEST_ASSERT_ERROR(wsb != NULL, break, solverName, "testDualRays: get warmstart basis"); vlbs = si->getColLower(); vubs = si->getColUpper(); xvals = si->getColSolution(); } double tol; si->getDblParam(OsiDualTolerance, tol); double *rA = new double[rayLen]; /* Open a loop to check each ray for validity. */ for (rayNdx = 0; rayNdx < raysReturned; rayNdx++) { double *ray = rays[rayNdx]; if (OsiUnitTest::verbosity >= 2) { std::cout << " Ray[" << rayNdx << "]: " << std::endl; for (i = 0; i < m; i++) { if (fabs(ray[i]) > tol) { std::cout << " " << si->getRowName(i) << " [" << i << "]: " << ray[i] << "\t rhs: " << rhs[i] << "\t sense: " << sense[i] << std::endl; } } if (fullRay == true) { for (j = 0; j < n; j++) { if (fabs(ray[m + j]) > tol) { std::cout << " " << si->getColName(j) << " [" << j << "]: " << ray[m + j] << std::endl; } } } } /* Check that the ray is not identically zero. */ for (i = 0; i < rayLen; i++) { if (fabs(ray[i]) > tol) break; } OSIUNITTEST_ASSERT_ERROR(i < rayLen, continue, solverName, "testDualRays: ray should not be zero"); /* Check that dot(r,b) < 0. For the first m components this is a straightforward dot product. If we're dealing with column components, we need to synthesize the coefficient on-the-fly. There can be at most one nonzero associated with an out-of-bound basic primal, which corresponds to the nonbasic dual that's driving the ray. */ double rdotb = 0.0; int nzoobCnt = 0; for (i = 0; i < m; i++) { rdotb += rhs[i] * ray[i]; } if (fullRay == true) { CoinWarmStartBasis::Status statj; for (j = 0; j < n; j++) { statj = wsb->getStructStatus(j); switch (statj) { case CoinWarmStartBasis::atUpperBound: { rdotb += vubs[j] * ray[m + j]; break; } case CoinWarmStartBasis::atLowerBound: { rdotb += (-vlbs[j]) * ray[m + j]; break; } case CoinWarmStartBasis::basic: { if (ray[m + j] != 0) { nzoobCnt++; OSIUNITTEST_ASSERT_ERROR(xvals[j] > vubs[j] || xvals[j] < vlbs[j], break, solverName, "testDualRays: xval outside bounds for nonzero ray entry"); if (xvals[j] > vubs[j]) { rdotb += vubs[j] * ray[m + j]; } else if (xvals[j] < vlbs[j]) { rdotb += (-vlbs[j]) * ray[m + j]; } } break; } default: { OSIUNITTEST_ASSERT_ERROR(fabs(ray[i]) <= tol, {}, solverName, "testDualRays: zero ray entry for basic variables"); break; } } } OSIUNITTEST_ASSERT_ERROR(nzoobCnt <= 1, {}, solverName, "testDualRays: at most one nonzero ray entry for basic variables"); } if (OsiUnitTest::verbosity >= 2) std::cout << "dot(r,b) = " << rdotb << std::endl; OSIUNITTEST_ASSERT_ERROR(rdotb < 0, {}, solverName, "testDualRays: ray points into right direction"); /* On to rA >= 0. As with dot(r,b), it's trivially easy to do the calculation for explicit constraints, but we have to synthesize the coefficients corresponding to bounded variables on-the-fly. Upper bounds look like x <= u, lower bounds -x <= -l. No need to repeat the ray coefficient tests. */ CoinFillN(rA, m, 0.0); si->getMatrixByCol()->transposeTimes(ray, rA); if (fullRay == true) { CoinWarmStartBasis::Status statj; for (j = 0; j < n; j++) { statj = wsb->getStructStatus(j); switch (statj) { case CoinWarmStartBasis::atUpperBound: { rA[j] += ray[m + j]; break; } case CoinWarmStartBasis::atLowerBound: { rA[j] += -ray[m + j]; break; } case CoinWarmStartBasis::basic: { if (ray[m + j] != 0) { if (xvals[j] > vubs[j]) rA[j] += ray[m + j]; else if (xvals[j] < vlbs[j]) rA[j] += -ray[m + j]; } break; } default: { break; } } } } bool badVal = false; for (j = 0; j < n; j++) { if (rA[j] < -tol) { std::cout << " " << solverName << ": ray[" << rayNdx << "] fails rA >= 0 for column " << j << " with value " << rA[j] << "." << std::endl; badVal = true; } } OSIUNITTEST_ASSERT_ERROR(badVal == false, {}, solverName, "testDualRays: rA >= 0"); if (badVal == true && OsiUnitTest::verbosity >= 2) { std::cout << " Ray[" << rayNdx << "]: " << std::endl; for (i = 0; i < m; i++) { if (fabs(ray[i]) > tol) { std::cout << " [" << i << "]: " << ray[i] << std::endl; } } } } /* Clean up. */ delete[] rA; for (rayNdx = 0; rayNdx < raysReturned; rayNdx++) { delete[] rays[rayNdx]; } delete si; } /* Report the result and we're done. */ OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(hasGetDualRays, {}, solverName, "testDualRays: getDualRays is implemented", TestOutcome::NOTE, false); if (hasGetDualRays == false) { testingMessage(" *** WARNING *** getDualRays is unimplemented.\n"); } } } // end file-local namespace //############################################################################# // The main event //############################################################################# /* The order of tests should be examined. As it stands, we test immediately for the ability to read an mps file and bail if we can't do it. But quite a few tests could be performed without reading an mps file. -- lh, 080107 -- Gradually, oh so gradually, the Osi unit test is converting to produce some information about failed tests, and this routine now returns a count. Whenever you revise a test, please take the time to produce a count of errors. */ void OsiSolverInterfaceCommonUnitTest(const OsiSolverInterface *emptySi, const std::string &mpsDir, const std::string & /* netlibDir */) { CoinRelFltEq eq; /* Test if the si knows its name. The name will be used for displaying messages when testing. */ std::string solverName; { OsiSolverInterface *si = emptySi->clone(); assert(si != NULL); solverName = "Unknown Solver"; OSIUNITTEST_ASSERT_ERROR(si->getStrParam(OsiSolverName, solverName), {}, solverName, "getStrParam(OsiSolverName) supported"); OSIUNITTEST_ASSERT_ERROR(solverName != "Unknown Solver", {}, solverName, "solver knows its name"); delete si; } { std::string temp = ": running common unit tests.\n"; temp = solverName + temp; testingMessage(temp.c_str()); } /* Set a variable so we can easily determine which solver interface we're testing. This is so that we can easily decide to omit a test when it's beyond the capability of a solver. */ bool volSolverInterface UNUSED = (solverName == "vol"); bool dylpSolverInterface UNUSED = (solverName == "dylp"); bool glpkSolverInterface UNUSED = (solverName == "glpk"); bool xprSolverInterface UNUSED = (solverName == "xpress"); bool symSolverInterface UNUSED = (solverName == "sym"); bool grbSolverInterface UNUSED = (solverName == "gurobi"); bool cpxSolverInterface UNUSED = (solverName == "cplex"); bool spxSolverInterface UNUSED = (solverName == "soplex"); /* Test values returned by an empty solver interface. */ testEmptySi(emptySi); /* See if we can read an MPS file. We're dead in the water if we can't do this. */ std::string fn = mpsDir + "exmip1"; OsiSolverInterface *exmip1Si = emptySi->clone(); assert(exmip1Si != NULL); OSIUNITTEST_ASSERT_ERROR(exmip1Si->readMps(fn.c_str(), "mps") == 0, return, *exmip1Si, "read MPS file"); /* Test that the solver correctly handles row and column names. */ testNames(emptySi, fn); /* Test constants in objective function, dual and primal objective limit functions, objective sense (max/min). Do not perform test if Vol solver, because it requires problems of a special form and can not solve netlib e226. */ if (!volSolverInterface) { testObjFunctions(emptySi, mpsDir); } else { OSIUNITTEST_ADD_OUTCOME(solverName, "testObjFunctions", "skipped test for OsiVol", OsiUnitTest::TestOutcome::NOTE, true); } // Test that problem was loaded correctly { int nc = exmip1Si->getNumCols(); int nr = exmip1Si->getNumRows(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, *exmip1Si, "problem read correctly: number of columns"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, *exmip1Si, "problem read correctly: number of rows"); const char *exmip1Sirs = exmip1Si->getRowSense(); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[0] == 'G', {}, *exmip1Si, "problem read correctly: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[1] == 'L', {}, *exmip1Si, "problem read correctly: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[2] == 'E', {}, *exmip1Si, "problem read correctly: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[3] == 'R', {}, *exmip1Si, "problem read correctly: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[4] == 'R', {}, *exmip1Si, "problem read correctly: row sense"); const double *exmip1Sirhs = exmip1Si->getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[0], 2.5), {}, *exmip1Si, "problem read correctly: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[1], 2.1), {}, *exmip1Si, "problem read correctly: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[2], 4.0), {}, *exmip1Si, "problem read correctly: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[3], 5.0), {}, *exmip1Si, "problem read correctly: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[4], 15.), {}, *exmip1Si, "problem read correctly: row rhs"); const double *exmip1Sirr = exmip1Si->getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[0], 0.0), {}, *exmip1Si, "problem read correctly: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[1], 0.0), {}, *exmip1Si, "problem read correctly: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[2], 0.0), {}, *exmip1Si, "problem read correctly: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[3], 5.0 - 1.8), {}, *exmip1Si, "problem read correctly: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[4], 15.0 - 3.0), {}, *exmip1Si, "problem read correctly: row range"); const CoinPackedMatrix *goldByCol = BuildExmip1Mtx(); CoinPackedMatrix goldmtx; goldmtx.reverseOrderedCopyOf(*goldByCol); delete goldByCol; CoinPackedMatrix pm; pm.setExtraGap(0.0); pm.setExtraMajor(0.0); pm = *exmip1Si->getMatrixByRow(); pm.removeGaps(); OSIUNITTEST_ASSERT_ERROR(goldmtx.isEquivalent(pm), {}, *exmip1Si, "problem read correctly: matrix by row"); const double *cl = exmip1Si->getColLower(); OSIUNITTEST_ASSERT_ERROR(eq(cl[0], 2.5), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[2], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[3], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[4], 0.5), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[5], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[6], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[7], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); const double *cu = exmip1Si->getColUpper(); OSIUNITTEST_ASSERT_ERROR(eq(cu[0], exmip1Si->getInfinity()), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1], 4.1), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2], 1.0), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[3], 1.0), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[4], 4.0), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[5], exmip1Si->getInfinity()), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[6], exmip1Si->getInfinity()), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[7], 4.3), {}, *exmip1Si, "problem read correctly: columns upper bounds"); const double *rl = exmip1Si->getRowLower(); OSIUNITTEST_ASSERT_ERROR(eq(rl[0], 2.5), {}, *exmip1Si, "problem read correctly: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[1], -exmip1Si->getInfinity()), {}, *exmip1Si, "problem read correctly: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[2], 4.0), {}, *exmip1Si, "problem read correctly: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[3], 1.8), {}, *exmip1Si, "problem read correctly: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4], 3.0), {}, *exmip1Si, "problem read correctly: rows lower bounds"); const double *ru = exmip1Si->getRowUpper(); OSIUNITTEST_ASSERT_ERROR(eq(ru[0], exmip1Si->getInfinity()), {}, *exmip1Si, "problem read correctly: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1], 2.1), {}, *exmip1Si, "problem read correctly: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[2], 4.0), {}, *exmip1Si, "problem read correctly: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[3], 5.0), {}, *exmip1Si, "problem read correctly: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4], 15.), {}, *exmip1Si, "problem read correctly: rows upper bounds"); const double *objCoef = exmip1Si->getObjCoefficients(); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[0], 1.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[1], 0.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[2], 0.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[3], 0.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[4], 2.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[5], 0.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[6], 0.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[7], -1.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); // make sure col solution is something reasonable, // that is between upper and lower bounds const double *cs = exmip1Si->getColSolution(); int c; bool okColSol = true; //double inf = exmip1Si->getInfinity(); for (c = 0; c < nc; c++) { // if colSol is not between column bounds then // colSol is unreasonable. if (!(cl[c] <= cs[c] && cs[c] <= cu[c])) okColSol = false; // if at least one column bound is not infinite, // then it is unreasonable to have colSol as infinite // FIXME: temporarily commented out pending some group thought on the // semantics of this test. -- lh, 03.04.29 -- // if ( (cl[c]=inf ) okColSol=false; } OSIUNITTEST_ASSERT_WARNING(okColSol, {}, *exmip1Si, "column solution before solve"); // Test that objective value is correct // FIXME: the test checks the primal value. vol fails this, because vol // considers the dual value to be the objective value /* gurobi fails this, because gurobi does not have a solution before a model is solved (which makes sense, I (SV) think) Eh, well, you can argue the point, but the current OSI spec requires that there be a valid solution from the point that the problem is loaded. Nothing says it needs to be a good solution. -- lh, 100826 -- */ double correctObjValue = CoinPackedVector(nc, objCoef).dotProduct(cs); double siObjValue = exmip1Si->getObjValue(); OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(eq(correctObjValue, siObjValue), {}, *exmip1Si, "solution value before solve", TestOutcome::WARNING, solverName == "Vol"); } // Test matrixByCol method { const CoinPackedMatrix *goldmtx = BuildExmip1Mtx(); OsiSolverInterface &si = *exmip1Si->clone(); CoinPackedMatrix sm = *si.getMatrixByCol(); sm.removeGaps(); OSIUNITTEST_ASSERT_ERROR(goldmtx->isEquivalent(sm), {}, solverName, "getMatrixByCol"); delete goldmtx; // Test getting and setting of objective offset double objOffset; OSIUNITTEST_ASSERT_ERROR(si.getDblParam(OsiObjOffset, objOffset), {}, solverName, "getDblParam(OsiObjOffset)"); OSIUNITTEST_ASSERT_ERROR(eq(objOffset, 0.0), {}, solverName, "objective offset 0 for exmip1"); OSIUNITTEST_ASSERT_ERROR(si.setDblParam(OsiObjOffset, 3.21), {}, solverName, "setDblParam(OsiObjOffset)"); si.getDblParam(OsiObjOffset, objOffset); OSIUNITTEST_ASSERT_ERROR(eq(objOffset, 3.21), {}, solverName, "storing objective offset"); delete &si; } // Test clone { OsiSolverInterface *si2; int ad = 13579; { OsiSolverInterface *si1 = exmip1Si->clone(); int ad = 13579; si1->setApplicationData(&ad); OSIUNITTEST_ASSERT_ERROR(*(static_cast< int * >(si1->getApplicationData())) == ad, {}, solverName, "storing application data"); si2 = si1->clone(); delete si1; } OSIUNITTEST_ASSERT_ERROR(*(static_cast< int * >(si2->getApplicationData())) == ad, {}, solverName, "cloning of application data"); int nc = si2->getNumCols(); int nr = si2->getNumRows(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, *exmip1Si, "problem cloned: number of columns"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, *exmip1Si, "problem cloned: number of rows"); const char *exmip1Sirs = si2->getRowSense(); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[0] == 'G', {}, solverName, "problem cloned: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[1] == 'L', {}, solverName, "problem cloned: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[2] == 'E', {}, solverName, "problem cloned: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[3] == 'R', {}, solverName, "problem cloned: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[4] == 'R', {}, solverName, "problem cloned: row sense"); const double *exmip1Sirhs = si2->getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[0], 2.5), {}, solverName, "problem cloned: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[1], 2.1), {}, solverName, "problem cloned: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[2], 4.0), {}, solverName, "problem cloned: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[3], 5.0), {}, solverName, "problem cloned: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[4], 15.), {}, solverName, "problem cloned: row rhs"); const double *exmip1Sirr = si2->getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[0], 0.0), {}, solverName, "problem cloned: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[1], 0.0), {}, solverName, "problem cloned: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[2], 0.0), {}, solverName, "problem cloned: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[3], 5.0 - 1.8), {}, solverName, "problem cloned: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[4], 15.0 - 3.0), {}, solverName, "problem cloned: row range"); const CoinPackedMatrix *goldByCol = BuildExmip1Mtx(); CoinPackedMatrix goldmtx; goldmtx.reverseOrderedCopyOf(*goldByCol); CoinPackedMatrix pm; pm.setExtraGap(0.0); pm.setExtraMajor(0.0); pm = *si2->getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(goldmtx.isEquivalent(pm), {}, solverName, "problem cloned: matrix by row"); delete goldByCol; const double *cl = si2->getColLower(); OSIUNITTEST_ASSERT_ERROR(eq(cl[0], 2.5), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1], 0.0), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[2], 0.0), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[3], 0.0), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[4], 0.5), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[5], 0.0), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[6], 0.0), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[7], 0.0), {}, solverName, "problem cloned: columns lower bounds"); const double *cu = si2->getColUpper(); OSIUNITTEST_ASSERT_ERROR(eq(cu[0], exmip1Si->getInfinity()), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1], 4.1), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2], 1.0), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[3], 1.0), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[4], 4.0), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[5], exmip1Si->getInfinity()), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[6], exmip1Si->getInfinity()), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[7], 4.3), {}, solverName, "problem cloned: columns upper bounds"); const double *rl = si2->getRowLower(); OSIUNITTEST_ASSERT_ERROR(eq(rl[0], 2.5), {}, solverName, "problem cloned: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[1], -exmip1Si->getInfinity()), {}, solverName, "problem cloned: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[2], 4.0), {}, solverName, "problem cloned: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[3], 1.8), {}, solverName, "problem cloned: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4], 3.0), {}, solverName, "problem cloned: rows lower bounds"); const double *ru = si2->getRowUpper(); OSIUNITTEST_ASSERT_ERROR(eq(ru[0], exmip1Si->getInfinity()), {}, solverName, "problem cloned: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1], 2.1), {}, solverName, "problem cloned: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[2], 4.0), {}, solverName, "problem cloned: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[3], 5.0), {}, solverName, "problem cloned: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4], 15.), {}, solverName, "problem cloned: rows upper bounds"); const double *objCoef = exmip1Si->getObjCoefficients(); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[0], 1.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[1], 0.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[2], 0.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[3], 0.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[4], 2.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[5], 0.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[6], 0.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[7], -1.0), {}, solverName, "problem cloned: objective coefficients"); // make sure col solution is something reasonable, // that is between upper and lower bounds const double *cs = exmip1Si->getColSolution(); int c; bool okColSol = true; //double inf = exmip1Si->getInfinity(); for (c = 0; c < nc; c++) { // if colSol is not between column bounds then // colSol is unreasonable. if (!(cl[c] <= cs[c] && cs[c] <= cu[c])) okColSol = false; // if at least one column bound is not infinite, // then it is unreasonable to have colSol as infinite // FIXME: temporarily commented out pending some group thought on the // semantics of this test. -- lh, 03.04.29 -- // if ( (cl[c]=inf ) okColSol=false; } OSIUNITTEST_ASSERT_WARNING(okColSol, {}, solverName, "problem cloned: column solution before solve"); // Test getting of objective offset double objOffset; OSIUNITTEST_ASSERT_ERROR(si2->getDblParam(OsiObjOffset, objOffset), {}, solverName, "problem cloned: getDblParam(OsiObjOffset)"); OSIUNITTEST_ASSERT_ERROR(eq(objOffset, 0.0), {}, solverName, "problem cloned: objective offset 0.0"); delete si2; } // end of clone testing // Test apply cuts method { OsiSolverInterface &im = *(exmip1Si->clone()); OsiCuts cuts; // Generate some cuts { // Get number of rows and columns in model int nr = im.getNumRows(); int nc = im.getNumCols(); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, solverName, "apply cuts: number of rows"); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, solverName, "apply cuts: number of columns"); // Generate a valid row cut from thin air int c; { int *inx = new int[nc]; for (c = 0; c < nc; c++) inx[c] = c; double *el = new double[nc]; for (c = 0; c < nc; c++) el[c] = (static_cast< double >(c)) * (static_cast< double >(c)); OsiRowCut rc; rc.setRow(nc, inx, el); rc.setLb(-100.); rc.setUb(100.); rc.setEffectiveness(22); cuts.insert(rc); delete[] el; delete[] inx; } // Generate valid col cut from thin air { const double *oslColLB = im.getColLower(); const double *oslColUB = im.getColUpper(); int *inx = new int[nc]; for (c = 0; c < nc; c++) inx[c] = c; double *lb = new double[nc]; double *ub = new double[nc]; for (c = 0; c < nc; c++) lb[c] = oslColLB[c] + 0.001; for (c = 0; c < nc; c++) ub[c] = oslColUB[c] - 0.001; OsiColCut cc; cc.setLbs(nc, inx, lb); cc.setUbs(nc, inx, ub); cuts.insert(cc); delete[] ub; delete[] lb; delete[] inx; } { // Generate a row and column cut which are ineffective OsiRowCut *rcP = new OsiRowCut; rcP->setEffectiveness(-1.); cuts.insert(rcP); OSIUNITTEST_ASSERT_ERROR(rcP == NULL, {}, solverName, "apply cuts: insert row cut keeps pointer"); OsiColCut *ccP = new OsiColCut; ccP->setEffectiveness(-12.); cuts.insert(ccP); OSIUNITTEST_ASSERT_ERROR(ccP == NULL, {}, solverName, "apply cuts: insert column cut keeps pointer"); } { //Generate inconsistent Row cut OsiRowCut rc; const int ne = 1; int inx[ne] = { -10 }; double el[ne] = { 2.5 }; rc.setRow(ne, inx, el); rc.setLb(3.); rc.setUb(4.); OSIUNITTEST_ASSERT_ERROR(!rc.consistent(), {}, solverName, "apply cuts: inconsistent row cut"); cuts.insert(rc); } { //Generate inconsistent col cut OsiColCut cc; const int ne = 1; int inx[ne] = { -10 }; double el[ne] = { 2.5 }; cc.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cc.consistent(), {}, solverName, "apply cuts: inconsistent column cut"); cuts.insert(cc); } { // Generate row cut which is inconsistent for model m OsiRowCut rc; const int ne = 1; int inx[ne] = { 10 }; double el[ne] = { 2.5 }; rc.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(rc.consistent(), {}, solverName, "apply cuts: row cut inconsistent for model only"); OSIUNITTEST_ASSERT_ERROR(!rc.consistent(im), {}, solverName, "apply cuts: row cut inconsistent for model only"); cuts.insert(rc); } { // Generate col cut which is inconsistent for model m OsiColCut cc; const int ne = 1; int inx[ne] = { 30 }; double el[ne] = { 2.0 }; cc.setLbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cc.consistent(), {}, solverName, "apply cuts: column cut inconsistent for model only"); OSIUNITTEST_ASSERT_ERROR(!cc.consistent(im), {}, solverName, "apply cuts: column cut inconsistent for model only"); cuts.insert(cc); } { // Generate col cut which is infeasible OsiColCut cc; const int ne = 1; int inx[ne] = { 0 }; double el[ne] = { 2.0 }; cc.setUbs(ne, inx, el); cc.setEffectiveness(1000.); OSIUNITTEST_ASSERT_ERROR(cc.consistent(), {}, solverName, "apply cuts: column cut infeasible for model"); OSIUNITTEST_ASSERT_ERROR(cc.consistent(im), {}, solverName, "apply cuts: column cut infeasible for model"); OSIUNITTEST_ASSERT_ERROR(cc.infeasible(im), {}, solverName, "apply cuts: column cut infeasible for model"); cuts.insert(cc); } } OSIUNITTEST_ASSERT_ERROR(cuts.sizeRowCuts() == 4, {}, solverName, "apply cuts: number of stored row cuts"); OSIUNITTEST_ASSERT_ERROR(cuts.sizeColCuts() == 5, {}, solverName, "apply cuts: number of stored column cuts"); { OsiSolverInterface::ApplyCutsReturnCode rc = im.applyCuts(cuts); OSIUNITTEST_ASSERT_ERROR(rc.getNumIneffective() == 2, {}, solverName, "apply cuts: number of row cuts found ineffective"); OSIUNITTEST_ASSERT_ERROR(rc.getNumApplied() == 2, {}, solverName, "apply cuts: number of row cuts applied"); OSIUNITTEST_ASSERT_ERROR(rc.getNumInfeasible() == 1, {}, solverName, "apply cuts: number of row cuts found infeasible"); OSIUNITTEST_ASSERT_ERROR(rc.getNumInconsistentWrtIntegerModel() == 2, {}, solverName, "apply cuts: number of row cuts found inconsistent wr.t. integer model"); OSIUNITTEST_ASSERT_ERROR(rc.getNumInconsistent() == 2, {}, solverName, "apply cuts: number of row cuts found inconsistent"); OSIUNITTEST_ASSERT_ERROR(cuts.sizeCuts() == rc.getNumIneffective() + rc.getNumApplied() + rc.getNumInfeasible() + rc.getNumInconsistentWrtIntegerModel() + rc.getNumInconsistent(), {}, solverName, "apply cuts: consistent count of row cuts"); } delete &im; } // end of apply cut method testing /* Test setting primal (column) and row (dual) solutions, and test that reduced cost and row activity match. GUROBI does not support setting solutions (only basis can be set), so we skip this test. This is a failure of the implementation of OsiGrb. Most solvers do not allow you to simply set a solution by giving primal values, it needs to be handled in the OsiXXX. That's what OsiGrb should do. See longer rant where OsiGrb exposes Gurobi's inability to handle 'N' constraints. Here, run the tests and see the error messages. Shouldn't cause failure because we're not yet properly counting errors. -- lh, 100826 -- */ testSettingSolutions(*exmip1Si); // Test column type methods // skip for vol since it does not support this function if (volSolverInterface) { OSIUNITTEST_ADD_OUTCOME(solverName, "testing column type methods", "skipped test for OsiVol", TestOutcome::NOTE, true); } else { OsiSolverInterface &fim = *(emptySi->clone()); std::string fn = mpsDir + "exmip1"; fim.readMps(fn.c_str(), "mps"); // exmip1.mps has 2 integer variables with index 2 & 3 OSIUNITTEST_ASSERT_ERROR(fim.getNumIntegers() == 2, {}, solverName, "column type methods: number of integers"); OSIUNITTEST_ASSERT_ERROR(fim.isContinuous(0), {}, solverName, "column type methods: isContinuous"); OSIUNITTEST_ASSERT_ERROR(fim.isContinuous(1), {}, solverName, "column type methods: isContinuous"); OSIUNITTEST_ASSERT_ERROR(!fim.isContinuous(2), {}, solverName, "column type methods: isContinuous"); OSIUNITTEST_ASSERT_ERROR(!fim.isContinuous(3), {}, solverName, "column type methods: isContinuous"); OSIUNITTEST_ASSERT_ERROR(fim.isContinuous(4), {}, solverName, "column type methods: isContinuous"); OSIUNITTEST_ASSERT_ERROR(!fim.isInteger(0), {}, solverName, "column type methods: isInteger"); OSIUNITTEST_ASSERT_ERROR(!fim.isInteger(1), {}, solverName, "column type methods: isInteger"); OSIUNITTEST_ASSERT_ERROR(fim.isInteger(2), {}, solverName, "column type methods: isInteger"); OSIUNITTEST_ASSERT_ERROR(fim.isInteger(3), {}, solverName, "column type methods: isInteger"); OSIUNITTEST_ASSERT_ERROR(!fim.isInteger(4), {}, solverName, "column type methods: isInteger"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(0), {}, solverName, "column type methods: isBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(1), {}, solverName, "column type methods: isBinary"); OSIUNITTEST_ASSERT_ERROR(fim.isBinary(2), {}, solverName, "column type methods: isBinary"); OSIUNITTEST_ASSERT_ERROR(fim.isBinary(3), {}, solverName, "column type methods: isBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(4), {}, solverName, "column type methods: isBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(0), {}, solverName, "column type methods: isIntegerNonBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(1), {}, solverName, "column type methods: isIntegerNonBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(2), {}, solverName, "column type methods: isIntegerNonBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(3), {}, solverName, "column type methods: isIntegerNonBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(4), {}, solverName, "column type methods: isIntegerNonBinary"); // Test fractionalIndices do { double sol[] = { 1.0, 2.0, 2.9, 3.0, 4.0, 0.0, 0.0, 0.0 }; fim.setColSolution(sol); OsiVectorInt fi = fim.getFractionalIndices(1e-5); OSIUNITTEST_ASSERT_ERROR(fi.size() == 1, break, solverName, "column type methods: getFractionalIndices"); OSIUNITTEST_ASSERT_ERROR(fi[0] == 2, {}, solverName, "column type methods: getFractionalIndices"); // Set integer variables very close to integer values sol[2] = 5 + .00001 / 2.; sol[3] = 8 - .00001 / 2.; fim.setColSolution(sol); fi = fim.getFractionalIndices(1e-5); OSIUNITTEST_ASSERT_ERROR(fi.size() == 0, {}, solverName, "column type methods: getFractionalIndices"); // Set integer variables close, but beyond tolerances sol[2] = 5 + .00001 * 2.; sol[3] = 8 - .00001 * 2.; fim.setColSolution(sol); fi = fim.getFractionalIndices(1e-5); OSIUNITTEST_ASSERT_ERROR(fi.size() == 2, break, solverName, "column type methods: getFractionalIndices"); OSIUNITTEST_ASSERT_ERROR(fi[0] == 2, {}, solverName, "column type methods: getFractionalIndices"); OSIUNITTEST_ASSERT_ERROR(fi[1] == 3, {}, solverName, "column type methods: getFractionalIndices"); } while (false); // Change data so column 2 & 3 are integerNonBinary fim.setColUpper(2, 5.0); fim.setColUpper(3, 6.0); OSIUNITTEST_ASSERT_ERROR(eq(fim.getColUpper()[2], 5.0), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(eq(fim.getColUpper()[3], 6.0), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(0), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(1), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(2), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(3), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(4), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(fim.getNumIntegers() == 2, {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(0), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(1), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(fim.isIntegerNonBinary(2), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(fim.isIntegerNonBinary(3), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(4), {}, solverName, "column type methods: convert binary to integer variable"); delete &fim; } /* Test load and assign methods, and do an initialSolve while we have the problem loaded. This routine also puts some stress on cloning --- it creates nine simultaneous clones of the OSI under test. */ testLoadAndAssignProblem(emptySi, exmip1Si); testAddToEmptySystem(emptySi, volSolverInterface); /* Test write methods. */ testWriteMps(emptySi, fn); testWriteLp(emptySi, fn); /* Test the simplex portion of the OSI interface. */ testSimplexAPI(emptySi, mpsDir); // Add a Laci suggested test case // Load in a problem as column ordered matrix, // extract the row ordered copy, // add a row, // extract the row ordered copy again and test whether it's ok. // (the same can be done with reversing the role // of row and column ordered.) { OsiSolverInterface *si = emptySi->clone(); si->loadProblem( *(exmip1Si->getMatrixByCol()), exmip1Si->getColLower(), exmip1Si->getColUpper(), exmip1Si->getObjCoefficients(), exmip1Si->getRowSense(), exmip1Si->getRightHandSide(), exmip1Si->getRowRange()); CoinPackedMatrix pm1 = *(si->getMatrixByRow()); // Get a row of the matrix to make a cut const CoinShallowPackedVector neededBySunCC = exmip1Si->getMatrixByRow()->getVector(1); CoinPackedVector pv = neededBySunCC; pv.setElement(0, 3.14 * pv.getElements()[0]); OsiRowCut rc; rc.setRow(pv); rc.setLb(exmip1Si->getRowLower()[1] - 0.5); rc.setUb(exmip1Si->getRowUpper()[1] - 0.5); OsiCuts cuts; cuts.insert(rc); si->applyCuts(cuts); CoinPackedMatrix pm2 = *(si->getMatrixByRow()); OSIUNITTEST_ASSERT_ERROR(pm1.getNumRows() == pm2.getNumRows() - 1, {}, solverName, "switching from column to row ordering: added row"); int i; for (i = 0; i < pm1.getNumRows(); ++i) { const CoinShallowPackedVector neededBySunCC1 = pm1.getVector(i); const CoinShallowPackedVector neededBySunCC2 = pm2.getVector(i); if (neededBySunCC1 != neededBySunCC2) break; } OSIUNITTEST_ASSERT_ERROR(i == pm1.getNumRows(), {}, solverName, "switching from column to row ordering: matrix ok"); OSIUNITTEST_ASSERT_ERROR(pm2.getVector(pm2.getNumRows() - 1).isEquivalent(pv), {}, solverName, "switching from column to row ordering: last row equals added cut"); delete si; } { OsiSolverInterface *si = emptySi->clone(); si->loadProblem( *(exmip1Si->getMatrixByRow()), exmip1Si->getColLower(), exmip1Si->getColUpper(), exmip1Si->getObjCoefficients(), exmip1Si->getRowLower(), exmip1Si->getRowUpper()); CoinPackedMatrix pm1 = *(si->getMatrixByCol()); // Get a row of the matrix to make a cut const CoinShallowPackedVector neededBySunCC = exmip1Si->getMatrixByRow()->getVector(1); CoinPackedVector pv = neededBySunCC; pv.setElement(0, 3.14 * pv.getElements()[0]); OsiRowCut rc; rc.setRow(pv); rc.setLb(exmip1Si->getRowLower()[1] - 0.5); rc.setUb(exmip1Si->getRowUpper()[1] - 0.5); OsiCuts cuts; cuts.insert(rc); si->applyCuts(cuts); CoinPackedMatrix pm2 = *(si->getMatrixByCol()); OSIUNITTEST_ASSERT_ERROR(pm1.isColOrdered(), {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(pm2.isColOrdered(), {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(pm1.getNumRows() == pm2.getNumRows() - 1, {}, solverName, "switching from row to column ordering: added row"); CoinPackedMatrix pm1ByRow; pm1ByRow.reverseOrderedCopyOf(pm1); CoinPackedMatrix pm2ByRow; pm2ByRow.reverseOrderedCopyOf(pm2); OSIUNITTEST_ASSERT_ERROR(!pm1ByRow.isColOrdered(), {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(!pm2ByRow.isColOrdered(), {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(pm1ByRow.getNumRows() == pm2ByRow.getNumRows() - 1, {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(pm1.getNumRows() == pm1ByRow.getNumRows(), {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(pm2.getNumRows() == pm2ByRow.getNumRows(), {}, solverName, "switching from row to column ordering"); int i; for (i = 0; i < pm1ByRow.getNumRows(); ++i) { const CoinShallowPackedVector neededBySunCC1 = pm1ByRow.getVector(i); const CoinShallowPackedVector neededBySunCC2 = pm2ByRow.getVector(i); if (neededBySunCC1 != neededBySunCC2) break; } OSIUNITTEST_ASSERT_ERROR(i == pm1ByRow.getNumRows(), {}, solverName, "switching from row to column ordering: matrix ok"); OSIUNITTEST_ASSERT_ERROR(pm2ByRow.getVector(pm2ByRow.getNumRows() - 1).isEquivalent(pv), {}, solverName, "switching from row to column ordering: last row is added cut"); delete si; } delete exmip1Si; { // Testing parameter settings OsiSolverInterface *si = emptySi->clone(); int i; int ival; double dval; bool hint; OsiHintStrength hintStrength; OSIUNITTEST_ASSERT_ERROR(si->getIntParam(OsiLastIntParam, ival) == false, {}, solverName, "parameter methods: retrieve last int param"); OSIUNITTEST_ASSERT_ERROR(si->getDblParam(OsiLastDblParam, dval) == false, {}, solverName, "parameter methods: retrieve last double param"); OSIUNITTEST_ASSERT_ERROR(si->getHintParam(OsiLastHintParam, hint) == false, {}, solverName, "parameter methods: retrieve last hint param"); OSIUNITTEST_ASSERT_ERROR(si->setIntParam(OsiLastIntParam, 0) == false, {}, solverName, "parameter methods: set last int param"); OSIUNITTEST_ASSERT_ERROR(si->setDblParam(OsiLastDblParam, 0.0) == false, {}, solverName, "parameter methods: set last double param"); OSIUNITTEST_ASSERT_ERROR(si->setHintParam(OsiLastHintParam, false) == false, {}, solverName, "parameter methods: set last hint param"); bool param_ok = true; for (i = 0; i < OsiLastIntParam; ++i) { const bool exists = si->getIntParam(static_cast< OsiIntParam >(i), ival); // existence and test should result in the same param_ok &= (!exists ^ testIntParam(si, i, -1)); param_ok &= (!exists ^ testIntParam(si, i, 0)); param_ok &= (!exists ^ testIntParam(si, i, 1)); param_ok &= (!exists ^ testIntParam(si, i, 9999999)); param_ok &= (!exists ^ testIntParam(si, i, COIN_INT_MAX)); if (exists) param_ok &= (si->getIntParam(static_cast< OsiIntParam >(i), ival)); } OSIUNITTEST_ASSERT_ERROR(param_ok == true, {}, solverName, "parameter methods: test intparam"); param_ok = true; for (i = 0; i < OsiLastDblParam; ++i) { const bool exists = si->getDblParam(static_cast< OsiDblParam >(i), dval); // existence and test should result in the same param_ok &= (!exists ^ testDblParam(si, i, -1e50)); param_ok &= (!exists ^ testDblParam(si, i, -1e10)); param_ok &= (!exists ^ testDblParam(si, i, -1)); param_ok &= (!exists ^ testDblParam(si, i, -1e-4)); param_ok &= (!exists ^ testDblParam(si, i, -1e-15)); param_ok &= (!exists ^ testDblParam(si, i, 1e50)); param_ok &= (!exists ^ testDblParam(si, i, 1e10)); param_ok &= (!exists ^ testDblParam(si, i, 1)); param_ok &= (!exists ^ testDblParam(si, i, 1e-4)); param_ok &= (!exists ^ testDblParam(si, i, 1e-15)); if (exists) param_ok &= (si->setDblParam(static_cast< OsiDblParam >(i), dval)); } OSIUNITTEST_ASSERT_ERROR(param_ok == true, {}, solverName, "parameter methods: test dblparam"); // test hints --- see testHintParam for detailed explanation. { int throws = 0; param_ok = true; for (i = 0; i < OsiLastHintParam; ++i) { const bool exists = si->getHintParam(static_cast< OsiHintParam >(i), hint, hintStrength); param_ok &= (!exists ^ testHintParam(si, i, true, OsiHintIgnore, &throws)); param_ok &= (!exists ^ testHintParam(si, i, true, OsiHintTry, &throws)); param_ok &= (!exists ^ testHintParam(si, i, false, OsiHintTry, &throws)); param_ok &= (!exists ^ testHintParam(si, i, true, OsiHintDo, &throws)); param_ok &= (!exists ^ testHintParam(si, i, false, OsiHintDo, &throws)); param_ok &= (!exists ^ testHintParam(si, i, true, OsiForceDo, &throws)); param_ok &= (!exists ^ testHintParam(si, i, false, OsiForceDo, &throws)); } std::cout.flush(); std::cerr << "Checked " << static_cast< int >(OsiLastHintParam) << " hints x (true, false) at strength OsiForceDo; " << throws << " throws." << std::endl; OSIUNITTEST_ASSERT_ERROR(param_ok == true, {}, solverName, "parameter methods: test hintparam"); } delete si; } /* A test to see if resolve gets the correct answer after changing the objective. Safe for Vol, as the result is checked by testing an interval on the primal solution. */ changeObjAndResolve(emptySi); /* Test OsiPresolve. This is a `bolt on' presolve, distinct from any presolve that might be innate to the solver. */ if (!volSolverInterface && !symSolverInterface) { testOsiPresolve(emptySi, mpsDir); } else { OSIUNITTEST_ADD_OUTCOME(solverName, "testOsiPresolved", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); } /* Do a check to see if the solver returns the correct status for artificial variables. See the routine for detailed comments. Vol has no basis, hence no status. */ if (!volSolverInterface && !symSolverInterface) testArtifStatus(emptySi); else OSIUNITTEST_ADD_OUTCOME(solverName, "testArtifStatus", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); // Perform tests that are embodied in functions if (!volSolverInterface && !symSolverInterface) { typedef bool (*TestFunction)(OsiSolverInterface *); std::vector< std::pair< TestFunction, const char * > > test_functions; test_functions.push_back(std::pair< TestFunction, const char * >(&test1VivianDeSmedt, "test1VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test2VivianDeSmedt, "test2VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test3VivianDeSmedt, "test3VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test4VivianDeSmedt, "test4VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test5VivianDeSmedt, "test5VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test6VivianDeSmedt, "test6VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test7VivianDeSmedt, "test7VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test8VivianDeSmedt, "test8VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test9VivianDeSmedt, "test9VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test10VivianDeSmedt, "test10VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test11VivianDeSmedt, "test11VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test12VivianDeSmedt, "test12VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test13VivianDeSmedt, "test13VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test14VivianDeSmedt, "test14VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test15VivianDeSmedt, "test15VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test16SebastianNowozin, "test16SebastianNowozin")); test_functions.push_back(std::pair< TestFunction, const char * >(&test17SebastianNowozin, "test17SebastianNowozin")); unsigned int i; for (i = 0; i < test_functions.size(); ++i) { OsiSolverInterface *s = emptySi->clone(); const char *testName = test_functions[i].second; { bool test = test_functions[i].first(s); OSIUNITTEST_ASSERT_ERROR(test == true, {}, solverName, testName); } delete s; } } else OSIUNITTEST_ADD_OUTCOME(solverName, "test*VivianDeSmedt and test*SebastianNowozin", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); /* Test duals and reduced costs, then dual rays. Vol doesn't react well to either test. */ if (!volSolverInterface && !symSolverInterface) { testReducedCosts(emptySi, mpsDir); testDualRays(emptySi, mpsDir); } else { OSIUNITTEST_ADD_OUTCOME(solverName, "testReducedCosts", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); OSIUNITTEST_ADD_OUTCOME(solverName, "testDualRays", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); } } /* Orphan comment? If anyone happens to poke at the code that this belongs to, move it. My (lh) guess is it should go somewhere in the deSmedt tests. I just haven't made time to check them all. And I really do want to find this. It'd be a great test case for the dual ray routine. With this matrix we have a primal/dual infeas problem. Leaving the first row makes it primal feas, leaving the first col makes it dual feas. All vars are >= 0 obj: -1 2 -3 4 -5 (min) 0 -1 0 0 -2 >= 1 1 0 -3 0 4 >= -2 0 3 0 -5 0 >= 3 0 0 5 0 -6 >= -4 2 -4 0 6 0 >= 5 */ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiCommonTest/Makefile.in0000644000175000017500000005710712502175645017465 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Lou Hafer SFU 2010-11-20 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/OsiCommonTest DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiCommonTests_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la am_libOsiCommonTests_la_OBJECTS = OsiColCutTest.lo OsiCutsTest.lo \ OsiRowCutDebuggerTest.lo OsiRowCutTest.lo OsiSimplexAPITest.lo \ OsiNetlibTest.lo OsiUnitTestUtils.lo OsiSolverInterfaceTest.lo libOsiCommonTests_la_OBJECTS = $(am_libOsiCommonTests_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiCommonTests_la_SOURCES) DIST_SOURCES = $(libOsiCommonTests_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # Common Test library for Osi # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in $libdir lib_LTLIBRARIES = libOsiCommonTests.la # List all source files for this library, including headers libOsiCommonTests_la_SOURCES = \ OsiCommonTests.hpp \ OsiColCutTest.cpp \ OsiCutsTest.cpp \ OsiRowCutDebuggerTest.cpp \ OsiRowCutTest.cpp \ OsiSimplexAPITest.cpp \ OsiNetlibTest.cpp \ OsiUnitTestUtils.cpp \ OsiSolverInterfaceTest.cpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiCommonTests_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la # Libtool flags libOsiCommonTests_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, includecoindir = $(includedir)/coin includecoin_HEADERS = OsiUnitTests.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiCommonTest/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiCommonTest/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiCommonTests.la: $(libOsiCommonTests_la_OBJECTS) $(libOsiCommonTests_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiCommonTests_la_LDFLAGS) $(libOsiCommonTests_la_OBJECTS) $(libOsiCommonTests_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiColCutTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiCutsTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiNetlibTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiRowCutDebuggerTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiRowCutTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSimplexAPITest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSolverInterfaceTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiUnitTestUtils.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Osi/src/OsiCommonTest/OsiCutsTest.cpp0000644000175000017500000002662313414504135020345 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiCuts.hpp" //-------------------------------------------------------------------------- void OsiCutsUnitTest() { CoinRelFltEq eq; // Test default constructor { OsiCuts r; OSIUNITTEST_ASSERT_ERROR(r.colCutPtrs_.empty(), {}, "osicuts", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.rowCutPtrs_.empty(), {}, "osicuts", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.sizeColCuts() == 0, {}, "osicuts", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.sizeRowCuts() == 0, {}, "osicuts", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.sizeCuts() == 0, {}, "osicuts", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.mostEffectiveCutPtr() == NULL, {}, "osicuts", "default constructor"); } // Create some cuts OsiRowCut rcv[5]; OsiColCut ccv[5]; OsiCuts cuts; int i; for (i = 0; i < 5; i++) { rcv[i].setEffectiveness(100. + i); ccv[i].setEffectiveness(200. + i); cuts.insert(rcv[i]); cuts.insert(ccv[i]); } OsiCuts rhs; { OsiCuts cs; // test inserting & accessing cut for (i = 0; i < 5; i++) { OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeCuts() == 2 * i, {}, "osicuts", "inserting and accessing cuts"); cs.insert(rcv[i]); OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i + 1, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeCuts() == 2 * i + 1, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.rowCut(i) == rcv[i], {}, "osicuts", "inserting and accessing cuts"); #if 0 const OsiCut * cp = cs.cutPtr(2*i); OSIUNITTEST_ASSERT_ERROR(cs.rowCut(i).effectiveness() == cp->effectiveness(), {}, "osicuts", "inserting and accessing cuts"); const OsiRowCut * rcP = dynamic_cast( cp ); OSIUNITTEST_ASSERT_ERROR(rcP != NULL, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(*rcP == rcv[i], {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(dynamic_cast(cs.cutPtr(2*i)) == NULL, {}, "osicuts", "inserting and accessing cuts"); #endif OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == i, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeCuts() == 2 * i + 1, {}, "osicuts", "inserting and accessing cuts"); cs.insert(ccv[i]); OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == i + 1, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeCuts() == 2 * i + 2, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.colCut(i) == ccv[i], {}, "osicuts", "inserting and accessing cuts"); #if 0 OSIUNITTEST_ASSERT_ERROR(dynamic_cast(cs.cutPtr(2*i+1)) == NULL, {}, "osicuts", "inserting and accessing cuts"); ccP = dynamic_cast( cs.cutPtr(2*i+1) ); OSIUNITTEST_ASSERT_ERROR(ccP != NULL, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(*ccP == ccv[i], {}, "osicuts", "inserting and accessing cuts"); #endif OSIUNITTEST_ASSERT_ERROR(eq(cs.mostEffectiveCutPtr()->effectiveness(), 200.0 + i), {}, "osicuts", "inserting and accessing cuts"); } // Test inserting collection of OsiCuts { OsiCuts cs; cs.insert(cuts); OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == 5, {}, "osicuts", "inserting collection of cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == 5, {}, "osicuts", "inserting collection of cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeCuts() == 10, {}, "osicuts", "inserting collection of cuts"); } /* Test handling of cut pointers. Create a vector of cut pointers, then add them to the collection. Dump the row cuts, then add again. The cut objects should be deleted when the OsiCuts object is deleted at the end of the block. This test should be monitored with some flavour of runtime access checking to be sure that cuts are not freed twice or not freed at all. */ { OsiCuts cs; OsiRowCut *rcPVec[5]; OsiColCut *ccPVec[5]; for (i = 0; i < 5; i++) { rcPVec[i] = rcv[i].clone(); ccPVec[i] = ccv[i].clone(); } // test inserting cut ptr & accessing cut for (i = 0; i < 5; i++) { OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i, {}, "osicuts", "handling of cut pointers"); OsiRowCut *rcP = rcPVec[i]; OSIUNITTEST_ASSERT_ERROR(rcP != NULL, {}, "osicuts", "handling of cut pointers"); cs.insert(rcP); OSIUNITTEST_ASSERT_ERROR(rcP == NULL, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i + 1, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.rowCut(i) == rcv[i], {}, "osicuts", "handling of cut pointers"); OsiColCut *ccP = ccPVec[i]; OSIUNITTEST_ASSERT_ERROR(ccP != NULL, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == i, {}, "osicuts", "handling of cut pointers"); cs.insert(ccP); OSIUNITTEST_ASSERT_ERROR(ccP == NULL, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == i + 1, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.colCut(i) == ccv[i], {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(eq(cs.mostEffectiveCutPtr()->effectiveness(), 200.0 + i), {}, "osicuts", "handling of cut pointers"); } cs.dumpCuts(); // row cuts only for (i = 0; i < 5; i++) { OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i, {}, "osicuts", "handling of cut pointers"); OsiRowCut *rcP = rcPVec[i]; OSIUNITTEST_ASSERT_ERROR(rcP != NULL, {}, "osicuts", "handling of cut pointers"); cs.insert(rcP); OSIUNITTEST_ASSERT_ERROR(rcP == NULL, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i + 1, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.rowCut(i) == rcv[i], {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == 5, {}, "osicuts", "handling of cut pointers"); } } // Test copy constructor OsiCuts csC(cs); OSIUNITTEST_ASSERT_ERROR(csC.sizeRowCuts() == 5, {}, "osicuts", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(csC.sizeColCuts() == 5, {}, "osicuts", "copy constructor"); bool copy_ok = true; for (i = 0; i < 5; i++) { copy_ok &= csC.rowCut(i) == rcv[i]; copy_ok &= csC.colCut(i) == ccv[i]; copy_ok &= csC.rowCut(i) == cs.rowCut(i); copy_ok &= csC.colCut(i) == cs.colCut(i); ; } OSIUNITTEST_ASSERT_ERROR(copy_ok, {}, "osicuts", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(eq(csC.mostEffectiveCutPtr()->effectiveness(), 204.0), {}, "osicuts", "copy constructor"); rhs = cs; } // Test results of assignment operation bool ok = true; for (i = 0; i < 5; i++) { ok &= rhs.rowCut(i) == rcv[i]; ok &= rhs.colCut(i) == ccv[i]; } OSIUNITTEST_ASSERT_ERROR(ok, {}, "osicuts", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(eq(rhs.mostEffectiveCutPtr()->effectiveness(), 204.0), {}, "osicuts", "assignment operator"); // Test removing cuts { OsiCuts t(rhs); OSIUNITTEST_ASSERT_ERROR(t.sizeRowCuts() == 5, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.sizeColCuts() == 5, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(eq(rhs.mostEffectiveCutPtr()->effectiveness(), 204.0), {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(eq(t.mostEffectiveCutPtr()->effectiveness(), 204.0), {}, "osicuts", "removing cuts"); t.eraseRowCut(3); OSIUNITTEST_ASSERT_ERROR(t.sizeRowCuts() == 4, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.sizeColCuts() == 5, {}, "osicuts", "removing cuts"); bool ok = true; for (i = 0; i < 5; i++) ok &= t.colCut(i) == ccv[i]; OSIUNITTEST_ASSERT_ERROR(ok, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(0) == rcv[0], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(1) == rcv[1], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(2) == rcv[2], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(3) == rcv[4], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(eq(t.mostEffectiveCutPtr()->effectiveness(), 204.0), {}, "osicuts", "removing cuts"); t.eraseColCut(4); OSIUNITTEST_ASSERT_ERROR(t.sizeRowCuts() == 4, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.sizeColCuts() == 4, {}, "osicuts", "removing cuts"); ok = true; for (i = 0; i < 4; i++) ok &= t.colCut(i) == ccv[i]; OSIUNITTEST_ASSERT_ERROR(ok, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(0) == rcv[0], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(1) == rcv[1], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(2) == rcv[2], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(3) == rcv[4], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(eq(t.mostEffectiveCutPtr()->effectiveness(), 203.0), {}, "osicuts", "removing cuts"); } // sorting cuts { OsiCuts t(rhs); OSIUNITTEST_ASSERT_ERROR(t.sizeRowCuts() == 5, {}, "osicuts", "sorting cuts"); OSIUNITTEST_ASSERT_ERROR(t.sizeColCuts() == 5, {}, "osicuts", "sorting cuts"); t.rowCut(0).setEffectiveness(9.); t.rowCut(1).setEffectiveness(1.); t.rowCut(2).setEffectiveness(7.); t.rowCut(3).setEffectiveness(3.); t.rowCut(4).setEffectiveness(5.); t.colCut(0).setEffectiveness(2.); t.colCut(1).setEffectiveness(8.); t.colCut(2).setEffectiveness(4.); t.colCut(3).setEffectiveness(6.); t.colCut(4).setEffectiveness(.5); double totEff = 1. + 2. + 3. + 4. + 5. + 6. + 7. + 8. + 9. + 0.5; { // Test iterator over all cuts double sumEff = 0.; for (OsiCuts::iterator it = t.begin(); it != t.end(); ++it) { double eff = (*it)->effectiveness(); sumEff += eff; } OSIUNITTEST_ASSERT_ERROR(sumEff == totEff, {}, "osicuts", "sorting cuts"); } t.sort(); bool colcutsort_ok = true; for (i = 1; i < 5; i++) colcutsort_ok &= t.colCut(i - 1) > t.colCut(i); OSIUNITTEST_ASSERT_ERROR(colcutsort_ok, {}, "osicuts", "sorting cuts"); bool rowcutsort_ok = true; for (i = 1; i < 5; i++) rowcutsort_ok &= t.rowCut(i - 1) > t.rowCut(i); OSIUNITTEST_ASSERT_ERROR(rowcutsort_ok, {}, "osicuts", "sorting cuts"); { // Test iterator over all cuts double sumEff = 0.; for (OsiCuts::iterator it = t.begin(); it != t.end(); ++it) { sumEff += (*it)->effectiveness(); } OSIUNITTEST_ASSERT_ERROR(sumEff == totEff, {}, "osicuts", "sorting cuts"); } { OsiCuts::iterator it = t.begin(); OsiCut *cm1 = *it; ++it; bool sort_ok = true; for (; it != t.end(); it++) { OsiCut *c = *it; sort_ok &= (*cm1) > (*c); cm1 = c; } OSIUNITTEST_ASSERT_ERROR(sort_ok, {}, "osicuts", "sorting cuts"); } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiCommonTest/OsiSimplexAPITest.cpp0000644000175000017500000006004613414504135021377 0ustar sudipsudip/* Copyright (C) 2000 -- 2010, Lou Hafer, International Business Machines, and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiConfig.h" /* #include "CoinTime.hpp" #include #include #include #include #include #include #include */ #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #include "CoinFloatEqual.hpp" #include "CoinPackedVector.hpp" #include "CoinPackedMatrix.hpp" #include "OsiSolverInterface.hpp" using namespace OsiUnitTest; /* Helper methods for the OSI simplex API test. */ namespace { /* Test that the given vector is a unit vector with a 1 in the specified index position */ bool isUnitVector(int /* ndx */, int len, double *vec) { bool retval = false; CoinAbsFltEq fltEq; int nzCount = 0; int oneCount = 0; int onePosn = -1; for (int j = 0; j < len; j++) { if (!fltEq(vec[j], 0.0)) { nzCount++; if (fltEq(vec[j], 1.0)) { oneCount++; onePosn = j; } } } if (nzCount == 1 && oneCount == 1 && onePosn >= 0) { retval = true; } if (OsiUnitTest::verbosity >= 2 && !retval) { if (nzCount > oneCount) { std::cout << " Vector contains " << nzCount - oneCount << " elements that are neither 1.0 or 0.0." << std::endl; } if (oneCount > 1) { std::cout << " Vector contains " << oneCount << " elements that are 1.0." << std::endl; } if (oneCount < 1) { std::cout << " Vector contains no elements that are 1.0." << std::endl; } } return (retval); } /* Build a constraint system in basis order. Assumes that enableFactorization has been called. Indirect test of getBasics, because if the basis columns are loaded incorrectly, checks that B inv(B) = I will surely fail. */ CoinPackedMatrix *buildBasisMatrix(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); CoinPackedMatrix *basisMtx = new CoinPackedMatrix(); const CoinPackedMatrix *mtx = si->getMatrixByCol(); int m = si->getNumRows(); int n = si->getNumCols(); int *basicIndices = new int[m]; si->getBasics(basicIndices); for (int i = 0; i < m; i++) { int j = basicIndices[i]; if (j < n) { if (OsiUnitTest::verbosity >= 2) { std::cout << " Retrieving column " << j << " for basis pos'n " << i << "." << std::endl; } CoinShallowPackedVector col = mtx->getVector(j); basisMtx->appendCol(col); } else { j -= n; if (OsiUnitTest::verbosity >= 2) { std::cout << " Fabricating e<" << j << "> for basis pos'n " << i << "." << std::endl; } CoinPackedVector ei = CoinPackedVector(1, &j, 1.0); basisMtx->appendCol(ei); } } return (basisMtx); } /* Test columns beta = inv(B)e of the basis inverse by calculating B beta and checking that the result is the appropriate unit vector. Also tests getBasics, because we use it to build the basis matrix. It's assumed that the si passed as a parameter is ready for tableau queries: a problem has been loaded and solved to optimality and enableFactorization has been called. */ void testBInvCol(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); int m = si->getNumRows(); std::cout << " Testing getBInvCol ... " << std::endl; CoinPackedMatrix *basisMtx = buildBasisMatrix(si); /* Fetch beta, calculate B beta, k = 0, ..., m-1, and check that we have the appropriate unit vector. */ double *betak = new double[m]; double *ek = new double[m]; for (int k = 0; k < m; k++) { CoinFillN(betak, m, COIN_DBL_MAX); CoinFillN(ek, m, COIN_DBL_MAX); OSIUNITTEST_CATCH_ERROR(si->getBInvCol(k, betak), {}, solverName, "testBInvCol"); basisMtx->times(betak, ek); OSIUNITTEST_ASSERT_ERROR(isUnitVector(k, m, ek), if (OsiUnitTest::verbosity >= 1) { std::cout << " " << "B beta<" << k << "> != e<" << k << ">." << std::endl; }, solverName, "testBInvCol"); } delete[] betak; delete[] ek; delete basisMtx; } /* Test rows beta = einv(B) of the basis inverse by calculating betaB and checking that the result is the appropriate unit vector. Also tests getBasics, because we need it to build the basis matrix. It's assumed that the si passed as a parameter is ready for tableau queries: a problem has been loaded and solved to optimality and enableFactorization has been called. */ void testBInvRow(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); int m = si->getNumRows(); std::cout << " Testing getBInvRow ... " << std::endl; /* Should construct in row-major form for transposeTimes, but efficiency is not all that big an issue here. */ CoinPackedMatrix *basisMtx = buildBasisMatrix(si); /* Fetch beta, calculate beta B, i = 0, ..., m-1, and check that we have the appropriate unit vector. */ double *betai = new double[m]; double *ei = new double[m]; for (int i = 0; i < m; i++) { CoinFillN(betai, m, COIN_DBL_MAX); CoinFillN(ei, m, COIN_DBL_MAX); OSIUNITTEST_CATCH_ERROR(si->getBInvRow(i, betai), {}, solverName, "testBInvRow"); basisMtx->transposeTimes(betai, ei); OSIUNITTEST_ASSERT_ERROR(isUnitVector(i, m, ei), if (OsiUnitTest::verbosity >= 1) { std::cout << " " << "beta<" << i << ">B != e<" << i << ">." << std::endl; }, solverName, "testBInvRow"); } delete[] betai; delete[] ei; delete basisMtx; } /* Test columns abar = inv(B) a by checking that B abar = a. It's assumed that the si passed as a parameter is ready for tableau queries: a problem has been loaded and solved to optimality and enableFactorization has been called. */ void testBInvACol(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); int n = si->getNumCols(); int m = si->getNumRows(); std::cout << " Testing getBInvACol ... " << std::endl; CoinPackedMatrix *basisMtx = buildBasisMatrix(si); const CoinPackedMatrix *mtx = si->getMatrixByCol(); /* Fetch abar, calculate B abar, k = 0, ..., n-1, and check that the result is a. */ double *abarj = new double[m]; double *aj = new double[m]; for (int j = 0; j < n; j++) { CoinFillN(abarj, m, COIN_DBL_MAX); CoinFillN(aj, m, COIN_DBL_MAX); OSIUNITTEST_CATCH_ERROR(si->getBInvACol(j, abarj), {}, solverName, "testBInvACol"); basisMtx->times(abarj, aj); const CoinShallowPackedVector pv = mtx->getVector(j); OSIUNITTEST_ASSERT_ERROR(isEquivalent(pv, m, aj), if (OsiUnitTest::verbosity >= 1) { std::cout << " " << "B abar<" << j << "> != a<" << j << ">." << std::endl; }, solverName, "testBInvACol"); } delete[] abarj; delete[] aj; delete basisMtx; } /* Test rows abar = e(inv(B)(A I)). This is an awkward thing to check, because there's no analog to the column identity B abar = a. Go with brute force: Build inv(B)A row by row with getBInvARow and check it against inv(B)A built column by column with getBInvACol. (Clearly, testBInvACol should run first.) e(inv(B)I) is of course beta = einv(B), so we can just check that betaB = e. It's assumed that the si passed as a parameter is ready for tableau queries: a problem has been loaded and solved to optimality and enableFactorization has been called. */ void testBInvARow(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); int n = si->getNumCols(); int m = si->getNumRows(); std::cout << " Testing getBInvARow ... " << std::endl; CoinPackedMatrix *basisMtx = buildBasisMatrix(si); /* Construct inv(B)A by column, then change over to row-major ordering so we can compare with the version build from tableau rows. Interesting quirk here: Turns out p0033's tableau has no nonzeros in rows with index 6 or 15. Because of that, when abarj is converted to row-major, it has only 15 rows, and that causes isEquivalent2 to fail. So force the full size. */ CoinPackedMatrix abarjMtx; double *abarj = new double[m]; for (int j = 0; j < n; j++) { si->getBInvACol(j, abarj); CoinPackedVector pkv; pkv.setFullNonZero(m, abarj); abarjMtx.appendCol(pkv); } delete[] abarj; abarjMtx.reverseOrdering(); abarjMtx.setDimensions(m, n); if (OsiUnitTest::verbosity >= 1) { std::cout << " Col-major tableau is " << abarjMtx.getNumRows() << " x " << abarjMtx.getNumCols() << " with " << abarjMtx.getNumElements() << " elements." << std::endl; } /* Construct inv(B)A by row. Check the vectors returned for inv(B)I = beta as we go. */ CoinPackedMatrix abariMtx; abariMtx.reverseOrdering(); double *abari = new double[n]; double *betai = new double[m]; double *ei = new double[m]; for (int i = 0; i < m; i++) { CoinFillN(abari, n, COIN_DBL_MAX); CoinFillN(betai, m, COIN_DBL_MAX); OSIUNITTEST_CATCH_ERROR(si->getBInvARow(i, abari, betai), {}, solverName, "testBInvARow"); CoinPackedVector pkv; pkv.setFullNonZero(n, abari); if (OsiUnitTest::verbosity >= 2) { std::cout << " Adding"; const int *indices = pkv.getIndices(); for (int v = 0; v < pkv.getNumElements(); v++) { std::cout << " (" << i << "," << indices[v] << ")"; } std::cout << std::endl; if (!isEquivalent(pkv, n, abari)) std::cout << " !! packed abari != full abari !!" << std::endl; } abariMtx.appendRow(pkv); basisMtx->transposeTimes(betai, ei); OSIUNITTEST_ASSERT_ERROR(isUnitVector(i, m, ei), if (OsiUnitTest::verbosity >= 1) { std::cout << " " << "beta<" << i << ">B != e<" << i << ">." << std::endl; }, solverName, "testBInvARow"); } abariMtx.setDimensions(m, n); if (OsiUnitTest::verbosity >= 2) { std::cout << " Row-major tableau is " << abariMtx.getNumRows() << " x " << abariMtx.getNumCols() << " with " << abariMtx.getNumElements() << " elements." << std::endl; } delete[] abari; delete[] betai; delete[] ei; delete basisMtx; /* Check that the two matrices are equivalent. isEquivalent2 will report differences, but we won't get a good count. But then, one error is all we need to report. */ OSIUNITTEST_ASSERT_ERROR(abariMtx.isEquivalent2(abarjMtx), {}, solverName, "testBInvARow: tableaus built by rows and columns match"); } /* Test the row and column duals returned by getReducedGradient. ** This method requires that the solver have an optimal solution in hand. ** The method checks the values returned by getReducedGradient against the values held in the solver (getRowPrice, getReducedCost) and tests that the sign of the reduced costs matches the status of the architectural variables. None of these are guaranteed unless the problem has been solved to optimality. The validity of the test hinges on the assumption that an implementor will just do the calculations for the given c rather than try to determine if the answer held in the solver is valid for the given c. * For row duals, test that y = cinv(B), using getBInvCol (already tested) to obtain the columns of the basis inverse. Also check that we agree with getRowPrice. * For column duals (aka reduced costs), test that cbar = c - yN, using the duals we've just checked. Also check that we agree with getReducedCost. Cross-check the sign of the reduced costs against the status vector returned by getBasisStatus. It's assumed that the si passed as a parameter is ready for tableau queries: a problem has been loaded and solved to optimality and enableFactorization has been called. */ void testReducedGradient(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); int n = si->getNumCols(); int m = si->getNumRows(); double objSense = si->getObjSense(); std::cout << " Testing getReducedGradient ... "; /* Acquire the solver's notion of current duals and reduced costs before we do anything else. */ const double *yGold = si->getRowPrice(); const double *cbarGold = si->getReducedCost(); /* Acquire the basis and build c, the vector of basic cost coefficients. For logicals (basicIndices[k] >= n) assume a zero coefficient. */ int *basicIndices = new int[m]; si->getBasics(basicIndices); const double *c = si->getObjCoefficients(); double *cB = new double[m]; for (int k = 0; k < m; k++) { int j = basicIndices[k]; if (j < n) { if (OsiUnitTest::verbosity >= 2) { std::cout << " Retrieving c<" << j << "> = " << c[j] << " for basis pos'n " << k << "." << std::endl; } cB[k] = c[j]; } else { if (OsiUnitTest::verbosity >= 2) { std::cout << " Assuming c = " << 0.0 << " for basis pos'n " << k << "." << std::endl; } cB[k] = 0.0; } } delete[] basicIndices; /* Call getReducedGradient to get duals and reduced costs. */ double *cbar = new double[n]; double *y = new double[m]; OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si->getReducedGradient(cbar, y, c), delete[] cbar; delete[] y; return, solverName, "testReducedGradient", TestOutcome::ERROR, solverName == "cplex"); /* Run through the columns of the basis. Retrieve beta, calculate dot(c,beta) and check that all three sources of y agree. */ double *betaj = new double[m]; CoinRelFltEq eq; for (int k = 0; k < m; k++) { double yk = 0.0; si->getBInvCol(k, betaj); for (int i = 0; i < m; i++) { yk += cB[i] * betaj[i]; } OSIUNITTEST_ASSERT_ERROR(eq(y[k], yGold[k]), if (OsiUnitTest::verbosity >= 1) std::cout << " " << y[k] << " = y<" << k << "> != yGold<" << k << "> = " << yGold[k] << ", diff = " << y[k] - yGold[k] << "." << std::endl, solverName, "testReducedGradient"); OSIUNITTEST_ASSERT_ERROR(eq(y[k], yk), if (OsiUnitTest::verbosity >= 1) std::cout << " " << y[k] << " = y<" << k << "> != cbeta<" << k << "> = " << yk << ", diff = " << y[k] - yk << "." << std::endl, solverName, "testReducedGradient"); } delete[] cB; delete[] betaj; /* Now that we're confident the duals are correct, use them to calculate cbar as c-yN and check that all sources for cbar agree. Also check that the sign is correct given the status of the variable. There's no need to differentiate basic and nonbasic columns here. */ int *archStatus = new int[n]; int *logStatus = new int[m]; si->getBasisStatus(archStatus, logStatus); double dualTol; si->getDblParam(OsiDualTolerance, dualTol); const int OsiSimplex_isFree = 0; const int OsiSimplex_basic = 1; const int OsiSimplex_nbub = 2; const int OsiSimplex_nblb = 3; std::string statNames[] = { "NBFR", "B", "NBUB", "NBLB" }; const CoinPackedMatrix *mtx = si->getMatrixByCol(); double *cbarCalc = new double[n]; mtx->transposeTimes(y, cbarCalc); std::transform(c, c + n, cbarCalc, cbarCalc, std::minus< double >()); for (int j = 1; j < n; j++) { double cbarj = cbar[j]; int statj = archStatus[j]; if (OsiUnitTest::verbosity >= 2) std::cout << " x<" << j << "> " << statNames[statj] << ", cbar<" << j << "> = " << cbarj << "." << std::endl; OSIUNITTEST_ASSERT_ERROR(eq(cbarj, cbarGold[j]), if (OsiUnitTest::verbosity >= 1) std::cout << " " << cbarj << " = cbar<" << j << "> != cbarGold<" << j << "> = " << cbarGold[j] << ", diff = " << cbarj - cbarGold[j] << "." << std::endl, solverName, "testReducedGradient"); OSIUNITTEST_ASSERT_ERROR(eq(cbarj, cbarCalc[j]), if (OsiUnitTest::verbosity >= 1) std::cout << " " << cbarj << " = cbar<" << j << "> != c<" << j << "> - ya<" << j << "> = " << cbarCalc[j] << ", diff = " << cbarj - cbarCalc[j] << "." << std::endl, solverName, "testReducedGradient"); double testcbarj = objSense * cbarj; switch (statj) { case OsiSimplex_nbub: { OSIUNITTEST_ASSERT_ERROR(testcbarj <= dualTol, if (OsiUnitTest::verbosity >= 1) std::cout << " cbar<" << j << "> = " << cbarj << " has the wrong sign for a NBUB variable." << std::endl, solverName, "testReducedGradient"); break; } case OsiSimplex_nblb: { OSIUNITTEST_ASSERT_ERROR(testcbarj >= -dualTol, if (OsiUnitTest::verbosity >= 1) std::cout << " cbar<" << j << "> = " << cbarj << " has the wrong sign for a NBLB variable." << std::endl, solverName, "testReducedGradient"); break; } case OsiSimplex_isFree: { OSIUNITTEST_ASSERT_ERROR(CoinAbs(testcbarj) <= dualTol, if (OsiUnitTest::verbosity >= 1) std::cout << " cbar<" << j << "> = " << cbarj << " should be zero for a NBFR variable." << std::endl, solverName, "testReducedGradient"); break; } case OsiSimplex_basic: { OSIUNITTEST_ASSERT_ERROR(CoinAbs(testcbarj) <= dualTol, if (OsiUnitTest::verbosity >= 1) std::cout << " cbar<" << j << "> = " << cbarj << " should be zero for a basic variable." << std::endl, solverName, "testReducedGradient"); break; } default: { break; } } } delete[] y; delete[] cbar; delete[] cbarCalc; delete[] archStatus; delete[] logStatus; } /* Test the mode 2 portion of the simplex API. Solve an lp by hand */ void testSimplexMode2(const OsiSolverInterface *emptySi, std::string sampleDir) { OsiSolverInterface *si = emptySi->clone(); std::string solverName; si->getStrParam(OsiSolverName, solverName); std::string fn = sampleDir + "p0033"; si->readMps(fn.c_str(), "mps"); si->setObjSense(-1.0); si->initialSolve(); si->setObjSense(1.0); // enable special mode si->enableSimplexInterface(true); // we happen to know that variables are 0-1 and rows are L int numberIterations = 0; int numberColumns = si->getNumCols(); int numberRows = si->getNumRows(); double *fakeCost = new double[numberColumns]; double *duals = new double[numberRows]; double *djs = new double[numberColumns]; const double *solution = si->getColSolution(); memcpy(fakeCost, si->getObjCoefficients(), numberColumns * sizeof(double)); while (1) { const double *dj; const double *dual; if ((numberIterations & 1) == 0) { // use given ones dj = si->getReducedCost(); dual = si->getRowPrice(); } else { // create dj = djs; dual = duals; si->getReducedGradient(djs, duals, fakeCost); } int i; int colIn = 9999; int direction = 1; double best = 1.0e-6; // find most negative reduced cost // Should check basic - but should be okay on this problem for (i = 0; i < numberRows; i++) { double value = dual[i]; if (value > best) { direction = -1; best = value; colIn = -i - 1; } } for (i = 0; i < numberColumns; i++) { double value = dj[i]; if (value < -best && solution[i] < 1.0e-6) { direction = 1; best = -value; colIn = i; } else if (value > best && solution[i] > 1.0 - 1.0e-6) { direction = -1; best = value; colIn = i; } } if (colIn == 9999) break; // should be optimal int colOut; int outStatus; double theta; OSIUNITTEST_ASSERT_ERROR(!si->primalPivotResult(colIn, direction, colOut, outStatus, theta, NULL), break, solverName, "testSimplexMode2"); printf("out %d, direction %d theta %g\n", colOut, outStatus, theta); numberIterations++; } delete[] fakeCost; delete[] duals; delete[] djs; // exit special mode si->disableSimplexInterface(); si->resolve(); OSIUNITTEST_ASSERT_ERROR(!si->getIterationCount(), {}, solverName, "testSimplexMode2: resolve after disable simplex interface"); si->setObjSense(-1.0); si->initialSolve(); std::cout << solverName << " passed OsiSimplexInterface test" << std::endl; delete si; } /* Test Simplex API mode 1 (tableau access) methods. */ void testSimplexMode1(const OsiSolverInterface *emptySi, std::string sampleDir) { OsiSolverInterface *si = emptySi->clone(); std::string solverName; si->getStrParam(OsiSolverName, solverName); si->setHintParam(OsiDoReducePrint, true, OsiHintDo); /* Read p0033 and check that there's no optimal basis prior to solving. */ std::string fn = sampleDir + "p0033"; si->readMps(fn.c_str(), "mps"); OSIUNITTEST_ASSERT_ERROR(!si->basisIsAvailable(), if (OsiUnitTest::verbosity >= 1) std::cout << " " << solverName << " shows no optimal basis before initial solve." << std::endl, *si, "testSimplexMode1: basis before solve"); /* Solve as minimisation problem. */ si->setObjSense(1.0); si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return, *si, "testSimplexMode1: solve p0033"); if (OsiUnitTest::verbosity >= 1) { std::cout << " " << solverName << " solved p0033 z = " << si->getObjValue() << "." << std::endl; } /* Now get tough. Resolve, first as maximisation, then minimisation. Enable the tableau interface and check the methods. */ double minmax[] = { -1.0, 1.0 }; for (int ndx = 0; ndx < 2; ndx++) { si->setObjSense(minmax[ndx]); std::cout << " " << ((minmax[ndx] < 0) ? "maximisation ..." : "minimisation") << " ..." << std::endl; si->resolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return, *si, "testSimplexMode1: resolve p0033"); if (OsiUnitTest::verbosity >= 1) { std::cout << " " << solverName << ((si->getObjSense() < 0) ? " maximised" : " minimised") << " p0033 z = " << si->getObjValue() << "." << std::endl; } OSIUNITTEST_ASSERT_ERROR(si->basisIsAvailable(), {}, *si, "testSimplexMode1: basis available after resolve"); if (OsiUnitTest::verbosity >= 1 && si->basisIsAvailable()) { std::cout << " " << solverName << " shows optimal basis after resolve." << std::endl; } /* Enable simplex mode 1. */ si->enableFactorization(); /* Test the various methods. */ testBInvCol(si); testBInvRow(si); testBInvACol(si); testBInvARow(si); testReducedGradient(si); /* Disable simplex mode 1. */ si->disableFactorization(); } /* Trash this solver and we're finished. */ delete si; } } // end file-local namespace namespace OsiUnitTest { /* Test a solver's implementation of the OSI simplex API. */ void testSimplexAPI(const OsiSolverInterface *emptySi, const std::string &sampleDir) { OsiSolverInterface *si = emptySi->clone(); std::string solverName; si->getStrParam(OsiSolverName, solverName); /* Do the tests only if the solver implements the simplex API. */ if (si->canDoSimplexInterface() == 0) { OSIUNITTEST_ADD_OUTCOME(solverName, "testSimplexAPI", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); std::cout << solverName << " has no OsiSimplex API." << std::endl; return; } /* Test the mode 1 (tableau access) portion of the API. */ if (si->canDoSimplexInterface() >= 1) { std::cout << "Testing Simplex API mode 1 for " << solverName << " ... " << std::endl; testSimplexMode1(emptySi, sampleDir); } /* Test the mode 2 (pivot-by-pivot control) portion of the API. */ if (si->canDoSimplexInterface() >= 2) { std::cout << "Testing Simplex API mode 2 for " << solverName << " ... " << std::endl; testSimplexMode2(emptySi, sampleDir); } else { OSIUNITTEST_ADD_OUTCOME(solverName, "testSimplexAPI mode 2", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); std::cout << solverName << " does not implement Simplex API mode 2." << std::endl; } } } /* namespace OsiUnitTest */ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiCommonTest/OsiRowCutTest.cpp0000644000175000017500000003205713432644766020667 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiRowCut.hpp" #include "CoinFloatEqual.hpp" //-------------------------------------------------------------------------- void OsiRowCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir) { CoinRelFltEq eq; // Test default constructor { OsiRowCut r; OSIUNITTEST_ASSERT_ERROR(r.row_.getIndices() == NULL, {}, "osirowcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.row_.getElements() == NULL, {}, "osirowcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.row_.getNumElements() == 0, {}, "osirowcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.lb_ == -COIN_DBL_MAX, {}, "osirowcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.ub_ == COIN_DBL_MAX, {}, "osirowcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.effectiveness() == 0.0, {}, "osirowcut", "default constructor"); } // Test set and get methods const int ne = 4; int inx[ne] = { 1, 3, 4, 7 }; double el[ne] = { 1.2, 3.4, 5.6, 7.8 }; { OsiRowCut r; // Test setting getting bounds r.setLb(65.432); r.setUb(123.45); OSIUNITTEST_ASSERT_ERROR(r.lb() == 65.432, {}, "osirowcut", "set bounds"); OSIUNITTEST_ASSERT_ERROR(r.ub() == 123.45, {}, "osirowcut", "set bounds"); // Test setting/getting of effectiveness,timesUsed,timesTested r.setEffectiveness(45.); OSIUNITTEST_ASSERT_ERROR(r.effectiveness() == 45.0, {}, "osirowcut", "set effectivenesss"); // Test setting/getting elements with int* & float* vectors r.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(r.row().getNumElements() == ne, return, "osirowcut", "set row"); bool row_ok = true; for (int i = 0; i < ne; i++) { row_ok &= r.row().getIndices()[i] == inx[i]; row_ok &= r.row().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(row_ok, {}, "osirowcut", "set row"); } // Repeat test with ownership constructor { int *inxo = new int[ne]; double *elo = new double[ne]; double lb = 65.432; double ub = 123.45; int i; for (i = 0; i < ne; i++) inxo[i] = inx[i]; for (i = 0; i < ne; i++) elo[i] = el[i]; OsiRowCut r(lb, ub, ne, ne, inxo, elo); OSIUNITTEST_ASSERT_ERROR(r.row().getNumElements() == ne, {}, "osirowcut", "ownership constructor"); OSIUNITTEST_ASSERT_ERROR(r.effectiveness() == 0.0, {}, "osirowcut", "ownership constructor"); // Test getting bounds OSIUNITTEST_ASSERT_ERROR(r.lb() == lb, {}, "osirowcut", "ownership constructor"); OSIUNITTEST_ASSERT_ERROR(r.ub() == ub, {}, "osirowcut", "ownership constructor"); // Test setting/getting of effectiveness r.setEffectiveness(45.); OSIUNITTEST_ASSERT_ERROR(r.effectiveness() == 45.0, {}, "osirowcut", "ownership constructor"); // Test getting elements with int* & float* vectors OSIUNITTEST_ASSERT_ERROR(r.row().getNumElements() == ne, return, "osirowcut", "ownership constructor"); bool row_ok = true; for (int i = 0; i < ne; i++) { row_ok &= r.row().getIndices()[i] == inx[i]; row_ok &= r.row().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(row_ok, {}, "osirowcut", "ownership constructor"); } // Test sense, rhs, range { { OsiRowCut r; OSIUNITTEST_ASSERT_ERROR(r.sense() == 'N', {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.rhs() == 0.0, {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.range() == 0.0, {}, "osirowcut", "sense, rhs, range"); } { OsiRowCut r; r.setLb(65.432); OSIUNITTEST_ASSERT_ERROR(r.sense() == 'G', {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.rhs() == 65.432, {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.range() == 0.0, {}, "osirowcut", "sense, rhs, range"); } { OsiRowCut r; r.setLb(65.432); r.setUb(65.432); OSIUNITTEST_ASSERT_ERROR(r.sense() == 'E', {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.rhs() == 65.432, {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.range() == 0.0, {}, "osirowcut", "sense, rhs, range"); } { OsiRowCut r; r.setUb(123.45); OSIUNITTEST_ASSERT_ERROR(r.sense() == 'L', {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.rhs() == 123.45, {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.range() == 0.0, {}, "osirowcut", "sense, rhs, range"); } { OsiRowCut r; r.setLb(65.432); r.setUb(123.45); OSIUNITTEST_ASSERT_ERROR(r.sense() == 'R', {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.rhs() == 123.45, {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(eq(r.range(), 123.45 - 65.432), {}, "osirowcut", "sense, rhs, range"); } } // Test copy constructor and assignment operator { OsiRowCut rhs; { OsiRowCut r; OsiRowCut rC1(r); OSIUNITTEST_ASSERT_ERROR(rC1.row().getNumElements() == r.row().getNumElements(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.row().getIndices() == r.row().getIndices(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.row().getElements() == r.row().getElements(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.lb() == r.lb(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.ub() == r.ub(), {}, "osirowcut", "copy constructor"); r.setLb(65.432); r.setUb(123.45); r.setRow(ne, inx, el); r.setEffectiveness(123.); OSIUNITTEST_ASSERT_ERROR(rC1.row().getNumElements() != r.row().getNumElements(), {}, "osirowcut", "modify copy"); OSIUNITTEST_ASSERT_ERROR(rC1.row().getIndices() != r.row().getIndices(), {}, "osirowcut", "modify copy"); OSIUNITTEST_ASSERT_ERROR(rC1.row().getElements() != r.row().getElements(), {}, "osirowcut", "modify copy"); OSIUNITTEST_ASSERT_ERROR(rC1.lb() != r.lb(), {}, "osirowcut", "modify copy"); OSIUNITTEST_ASSERT_ERROR(rC1.ub() != r.ub(), {}, "osirowcut", "modify copy"); OSIUNITTEST_ASSERT_ERROR(rC1.effectiveness() != r.effectiveness(), {}, "osirowcut", "modify copy"); OsiRowCut rC2(r); OSIUNITTEST_ASSERT_ERROR(rC2.row().getNumElements() == r.row().getNumElements(), return, "osirowcut", "copy constructor"); bool row_ok = true; for (int i = 0; i < r.row().getNumElements(); i++) { row_ok &= rC2.row().getIndices()[i] == r.row().getIndices()[i]; row_ok &= rC2.row().getElements()[i] == r.row().getElements()[i]; } OSIUNITTEST_ASSERT_ERROR(row_ok, {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.lb() == r.lb(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.ub() == r.ub(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.effectiveness() == r.effectiveness(), {}, "osirowcut", "copy constructor"); rhs = rC2; } // Test that rhs has correct values even though lhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(rhs.row().getNumElements() == ne, return, "osirowcut", "assignment operator"); bool row_ok = true; for (int i = 0; i < ne; i++) { row_ok &= rhs.row().getIndices()[i] == inx[i]; row_ok &= rhs.row().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(row_ok, {}, "osirowcut", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(rhs.effectiveness() == 123.0, {}, "osirowcut", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(rhs.lb() == 65.432, {}, "osirowcut", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(rhs.ub() == 123.45, {}, "osirowcut", "assignment operator"); } // Test setting row with packed vector { CoinPackedVector r; r.setVector(ne, inx, el); OsiRowCut rc; OSIUNITTEST_ASSERT_ERROR(rc.row() != r, {}, "osirowcut", "setting row with packed vector"); rc.setRow(r); OSIUNITTEST_ASSERT_ERROR(rc.row() == r, {}, "osirowcut", "setting row with packed vector"); } // Test operator== { CoinPackedVector r; r.setVector(ne, inx, el); OsiRowCut rc; rc.setRow(r); rc.setEffectiveness(2.); rc.setLb(3.0); rc.setUb(4.0); { OsiRowCut c(rc); OSIUNITTEST_ASSERT_ERROR(c == rc, {}, "osirowcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(!(c != rc), {}, "osirowcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(c < rc), {}, "osirowcut", "operator <"); OSIUNITTEST_ASSERT_ERROR(!(rc < c), {}, "osirowcut", "operator <"); OSIUNITTEST_ASSERT_ERROR(!(c > rc), {}, "osirowcut", "operator >"); OSIUNITTEST_ASSERT_ERROR(!(rc > c), {}, "osirowcut", "operator >"); } { OsiRowCut c(rc); const int ne1 = 4; int inx1[ne] = { 1, 3, 4, 7 }; double el1[ne] = { 1.2, 3.4, 5.6, 7.9 }; c.setRow(ne1, inx1, el1); OSIUNITTEST_ASSERT_ERROR(!(c == rc), {}, "osirowcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(c != rc, {}, "osirowcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(rc < c), {}, "osirowcut", "operator <"); } { OsiRowCut c(rc); c.setEffectiveness(3.); OSIUNITTEST_ASSERT_ERROR(!(c == rc), {}, "osirowcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(c != rc, {}, "osirowcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(c < rc), {}, "osirowcut", "operator <"); OSIUNITTEST_ASSERT_ERROR((rc < c), {}, "osirowcut", "operator <"); OSIUNITTEST_ASSERT_ERROR((c > rc), {}, "osirowcut", "operator >"); OSIUNITTEST_ASSERT_ERROR(!(rc > c), {}, "osirowcut", "operator >"); } { OsiRowCut c(rc); c.setLb(4.0); OSIUNITTEST_ASSERT_ERROR(!(c == rc), {}, "osirowcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(c != rc, {}, "osirowcut", "operator !="); } { OsiRowCut c(rc); c.setUb(5.0); OSIUNITTEST_ASSERT_ERROR(!(c == rc), {}, "osirowcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(c != rc, {}, "osirowcut", "operator !="); } } #ifndef COIN_NOTEST_DUPLICATE { // Test consistent OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; OSIUNITTEST_ASSERT_ERROR(imP->readMps(fn.c_str(), "mps") == 0, {}, "osirowcut", "read MPS"); OsiRowCut c; const int ne = 3; int inx[ne] = { -1, 5, 4 }; double el[ne] = { 1., 1., 1. }; c.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!c.consistent(), {}, "osirowcut", "consistent"); inx[0] = 5; #if 0 c.setRow(ne,inx,el); OSIUNITTEST_ASSERT_ERROR(!c.consistent(), {}, "osirowcut", "consistent"); #else bool errorThrown = false; try { c.setRow(ne, inx, el); } catch (CoinError e) { errorThrown = true; } OSIUNITTEST_ASSERT_ERROR(errorThrown == true, {}, "osirowcut", "duplicate entries"); #endif inx[0] = 3; c.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(c.consistent(), {}, "osirowcut", "consistent"); c.setLb(5.); c.setUb(5.); OSIUNITTEST_ASSERT_ERROR(c.consistent(), {}, "osirowcut", "consistent"); c.setLb(5.5); OSIUNITTEST_ASSERT_ERROR(c.consistent(), {}, "osirowcut", "consistent"); OSIUNITTEST_ASSERT_ERROR(c.infeasible(*imP), {}, "osirowcut", "infeasible"); delete imP; } #endif { // Test consistent(IntegerModel) method. OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; OSIUNITTEST_ASSERT_ERROR(imP->readMps(fn.c_str(), "mps") == 0, {}, "osirowcut", "read MPS"); OsiRowCut cut; const int ne = 3; int inx[ne] = { 3, 5, 4 }; double el[ne] = { 1., 1., 1. }; cut.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.consistent(), {}, "osirowcut", "consistent"); inx[0] = 7; cut.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.consistent(*imP), {}, "osirowcut", "consistent(IntegerModel)"); inx[0] = 8; cut.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.consistent(), {}, "osirowcut", "consistent(IntegerModel)"); OSIUNITTEST_ASSERT_ERROR(!cut.consistent(*imP), {}, "osirowcut", "consistent(IntegerModel)"); delete imP; } { //Test infeasible(im) method OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; OSIUNITTEST_ASSERT_ERROR(imP->readMps(fn.c_str(), "mps") == 0, {}, "osirowcut", "read MPS"); OsiRowCut cut; const int ne = 3; int inx[ne] = { 3, 5, 4 }; double el[ne] = { 1., 1., 1. }; cut.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cut.infeasible(*imP), {}, "osirowcut", "infeasible(IntegerModel)"); OsiRowCut c1; OSIUNITTEST_ASSERT_ERROR(!c1.infeasible(*imP), {}, "osirowcut", "infeasible(IntegerModel)"); OSIUNITTEST_ASSERT_ERROR(c1.consistent(), {}, "osirowcut", "consistent"); OSIUNITTEST_ASSERT_ERROR(c1.consistent(*imP), {}, "osirowcut", "consistent(IntegerModel)"); delete imP; } { //Test violation double solution[] = { 1.0, 1.0, 1.0, 2.0, 2.0, 2.0 }; OsiRowCut cut; const int ne = 3; int inx[ne] = { 3, 5, 4 }; double el[ne] = { 1., 1., 1. }; cut.setRow(ne, inx, el); cut.setUb(5.); OSIUNITTEST_ASSERT_ERROR(cut.violated(solution), {}, "osirowcut", "violation"); cut.setLb(5.); cut.setUb(10.); OSIUNITTEST_ASSERT_ERROR(!cut.violated(solution), {}, "osirowcut", "violation"); cut.setLb(6.1); OSIUNITTEST_ASSERT_ERROR(cut.violated(solution), {}, "osirowcut", "violation"); } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiCommonTest/OsiRowCutDebuggerTest.cpp0000644000175000017500000001110013414504135022277 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiRowCutDebugger.hpp" //-------------------------------------------------------------------------- // test cut debugger methods. void OsiRowCutDebuggerUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir) { CoinRelFltEq eq; // Test default constructor { OsiRowCutDebugger r; OSIUNITTEST_ASSERT_ERROR(r.integerVariable_ == NULL, {}, "osirowcutdebugger", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.knownSolution_ == NULL, {}, "osirowcutdebugger", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.numberColumns_ == 0, {}, "osirowcutdebugger", "default constructor"); } { // Get non trivial instance OsiSolverInterface *imP = baseSiP->clone(); std::string fn = mpsDir + "exmip1"; imP->readMps(fn.c_str(), "mps"); OSIUNITTEST_ASSERT_ERROR(imP->getNumRows() == 5, {}, "osirowcutdebugger", "read exmip1"); /* Activate the debugger. The garbled name here is deliberate; the debugger should isolate the portion of the string between '/' and '.' (in normal use, this would be the base file name, stripped of the prefix and extension). */ imP->activateRowCutDebugger("ab cd /x/ /exmip1.asc"); int i; // return debugger const OsiRowCutDebugger *debugger = imP->getRowCutDebugger(); OSIUNITTEST_ASSERT_ERROR(debugger != NULL, {}, "osirowcutdebugger", "return debugger"); OSIUNITTEST_ASSERT_ERROR(debugger->numberColumns_ == 8, {}, "osirowcutdebugger", "return debugger"); const bool type[] = { 0, 0, 1, 1, 0, 0, 0, 0 }; const double values[] = { 2.5, 0, 1, 1, 0.5, 3, 0, 0.26315789473684253 }; CoinPackedVector objCoefs(8, imP->getObjCoefficients()); bool type_ok = true; #if 0 for (i=0;i<8;i++) type_ok &= type[i] == debugger->integerVariable_[i]; OSIUNITTEST_ASSERT_ERROR(type_ok, {}, "osirowcutdebugger", "???"); #endif double objValue = objCoefs.dotProduct(values); double debuggerObjValue = objCoefs.dotProduct(debugger->knownSolution_); OSIUNITTEST_ASSERT_ERROR(eq(objValue, debuggerObjValue), {}, "osirowcutdebugger", "objective value"); OsiRowCutDebugger rhs; { OsiRowCutDebugger rC1(*debugger); OSIUNITTEST_ASSERT_ERROR(rC1.numberColumns_ == 8, {}, "osirowcutdebugger", "copy constructor"); type_ok = true; for (i = 0; i < 8; i++) type_ok &= type[i] == rC1.integerVariable_[i]; OSIUNITTEST_ASSERT_ERROR(type_ok, {}, "osirowcutdebugger", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(eq(objValue, objCoefs.dotProduct(rC1.knownSolution_)), {}, "osirowcutdebugger", "copy constructor"); rhs = rC1; OSIUNITTEST_ASSERT_ERROR(rhs.numberColumns_ == 8, {}, "osirowcutdebugger", "assignment operator"); type_ok = true; for (i = 0; i < 8; i++) type_ok &= type[i] == rhs.integerVariable_[i]; OSIUNITTEST_ASSERT_ERROR(type_ok, {}, "osirowcutdebugger", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(eq(objValue, objCoefs.dotProduct(rhs.knownSolution_)), {}, "osirowcutdebugger", "assignment operator"); } // Test that rhs has correct values even though lhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(rhs.numberColumns_ == 8, {}, "osirowcutdebugger", "assignment operator"); type_ok = true; for (i = 0; i < 8; i++) type_ok &= type[i] == rhs.integerVariable_[i]; OSIUNITTEST_ASSERT_ERROR(type_ok, {}, "osirowcutdebugger", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(eq(objValue, objCoefs.dotProduct(rhs.knownSolution_)), {}, "osirowcutdebugger", "assignment operator"); OsiRowCut cut[2]; const int ne = 3; int inx[ne] = { 0, 2, 3 }; double el[ne] = { 1., 1., 1. }; cut[0].setRow(ne, inx, el); cut[0].setUb(5.); el[1] = 5; cut[1].setRow(ne, inx, el); cut[1].setUb(5); OsiCuts cs; cs.insert(cut[0]); cs.insert(cut[1]); OSIUNITTEST_ASSERT_ERROR(!debugger->invalidCut(cut[0]), {}, "osirowcutdebugger", "recognize (in)valid cut"); OSIUNITTEST_ASSERT_ERROR(debugger->invalidCut(cut[1]), {}, "osirowcutdebugger", "recognize (in)valid cut"); OSIUNITTEST_ASSERT_ERROR(debugger->validateCuts(cs, 0, 2) == 1, {}, "osirowcutdebugger", "recognize (in)valid cut"); OSIUNITTEST_ASSERT_ERROR(debugger->validateCuts(cs, 0, 1) == 0, {}, "osirowcutdebugger", "recognize (in)valid cut"); delete imP; } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiCommonTest/Makefile.am0000644000175000017500000000346612243462564017454 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1942 2013-11-21 19:56:36Z stefan $ # Author: Lou Hafer SFU 2010-11-20 AUTOMAKE_OPTIONS = foreign ######################################################################## # Common Test library for Osi # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in $libdir lib_LTLIBRARIES = libOsiCommonTests.la # List all source files for this library, including headers libOsiCommonTests_la_SOURCES = \ OsiCommonTests.hpp \ OsiColCutTest.cpp \ OsiCutsTest.cpp \ OsiRowCutDebuggerTest.cpp \ OsiRowCutTest.cpp \ OsiSimplexAPITest.cpp \ OsiNetlibTest.cpp \ OsiUnitTestUtils.cpp \ OsiSolverInterfaceTest.cpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiCommonTests_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la endif # Libtool flags libOsiCommonTests_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, includecoindir = $(includedir)/coin includecoin_HEADERS = OsiUnitTests.hpp Vol-1.5.4/Osi/src/OsiCommonTest/OsiUnitTests.hpp0000644000175000017500000004052413414504135020532 0ustar sudipsudip// Copyright (C) 2010 // All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /*! \file OsiUnitTests.hpp Utility methods for OSI unit tests. */ #ifndef OSISOLVERINTERFACETEST_HPP_ #define OSISOLVERINTERFACETEST_HPP_ #include #include #include #include #include #include #include #include class OsiSolverInterface; class CoinPackedVectorBase; /** A function that tests that a lot of problems given in MPS files (mostly the NETLIB problems) solve properly with all the specified solvers. * * The routine creates a vector of NetLib problems (problem name, objective, * various other characteristics), and a vector of solvers to be tested. * * Each solver is run on each problem. The run is deemed successful if the * solver reports the correct problem size after loading and returns the * correct objective value after optimization. * If multiple solvers are available, the results are compared pairwise against * the results reported by adjacent solvers in the solver vector. Due to * limitations of the volume solver, it must be the last solver in vecEmptySiP. */ void OsiSolverInterfaceMpsUnitTest(const std::vector< OsiSolverInterface * > &vecEmptySiP, const std::string &mpsDir); /** A function that tests the methods in the OsiSolverInterface class. * Some time ago, if this method is compiled with optimization, * the compilation took 10-15 minutes and the machine pages (has 256M core memory!)... */ void OsiSolverInterfaceCommonUnitTest(const OsiSolverInterface *emptySi, const std::string &mpsDir, const std::string &netlibDir); /** A function that tests the methods in the OsiColCut class. */ void OsiColCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir); /** A function that tests the methods in the OsiRowCut class. */ void OsiRowCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir); /** A function that tests the methods in the OsiRowCutDebugger class. */ void OsiRowCutDebuggerUnitTest(const OsiSolverInterface *siP, const std::string &mpsDir); /** A function that tests the methods in the OsiCuts class. */ void OsiCutsUnitTest(); /// A namespace so we can define a few `global' variables to use during tests. namespace OsiUnitTest { class TestOutcomes; /*! \brief Verbosity level of unit tests 0 (default) for minimal output; larger numbers produce more output */ extern unsigned int verbosity; /*! \brief Behaviour on failing a test - 0 (= default) continue - 1 press any key to continue - 2 stop with abort() */ extern unsigned int haltonerror; /*! \brief Test outcomes A global TestOutcomes object to store test outcomes during the run of the unit test for an OSI. */ extern TestOutcomes outcomes; /*! \brief Print an error message Formatted as "XxxSolverInterface testing issue: message" where Xxx is the string provided as \p solverName. Flushes std::cout before printing to std::cerr. */ void failureMessage(const std::string &solverName, const std::string &message); /// \overload void failureMessage(const OsiSolverInterface &si, const std::string &message); /*! \brief Print an error message, specifying the test name and condition Formatted as "XxxSolverInterface testing issue: testname failed: testcond" where Xxx is the OsiStrParam::OsiSolverName parameter of the \p si. Flushes std::cout before printing to std::cerr. */ void failureMessage(const std::string &solverName, const std::string &testname, const std::string &testcond); /// \overload void failureMessage(const OsiSolverInterface &si, const std::string &testname, const std::string &testcond); /*! \brief Print a message. Prints the message as given. Flushes std::cout before printing to std::cerr. */ void testingMessage(const char *const msg); /*! \brief Utility method to check equality Tests for equality using CoinRelFltEq with tolerance \p tol. Understands the notion of solver infinity and obtains the value for infinity from the solver interfaces supplied as parameters. */ bool equivalentVectors(const OsiSolverInterface *si1, const OsiSolverInterface *si2, double tol, const double *v1, const double *v2, int size); /*! \brief Compare two problems for equality Compares the problems held in the two solvers: constraint matrix, row and column bounds, column type, and objective. Rows are checked using upper and lower bounds and using sense, bound, and range. */ bool compareProblems(OsiSolverInterface *osi1, OsiSolverInterface *osi2); /*! \brief Compare a packed vector with an expanded vector Checks that all values present in the packed vector are present in the full vector and checks that there are no extra entries in the full vector. Uses CoinRelFltEq with the default tolerance. */ bool isEquivalent(const CoinPackedVectorBase &pv, int n, const double *fv); /*! \brief Process command line parameters. An unrecognised keyword which is not in the \p ignorekeywords map will trigger the help message and a return value of false. For each keyword in \p ignorekeywords, you can specify the number of following parameters that should be ignored. This should be replaced with the one of the standard CoinUtils parameter mechanisms. */ bool processParameters(int argc, const char **argv, std::map< std::string, std::string > &parms, const std::map< std::string, int > &ignorekeywords = std::map< std::string, int >()); /// A single test outcome record. class TestOutcome { public: /// Test result typedef enum { NOTE = 0, PASSED = 1, WARNING = 2, ERROR = 3, LAST = 4 } SeverityLevel; /// Print strings for SeverityLevel static std::string SeverityLevelName[LAST]; /// Name of component under test std::string component; /// Name of test std::string testname; /// Condition being tested std::string testcond; /// Test result SeverityLevel severity; /// Set to true if problem is expected bool expected; /// Name of code file where test executed std::string filename; /// Line number in code file where test executed int linenumber; /// Standard constructor TestOutcome(const std::string &comp, const std::string &tst, const char *cond, SeverityLevel sev, const char *file, int line, bool exp = false) : component(comp) , testname(tst) , testcond(cond) , severity(sev) , expected(exp) , filename(file) , linenumber(line) { } /// Print the test outcome void print() const; }; /// Utility class to maintain a list of test outcomes. class TestOutcomes : public std::list< TestOutcome > { public: /// Add an outcome to the list void add(std::string comp, std::string tst, const char *cond, TestOutcome::SeverityLevel sev, const char *file, int line, bool exp = false) { push_back(TestOutcome(comp, tst, cond, sev, file, line, exp)); } /*! \brief Add an outcome to the list Get the component name from the solver interface. */ void add(const OsiSolverInterface &si, std::string tst, const char *cond, TestOutcome::SeverityLevel sev, const char *file, int line, bool exp = false); /// Print the list of outcomes void print() const; /*! \brief Count total and expected outcomes at given severity level Given a severity level, walk the list of outcomes and count the total number of outcomes at this severity level and the number expected. */ void getCountBySeverity(TestOutcome::SeverityLevel sev, int &total, int &expected) const; }; /// Convert parameter to a string (stringification) #define OSIUNITTEST_QUOTEME_(x) #x /// Convert to string with one level of expansion of the parameter #define OSIUNITTEST_QUOTEME(x) OSIUNITTEST_QUOTEME_(x) template < typename Component > bool OsiUnitTestAssertSeverityExpected( bool condition, const char *condition_str, const char *filename, int line, const Component &component, const std::string &testname, TestOutcome::SeverityLevel severity, bool expected) { if (condition) { OsiUnitTest::outcomes.add(component, testname, condition_str, OsiUnitTest::TestOutcome::PASSED, filename, line, false); if (OsiUnitTest::verbosity >= 2) { std::ostringstream successmsg; successmsg << __FILE__ << ":" << __LINE__ << ": " << testname << " (condition \'" << condition_str << "\') passed.\n"; OsiUnitTest::testingMessage(successmsg.str().c_str()); } return true; } OsiUnitTest::outcomes.add(component, testname, condition_str, severity, filename, line, expected); OsiUnitTest::failureMessage(component, testname, condition_str); switch (OsiUnitTest::haltonerror) { case 2: { if (severity >= OsiUnitTest::TestOutcome::ERROR) std::abort(); break; } case 1: { std::cout << std::endl << "press any key to continue..." << std::endl; std::getchar(); break; } default:; } return false; } /// Add a test outcome to the list held in OsiUnitTest::outcomes #define OSIUNITTEST_ADD_OUTCOME(component, testname, testcondition, severity, expected) \ OsiUnitTest::outcomes.add(component, testname, testcondition, severity, \ __FILE__, __LINE__, expected) /*! \brief Test for a condition and record the result Test \p condition and record the result in OsiUnitTest::outcomes. If it succeeds, record the result as OsiUnitTest::TestOutcome::PASSED and print a message for OsiUnitTest::verbosity >= 2. If it fails, record the test as failed with \p severity and \p expected and react as specified by OsiUnitTest::haltonerror. \p failurecode is executed when failure is not fatal. */ #define OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(condition, failurecode, component, \ testname, severity, expected) \ { \ if (!OsiUnitTestAssertSeverityExpected(condition, #condition, \ __FILE__, __LINE__, component, testname, severity, expected)) { \ failurecode; \ } \ } /*! \brief Perform a test with severity OsiUnitTest::TestOutcome::ERROR, failure not expected. */ #define OSIUNITTEST_ASSERT_ERROR(condition, failurecode, component, testname) \ OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(condition, failurecode, component, testname, \ OsiUnitTest::TestOutcome::ERROR, false) /*! \brief Perform a test with severity OsiUnitTest::TestOutcome::WARNING, failure not expected. */ #define OSIUNITTEST_ASSERT_WARNING(condition, failurecode, component, testname) \ OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(condition, failurecode, component, testname, \ OsiUnitTest::TestOutcome::WARNING, false) /*! \brief Perform a test surrounded by a try/catch block \p trycode is executed in a try/catch block; if there's no throw the test is deemed to have succeeded and is recorded in OsiUnitTest::outcomes with status OsiUnitTest::TestOutcome::PASSED. If the \p trycode throws a CoinError, the failure is recorded with status \p severity and \p expected and the value of OsiUnitTest::haltonerror is consulted. If the failure is not fatal, \p catchcode is executed. If any other error is thrown, the failure is recorded as for a CoinError and \p catchcode is executed (haltonerror is not consulted). */ #define OSIUNITTEST_CATCH_SEVERITY_EXPECTED(trycode, catchcode, component, testname, \ severity, expected) \ { \ try { \ trycode; \ OSIUNITTEST_ADD_OUTCOME(component, testname, #trycode " did not throw exception", \ OsiUnitTest::TestOutcome::PASSED, false); \ if (OsiUnitTest::verbosity >= 2) { \ std::string successmsg(__FILE__ ":" OSIUNITTEST_QUOTEME(__LINE__) ": "); \ successmsg = successmsg + testname; \ successmsg = successmsg + " (code \'" #trycode "\') did not throw exception"; \ successmsg = successmsg + ".\n"; \ OsiUnitTest::testingMessage(successmsg.c_str()); \ } \ } catch (CoinError & e) { \ std::stringstream errmsg; \ errmsg << #trycode " threw CoinError: " << e.message(); \ if (e.className().length() > 0) \ errmsg << " in " << e.className(); \ if (e.methodName().length() > 0) \ errmsg << " in " << e.methodName(); \ if (e.lineNumber() >= 0) \ errmsg << " at " << e.fileName() << ":" << e.lineNumber(); \ OSIUNITTEST_ADD_OUTCOME(component, testname, errmsg.str().c_str(), \ severity, expected); \ OsiUnitTest::failureMessage(component, testname, errmsg.str().c_str()); \ switch (OsiUnitTest::haltonerror) { \ case 2: { \ if (severity >= OsiUnitTest::TestOutcome::ERROR) \ abort(); \ break; \ } \ case 1: { \ std::cout << std::endl \ << "press any key to continue..." << std::endl; \ getchar(); \ break; \ } \ default:; \ } \ catchcode; \ } catch (...) { \ std::string errmsg; \ errmsg = #trycode; \ errmsg = errmsg + " threw unknown exception"; \ OSIUNITTEST_ADD_OUTCOME(component, testname, errmsg.c_str(), severity, false); \ OsiUnitTest::failureMessage(component, testname, errmsg.c_str()); \ catchcode; \ } \ } /*! \brief Perform a try/catch test with severity OsiUnitTest::TestOutcome::ERROR, failure not expected. */ #define OSIUNITTEST_CATCH_ERROR(trycode, catchcode, component, testname) \ OSIUNITTEST_CATCH_SEVERITY_EXPECTED(trycode, catchcode, component, testname, OsiUnitTest::TestOutcome::ERROR, false) /*! \brief Perform a try/catch test with severity OsiUnitTest::TestOutcome::WARNING, failure not expected. */ #define OSIUNITTEST_CATCH_WARNING(trycode, catchcode, component, testname) \ OSIUNITTEST_CATCH_SEVERITY_EXPECTED(trycode, catchcode, component, testname, OsiUnitTest::TestOutcome::WARNING, false) } // end namespace OsiUnitTest #endif /*OSISOLVERINTERFACETEST_HPP_*/ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiCommonTest/OsiNetlibTest.cpp0000644000175000017500000003256513433361417020653 0ustar sudipsudip/* Copyright (C) 2000 -- 2010, Lou Hafer, International Business Machines, and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiConfig.h" #include "CoinTime.hpp" #include "CoinFloatEqual.hpp" /* #include #include #include #include #include #include #include */ #include "OsiSolverInterface.hpp" /*! \brief Run solvers on NetLib problems. The routine creates a vector of NetLib problems (problem name, objective, various other characteristics), and a vector of solvers to be tested. Each solver is run on each problem. The run is deemed successful if the solver reports the correct problem size after loading and returns the correct objective value after optimization. If multiple solvers are available, the results are compared pairwise against the results reported by adjacent solvers in the solver vector. Due to limitations of the volume solver, it must be the last solver in vecEmptySiP. */ void OsiSolverInterfaceMpsUnitTest(const std::vector< OsiSolverInterface * > &vecEmptySiP, const std::string &mpsDir) { int i; unsigned int m; /* Vectors to hold test problem names and characteristics. The objective value after optimization (objValue) must agree to the specified tolerance (objValueTol). */ std::vector< std::string > mpsName; std::vector< bool > minObj; std::vector< int > nRows; std::vector< int > nCols; std::vector< double > objValue; std::vector< double > objValueTol; /* And a macro to make the vector creation marginally readable. */ #define PUSH_MPS(zz_mpsName_zz, zz_minObj_zz, \ zz_nRows_zz, zz_nCols_zz, zz_objValue_zz, zz_objValueTol_zz) \ mpsName.push_back(zz_mpsName_zz); \ minObj.push_back(zz_minObj_zz); \ nRows.push_back(zz_nRows_zz); \ nCols.push_back(zz_nCols_zz); \ objValueTol.push_back(zz_objValueTol_zz); \ objValue.push_back(zz_objValue_zz); /* Load up the problem vector. Note that the row counts here include the objective function. */ PUSH_MPS("25fv47", true, 822, 1571, 5.5018458883E+03, 1.0e-10) PUSH_MPS("80bau3b", true, 2263, 9799, 9.8722419241E+05, 1.e-10) PUSH_MPS("adlittle", true, 57, 97, 2.2549496316e+05, 1.e-10) PUSH_MPS("afiro", true, 28, 32, -4.6475314286e+02, 1.e-10) PUSH_MPS("agg", true, 489, 163, -3.5991767287e+07, 1.e-10) PUSH_MPS("agg2", true, 517, 302, -2.0239252356e+07, 1.e-10) PUSH_MPS("agg3", true, 517, 302, 1.0312115935e+07, 1.e-10) PUSH_MPS("bandm", true, 306, 472, -1.5862801845e+02, 1.e-10) PUSH_MPS("beaconfd", true, 174, 262, 3.3592485807e+04, 1.e-10) PUSH_MPS("blend", true, 75, 83, -3.0812149846e+01, 1.e-10) PUSH_MPS("bnl1", true, 644, 1175, 1.9776295615E+03, 1.e-10) PUSH_MPS("bnl2", true, 2325, 3489, 1.8112365404e+03, 1.e-10) PUSH_MPS("boeing1", true, /*351*/ 352, 384, -3.3521356751e+02, 1.e-10) PUSH_MPS("boeing2", true, 167, 143, -3.1501872802e+02, 1.e-10) PUSH_MPS("bore3d", true, 234, 315, 1.3730803942e+03, 1.e-10) PUSH_MPS("brandy", true, 221, 249, 1.5185098965e+03, 1.e-10) PUSH_MPS("capri", true, 272, 353, 2.6900129138e+03, 1.e-10) PUSH_MPS("cycle", true, 1904, 2857, -5.2263930249e+00, 1.e-9) PUSH_MPS("czprob", true, 930, 3523, 2.1851966989e+06, 1.e-10) PUSH_MPS("d2q06c", true, 2172, 5167, 122784.21557456, 1.e-7) PUSH_MPS("d6cube", true, 416, 6184, 3.1549166667e+02, 1.e-8) PUSH_MPS("degen2", true, 445, 534, -1.4351780000e+03, 1.e-10) PUSH_MPS("degen3", true, 1504, 1818, -9.8729400000e+02, 1.e-10) PUSH_MPS("dfl001", true, 6072, 12230, 1.1266396047E+07, 1.e-5) PUSH_MPS("e226", true, 224, 282, (-18.751929066 + 7.113), 1.e-10) // NOTE: Objective function has constant of 7.113 PUSH_MPS("etamacro", true, 401, 688, -7.5571521774e+02, 1.e-6) PUSH_MPS("fffff800", true, 525, 854, 5.5567961165e+05, 1.e-6) PUSH_MPS("finnis", true, 498, 614, 1.7279096547e+05, 1.e-6) PUSH_MPS("fit1d", true, 25, 1026, -9.1463780924e+03, 1.e-10) PUSH_MPS("fit1p", true, 628, 1677, 9.1463780924e+03, 1.e-10) PUSH_MPS("fit2d", true, 26, 10500, -6.8464293294e+04, 1.e-10) PUSH_MPS("fit2p", true, 3001, 13525, 6.8464293232e+04, 1.e-9) PUSH_MPS("forplan", true, 162, 421, -6.6421873953e+02, 1.e-6) PUSH_MPS("ganges", true, 1310, 1681, -1.0958636356e+05, 1.e-5) PUSH_MPS("gfrd-pnc", true, 617, 1092, 6.9022359995e+06, 1.e-10) PUSH_MPS("greenbea", true, 2393, 5405, /*-7.2462405908e+07*/ -72555248.129846, 1.e-10) PUSH_MPS("greenbeb", true, 2393, 5405, /*-4.3021476065e+06*/ -4302260.2612066, 1.e-10) PUSH_MPS("grow15", true, 301, 645, -1.0687094129e+08, 1.e-10) PUSH_MPS("grow22", true, 441, 946, -1.6083433648e+08, 1.e-10) PUSH_MPS("grow7", true, 141, 301, -4.7787811815e+07, 1.e-10) PUSH_MPS("israel", true, 175, 142, -8.9664482186e+05, 1.e-10) PUSH_MPS("kb2", true, 44, 41, -1.7499001299e+03, 1.e-10) PUSH_MPS("lotfi", true, 154, 308, -2.5264706062e+01, 1.e-10) PUSH_MPS("maros", true, 847, 1443, -5.8063743701e+04, 1.e-10) PUSH_MPS("maros-r7", true, 3137, 9408, 1.4971851665e+06, 1.e-10) PUSH_MPS("modszk1", true, 688, 1620, 3.2061972906e+02, 1.e-10) PUSH_MPS("nesm", true, 663, 2923, 1.4076073035e+07, 1.e-5) PUSH_MPS("perold", true, 626, 1376, -9.3807580773e+03, 1.e-6) PUSH_MPS("pilot", true, 1442, 3652, /*-5.5740430007e+02*/ -557.48972927292, 5.e-5) PUSH_MPS("pilot4", true, 411, 1000, -2.5811392641e+03, 1.e-6) PUSH_MPS("pilot87", true, 2031, 4883, 3.0171072827e+02, 1.e-4) PUSH_MPS("pilotnov", true, 976, 2172, -4.4972761882e+03, 1.e-10) // ?? PUSH_MPS("qap8",true,913,1632,2.0350000000e+02,1.e-10) // ?? PUSH_MPS("qap12",true,3193,8856,5.2289435056e+02,1.e-10) // ?? PUSH_MPS("qap15",true,6331,22275,1.0409940410e+03,1.e-10) PUSH_MPS("recipe", true, 92, 180, -2.6661600000e+02, 1.e-10) PUSH_MPS("sc105", true, 106, 103, -5.2202061212e+01, 1.e-10) PUSH_MPS("sc205", true, 206, 203, -5.2202061212e+01, 1.e-10) PUSH_MPS("sc50a", true, 51, 48, -6.4575077059e+01, 1.e-10) PUSH_MPS("sc50b", true, 51, 48, -7.0000000000e+01, 1.e-10) PUSH_MPS("scagr25", true, 472, 500, -1.4753433061e+07, 1.e-10) PUSH_MPS("scagr7", true, 130, 140, -2.3313892548e+06, 1.e-6) PUSH_MPS("scfxm1", true, 331, 457, 1.8416759028e+04, 1.e-10) PUSH_MPS("scfxm2", true, 661, 914, 3.6660261565e+04, 1.e-10) PUSH_MPS("scfxm3", true, 991, 1371, 5.4901254550e+04, 1.e-10) PUSH_MPS("scorpion", true, 389, 358, 1.8781248227e+03, 1.e-10) PUSH_MPS("scrs8", true, 491, 1169, 9.0429998619e+02, 1.e-5) PUSH_MPS("scsd1", true, 78, 760, 8.6666666743e+00, 1.e-10) PUSH_MPS("scsd6", true, 148, 1350, 5.0500000078e+01, 1.e-10) PUSH_MPS("scsd8", true, 398, 2750, 9.0499999993e+02, 1.e-8) PUSH_MPS("sctap1", true, 301, 480, 1.4122500000e+03, 1.e-10) PUSH_MPS("sctap2", true, 1091, 1880, 1.7248071429e+03, 1.e-10) PUSH_MPS("sctap3", true, 1481, 2480, 1.4240000000e+03, 1.e-10) PUSH_MPS("seba", true, 516, 1028, 1.5711600000e+04, 1.e-10) PUSH_MPS("share1b", true, 118, 225, -7.6589318579e+04, 1.e-10) PUSH_MPS("share2b", true, 97, 79, -4.1573224074e+02, 1.e-10) PUSH_MPS("shell", true, 537, 1775, 1.2088253460e+09, 1.e-10) PUSH_MPS("ship04l", true, 403, 2118, 1.7933245380e+06, 1.e-10) PUSH_MPS("ship04s", true, 403, 1458, 1.7987147004e+06, 1.e-10) PUSH_MPS("ship08l", true, 779, 4283, 1.9090552114e+06, 1.e-10) PUSH_MPS("ship08s", true, 779, 2387, 1.9200982105e+06, 1.e-10) PUSH_MPS("ship12l", true, 1152, 5427, 1.4701879193e+06, 1.e-10) PUSH_MPS("ship12s", true, 1152, 2763, 1.4892361344e+06, 1.e-10) PUSH_MPS("sierra", true, 1228, 2036, 1.5394362184e+07, 1.e-10) PUSH_MPS("stair", true, 357, 467, -2.5126695119e+02, 1.e-10) PUSH_MPS("standata", true, 360, 1075, 1.2576995000e+03, 1.e-10) // GUB PUSH_MPS("standgub",true,362,1184,1257.6995,1.e-10) PUSH_MPS("standmps", true, 468, 1075, 1.4060175000E+03, 1.e-10) PUSH_MPS("stocfor1", true, 118, 111, -4.1131976219E+04, 1.e-10) PUSH_MPS("stocfor2", true, 2158, 2031, -3.9024408538e+04, 1.e-10) // ?? PUSH_MPS("stocfor3",true,16676,15695,-3.9976661576e+04,1.e-10) // ?? PUSH_MPS("truss",true,1001,8806,4.5881584719e+05,1.e-10) PUSH_MPS("tuff", true, 334, 587, 2.9214776509e-01, 1.e-10) PUSH_MPS("vtpbase", true, 199, 203, 1.2983146246e+05, 1.e-10) PUSH_MPS("wood1p", true, 245, 2594, 1.4429024116e+00, 5.e-5) PUSH_MPS("woodw", true, 1099, 8405, 1.3044763331E+00, 1.e-10) #undef PUSH_MPS const unsigned int numProblems = static_cast< unsigned int >(mpsName.size()); /* Create vectors to hold solver interfaces, the name of each solver interface, the current state of processing, and statistics about the number of problems solved and the time taken. */ const int numSolvers = static_cast< int >(vecEmptySiP.size()); std::vector< OsiSolverInterface * > vecSiP(numSolvers); std::vector< std::string > siName(numSolvers); std::vector< int > siStage(numSolvers); std::vector< int > numProbSolved(numSolvers); std::vector< double > timeTaken(numSolvers); for (i = 0; i < numSolvers; i++) { siName[i] = "unknown"; numProbSolved[i] = 0; timeTaken[i] = 0.0; } /* For each problem, create a fresh clone of the `empty' solvers from vecEmptySiP, then proceed in stages: read the MPS file, solve the problem, check the solution. If there are multiple solvers in vecSiP, the results of each solver are compared with its neighbors in the vector. */ for (m = 0; m < numProblems; m++) { std::cout << " processing mps file: " << mpsName[m] << " (" << m + 1 << " out of " << numProblems << ")" << std::endl; /* Stage 0: Create fresh solver clones. */ int solversReadMpsFile = 0; for (i = numSolvers - 1; i >= 0; --i) { vecSiP[i] = vecEmptySiP[i]->clone(); vecSiP[i]->getStrParam(OsiSolverName, siName[i]); siStage[i] = 0; } /* Stage 1: Read the MPS file into each solver interface. As a basic check, make sure the size of the constraint matrix is correct. */ for (i = 0; i < numSolvers; i++) { std::string fn = mpsDir + mpsName[m]; if (vecSiP[i]->readMps(fn.c_str(), "mps") != 0) OSIUNITTEST_ADD_OUTCOME(*vecSiP[i], "netlib " + mpsName[m], "reading MPS file failed", OsiUnitTest::TestOutcome::ERROR, false); if (minObj[m]) vecSiP[i]->setObjSense(1.0); else vecSiP[i]->setObjSense(-1.0); int nr = vecSiP[i]->getNumRows(); int nc = vecSiP[i]->getNumCols(); if (nr == nRows[m] - 1 && nc == nCols[m]) { siStage[i] = 1; solversReadMpsFile++; } else OSIUNITTEST_ADD_OUTCOME(*vecSiP[i], "netlib " + mpsName[m], "number of rows and columns wrong", OsiUnitTest::TestOutcome::ERROR, false); } /* If more than one solver succeeded, compare representations. */ if (solversReadMpsFile > 0) { // Find an initial pair to compare int s1; for (s1 = 0; s1 < numSolvers - 1 && siStage[s1] < 1; s1++) ; int s2; for (s2 = s1 + 1; s2 < numSolvers && siStage[s2] < 1; s2++) ; while (s2 < numSolvers) { std::cout << " comparing problem representation for " << siName[s1] << " and " << siName[s2] << " ..."; if (OsiUnitTest::compareProblems(vecSiP[s1], vecSiP[s2])) std::cout << " ok." << std::endl; s1 = s2; for (s2++; s2 < numSolvers && siStage[s2] < 1; s2++) ; } } /* Stage 2: Ask each solver that successfully read the problem to solve it, then check the return code and objective. */ for (i = 0; i < numSolvers; ++i) { if (siStage[i] < 1) continue; double startTime = CoinCpuTime(); OSIUNITTEST_CATCH_ERROR(vecSiP[i]->initialSolve(), continue, *vecSiP[i], "netlib " + mpsName[m]); double timeOfSolution = CoinCpuTime() - startTime; OSIUNITTEST_ASSERT_ERROR(vecSiP[i]->isProvenOptimal(), {}, *vecSiP[i], "netlib " + mpsName[m]); if (vecSiP[i]->isProvenOptimal()) { double soln = vecSiP[i]->getObjValue(); CoinRelFltEq eq(objValueTol[m]); OSIUNITTEST_ASSERT_ERROR(eq(soln, objValue[m]), std::cerr << soln << " != " << objValue[m] << "; error = " << fabs(objValue[m] - soln), *vecSiP[i], "netlib " + mpsName[m]); if (eq(soln, objValue[m])) { std::cout << " " << siName[i] << " " << soln << " = " << objValue[m] << ", " << vecSiP[i]->getIterationCount() << " iters; okay"; numProbSolved[i]++; } std::cout << " - took " << timeOfSolution << " seconds." << std::endl; timeTaken[i] += timeOfSolution; } else { std::cout.flush(); std::cerr << " " << siName[i] << "; error "; if (vecSiP[i]->isProvenPrimalInfeasible()) std::cerr << "primal infeasible"; else if (vecSiP[i]->isIterationLimitReached()) std::cerr << "iteration limit"; else if (vecSiP[i]->isAbandoned()) std::cerr << "abandoned"; else std::cerr << "unknown"; } } /* Delete the used solver interfaces so we can reload fresh clones for the next problem. */ for (i = 0; i < numSolvers; i++) delete vecSiP[i]; } /* Print a summary for each solver. */ for (i = 0; i < numSolvers; i++) { std::cout << siName[i] << " solved " << numProbSolved[i] << " out of " << numProblems << " and took " << timeTaken[i] << " seconds." << std::endl; } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiCommonTest/OsiUnitTestUtils.cpp0000644000175000017500000004267413414504135021373 0ustar sudipsudip/* Copyright (C) 2000 -- 2010, Lou Hafer, International Business Machines, and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiConfig.h" /* #include "CoinTime.hpp" #include #include #include #include #include #include #include */ #include "OsiSolverInterface.hpp" #include "CoinFloatEqual.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" /* #include "CoinPackedVector.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiRowCut.hpp" #include "OsiCuts.hpp" #include "OsiPresolve.hpp" */ namespace OsiUnitTest { unsigned int verbosity = 0; unsigned int haltonerror = 0; TestOutcomes outcomes; //############################################################################# // Helper routines for messages. //############################################################################# /* If anyone is feeling ambitious, it'd be a really good idea to handle i/o for the unittest by way of a standard CoinMessageHandler. Might require a bit of tweaking in CoinMessageHandler. */ // A helper function to write out a message about a test failure void failureMessage(const std::string &solverName, const std::string &message) { std::string messageText; messageText = "*** "; messageText += solverName + "SolverInterface testing issue: "; messageText += message; // flush stdout so that error messages are properly interleaved. std::cout.flush(); std::cerr << messageText.c_str() << std::endl; } void failureMessage(const OsiSolverInterface &si, const std::string &message) { std::string solverName; si.getStrParam(OsiSolverName, solverName); failureMessage(solverName, message); } void failureMessage(const std::string &solverName, const std::string &testname, const std::string &testcond) { std::string messageText; messageText = "*** "; messageText += solverName + "SolverInterface testing issue: "; messageText += testname + " failed: " + testcond; // flush stdout so that error messages are properly interleaved. std::cout.flush(); std::cerr << messageText.c_str() << std::endl; } void failureMessage(const OsiSolverInterface &si, const std::string &testname, const std::string &testcond) { std::string solverName; si.getStrParam(OsiSolverName, solverName); failureMessage(solverName, testname, testcond); } /* Display message on stderr. Flush cout buffer before printing the message, so that output comes out in order in spite of buffered cout. */ void testingMessage(const char *const msg) { std::cout.flush(); std::cerr << msg; } //############################################################################# // Vector comparison utility. //############################################################################# // A helper function to compare the equivalence of two vectors bool equivalentVectors(const OsiSolverInterface *si1, const OsiSolverInterface *si2, double tol, const double *v1, const double *v2, int size) { bool retVal = true; double infty1 = si1->getInfinity(); double infty2 = si2->getInfinity(); CoinRelFltEq eq(tol); int i; /* Both values must be the same infinity or equal within the specified tolerance. Otherwise we have failure. */ for (i = 0; i < size; i++) { if (!(v1[i] <= -infty1 && v2[i] <= -infty2) && !(v1[i] >= infty1 && v2[i] >= infty2) && !eq(v1[i], v2[i])) { std::cout.flush(); std::cerr << "eq " << i << " " << v1[i] << " " << v2[i] << std::endl; retVal = false; break; } } return retVal; } /* Check a packed vector for equality with a full vector. The algorithm is to first confirm that the elements of the packed vector are present in the full vector, then scan the full vector to make sure there are no additional nonzeros. */ bool isEquivalent(const CoinPackedVectorBase &pv, int n, const double *fv) { int pvCnt = pv.getNumElements(); const int *indices = pv.getIndices(); const double *elems = pv.getElements(); bool retval = true; CoinRelFltEq eq; for (int v = 0; v < pvCnt; v++) { int k = indices[v]; if (!eq(elems[v], fv[k])) { retval = false; break; } } if (retval == true) { int fvCnt = 0; for (int k = 0; k < n; k++) { if (!eq(fv[k], 0.0)) fvCnt++; } if (fvCnt != pvCnt) retval = false; } return (retval); } /* Method to compare the problem representation held by a pair of solver interfaces. */ bool compareProblems(OsiSolverInterface *osi1, OsiSolverInterface *osi2) { bool areEquiv = true; std::string si1Name, si2Name; osi1->getStrParam(OsiSolverName, si1Name); osi2->getStrParam(OsiSolverName, si2Name); // Compare row and column counts int colCnt = 0; if (osi1->getNumCols() != osi2->getNumCols()) { std::cerr << " Unequal column count, " << si1Name << " vs. " << si2Name << std::endl; return (false); } else { colCnt = osi1->getNumCols(); } int rowCnt = 0; if (osi1->getNumRows() != osi2->getNumRows()) { std::cerr << " Unequal row count, " << si1Name << " vs. " << si2Name << std::endl; return (false); } else { rowCnt = osi1->getNumRows(); } // Compare column bounds areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getColLower(), osi2->getColLower(), colCnt); if (areEquiv == false) { std::cerr << " Unequal column lower bounds, " << si1Name << " vs. " << si2Name << std::endl; return (false); } areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getColUpper(), osi2->getColUpper(), colCnt); if (areEquiv == false) { std::cerr << " Unequal column upper bounds, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare row bounds areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getRowLower(), osi2->getRowLower(), rowCnt); if (areEquiv == false) { std::cerr << " Unequal row lower bounds, " << si1Name << " vs. " << si2Name << std::endl; return (false); } areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getRowUpper(), osi2->getRowUpper(), rowCnt); if (areEquiv == false) { std::cerr << " Unequal row lower bounds, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare row sense { const char *rowSense1 = osi1->getRowSense(); const char *rowSense2 = osi2->getRowSense(); areEquiv = true; for (int r = 0; r < rowCnt && areEquiv == true; r++) { if (rowSense1[r] != rowSense2[r]) { areEquiv = false; } } if (areEquiv == false) { std::cerr << " Unequal row sense, " << si1Name << " vs. " << si2Name << std::endl; return (false); } } // Compare row rhs areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getRightHandSide(), osi2->getRightHandSide(), rowCnt); if (areEquiv == false) { std::cerr << " Unequal right-hand-side, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare range areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getRowRange(), osi2->getRowRange(), rowCnt); if (areEquiv == false) { std::cerr << " Unequal row range, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare objective sense if (osi1->getObjSense() != osi2->getObjSense()) { std::cerr << " Unequal objective sense, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare objective coefficients areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getObjCoefficients(), osi2->getObjCoefficients(), colCnt); if (areEquiv == false) { std::cerr << " Unequal objective coefficients, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare number of elements if (osi1->getNumElements() != osi2->getNumElements()) { std::cerr << " Unequal number of constraint matrix coefficients, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare constraint matrix, for both row-major and column-major orderings { const CoinPackedMatrix *rmm1 = osi1->getMatrixByRow(); const CoinPackedMatrix *rm = osi2->getMatrixByRow(); if (!rmm1->isEquivalent(*rm)) { std::cerr << " Unequal constraint matrix, row-major ordering, " << si1Name << " vs. " << si2Name << std::endl; return (false); } const CoinPackedMatrix *cmm1 = osi1->getMatrixByCol(); const CoinPackedMatrix *cm = osi2->getMatrixByCol(); if (!cmm1->isEquivalent(*cm)) { std::cerr << " Unequal constraint matrix, column-major ordering, " << si1Name << " vs. " << si2Name << std::endl; return (false); } } // Check column types { areEquiv = true; for (int j = 0; j < colCnt && areEquiv == true; j++) { if (osi1->isContinuous(j) != osi2->isContinuous(j)) areEquiv = false; if (osi1->isBinary(j) != osi2->isBinary(j)) areEquiv = false; if (osi1->isIntegerNonBinary(j) != osi2->isIntegerNonBinary(j)) areEquiv = false; if (osi1->isFreeBinary(j) != osi2->isFreeBinary(j)) areEquiv = false; if (osi1->isInteger(j) != osi2->isInteger(j)) areEquiv = false; } if (areEquiv == false) { std::cerr << " Unequal variable type, " << si1Name << " vs. " << si2Name << std::endl; return (false); } } return (true); } bool processParameters(int argc, const char **argv, std::map< std::string, std::string > &parms, const std::map< std::string, int > &ignorekeywords) { /* Initialise the parameter keywords. */ std::set< std::string > definedKeyWords; definedKeyWords.insert("-cerr2cout"); definedKeyWords.insert("-mpsDir"); definedKeyWords.insert("-netlibDir"); definedKeyWords.insert("-miplib3Dir"); definedKeyWords.insert("-testOsiSolverInterface"); definedKeyWords.insert("-nobuf"); definedKeyWords.insert("-cutsOnly"); definedKeyWords.insert("-verbosity"); definedKeyWords.insert("-onerror"); /* Set default values for data directories. */ const char dirsep = CoinFindDirSeparator(); std::string pathTmp; pathTmp = ".."; pathTmp += dirsep; pathTmp += ".."; pathTmp += dirsep; pathTmp += "Data"; pathTmp += dirsep; #ifdef COIN_MSVS // Visual Studio builds are deeper pathTmp = "..\\..\\" + pathTmp; #endif parms["-mpsDir"] = pathTmp + "Sample"; parms["-netlibDir"] = pathTmp + "Netlib"; parms["-miplib3Dir"] = pathTmp + "miplib3"; /* Read the command line parameters and fill a map of parameter keys and associated data. The parser allows for parameters which are only a keyword, or parameters of the form keyword=value (no spaces). */ for (int i = 1; i < argc; i++) { std::string parm(argv[i]); std::string key, value; std::string::size_type eqPos = parm.find('='); if (eqPos == std::string::npos) { key = parm; } else { key = parm.substr(0, eqPos); value = parm.substr(eqPos + 1); } /* * Should the specified key be ignored? */ if (ignorekeywords.find(key) != ignorekeywords.end()) { assert(ignorekeywords.find(key)->second >= 0); i += ignorekeywords.find(key)->second; continue; } /* Is the specified key valid? */ if (definedKeyWords.find(key) == definedKeyWords.end()) { if (key != "-usage" && key != "-help") std::cerr << "Undefined parameter \"" << key << "\"." << std::endl; std::cerr << "Usage: unitTest [-nobuf] [-mpsDir=V1] [-netlibDir=V2] [-miplibDir=V3] [-testOsiSolverInterface] [-cutsOnly] [-verbosity=num]" << std::endl; std::cerr << " where:" << std::endl; std::cerr << " -cerr2cout: redirect cerr to cout; sometimes useful to synchronise cout & cerr." << std::endl; std::cerr << " -mpsDir: directory containing mps test files." << std::endl << " Default value V1=\"../../Data/Sample\"" << std::endl; std::cerr << " -netlibDir: directory containing netlib files." << std::endl << " Default value V2=\"../../Data/Netlib\"" << std::endl; std::cerr << " -miplib3Dir: directory containing miplib3 files." << std::endl << " Default value V3=\"../../Data/miplib3\"" << std::endl; std::cerr << " -testOsiSolverInterface: run each OSI on the netlib problem set." << std::endl << " Default is to not run the netlib problem set." << std::endl; std::cerr << " -cutsOnly: If specified, only OsiCut tests are run." << std::endl; std::cerr << " -nobuf: use unbuffered output." << std::endl << " Default is buffered output." << std::endl; std::cerr << " -verbosity: verbosity level of tests output (0-2)." << std::endl << " Default is 0 (minimal output)." << std::endl; std::cerr << " -onerror: behaviour in case of failing test (continue, wait, stop)." << std::endl << " Default is continue." << std::endl; return false; } /* Valid keyword; stash the value for later reference. */ parms[key] = value; } /* Tack the directory separator onto the data directories so we don't have to worry about it later. */ if (parms["-mpsDir"].length() > 0) parms["-mpsDir"] += dirsep; if (parms["-netlibDir"].length() > 0) parms["-netlibDir"] += dirsep; if (parms["-miplib3"].length() > 0) parms["-miplib3Dir"] += dirsep; /* Did the user request unbuffered i/o? It seems we need to go after this through stdio --- using pubsetbuf(0,0) on the C++ streams has no discernible affect. Nor, for that matter, did setting the unitbuf flag on the streams. Why? At a guess, sync_with_stdio connects the streams to the stdio buffers, and the C++ side isn't programmed to change them? */ if (parms.find("-nobuf") != parms.end()) { // std::streambuf *coutBuf, *cerrBuf ; // coutBuf = std::cout.rdbuf() ; // coutBuf->pubsetbuf(0,0) ; // cerrBuf = std::cerr.rdbuf() ; // cerrBuf->pubsetbuf(0,0) ; setbuf(stderr, 0); setbuf(stdout, 0); } /* Did the user request a redirect for cerr? This must occur before any i/o is performed. */ if (parms.find("-cerr2cout") != parms.end()) std::cerr.rdbuf(std::cout.rdbuf()); /* * Did the user set a verbosity level? */ if (parms.find("-verbosity") != parms.end()) { char *endptr; std::string verbstring = parms["-verbosity"]; unsigned long verblevel = strtoul(verbstring.c_str(), &endptr, 10); if (*endptr != '\0' || verblevel < 0) { std::cerr << "verbosity level must be a nonnegative number" << std::endl; return false; } OsiUnitTest::verbosity = static_cast< unsigned int >(verblevel); } /* * Did the user specify what to do in case of a failure? */ if (parms.find("-onerror") != parms.end()) { std::string onerror = parms["-onerror"]; if (onerror == "continue") OsiUnitTest::haltonerror = 0; else if (onerror == "wait") OsiUnitTest::haltonerror = 1; else if (onerror == "stop") OsiUnitTest::haltonerror = 2; else { std::cerr << "-onerror must be specified with either 'continue', 'wait', or 'stop'" << std::endl; return false; } } return true; } std::string TestOutcome::SeverityLevelName[LAST] = { "NOTE", "PASSED", "WARNING", "ERROR" }; void TestOutcome::print() const { printf("%-10s", SeverityLevelName[severity].c_str()); printf("%-10s", component.c_str()); printf("%s", testname.c_str()); printf("\n"); if (expected) printf(" (expected) "); else printf(" "); printf("%s\n", testcond.c_str()); printf(" "); printf("%s:%d\n", filename.c_str(), linenumber); // printf("\n"); } void TestOutcomes::add(const OsiSolverInterface &si, std::string tst, const char *cond, TestOutcome::SeverityLevel sev, const char *file, int line, bool exp) { std::string solverName; si.getStrParam(OsiSolverName, solverName); push_back(TestOutcome(solverName, tst, cond, sev, file, line, exp)); } void TestOutcomes::print() const { int count[TestOutcome::LAST]; int expected[TestOutcome::LAST]; for (int i = 0; i < TestOutcome::LAST; ++i) { count[i] = 0; expected[i] = 0; } /* Walk the list, counting entries at each severity level. Print if verbosity level is high enough. */ for (const_iterator it(begin()); it != end(); ++it) { ++count[it->severity]; if (it->expected) ++expected[it->severity]; if ((it->severity != TestOutcome::PASSED || OsiUnitTest::verbosity >= 2) && (it->severity != TestOutcome::NOTE || OsiUnitTest::verbosity >= 1)) it->print(); } /// Print summary counts for (int i = 0; i < TestOutcome::LAST; ++i) printf("Severity %-10s: %4d thereof expected: %4d\n", TestOutcome::SeverityLevelName[i].c_str(), count[i], expected[i]); } void TestOutcomes::getCountBySeverity(TestOutcome::SeverityLevel sev, int &total, int &expected) const { assert(sev >= 0); assert(sev < TestOutcome::LAST); total = 0; expected = 0; for (const_iterator it(begin()); it != end(); ++it) { if (it->severity != sev) continue; ++total; if (it->expected) ++expected; } } } // end OsiUnitTest namespace /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiCommonTest/OsiColCutTest.cpp0000644000175000017500000002566113432644766020640 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). //#include //#include //#include #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiColCut.hpp" //-------------------------------------------------------------------------- void OsiColCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir) { // Test default constructor { OsiColCut r; OSIUNITTEST_ASSERT_ERROR(r.lbs_.getIndices() == NULL, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.lbs_.getElements() == NULL, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.lbs_.getNumElements() == 0, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.lbs().getNumElements() == 0, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.ubs_.getIndices() == NULL, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.ubs_.getElements() == NULL, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.ubs_.getNumElements() == 0, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.ubs().getNumElements() == 0, {}, "osicolcut", "default constructor"); } // Test set and get methods const int ne = 4; int inx[ne] = { 1, 3, 4, 7 }; double el[ne] = { 1.2, 3.4, 5.6, 7.8 }; const int ne3 = 0; int *inx3 = NULL; double *el3 = NULL; { OsiColCut r; // Test setting/getting bounds r.setLbs(ne, inx, el); r.setEffectiveness(222.); OSIUNITTEST_ASSERT_ERROR(r.lbs().getNumElements() == ne, return, "osicolcut", "setting bounds"); bool bounds_ok = true; for (int i = 0; i < ne; i++) { bounds_ok &= r.lbs().getIndices()[i] == inx[i]; bounds_ok &= r.lbs().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(bounds_ok, {}, "osicolcut", "setting bounds"); OSIUNITTEST_ASSERT_ERROR(r.effectiveness() == 222.0, {}, "osicolcut", "setting bounds"); r.setUbs(ne3, inx3, el3); OSIUNITTEST_ASSERT_ERROR(r.ubs().getNumElements() == 0, {}, "osicolcut", "setting bounds"); OSIUNITTEST_ASSERT_ERROR(r.ubs().getIndices() == NULL, {}, "osicolcut", "setting bounds"); OSIUNITTEST_ASSERT_ERROR(r.ubs().getElements() == NULL, {}, "osicolcut", "setting bounds"); } // Test copy constructor and assignment operator { OsiColCut rhs; { OsiColCut r; OsiColCut rC1(r); OSIUNITTEST_ASSERT_ERROR(rC1.lbs().getNumElements() == r.lbs().getNumElements(), {}, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.ubs().getNumElements() == r.ubs().getNumElements(), {}, "osicolcut", "copy constructor"); r.setLbs(ne, inx, el); r.setUbs(ne, inx, el); r.setEffectiveness(121.); OSIUNITTEST_ASSERT_ERROR(rC1.lbs().getNumElements() != r.lbs().getNumElements(), {}, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.ubs().getNumElements() != r.lbs().getNumElements(), {}, "osicolcut", "copy constructor"); OsiColCut rC2(r); OSIUNITTEST_ASSERT_ERROR(rC2.lbs().getNumElements() == r.lbs().getNumElements(), {}, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.ubs().getNumElements() == r.ubs().getNumElements(), {}, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.lbs().getNumElements() == ne, return, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.ubs().getNumElements() == ne, return, "osicolcut", "copy constructor"); bool bounds_ok = true; for (int i = 0; i < ne; i++) { bounds_ok &= rC2.lbs().getIndices()[i] == inx[i]; bounds_ok &= rC2.lbs().getElements()[i] == el[i]; bounds_ok &= rC2.ubs().getIndices()[i] == inx[i]; bounds_ok &= rC2.ubs().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(bounds_ok, {}, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.effectiveness() == 121.0, {}, "osicolcut", "copy constructor"); rhs = rC2; } // Test that rhs has correct values even though lhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(rhs.lbs().getNumElements() == ne, return, "osicolcut", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(rhs.ubs().getNumElements() == ne, return, "osicolcut", "assignment operator"); bool bounds_ok = true; for (int i = 0; i < ne; i++) { bounds_ok &= rhs.lbs().getIndices()[i] == inx[i]; bounds_ok &= rhs.lbs().getElements()[i] == el[i]; bounds_ok &= rhs.ubs().getIndices()[i] == inx[i]; bounds_ok &= rhs.ubs().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(bounds_ok, {}, "osicolcut", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(rhs.effectiveness() == 121.0, {}, "osicolcut", "assignment operator"); } // Test setting bounds with packed vector and operator== { const int ne1 = 4; int inx1[ne] = { 1, 3, 4, 7 }; double el1[ne] = { 1.2, 3.4, 5.6, 7.8 }; const int ne2 = 2; int inx2[ne2] = { 1, 3 }; double el2[ne2] = { 1.2, 3.4 }; CoinPackedVector v1, v2; v1.setVector(ne1, inx1, el1); v2.setVector(ne2, inx2, el2); OsiColCut c1, c2; OSIUNITTEST_ASSERT_ERROR(c1 == c2, {}, "osicolcut", "setting bounds with packed vector and operator =="); OSIUNITTEST_ASSERT_ERROR(!(c1 != c2), {}, "osicolcut", "setting bounds with packed vector and operator !="); c1.setLbs(v1); OSIUNITTEST_ASSERT_ERROR(c1 != c2, {}, "osicolcut", "setting bounds with packed vector and operator !="); OSIUNITTEST_ASSERT_ERROR(!(c1 == c2), {}, "osicolcut", "setting bounds with packed vector and operator =="); OSIUNITTEST_ASSERT_ERROR(c1.lbs() == v1, {}, "osicolcut", "setting bounds with packed vector and operator !="); c1.setUbs(v2); OSIUNITTEST_ASSERT_ERROR(c1.ubs() == v2, {}, "osicolcut", "setting bounds with packed vector and operator !="); c1.setEffectiveness(3.); OSIUNITTEST_ASSERT_ERROR(c1.effectiveness() == 3.0, {}, "osicolcut", "setting bounds with packed vector and operator !="); { OsiColCut c3(c1); OSIUNITTEST_ASSERT_ERROR(c3 == c1, {}, "osicolcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(!(c3 != c1), {}, "osicolcut", "operator !="); } { OsiColCut c3(c1); c3.setLbs(v2); OSIUNITTEST_ASSERT_ERROR(c3 != c1, {}, "osicolcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(c3 == c1), {}, "osicolcut", "operator =="); } { OsiColCut c3(c1); c3.setUbs(v1); OSIUNITTEST_ASSERT_ERROR(c3 != c1, {}, "osicolcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(c3 == c1), {}, "osicolcut", "operator =="); } { OsiColCut c3(c1); c3.setEffectiveness(5.); OSIUNITTEST_ASSERT_ERROR(c3 != c1, {}, "osicolcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(c3 == c1), {}, "osicolcut", "operator =="); } } // internal consistency { const int ne = 1; int inx[ne] = { -3 }; double el[ne] = { 1.2 }; OsiColCut r; r.setLbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!r.consistent(), {}, "osicolcut", "consistent"); } { const int ne = 1; int inx[ne] = { -3 }; double el[ne] = { 1.2 }; OsiColCut r; r.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!r.consistent(), {}, "osicolcut", "consistent"); } { const int ne = 1; int inx[ne] = { 100 }; double el[ne] = { 1.2 }; const int ne1 = 2; int inx1[ne1] = { 50, 100 }; double el1[ne1] = { 100., 100. }; OsiColCut r; r.setUbs(ne, inx, el); r.setLbs(ne1, inx1, el1); OSIUNITTEST_ASSERT_ERROR(r.consistent(), {}, "osicolcut", "consistent"); OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; imP->readMps(fn.c_str(), "mps"); OSIUNITTEST_ASSERT_ERROR(!r.consistent(*imP), {}, "osicolcut", "consistent"); delete imP; } { const int ne = 1; int inx[ne] = { 100 }; double el[ne] = { 1.2 }; const int ne1 = 2; int inx1[ne1] = { 50, 100 }; double el1[ne1] = { 100., 1. }; OsiColCut r; r.setUbs(ne, inx, el); r.setLbs(ne1, inx1, el1); OSIUNITTEST_ASSERT_ERROR(r.consistent(), {}, "osicolcut", "consistent"); } { // Test consistent(IntegerModel) method. OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; imP->readMps(fn.c_str(), "mps"); OsiColCut cut; const int ne = 1; int inx[ne] = { 20 }; double el[ne] = { 0.25 }; cut.setLbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); cut.setLbs(0, NULL, NULL); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); inx[0] = 4; cut.setLbs(ne, inx, el); cut.setUbs(0, NULL, NULL); OSIUNITTEST_ASSERT_ERROR(cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); el[0] = 4.5; cut.setLbs(0, NULL, NULL); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); cut.setLbs(ne, inx, el); cut.setUbs(0, NULL, NULL); OSIUNITTEST_ASSERT_ERROR(cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); OSIUNITTEST_ASSERT_ERROR(cut.infeasible(*imP), {}, "osicolcut", "infeasible(IntegerModel)"); el[0] = 3.0; cut.setLbs(ne, inx, el); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); delete imP; } { //Test infeasible(im) method // Test consistent(IntegerModel) method. OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; imP->readMps(fn.c_str(), "mps"); OsiColCut cut; const int ne = 1; int inx[ne] = { 4 }; double el[ne] = { 4.5 }; cut.setLbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.infeasible(*imP), {}, "osicolcut", "infeasible(IntegerModel)"); el[0] = 0.25; cut.setLbs(0, NULL, NULL); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.infeasible(*imP), {}, "osicolcut", "infeasible(IntegerModel)"); el[0] = 3.0; cut.setLbs(ne, inx, el); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cut.infeasible(*imP), {}, "osicolcut", "infeasible(IntegerModel)"); delete imP; } { //Test violation double solution[] = { 1.0 }; OsiColCut cut; const int ne = 1; int inx[ne] = { 0 }; double el[ne] = { 4.5 }; cut.setLbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.violated(solution), {}, "osicolcut", "violated"); el[0] = 0.25; cut.setLbs(0, NULL, NULL); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.violated(solution), {}, "osicolcut", "violated"); el[0] = 1.0; cut.setLbs(ne, inx, el); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cut.violated(solution), {}, "osicolcut", "violated"); } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiGlpk/0000755000175000017500000000000013434204224014202 5ustar sudipsudipVol-1.5.4/Osi/src/OsiGlpk/osi-glpk-uninstalled.pc.in0000644000175000017500000000046611507670402021212 0ustar sudipsudipprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiGlpk Name: OsiGlpk Description: COIN-OR Open Solver Interface for GLPK URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiGlpk.la @OSIGLPKLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src/OsiGlpk Requires: osi @OSIGLPKLIB_PCREQUIRES@ Vol-1.5.4/Osi/src/OsiGlpk/format-source.sh0000755000175000017500000000100313414504306017323 0ustar sudipsudip# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done Vol-1.5.4/Osi/src/OsiGlpk/Makefile.in0000644000175000017500000005527212502175645016273 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/OsiGlpk DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiGlpk_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la am_libOsiGlpk_la_OBJECTS = OsiGlpkSolverInterface.lo libOsiGlpk_la_OBJECTS = $(am_libOsiGlpk_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiGlpk_la_SOURCES) DIST_SOURCES = $(libOsiGlpk_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiGlpk # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiGlpk.la # List all source files for this library, including headers libOsiGlpk_la_SOURCES = \ OsiGlpkSolverInterface.cpp OsiGlpkSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiGlpk_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la # This is for libtool libOsiGlpk_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) $(GLPK_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiGlpkSolverInterface.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiGlpk/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiGlpk/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiGlpk.la: $(libOsiGlpk_la_OBJECTS) $(libOsiGlpk_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiGlpk_la_LDFLAGS) $(libOsiGlpk_la_OBJECTS) $(libOsiGlpk_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiGlpkSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Osi/src/OsiGlpk/OsiGlpkSolverInterface.hpp0000644000175000017500000007717713414504306021324 0ustar sudipsudip//----------------------------------------------------------------------------- // name: OSI Interface for GLPK //----------------------------------------------------------------------------- // Copyright (C) 2001, Vivian De Smedt, Braden Hunsaker // Copyright (C) 2003 University of Pittsburgh // University of Pittsburgh coding done by Brady Hunsaker // All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiGlpkSolverInterface_H #define OsiGlpkSolverInterface_H #include #include "OsiSolverInterface.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" /** GPLK Solver Interface Instantiation of OsiGlpkSolverInterface for GPLK */ #ifndef LPX #define LPX glp_prob #endif #ifndef GLP_PROB_DEFINED #define GLP_PROB_DEFINED // Glpk < 4.48: typedef struct { double _opaque_prob[100]; } glp_prob; // Glpk 4.48: typedef struct glp_prob glp_prob; #endif class OsiGlpkSolverInterface : virtual public OsiSolverInterface { friend void OsiGlpkSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string &value); // Set a hint parameter bool setHintParam(OsiHintParam key, bool sense = true, OsiHintStrength strength = OsiHintTry, void *info = 0); // Get an integer parameter bool getIntParam(OsiIntParam key, int &value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double &value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string &value) const; //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; /// Time limit reached? virtual bool isTimeLimitReached() const; /// (Integer) Feasible solution found? virtual bool isFeasible() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /*! \brief Get an empty warm start object This routine returns an empty CoinWarmStartBasis object. Its purpose is to provide a way to give a client a warm start basis object of the appropriate type, which can resized and modified as desired. */ inline CoinWarmStart *getEmptyWarmStart() const { return (dynamic_cast< CoinWarmStart * >(new CoinWarmStartBasis())); } /// Get warmstarting information virtual CoinWarmStart *getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart *warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual CoinBigIndex getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double *getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double *getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int columnNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int columnNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int columnNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int columnNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double *getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double *getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double *getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double *getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const; #if 0 /** Get vector of indices of solution which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue); using OsiSolverInterface::setColLower; /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower(int elementIndex, double elementValue); using OsiSolverInterface::setColUpper; /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper(int elementIndex, double elementValue); /** Set a single column lower and upper bound
The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds(int elementIndex, double lower, double upper); /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setColLower() and setColUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the variables whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue); /** Set a single row lower and upper bound
The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds(int elementIndex, double lower, double upper); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose any characteristics changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int *indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int *indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ using OsiSolverInterface::addCol; /** */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj); using OsiSolverInterface::addCols; /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj); /** */ virtual void deleteCols(const int num, const int *colIndices); using OsiSolverInterface::addRow; /** */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng); using OsiSolverInterface::addRows; /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng); /** */ virtual void deleteRows(const int num, const int *rowIndices); #if 0 // ??? implemented in OsiSolverInterface //----------------------------------------------------------------------- /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); using OsiSolverInterface::readMps; /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const; //@} //--------------------------------------------------------------------------- /*! \name Methods for row and column names. Only the set methods need to be overridden to ensure consistent names between OsiGlpk and the OSI base class. */ //@{ /*! \brief Set the objective function name */ void setObjName(std::string name); /*! \brief Set a row name Quietly does nothing if the name discipline (#OsiNameDiscipline) is auto. Quietly fails if the row index is invalid. */ void setRowName(int ndx, std::string name); /*! \brief Set a column name Quietly does nothing if the name discipline (#OsiNameDiscipline) is auto. Quietly fails if the column index is invalid. */ void setColName(int ndx, std::string name); //@} //--------------------------------------------------------------------------- /**@name GLPK specific public interfaces */ //@{ enum keepCachedFlag { /// discard all cached data (default) KEEPCACHED_NONE = 0, /// column information: objective values, lower and upper bounds, variable types KEEPCACHED_COLUMN = 1, /// row information: right hand sides, ranges and senses, lower and upper bounds for row KEEPCACHED_ROW = 2, /// problem matrix: matrix ordered by column and by row KEEPCACHED_MATRIX = 4, /// LP solution: primal and dual solution, reduced costs, row activities KEEPCACHED_RESULTS = 8, /// only discard cached LP solution KEEPCACHED_PROBLEM = KEEPCACHED_COLUMN | KEEPCACHED_ROW | KEEPCACHED_MATRIX, /// keep all cached data (similar to getMutableLpPtr()) KEEPCACHED_ALL = KEEPCACHED_PROBLEM | KEEPCACHED_RESULTS, /// free only cached column and LP solution information FREECACHED_COLUMN = KEEPCACHED_PROBLEM & ~KEEPCACHED_COLUMN, /// free only cached row and LP solution information FREECACHED_ROW = KEEPCACHED_PROBLEM & ~KEEPCACHED_ROW, /// free only cached matrix and LP solution information FREECACHED_MATRIX = KEEPCACHED_PROBLEM & ~KEEPCACHED_MATRIX, /// free only cached LP solution information FREECACHED_RESULTS = KEEPCACHED_ALL & ~KEEPCACHED_RESULTS }; /// Get pointer to GLPK model LPX *getModelPtr(); //@} /**@name Static instance counter methods */ /** GLPK has a context which must be freed after all GLPK LPs (or MIPs) are freed. * It is automatically created when the first LP is created. This method:
  • Increments by 1 the number of uses of the GLPK environment.
*/ static void incrementInstanceCounter() { ++numInstances_; } /** GLPK has a context which must be freed after all GLPK LPs (or MIPs) are freed. This method:
  • Decrements by 1 the number of uses of the GLPK environment.
  • Deletes the GLPK environment when the number of uses is change to 0 from 1.
*/ static void decrementInstanceCounter(); /// Return the number of LP/MIP instances of instantiated objects using the GLPK environment. static unsigned int getNumInstances() { return numInstances_; } //@} /**@name Constructors and destructor */ //@{ /// Default Constructor OsiGlpkSolverInterface(); /// Clone virtual OsiSolverInterface *clone(bool copyData = true) const; /// Copy constructor OsiGlpkSolverInterface(const OsiGlpkSolverInterface &); /// Assignment operator OsiGlpkSolverInterface &operator=(const OsiGlpkSolverInterface &rhs); /// Destructor virtual ~OsiGlpkSolverInterface(); /// Resets as if default constructor virtual void reset(); //@} protected: /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut(const OsiRowCut &rc); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut(const OsiColCut &cc); /// Pointer to the model LPX *getMutableModelPtr() const; //@} private: /**@name Private methods */ //@{ /// The real work of a copy constructor (used by copy and assignment) void gutsOfCopy(const OsiGlpkSolverInterface &source); /// The real work of the constructor void gutsOfConstructor(); /// The real work of the destructor void gutsOfDestructor(); /// free cached column rim vectors void freeCachedColRim(); /// free cached row rim vectors void freeCachedRowRim(); /// free cached result vectors void freeCachedResults(); /// free cached matrices void freeCachedMatrix(); /// free all cached data (except specified entries, see getLpPtr()) void freeCachedData(int keepCached = KEEPCACHED_NONE); /// free all allocated memory void freeAllMemory(); /// Just for testing purposes void printBounds(); /// Fill cached collumn bounds void fillColBounds() const; //@} /**@name Private member data */ //@{ /// GPLK model represented by this class instance mutable LPX *lp_; /// number of GLPK instances currently in use (counts only those created by OsiGlpk) static unsigned int numInstances_; // Remember whether simplex or b&b was most recently done // 0 = simplex; 1 = b&b int bbWasLast_; // Int parameters. /// simplex iteration limit (per call to solver) int maxIteration_; /// simplex iteration limit (for hot start) int hotStartMaxIteration_; /// OSI name discipline int nameDisc_; // Double parameters. /// dual objective limit (measure of badness; stop if we're worse) double dualObjectiveLimit_; /// primal objective limit (measure of goodness; stop if we're better) double primalObjectiveLimit_; /// dual feasibility tolerance double dualTolerance_; /// primal feasibility tolerance double primalTolerance_; /// constant offset for objective function double objOffset_; // String parameters /// Problem name std::string probName_; /*! \brief Array for info blocks associated with hints. */ mutable void *info_[OsiLastHintParam]; /// Hotstart information /// size of column status and value arrays int hotStartCStatSize_; /// column status array int *hotStartCStat_; /// primal variable values double *hotStartCVal_; /// dual variable values double *hotStartCDualVal_; /// size of row status and value arrays int hotStartRStatSize_; /// row status array int *hotStartRStat_; /// row slack values double *hotStartRVal_; /// row dual values double *hotStartRDualVal_; // Status information /// glpk stopped on iteration limit bool isIterationLimitReached_; /// glpk stopped on time limit bool isTimeLimitReached_; /// glpk abandoned the problem bool isAbandoned_; /*! \brief glpk stopped on lower objective limit When minimising, this is the primal limit; when maximising, the dual limit. */ bool isObjLowerLimitReached_; /*! \brief glpk stopped on upper objective limit When minimising, this is the dual limit; when maximising, the primal limit. */ bool isObjUpperLimitReached_; /// glpk declared the problem primal infeasible bool isPrimInfeasible_; /// glpk declared the problem dual infeasible bool isDualInfeasible_; /// glpk declared the problem feasible bool isFeasible_; /**@name Cached information derived from the GLPK model */ //@{ /// Number of iterations mutable int iter_used_; /// Pointer to objective vector mutable double *obj_; /// Pointer to dense vector of variable lower bounds mutable double *collower_; /// Pointer to dense vector of variable lower bounds mutable double *colupper_; /// Pointer to dense vector of variable types (continous, binary, integer) mutable char *ctype_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /// Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) mutable double *rowrange_; /// Pointer to dense vector of row lower bounds mutable double *rowlower_; /// Pointer to dense vector of row upper bounds mutable double *rowupper_; /// Pointer to primal solution vector mutable double *colsol_; /// Pointer to dual solution vector mutable double *rowsol_; /// Pointer to reduced cost vector mutable double *redcost_; /// Pointer to row activity (slack) vector mutable double *rowact_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByCol_; //@} //@} }; //############################################################################# /** A function that tests the methods in the OsiGlpkSolverInterface class. */ void OsiGlpkSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); #endif // OsiGlpkSolverInterface_H /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiGlpk/OsiGlpkSolverInterface.cpp0000644000175000017500000027247213414504306021312 0ustar sudipsudip//----------------------------------------------------------------------------- // name: OSI Interface for GLPK //----------------------------------------------------------------------------- // Copyright (C) 2001, 2002 Vivian De Smedt // Copyright (C) 2002, 2003 Braden Hunsaker // Copyright (C) 2003, 2004 University of Pittsburgh // Copyright (C) 2004 Joseph Young // Copyright (C) 2007 Lou Hafer // University of Pittsburgh coding done by Brady Hunsaker // All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). // // Comments: // // Areas that may need work in the code are marked with '???'. // // As of version 4.7, GLPK problems can be of class LPX_LP or LPX_MIP. // The difference is that LPX_MIP problems have a separate MIP data block, // and certain functions are only allowed for LPX_MIP problems. // // In (much) earlier versions of GLPK, if an LPX_MIP problem was // changed back into a LPX_LP problem, then the MIP data was lost, // including which columns are integer. However, LPX_MIP problems // still had access to LP information (like lpx_get_status). // // It appears that this behavior is no longer true in version 4.7. // Therefore it may be worthwhile to adjust the interface to change // the class of the problem as needed. For the time being, however, // all OSI problems are set to type LPX_MIP. The only trick is // differentiating when the user calls status routines like // isProvenOptimal(). For now, we assume that the user is referring // to the most recent solution call. We add an extra variable, // bbWasLast_, to the class to record which solution call was most // recent (lp or mip). // // Possible areas of improvement // ----------------------------- // // Methods that are not implemented: // // getPrimalRays, getDualRays // // Methods that are implemented, but do not do what you probably expect: // // setColSolution, setRowPrice // // Many methods have not been attempted to be improved (for speed) // to take advantage of how GLPK works. The emphasis has been on // making things functional and not too messy. There's plenty of room // for more efficient implementations. // /* Various bits and pieces of knowledge that are handy when working on OsiGlpk. Glpk uses 1-based indexing. Be careful. Primal and dual solutions may be set by the user. This means that getColSolution and getRowPrice are obliged to return the cached solution vector whenever it's available. Various other routines which calculate values based on primal and dual solutions must also use the cached vectors. On the other hand, we don't want to be rebuilding the cache with every call to the solver. The approach is that a call to the solver removes the cached values. Subsequent calls to retrieve solution values will repopulate the cache by interrogating glpk. */ #include #include #include #include #include extern "C" { #include "glpk.h" } #ifndef GLP_PROB_DEFINED #define GLP_PROB_DEFINED #endif #include "CoinError.hpp" #include "CoinPragma.hpp" #include "OsiConfig.h" #include "OsiGlpkSolverInterface.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" /* Grab the COIN standard finite infinity from CoinFinite.hpp. Also set a zero tolerance, so we can set clean zeros in computed reduced costs and row activities. The value 1.0e-9 is lifted from glpk --- this is the value that it uses when the LPX_K_ROUND parameter is active. */ #include "CoinFinite.hpp" namespace { const double CoinInfinity = COIN_DBL_MAX; const double GlpkZeroTol = 1.0e-9; } /* Cut names down to a reasonable size. */ #define OGSI OsiGlpkSolverInterface /* A few defines to control execution tracing. OGSI_TRACK_SOLVERS track creation, copy, deletion of OGSI objects OGSI_TRACK_FRESH track how a solution is made stale/fresh OGSI_VERBOSITY enables warnings when > 0; probably should be converted to honest messages for message handler */ #define OGSI_TRACK_SOLVERS 0 #define OGSI_TRACK_FRESH 0 #define OGSI_VERBOSITY 0 //############################################################################# // File-local methods //############################################################################# namespace { /* Convenience routine for generating error messages. Who knows, maybe it'll get used eventually :-). */ inline void checkGLPKerror(int err, std::string glpkfuncname, std::string osimethod) { if (err != 0) { char s[100]; sprintf(s, "%s returned error %d", glpkfuncname.c_str(), err); std::cout << "ERROR: " << s << " (" << osimethod << " in OsiGlpkSolverInterface)" << std::endl; throw CoinError(s, osimethod.c_str(), "OsiGlpkSolverInterface"); } return; } } // end file-local namespace //############################################################################# // Solve methods //############################################################################# /* Solve an LP from scratch. */ void OGSI::initialSolve() { #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::initialSolve." << std::endl; #endif LPX *model = getMutableModelPtr(); /* Prep. Toss any cached solution information. */ freeCachedData(OGSI::FREECACHED_RESULTS); /* Solve the lp. */ int err = lpx_simplex(model); // for Glpk, a solve fails if the initial basis is invalid or singular // thus, we construct a (advanced) basis first and try again #ifdef LPX_E_BADB if (err == LPX_E_BADB) { lpx_adv_basis(model); err = lpx_simplex(model); } else #endif if (err == LPX_E_SING || err == LPX_E_FAULT) { lpx_adv_basis(model); err = lpx_simplex(model); } iter_used_ = lpx_get_int_parm(model, LPX_K_ITCNT); /* Sort out the various state indications. When the presolver is turned on, lpx_simplex() will not be able to tell whether the objective function has hit it's upper or lower limit, and does not return OBJLL or OBJUL. The code for these cases should be beefed up to check the objective against the limit. The codes NOPFS and NODFS are returned only when the presolver is used. If we ever reach the default case, we're deeply confused. */ isIterationLimitReached_ = false; isTimeLimitReached_ = false; isAbandoned_ = false; isPrimInfeasible_ = false; isDualInfeasible_ = false; isFeasible_ = false; isObjLowerLimitReached_ = false; isObjUpperLimitReached_ = false; switch (err) { case LPX_E_OK: { break; } case LPX_E_ITLIM: { isIterationLimitReached_ = true; break; } case LPX_E_OBJLL: { isObjLowerLimitReached_ = true; break; } case LPX_E_OBJUL: { isObjUpperLimitReached_ = true; break; } case LPX_E_TMLIM: { isTimeLimitReached_ = true; } // no break here, so we still report abandoned case LPX_E_FAULT: case LPX_E_SING: #ifdef LPX_E_BADB case LPX_E_BADB: #endif { isAbandoned_ = true; break; } case LPX_E_NOPFS: { isPrimInfeasible_ = true; break; } case LPX_E_NODFS: { isDualInfeasible_ = true; break; } default: { assert(false); } } switch (lpx_get_status(model)) { case LPX_OPT: case LPX_FEAS: { isFeasible_ = true; break; } default: { } } // Record that simplex was most recent bbWasLast_ = 0; return; } //----------------------------------------------------------------------------- void OGSI::resolve() { #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::resolve." << std::endl; #endif LPX *model = getMutableModelPtr(); freeCachedData(OGSI::FREECACHED_RESULTS); // lpx_simplex will use the current basis if possible int err = lpx_simplex(model); // for Glpk, a solve fails if the initial basis is invalid or singular // thus, we construct a (advanced) basis first and try again #ifdef LPX_E_BADB if (err == LPX_E_BADB) { lpx_adv_basis(model); err = lpx_simplex(model); } else #endif if (err == LPX_E_SING || err == LPX_E_FAULT) { lpx_adv_basis(model); err = lpx_simplex(model); } iter_used_ = lpx_get_int_parm(model, LPX_K_ITCNT); isIterationLimitReached_ = false; isTimeLimitReached_ = false; isAbandoned_ = false; isObjLowerLimitReached_ = false; isObjUpperLimitReached_ = false; isPrimInfeasible_ = false; isDualInfeasible_ = false; isFeasible_ = false; switch (err) { case LPX_E_OK: { break; } case LPX_E_ITLIM: { isIterationLimitReached_ = true; break; } case LPX_E_OBJLL: { isObjLowerLimitReached_ = true; break; } case LPX_E_OBJUL: { isObjUpperLimitReached_ = true; break; } case LPX_E_TMLIM: { isTimeLimitReached_ = true; } // no break here, so we still report abandoned case LPX_E_FAULT: case LPX_E_SING: #ifdef LPX_E_BADB case LPX_E_BADB: #endif { isAbandoned_ = true; break; } case LPX_E_NOPFS: { isPrimInfeasible_ = true; break; } case LPX_E_NODFS: { isDualInfeasible_ = true; break; } default: { assert(false); } } switch (lpx_get_status(model)) { case LPX_OPT: case LPX_FEAS: { isFeasible_ = true; break; } default: { } } // Record that simplex was most recent bbWasLast_ = 0; return; } //----------------------------------------------------------------------------- /* Call glpk's built-in MIP solver. Any halfway recent version (from glpk 4.4, at least) will have lpx_intopt, a branch-and-cut solver. The presence of cut generators is more recent. */ void OGSI::branchAndBound() { LPX *model = getMutableModelPtr(); /* Destroy cached data. */ freeCachedData(OGSI::FREECACHED_RESULTS); /* Assuming we have integer variables in the model, call the best MIP solver we can manage. lpx_intopt does not require an optimal LP solution as a starting point, so we can call it directly. lpx_integer needs an initial optimal solution to the relaxation. */ if (lpx_get_num_int(model)) { int err = LPX_E_FAULT; #ifdef GLPK_HAS_INTOPT err = lpx_intopt(model); #else if (lpx_get_status(model) != LPX_OPT) { initialSolve(); } err = lpx_integer(model); #endif /* We have a result. What is it? Start with a positive attitude and revise as needed. The various LPX_E_* and LPX_I_* defines are stable back as far as glpk-4.4. When we get LPX_E_OK (MIP terminated normally), we need to look more closely. LPX_I_OPT indicates a proven optimal integer solution. LPX_I_NOFEAS indicates that there is no integer feasible solution. LPX_I_UNDEF says the MIP solution is undefined. LPX_I_FEAS says that in integer feasible solution was found but not proven optimal (termination of search due to some limit is the common cause). It's not clear what to do with LPX_I_UNDEF; currently, it is not really reflected in termination status. LPX_I_FEAS is reflected by the OsiGlpk specific method isFeasible(). Various other codes are returned by lpx_intopt (lpx_integer returns a subset of these). LPX_E_NOPFS (LPX_E_NODFS) indicate no primal (dual) feasible solution; detected at the root, either by presolve or when attempting the root relaxation. LPX_E_ITLIM (LPX_E_TMLIM) indicate iteration (time) limit reached. Osi doesn't provide for time limit, so lump it in with iteration limit (an arguable choice, but seems better than the alternatives) and have extra method isTimeLimitReached(). LPX_E_SING (lp solver failed due to singular basis) is legimately characterised as abandoned. LPX_E_FAULT indicates a structural problem (problem not of class MIP, or an integer variable has a non-integer bound), which really translates into internal confusion in OsiGlpk. Previous comments expressed uncertainty about the iteration count. This should be checked at some point. -- lh, 070709 -- */ iter_used_ = lpx_get_int_parm(model, LPX_K_ITCNT); isIterationLimitReached_ = false; isTimeLimitReached_ = false; isAbandoned_ = false; isPrimInfeasible_ = false; isDualInfeasible_ = false; isFeasible_ = false; isObjLowerLimitReached_ = false; isObjUpperLimitReached_ = false; switch (err) { case LPX_E_OK: #ifdef LPX_E_MIPGAP case LPX_E_MIPGAP: #endif { break; } case LPX_E_NOPFS: { isPrimInfeasible_ = true; break; } case LPX_E_NODFS: { isDualInfeasible_ = true; break; } case LPX_E_TMLIM: { isTimeLimitReached_ = true; } // no break case LPX_E_ITLIM: { isIterationLimitReached_ = true; break; } case LPX_E_SING: { isAbandoned_ = true; break; } case LPX_E_FAULT: { assert(false); break; } default: { assert(false); break; } } //check this also if err!=LPX_E_OPT, so we know about feasibility in case time/resource limit is reached int mip_status = lpx_mip_status(model); switch (mip_status) { case LPX_I_OPT: { isFeasible_ = true; break; } case LPX_I_NOFEAS: { isPrimInfeasible_ = true; break; } case LPX_I_UNDEF: { break; } case LPX_I_FEAS: { isFeasible_ = true; break; } default: { assert(false); break; } } /* The final action is to note that our last call to glpk was the MIP solver. */ bbWasLast_ = 1; } /* Not a MIP (no integer variables). Call the LP solver. Since we can call branchAndBound with no initial LP solution, initialSolve is appropriate here. (But for glpk, it actually makes no difference --- lpx_simplex makes the decision on how to proceed.) */ else { initialSolve(); } return; } //############################################################################# // Parameter related methods //############################################################################# /* When we set parameters, we have to stash them locally as well as pushing them into the LPX object. The trouble comes when loading a new problem. If the LPX object is already loaded with a problem, the easiest approach is to simply delete it and start fresh. But then we lose all the parameters that are held in the LPX object. By keeping a copy, we have a way to recover. Really, we should be keeping these values in the OSI base class arrays, but the amount of storage involved is too small to provide motivation to change from the present setup. */ bool OGSI::setIntParam(OsiIntParam key, int value) { bool retval = false; switch (key) { case OsiMaxNumIteration: { if (value >= 0) { maxIteration_ = value; lpx_set_int_parm(lp_, LPX_K_ITLIM, value); retval = true; } else { retval = false; } break; } case OsiMaxNumIterationHotStart: { if (value >= 0) { hotStartMaxIteration_ = value; retval = true; } else { retval = false; } break; } case OsiNameDiscipline: { if (value < 0 || value > 3) { retval = false; } else { nameDisc_ = value; retval = true; } break; } case OsiLastIntParam: { retval = false; break; } } return (retval); } //----------------------------------------------------------------------------- /* Self-protection is required here --- glpk will fault if handed a value it doesn't like. */ bool OGSI::setDblParam(OsiDblParam key, double value) { bool retval = false; switch (key) { case OsiDualObjectiveLimit: // as of 4.7, GLPK only uses this if it does dual simplex { dualObjectiveLimit_ = value; if (getObjSense() == 1) // minimization { lpx_set_real_parm(lp_, LPX_K_OBJUL, value); } else // maximization { lpx_set_real_parm(lp_, LPX_K_OBJLL, value); } retval = true; break; } case OsiPrimalObjectiveLimit: // as of 4.7, GLPK only uses this if it does dual simplex { primalObjectiveLimit_ = value; if (getObjSense() == 1) { lpx_set_real_parm(lp_, LPX_K_OBJLL, value); } else { lpx_set_real_parm(lp_, LPX_K_OBJUL, value); } retval = true; break; } case OsiDualTolerance: { if (value >= 0 && value <= .001) { dualTolerance_ = value; lpx_set_real_parm(lp_, LPX_K_TOLDJ, value); retval = true; } else { retval = false; } break; } case OsiPrimalTolerance: { if (value >= 0 && value <= .001) { primalTolerance_ = value; lpx_set_real_parm(lp_, LPX_K_TOLBND, value); retval = true; } else { retval = false; } break; } case OsiObjOffset: { objOffset_ = value; lpx_set_obj_coef(lp_, 0, value); retval = true; break; } case OsiLastDblParam: { retval = false; break; } } return (retval); } //----------------------------------------------------------------------------- bool OGSI::setStrParam(OsiStrParam key, const std::string &value) { bool retval = false; switch (key) { case OsiProbName: { probName_ = value; if (probName_.length() == 0) probName_ = "Pb"; lpx_set_prob_name(lp_, const_cast< char * >(value.c_str())); retval = true; break; } case OsiSolverName: { retval = true; break; } case OsiLastStrParam: { break; } } return (retval); } //----------------------------------------------------------------------------- namespace { /*! A helper routine to deal with hints where glpk lacks any flexibility --- the facility is unimplemented, or always on. Failure is defined as OsiForceDo in the wrong direction; in this case an error is thrown. If the routine returns, then either the hint is compatible with glpk's capabilities, or it can be ignored. */ void unimp_hint(CoinMessageHandler *hdl, bool glpkSense, bool hintSense, OsiHintStrength hintStrength, const char *msgString) { if (glpkSense != hintSense) { std::string message = "glpk "; if (glpkSense == true) { message += "cannot disable "; } else { message += "does not support "; } message += msgString; *hdl << message << CoinMessageEol; if (hintStrength == OsiForceDo) { throw CoinError(message, "setHintParam", "OsiDylpSolverInterface"); } } return; } } // end file-local namespace bool OGSI::setHintParam(OsiHintParam key, bool sense, OsiHintStrength strength, void *info) /* OSI provides arrays for the sense and strength. OGSI provides the array for info. */ { bool retval = false; CoinMessageHandler *msgHdl = messageHandler(); /* Check for out of range. */ if (key >= OsiLastHintParam) return (false); /* Set the hint in the OSI structures. Unlike the other set*Param routines, setHintParam will return false for key == OsiLastHintParam. Unfortunately, it'll also throw for strength = OsiForceDo, without setting a return value. We need to catch that throw. */ try { retval = OsiSolverInterface::setHintParam(key, sense, strength); } catch (CoinError &) { retval = (strength == OsiForceDo); } if (retval == false) return (false); info_[key] = info; /* Did the client say `ignore this'? Who are we to argue. */ if (strength == OsiHintIgnore) return (true); /* We have a valid hint which would be impolite to simply ignore. Deal with it as best we can. But say something if we're ignoring the hint. This is under construction. For the present, we don't distinguish between initial solve and resolve. */ switch (key) { case OsiDoPresolveInInitial: case OsiDoPresolveInResolve: { if (sense == false) { if (strength >= OsiHintTry) lpx_set_int_parm(lp_, LPX_K_PRESOL, 0); } else { lpx_set_int_parm(lp_, LPX_K_PRESOL, 1); } retval = true; break; } case OsiDoDualInInitial: case OsiDoDualInResolve: { unimp_hint(msgHdl, false, sense, strength, "exclusive use of dual simplex"); if (sense == false) { if (strength >= OsiHintDo) lpx_set_int_parm(lp_, LPX_K_DUAL, 0); } else { lpx_set_int_parm(lp_, LPX_K_DUAL, 1); } retval = true; break; } case OsiDoCrash: { unimp_hint(msgHdl, false, sense, strength, "basis crash"); retval = true; break; } case OsiDoInBranchAndCut: { unimp_hint(msgHdl, false, sense, strength, "do in branch and cut"); retval = true; break; } /* 0 is no scaling, 3 is geometric mean followed by equilibration. */ case OsiDoScale: { if (sense == false) { if (strength >= OsiHintTry) lpx_set_int_parm(lp_, LPX_K_SCALE, 0); } else { lpx_set_int_parm(lp_, LPX_K_SCALE, 3); } retval = true; break; } /* Glpk supports four levels, 0 (no output), 1 (errors only), 2 (normal), and 3 (normal plus informational). */ case OsiDoReducePrint: { if (sense == true) { if (strength <= OsiHintTry) { lpx_set_int_parm(lp_, LPX_K_MSGLEV, 1); } else { lpx_set_int_parm(lp_, LPX_K_MSGLEV, 0); } } else { if (strength <= OsiHintTry) { lpx_set_int_parm(lp_, LPX_K_MSGLEV, 2); } else { lpx_set_int_parm(lp_, LPX_K_MSGLEV, 3); } } int logLevel = lpx_get_int_parm(lp_, LPX_K_MSGLEV); messageHandler()->setLogLevel(logLevel); retval = true; break; } /* The OSI spec says that unimplemented options (and, by implication, hints) should return false. In the case of a hint, however, we can ignore anything except OsiForceDo, so usability says we should anticipate new hints and set this up so the solver doesn't break. So return true. */ default: { unimp_hint(msgHdl, !sense, sense, strength, "unrecognized hint"); retval = true; break; } } return (retval); } //----------------------------------------------------------------------------- bool OGSI::getIntParam(OsiIntParam key, int &value) const { bool retval = false; switch (key) { case OsiMaxNumIteration: value = maxIteration_; retval = true; break; case OsiMaxNumIterationHotStart: value = hotStartMaxIteration_; retval = true; break; case OsiNameDiscipline: value = nameDisc_; retval = true; break; case OsiLastIntParam: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OGSI::getDblParam(OsiDblParam key, double &value) const { bool retval = false; switch (key) { case OsiDualObjectiveLimit: value = dualObjectiveLimit_; retval = true; break; case OsiPrimalObjectiveLimit: value = primalObjectiveLimit_; retval = true; break; case OsiDualTolerance: value = dualTolerance_; retval = true; break; case OsiPrimalTolerance: value = primalTolerance_; retval = true; break; case OsiObjOffset: value = lpx_get_obj_coef(getMutableModelPtr(), 0); retval = true; break; case OsiLastDblParam: retval = false; break; } return retval; } bool OGSI::getStrParam(OsiStrParam key, std::string &value) const { // bool retval = false; switch (key) { case OsiProbName: value = lpx_get_prob_name(getMutableModelPtr()); break; case OsiSolverName: value = "glpk"; break; case OsiLastStrParam: return false; } return true; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OGSI::isAbandoned() const { return isAbandoned_; } bool OGSI::isProvenOptimal() const { LPX *model = getMutableModelPtr(); if (bbWasLast_ == 0) { int stat = lpx_get_status(model); return stat == LPX_OPT; } else { int stat = lpx_mip_status(model); return stat == LPX_I_OPT; } } bool OGSI::isProvenPrimalInfeasible() const { LPX *model = getMutableModelPtr(); if (isPrimInfeasible_ == true) return true; if (bbWasLast_ == 0) return lpx_get_prim_stat(model) == LPX_P_NOFEAS; else return lpx_mip_status(model) == LPX_I_NOFEAS; } bool OGSI::isProvenDualInfeasible() const { LPX *model = getMutableModelPtr(); if (isDualInfeasible_ == true) return true; if (bbWasLast_ == 0) return lpx_get_dual_stat(model) == LPX_D_NOFEAS; else // Not sure what to do for MIPs; does it just mean unbounded? // ??? for now, return false return false; } /* This should return true if the solver stopped on the primal limit, or if the current objective is better than the primal limit. getObjSense == 1 is minimisation, -1 is maximisation. */ bool OGSI::isPrimalObjectiveLimitReached() const { bool retval = false; double obj = getObjValue(); double objlim; getDblParam(OsiPrimalObjectiveLimit, objlim); if (getObjSense() == 1) { if (isObjLowerLimitReached_ || obj < objlim) { retval = true; } } else { if (isObjUpperLimitReached_ || obj > objlim) { retval = true; } } return (retval); } /* This should return true if the solver stopped on the dual limit, or if the current objective is worse than the dual limit. */ bool OGSI::isDualObjectiveLimitReached() const { bool retval = false; double obj = getObjValue(); double objlim; getDblParam(OsiDualObjectiveLimit, objlim); if (getObjSense() == 1) { if (isObjUpperLimitReached_ || obj > objlim) { retval = true; } } else { if (isObjLowerLimitReached_ || obj < objlim) { retval = true; } } return (retval); } bool OGSI::isIterationLimitReached() const { return isIterationLimitReached_; } bool OGSI::isTimeLimitReached() const { return isTimeLimitReached_; } bool OGSI::isFeasible() const { return isFeasible_; } //############################################################################# // WarmStart related methods //############################################################################# /* Return a warm start object matching the current state of the solver. Nonbasic fixed variables (LPX_NS) are translated to CWSB::atLowerBound. */ CoinWarmStart *OGSI::getWarmStart() const { /* Create an empty basis and size it to the correct dimensions. */ CoinWarmStartBasis *ws = new CoinWarmStartBasis(); int numcols = getNumCols(); int numrows = getNumRows(); ws->setSize(numcols, numrows); /* Walk the rows. Retrieve the status information from the glpk model and store it in the CWSB object. The convention in Osi regarding the status of a row when on bounds is different from Glpk. Thus, Glpk's at-lower-bound will be mapped to Osi's at-upper-bound and Glpk's at-upper-bound will be mapped to Osi's at-lower-bound. */ for (int i = 0; i < numrows; i++) { int stati = lpx_get_row_stat(lp_, i + 1); switch (stati) { case LPX_BS: { ws->setArtifStatus(i, CoinWarmStartBasis::basic); break; } case LPX_NS: case LPX_NL: { ws->setArtifStatus(i, CoinWarmStartBasis::atUpperBound); break; } case LPX_NU: { ws->setArtifStatus(i, CoinWarmStartBasis::atLowerBound); break; } case LPX_NF: { ws->setArtifStatus(i, CoinWarmStartBasis::isFree); break; } default: { assert(false); break; } } } /* And repeat for the columns. */ for (int j = 0; j < numcols; j++) { int statj = lpx_get_col_stat(lp_, j + 1); switch (statj) { case LPX_BS: { ws->setStructStatus(j, CoinWarmStartBasis::basic); break; } case LPX_NS: case LPX_NL: { ws->setStructStatus(j, CoinWarmStartBasis::atLowerBound); break; } case LPX_NU: { ws->setStructStatus(j, CoinWarmStartBasis::atUpperBound); break; } case LPX_NF: { ws->setStructStatus(j, CoinWarmStartBasis::isFree); break; } default: { assert(false); break; } } } return (ws); } //----------------------------------------------------------------------------- /* Set the given warm start information in the solver. By definition, a null warmstart parameter is interpreted as `refresh warm start information from the solver.' Since OGSI does not cache warm start information, no action is required. The convention in Osi regarding the status of a row when on bounds is different from Glpk. Thus, Osi's at-upper-bound will be mapped to Glpk's at-lower-bound and Osi's at-lower-bound will be mapped to Glpk's at-upper-bound. */ bool OGSI::setWarmStart(const CoinWarmStart *warmstart) { /* If this is a simple refresh request, we're done. */ if (warmstart == 0) { return (true); } /* Check that the parameter is a CWSB of the appropriate size. */ const CoinWarmStartBasis *ws = dynamic_cast< const CoinWarmStartBasis * >(warmstart); if (ws == 0) { return false; } int numcols = ws->getNumStructural(); int numrows = ws->getNumArtificial(); if (numcols != getNumCols() || numrows != getNumRows()) { return (false); } /* Looks like a basis. Translate to the appropriate codes for glpk and install. Row status first (logical/artificial variables), then column status (architectural variables). */ for (int i = 0; i < numrows; i++) { int stati; switch (ws->getArtifStatus(i)) { case CoinWarmStartBasis::basic: { stati = LPX_BS; break; } case CoinWarmStartBasis::atLowerBound: { stati = LPX_NU; break; } case CoinWarmStartBasis::atUpperBound: { stati = LPX_NL; break; } case CoinWarmStartBasis::isFree: { stati = LPX_NF; break; } default: { assert(false); return (false); } } lpx_set_row_stat(lp_, i + 1, stati); } for (int j = 0; j < numcols; j++) { int statj; switch (ws->getStructStatus(j)) { case CoinWarmStartBasis::basic: { statj = LPX_BS; break; } case CoinWarmStartBasis::atLowerBound: { statj = LPX_NL; break; } case CoinWarmStartBasis::atUpperBound: { statj = LPX_NU; break; } case CoinWarmStartBasis::isFree: { statj = LPX_NF; break; } default: { assert(false); return (false); } } lpx_set_col_stat(lp_, j + 1, statj); } return (true); } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# void OGSI::markHotStart() { LPX *model = getMutableModelPtr(); int numcols, numrows; numcols = getNumCols(); numrows = getNumRows(); if (numcols > hotStartCStatSize_) { delete[] hotStartCStat_; delete[] hotStartCVal_; delete[] hotStartCDualVal_; hotStartCStatSize_ = static_cast< int >(1.2 * static_cast< double >(numcols)); // get some extra space for future hot starts hotStartCStat_ = new int[hotStartCStatSize_]; hotStartCVal_ = new double[hotStartCStatSize_]; hotStartCDualVal_ = new double[hotStartCStatSize_]; } int j; for (j = 0; j < numcols; j++) { int stat; double val; double dualVal; stat = lpx_get_col_stat(model, j); val = lpx_get_col_prim(model, j); dualVal = lpx_get_col_dual(model, j); hotStartCStat_[j] = stat; hotStartCVal_[j] = val; hotStartCDualVal_[j] = dualVal; } if (numrows > hotStartRStatSize_) { delete[] hotStartRStat_; delete[] hotStartRVal_; delete[] hotStartRDualVal_; hotStartRStatSize_ = static_cast< int >(1.2 * static_cast< double >(numrows)); // get some extra space for future hot starts hotStartRStat_ = new int[hotStartRStatSize_]; hotStartRVal_ = new double[hotStartRStatSize_]; hotStartRDualVal_ = new double[hotStartRStatSize_]; } int i; for (i = 0; i < numrows; i++) { int stat; double val; double dualVal; stat = lpx_get_row_stat(model, i + 1); val = lpx_get_row_prim(model, i + 1); dualVal = lpx_get_row_dual(model, i + 1); hotStartRStat_[i] = stat; hotStartRVal_[i] = val; hotStartRDualVal_[i] = dualVal; } } //----------------------------------------------------------------------------- void OGSI::solveFromHotStart() { #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::solveFromHotStart." << std::endl; #endif LPX *model = getMutableModelPtr(); int numcols, numrows; numcols = getNumCols(); numrows = getNumRows(); assert(numcols <= hotStartCStatSize_); assert(numrows <= hotStartRStatSize_); int j; for (j = 0; j < numcols; j++) { lpx_set_col_stat(model, j + 1, hotStartCStat_[j]); } int i; for (i = 0; i < numrows; i++) { lpx_set_row_stat(model, i + 1, hotStartRStat_[i]); } freeCachedData(OGSI::FREECACHED_RESULTS); int maxIteration = maxIteration_; maxIteration_ = hotStartMaxIteration_; resolve(); maxIteration_ = maxIteration; } //----------------------------------------------------------------------------- void OGSI::unmarkHotStart() { // ??? be lazy with deallocating memory and do nothing here, deallocate memory in the destructor. } //############################################################################# // Problem information methods (original data) //############################################################################# //----------------------------------------------------------------------------- // Get number of rows, columns, elements, ... //----------------------------------------------------------------------------- int OGSI::getNumCols() const { return lpx_get_num_cols(getMutableModelPtr()); } int OGSI::getNumRows() const { return lpx_get_num_rows(getMutableModelPtr()); } CoinBigIndex OGSI::getNumElements() const { return lpx_get_num_nz(getMutableModelPtr()); } //----------------------------------------------------------------------------- // Get pointer to rim vectors //------------------------------------------------------------------ const double *OGSI::getColLower() const { LPX *model = getMutableModelPtr(); if (collower_ == NULL) { assert(colupper_ == NULL); int numcols = getNumCols(); if (numcols > 0) { collower_ = new double[numcols]; colupper_ = new double[numcols]; } double inf = getInfinity(); int i; for (i = 0; i < numcols; i++) { int type; double lb; double ub; type = lpx_get_col_type(model, i + 1); lb = lpx_get_col_lb(model, i + 1); ub = lpx_get_col_ub(model, i + 1); switch (type) { case LPX_FR: lb = -inf; ub = inf; break; case LPX_LO: ub = inf; break; case LPX_UP: lb = -inf; break; case LPX_FX: case LPX_DB: break; default: assert(false); break; } collower_[i] = lb; colupper_[i] = ub; } } return collower_; } //----------------------------------------------------------------------------- const double *OGSI::getColUpper() const { if (colupper_ == NULL) { getColLower(); //assert( colupper_ != NULL ); // Could be null if no columns. } return colupper_; } //----------------------------------------------------------------------------- const char *OGSI::getRowSense() const { // Could be in OsiSolverInterfaceImpl. if (rowsense_ == NULL) { assert(rhs_ == NULL && rowrange_ == NULL); int numrows = getNumRows(); if (numrows > 0) { rowsense_ = new char[numrows]; rhs_ = new double[numrows]; rowrange_ = new double[numrows]; } const double *rowlower = getRowLower(); const double *rowupper = getRowUpper(); int i; for (i = 0; i < numrows; i++) { char sense; double right; double range; convertBoundToSense(rowlower[i], rowupper[i], sense, right, range); rowsense_[i] = sense; rhs_[i] = right; rowrange_[i] = range; } } return rowsense_; } //----------------------------------------------------------------------------- const double *OGSI::getRightHandSide() const { if (rhs_ == NULL) { getRowSense(); //assert( rhs_ != NULL ); // Could be null if no rows. } return rhs_; } //----------------------------------------------------------------------------- const double *OGSI::getRowRange() const { if (rowrange_ == NULL) { getRowSense(); //assert( rowrange_ != NULL ); // Could be null if no rows. } return rowrange_; } //----------------------------------------------------------------------------- const double *OGSI::getRowLower() const { LPX *model = getMutableModelPtr(); if (rowlower_ == NULL) { assert(rowupper_ == NULL); int numrows = getNumRows(); if (numrows > 0) { rowlower_ = new double[numrows]; rowupper_ = new double[numrows]; } int i; for (i = 0; i < numrows; i++) { double inf = getInfinity(); int type; double lb; double ub; type = lpx_get_row_type(model, i + 1); lb = lpx_get_row_lb(model, i + 1); ub = lpx_get_row_ub(model, i + 1); switch (type) { case LPX_FR: lb = -inf; ub = inf; break; case LPX_LO: ub = inf; break; case LPX_UP: lb = -inf; break; case LPX_DB: case LPX_FX: break; default: assert(false); break; } rowlower_[i] = lb; rowupper_[i] = ub; } } return rowlower_; } //----------------------------------------------------------------------------- const double *OGSI::getRowUpper() const { if (rowupper_ == NULL) { getRowLower(); //assert( rowupper_ != NULL ); // Could be null if no rows. } return rowupper_; } //----------------------------------------------------------------------------- const double *OGSI::getObjCoefficients() const { if (obj_ == NULL) { LPX *model = getMutableModelPtr(); int numcols = getNumCols(); if (numcols > 0) { obj_ = new double[numcols]; } int i; for (i = 0; i < numcols; i++) { obj_[i] = lpx_get_obj_coef(model, i + 1); } } return obj_; } //----------------------------------------------------------------------------- double OGSI::getObjSense() const { if (lpx_get_obj_dir(lp_) == LPX_MIN) { return (+1.0); } else if (lpx_get_obj_dir(lp_) == LPX_MAX) { return (-1.0); } else // internal confusion { assert(false); return (0); } } //----------------------------------------------------------------------------- // Return information on integrality //----------------------------------------------------------------------------- bool OGSI::isContinuous(int colNumber) const { return lpx_get_col_kind(getMutableModelPtr(), colNumber + 1) == LPX_CV; } //----------------------------------------------------------------------------- // Row and column copies of the matrix ... //----------------------------------------------------------------------------- const CoinPackedMatrix *OGSI::getMatrixByRow() const { if (matrixByRow_ == NULL) { LPX *model = getMutableModelPtr(); matrixByRow_ = new CoinPackedMatrix(); matrixByRow_->transpose(); // converts to row-order matrixByRow_->setDimensions(0, getNumCols()); int numcols = getNumCols(); int *colind = new int[numcols + 1]; double *colelem = new double[numcols + 1]; int i; for (i = 0; i < getNumRows(); i++) { int colsize = lpx_get_mat_row(model, i + 1, colind, colelem); int j; for (j = 1; j <= colsize; j++) { --colind[j]; } // Note: lpx_get_mat_row apparently may return the // elements in decreasing order. This differs from // people's standard expectations but is not an error. matrixByRow_->appendRow(colsize, colind + 1, colelem + 1); } delete[] colind; delete[] colelem; if (numcols) matrixByRow_->removeGaps(); } return matrixByRow_; } //----------------------------------------------------------------------------- const CoinPackedMatrix *OGSI::getMatrixByCol() const { if (matrixByCol_ == NULL) { LPX *model = getMutableModelPtr(); matrixByCol_ = new CoinPackedMatrix(); matrixByCol_->setDimensions(getNumRows(), 0); int numrows = getNumRows(); int *rowind = new int[numrows + 1]; double *rowelem = new double[numrows + 1]; int j; for (j = 0; j < getNumCols(); j++) { int rowsize = lpx_get_mat_col(model, j + 1, rowind, rowelem); int i; for (i = 1; i <= rowsize; i++) { --rowind[i]; } matrixByCol_->appendCol(rowsize, rowind + 1, rowelem + 1); } delete[] rowind; delete[] rowelem; if (numrows) matrixByCol_->removeGaps(); } return matrixByCol_; } //----------------------------------------------------------------------------- // Get solver's value for infinity //----------------------------------------------------------------------------- double OGSI::getInfinity() const { return (CoinInfinity); } //############################################################################# // Problem information methods (results) //############################################################################# /* Retrieve column solution, querying solver if we don't have a cached solution. Refresh reduced costs while we're here. Reduced costs may or may not already exist (user can create a reduced cost vector by supplying duals (row price) and asking for reduced costs). Appropriate calls depend on whether last call to solver was simplex or branch-and-bound. */ const double *OGSI::getColSolution() const { /* Use the cached solution vector, if present. If we have no constraint system, return 0. */ if (colsol_ != 0) { return (colsol_); } int numcols = getNumCols(); if (numcols == 0) { return (0); } colsol_ = new double[numcols]; if (redcost_ != 0) delete[] redcost_; { redcost_ = new double[numcols]; } /* Grab the problem status. */ int probStatus; if (bbWasLast_) { probStatus = lpx_mip_status(lp_); } else { probStatus = lpx_get_status(lp_); } /* If the problem hasn't been solved, glpk returns zeros, but OSI requires that the solution be within bound. getColLower() will ensure both upper and lower bounds are present. There's an implicit assumption that we're feasible (i.e., collower[j] < colupper[j]). Solution values will be 0.0 unless that's outside the bounds. */ if (probStatus == LPX_UNDEF || probStatus == LPX_I_UNDEF) { getColLower(); int j; for (j = 0; j < numcols; j++) { colsol_[j] = 0.0; if (collower_[j] > 0.0) { colsol_[j] = collower_[j]; } else if (colupper_[j] < 0.0) { colsol_[j] = colupper_[j]; } } } /* We should have a defined solution. For simplex, refresh the reduced costs as well as the primal solution. Remove infinitesimals from the results. */ else if (bbWasLast_ == 0) { int j; for (j = 0; j < numcols; j++) { colsol_[j] = lpx_get_col_prim(lp_, j + 1); if (fabs(colsol_[j]) < GlpkZeroTol) { colsol_[j] = 0.0; } redcost_[j] = lpx_get_col_dual(lp_, j + 1); if (fabs(redcost_[j]) < GlpkZeroTol) { redcost_[j] = 0.0; } } } /* Last solve was branch-and-bound. Set the reduced costs to 0. Remove infinitesimals from the results. */ else { int j; for (j = 0; j < numcols; j++) { colsol_[j] = lpx_mip_col_val(lp_, j + 1); if (fabs(colsol_[j]) < GlpkZeroTol) { colsol_[j] = 0.0; } redcost_[j] = 0.0; } } return (colsol_); } //----------------------------------------------------------------------------- /* Acquire the row solution (dual variables). The user can set this independently, so use the cached copy if it's present. */ const double *OGSI::getRowPrice() const { /* If we have a cached solution, use it. If the constraint system is empty, return 0. Otherwise, allocate a new vector. */ if (rowsol_ != 0) { return (rowsol_); } int numrows = getNumRows(); if (numrows == 0) { return (0); } rowsol_ = new double[numrows]; /* For simplex, we have dual variables. For MIP, just set them to zero. Remove infinitesimals from the results. */ if (bbWasLast_ == 0) { int i; for (i = 0; i < numrows; i++) { rowsol_[i] = lpx_get_row_dual(lp_, i + 1); if (fabs(rowsol_[i]) < GlpkZeroTol) { rowsol_[i] = 0.0; } } } else { int i; for (i = 0; i < numrows; i++) { rowsol_[i] = 0; } } return (rowsol_); } //----------------------------------------------------------------------------- /* It's tempting to dive into glpk for this, but ... the client may have used setRowPrice(), and it'd be nice to return reduced costs that agree with the duals. To use glpk's routine (lpx_get_col_dual), the interface needs to track the origin of the dual (row price) values. */ const double *OGSI::getReducedCost() const { /* Return the cached copy, if it exists. */ if (redcost_ != 0) { return (redcost_); } /* We need to calculate. Make sure we have a constraint system, then allocate a vector and initialise it with the objective coefficients. */ int n = getNumCols(); if (n == 0) { return (0); } redcost_ = new double[n]; CoinDisjointCopyN(getObjCoefficients(), n, redcost_); /* Try and acquire dual variables. */ const double *y = getRowPrice(); if (!y) { return (redcost_); } /* Acquire the constraint matrix and calculate y*A. */ const CoinPackedMatrix *mtx = getMatrixByCol(); double *yA = new double[n]; mtx->transposeTimes(y, yA); /* Calculate c-yA and remove infinitesimals from the result. */ for (int j = 0; j < n; j++) { redcost_[j] -= yA[j]; if (fabs(redcost_[j]) < GlpkZeroTol) { redcost_[j] = 0; } } delete[] yA; return (redcost_); } //----------------------------------------------------------------------------- /* As with getReducedCost, we need to be mindful that the primal solution may have been set by the client. As it happens, however, glpk has no equivalent routine, so there's no temptation to resist. */ const double *OGSI::getRowActivity() const { /* Return the cached copy, if it exists. */ if (rowact_) { return (rowact_); } /* We need to calculate. Make sure we have a constraint system, then allocate a vector and initialise it with the objective coefficients. */ int m = getNumRows(); if (m == 0) { return (0); } rowact_ = new double[m]; /* Acquire primal variables. */ const double *x = getColSolution(); if (!x) { CoinZeroN(rowact_, m); return (rowact_); } /* Acquire the constraint matrix and calculate A*x. */ const CoinPackedMatrix *mtx = getMatrixByRow(); mtx->times(x, rowact_); /* Remove infinitesimals from the result. */ for (int i = 0; i < m; i++) { if (fabs(rowact_[i]) < GlpkZeroTol) { rowact_[i] = 0; } } return (rowact_); } //----------------------------------------------------------------------------- double OGSI::getObjValue() const { return OsiSolverInterface::getObjValue(); } //----------------------------------------------------------------------------- int OGSI::getIterationCount() const { return iter_used_; } //----------------------------------------------------------------------------- std::vector< double * > OGSI::getDualRays(int /*maxNumRays*/, bool /*fullRay*/) const { // ??? not yet implemented. throw CoinError("method is not yet implemented", "getDualRays", "OsiGlpkSolverInterface"); return std::vector< double * >(); } //----------------------------------------------------------------------------- std::vector< double * > OGSI::getPrimalRays(int /*maxNumRays*/) const { // ??? not yet implemented. throw CoinError("method is not yet implemented", "getPrimalRays", "OsiGlpkSolverInterface"); return std::vector< double * >(); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# /* Yes, I know the OSI spec says that pointers returned by get*() routines are valid only as long as the data is unchanged. But in practice, client code (in particular, portions of Cgl and Cbc) expects that simple changes to rim vector values will not invalidate pointers returned by the various get*() routines. So, for example, modifying an objective coefficient should not free the cached copies of the objective and column bounds. They should be updated on-the-fly. This is exactly the opposite of the original OsiGlpk design, hence this warning. Beyond that, it's helpful for an OSI to hold on to the current solution as long as possible. So, for example, a bounds change that does not make the current solution infeasible should not trash the cached solution. -- lh, 070326 */ void OGSI::setObjCoeff(int j, double cj) { assert(j >= 0 && j < getNumCols()); /* Remove the solution. Arguably the only thing that we should remove here is the cached reduced cost. */ freeCachedData(OGSI::KEEPCACHED_PROBLEM); /* Push the changed objective down to glpk. */ lpx_set_obj_coef(lp_, j + 1, cj); if (obj_) { obj_[j] = cj; } return; } //----------------------------------------------------------------------------- void OGSI::setColLower(int j, double lbj) { /* Get the upper bound, so we can call setColBounds. glpk reports 0 for an infinite bound, so we need to check the status and possibly correct. */ double inf = getInfinity(); int type = lpx_get_col_type(lp_, j + 1); double ubj = lpx_get_col_ub(lp_, j + 1); switch (type) { case LPX_UP: case LPX_DB: case LPX_FX: { break; } case LPX_FR: case LPX_LO: { ubj = inf; break; } default: { assert(false); } } #if OGSI_TRACK_FRESH > 0 /* Check if this bound really invalidates the current solution. This check will give false positives because OsiGlpk needs a notion of `valid solution from solver'. getColSolution will always return something, even if it has to make it up on the spot. */ { const double *x = getColSolution(); if (x) { if (x[j] < lbj - GlpkZeroTol) { std::cout << "OGSI(" << std::hex << this << std::dec << ")::setColLower: new bound " << lbj << " exceeds current value " << x[j] << " by " << (lbj - x[j]) << "." << std::endl; } } } #endif setColBounds(j, lbj, ubj); return; } //----------------------------------------------------------------------------- void OGSI::setColUpper(int j, double ubj) { /* Get the lower bound, so we can call setColBounds. glpk reports 0 for an infinite bound, so we need to check the status and possibly correct. */ double inf = getInfinity(); int type = lpx_get_col_type(lp_, j + 1); double lbj = lpx_get_col_lb(lp_, j + 1); switch (type) { case LPX_LO: case LPX_DB: case LPX_FX: { break; } case LPX_FR: case LPX_UP: { lbj = inf; break; } default: { assert(false); } } #if OGSI_TRACK_FRESH > 0 /* Check if this bound really invalidates the current solution. This check will give false positives because OsiGlpk needs a notion of `valid solution from solver'. getColSolution will always return something, even if it has to make it up on the spot. */ { const double *x = getColSolution(); if (x) { if (x[j] > ubj + GlpkZeroTol) { std::cout << "OGSI(" << std::hex << this << std::dec << ")::setColUpper: new bound " << ubj << " exceeds current value " << x[j] << " by " << (x[j] - ubj) << "." << std::endl; } } } #endif setColBounds(j, lbj, ubj); return; } //----------------------------------------------------------------------------- /* Yes, in theory, we shouldn't need to worry about maintaining those cached column bounds over changes to the problem. See the note at the top of this section. */ void OGSI::setColBounds(int j, double lower, double upper) { assert(j >= 0 && j < getNumCols()); /* Free only the cached solution. Keep the cached structural variables. */ freeCachedData(OGSI::KEEPCACHED_PROBLEM); /* Figure out what type we should use for glpk. */ double inf = getInfinity(); int type; if (lower == upper) { type = LPX_FX; } else if (lower > -inf && upper < inf) { type = LPX_DB; } else if (lower > -inf) { type = LPX_LO; } else if (upper < inf) { type = LPX_UP; } else { type = LPX_FR; } /* Push the bound change down into the solver. 1-based addressing. */ int statj = lpx_get_col_stat(lp_, j + 1); lpx_set_col_bnds(lp_, j + 1, type, lower, upper); lpx_set_col_stat(lp_, j + 1, statj); statj = lpx_get_col_stat(lp_, j + 1); /* Correct the cached upper and lower bound vectors, if present. */ if (collower_) { collower_[j] = lower; } if (colupper_) { colupper_[j] = upper; } return; } //----------------------------------------------------------------------------- void OGSI::setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { OsiSolverInterface::setColSetBounds(indexFirst, indexLast, boundList); } //----------------------------------------------------------------------------- void OGSI::setRowLower(int elementIndex, double elementValue) { // Could be in OsiSolverInterfaceImpl. double inf = getInfinity(); int type; double lb; double ub; type = lpx_get_row_type(getMutableModelPtr(), elementIndex + 1); ub = lpx_get_row_ub(getMutableModelPtr(), elementIndex + 1); lb = elementValue; switch (type) { case LPX_UP: case LPX_DB: case LPX_FX: break; case LPX_FR: case LPX_LO: ub = inf; break; default: assert(false); } setRowBounds(elementIndex, lb, ub); } //----------------------------------------------------------------------------- void OGSI::setRowUpper(int elementIndex, double elementValue) { // Could be in OsiSolverInterfaceImpl. double inf = getInfinity(); int type; double lb; double ub; type = lpx_get_row_type(getMutableModelPtr(), elementIndex + 1); lb = lpx_get_row_lb(getMutableModelPtr(), elementIndex + 1); ub = elementValue; switch (type) { case LPX_LO: case LPX_DB: case LPX_FX: break; case LPX_FR: case LPX_UP: lb = -inf; break; default: assert(false); } setRowBounds(elementIndex, lb, ub); } //----------------------------------------------------------------------------- /* As with setColBounds, just changing the bounds should not invalidate the current rim vectors. */ void OGSI::setRowBounds(int i, double lower, double upper) { /* Free only the row and column solution, keep the cached structural vectors. */ freeCachedData(OGSI::KEEPCACHED_PROBLEM); /* Figure out the correct row type for glpk and push the change down into the solver. 1-based addressing. */ double inf = getInfinity(); int type; if (lower == upper) { type = LPX_FX; } else if (lower > -inf && upper < inf) { type = LPX_DB; } else if (lower > -inf) { type = LPX_LO; } else if (upper < inf) { type = LPX_UP; } else { type = LPX_FR; } lpx_set_row_bnds(lp_, i + 1, type, lower, upper); /* Update cached vectors, if they exist. */ if (rowlower_) { rowlower_[i] = lower; } if (rowupper_) { rowupper_[i] = upper; } return; } //----------------------------------------------------------------------------- void OGSI::setRowType(int elementIndex, char sense, double rightHandSide, double range) { // Could be in OsiSolverInterfaceImpl. double lower = 0.0; double upper = 0.0; convertSenseToBound(sense, rightHandSide, range, lower, upper); setRowBounds(elementIndex, lower, upper); } //----------------------------------------------------------------------------- void OGSI::setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { // Could be in OsiSolverInterface (should'nt be implemeted at here). OsiSolverInterface::setRowSetBounds(indexFirst, indexLast, boundList); } //----------------------------------------------------------------------------- void OGSI::setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList) { // Could be in OsiSolverInterface (should'nt be implemeted at here). OsiSolverInterface::setRowSetTypes(indexFirst, indexLast, senseList, rhsList, rangeList); } //############################################################################# void OGSI::setContinuous(int index) { LPX *model = getMutableModelPtr(); freeCachedData(OGSI::FREECACHED_COLUMN); lpx_set_col_kind(model, index + 1, LPX_CV); } //----------------------------------------------------------------------------- void OGSI::setInteger(int index) { LPX *model = getMutableModelPtr(); freeCachedData(OGSI::FREECACHED_COLUMN); lpx_set_col_kind(model, index + 1, LPX_IV); /* Temporary hack to correct upper bounds on general integer variables. CoinMpsIO insists on forcing a bound of 1e30 for general integer variables with no upper bound. This causes several cut generators (MIR, MIR2) to fail. Put the bound back to infinity. -- lh, 070530 -- double uj = getColUpper()[index] ; if (uj >= 1e30) { setColUpper(index,getInfinity()) ; } */ return; } //----------------------------------------------------------------------------- void OGSI::setContinuous(const int *indices, int len) { // Could be in OsiSolverInterfaceImpl. int i; for (i = 0; i < len; i++) { setContinuous(indices[i]); } } //----------------------------------------------------------------------------- void OGSI::setInteger(const int *indices, int len) { // Could be in OsiSolverInterfaceImpl. int i; for (i = 0; i < len; i++) { setInteger(indices[i]); } } //############################################################################# /* Opt for the natural sense (minimisation) unless the user is clear that maximisation is what's desired. */ void OGSI::setObjSense(double s) { freeCachedData(OGSI::FREECACHED_RESULTS); if (s <= -1.0) { lpx_set_obj_dir(lp_, LPX_MAX); } else { lpx_set_obj_dir(lp_, LPX_MIN); } return; } //----------------------------------------------------------------------------- void OGSI::setColSolution(const double *cs) { // You probably don't want to use this function. You probably want // setWarmStart instead. // This implementation changes the cached information, // BUT DOES NOT TELL GLPK about the changes. In that sense, it's not // really useful. It is added to conform to current OSI expectations. // Other results (such as row prices) might not make sense with this // new solution, but we can't free all the results we have, since the // row prices may have already been set with setRowPrice. if (cs == 0) delete[] colsol_; else { int nc = getNumCols(); if (colsol_ == 0) colsol_ = new double[nc]; // Copy in new col solution. CoinDisjointCopyN(cs, nc, colsol_); } } //----------------------------------------------------------------------------- void OGSI::setRowPrice(const double *rs) { // You probably don't want to use this function. You probably want // setWarmStart instead. // This implementation changes the cached information, // BUT DOES NOT TELL GLPK about the changes. In that sense, it's not // really useful. It is added to conform to current OSI expectations. // Other results (such as column solutions) might not make sense with this // new solution, but we can't free all the results we have, since the // column solutions may have already been set with setColSolution. if (rs == 0) delete[] rowsol_; else { int nr = getNumRows(); if (rowsol_ == 0) rowsol_ = new double[nr]; // Copy in new col solution. CoinDisjointCopyN(rs, nr, rowsol_); } } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OGSI::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) { // Note: GLPK expects only non-zero coefficients will be given in // lpx_set_mat_col and will abort if there are any zeros. So any // zeros must be removed prior to calling lpx_set_mat_col. LPX *model = getMutableModelPtr(); freeCachedData(OGSI::KEEPCACHED_ROW); lpx_add_cols(model, 1); int numcols = getNumCols(); setColBounds(numcols - 1, collb, colub); setObjCoeff(numcols - 1, obj); int i; // For GLPK, we don't want the arrays to start at 0 // We also need to weed out any 0.0 coefficients const int *indices = vec.getIndices(); const double *elements = vec.getElements(); int numrows = getNumRows(); int *indices_adj = new int[1 + vec.getNumElements()]; double *elements_adj = new double[1 + vec.getNumElements()]; int count = 0; for (i = 0; i < vec.getNumElements(); i++) { if (elements[i] != 0.0) { if (indices[i] + 1 > numrows) { lpx_add_rows(model, indices[i] + 1 - numrows); numrows = indices[i] + 1; // ??? could do this more efficiently with a single call based on the max } count++; // GLPK arrays start at 1 indices_adj[count] = indices[i] + 1; elements_adj[count] = elements[i]; } } lpx_set_mat_col(model, numcols, count, indices_adj, elements_adj); delete[] indices_adj; delete[] elements_adj; #if OGSI_TRACK_FRESH > 2 std::cout << "OGSI(" << std::hex << this << std::dec << ")::addCol: new column." << std::endl; #endif } //----------------------------------------------------------------------------- void OGSI::addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj) { // ??? We could do this more efficiently now // Could be in OsiSolverInterfaceImpl. int i; for (i = 0; i < numcols; ++i) addCol(*(cols[i]), collb[i], colub[i], obj[i]); } //----------------------------------------------------------------------------- void OGSI::deleteCols(const int num, const int *columnIndices) { int *columnIndicesPlus1 = new int[num + 1]; LPX *model = getMutableModelPtr(); freeCachedData(OGSI::KEEPCACHED_ROW); for (int i = 0; i < num; i++) { columnIndicesPlus1[i + 1] = columnIndices[i] + 1; deleteColNames(columnIndices[i], 1); } lpx_del_cols(model, num, columnIndicesPlus1); delete[] columnIndicesPlus1; #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::deleteCols: deleted " << num << "columns." << std::endl; #endif } //----------------------------------------------------------------------------- void OGSI::addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) { // Note: GLPK expects only non-zero coefficients will be given in // lpx_set_mat_row and will abort if there are any zeros. So any // zeros must be removed prior to calling lpx_set_mat_row. LPX *model = getMutableModelPtr(); freeCachedData(OGSI::KEEPCACHED_COLUMN); lpx_add_rows(model, 1); int numrows = getNumRows(); setRowBounds(numrows - 1, rowlb, rowub); int i; const int *indices = vec.getIndices(); const double *elements = vec.getElements(); int numcols = getNumCols(); // For GLPK, we don't want the arrays to start at 0 // Also, we need to weed out any 0.0 elements int *indices_adj = new int[1 + vec.getNumElements()]; double *elements_adj = new double[1 + vec.getNumElements()]; int count = 0; for (i = 0; i < vec.getNumElements(); i++) { if (elements[i] != 0.0) { if (indices[i] + 1 > numcols) { // ??? Could do this more efficiently with a single call lpx_add_cols(model, indices[i] + 1 - numcols); numcols = indices[i] + 1; } count++; elements_adj[count] = elements[i]; indices_adj[count] = indices[i] + 1; } } lpx_set_mat_row(model, numrows, count, indices_adj, elements_adj); delete[] indices_adj; delete[] elements_adj; #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::addRow: new row." << std::endl; #endif } //----------------------------------------------------------------------------- void OGSI::addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) { // Could be in OsiSolverInterfaceImpl. double lb = 0.0; double ub = 0.0; convertSenseToBound(rowsen, rowrhs, rowrng, lb, ub); addRow(vec, lb, ub); } //----------------------------------------------------------------------------- void OGSI::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub) { // ??? Could do this more efficiently now // Could be in OsiSolverInterfaceImpl. int i; for (i = 0; i < numrows; ++i) addRow(*(rows[i]), rowlb[i], rowub[i]); } //----------------------------------------------------------------------------- void OGSI::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng) { // Could be in OsiSolverInterfaceImpl. int i; for (i = 0; i < numrows; ++i) addRow(*(rows[i]), rowsen[i], rowrhs[i], rowrng[i]); } //----------------------------------------------------------------------------- /* There's an expectation that a valid basis will be maintained across row deletions. Fortunately, glpk will do this automagically as long as we play by the rules and delete only slack constraints. If we delete a constraint with a nonbasic slack, we're in trouble. */ void OGSI::deleteRows(const int num, const int *osiIndices) { int *glpkIndices = new int[num + 1]; int i, ndx; /* Arguably, column results remain valid across row deletion. */ freeCachedData(OGSI::KEEPCACHED_COLUMN); /* Glpk uses 1-based indexing, so convert the array of indices. While we're doing that, delete the row names. */ for (ndx = 0; ndx < num; ndx++) { glpkIndices[ndx + 1] = osiIndices[ndx] + 1; deleteRowNames(osiIndices[ndx], 1); } /* See if we're about to do damage. If we delete a row with a nonbasic slack, we'll have an excess of basic variables. */ int notBasic = 0; for (ndx = 1; ndx <= num; ndx++) { i = glpkIndices[ndx]; int stati = lpx_get_row_stat(lp_, i); if (stati != LPX_BS) { notBasic++; } } if (notBasic) { #if OGSI_VERBOSITY > 1 std::cout << "OGSI(" << std::hex << this << std::dec << ")::deleteRows: deleting " << notBasic << " tight constraints; " << "basis is no longer valid." << std::endl; #endif } /* Tell glpk to delete the rows. */ lpx_del_rows(lp_, num, glpkIndices); delete[] glpkIndices; #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::deleteRows: deleted " << num << " rows." << std::endl; #endif return; } //############################################################################# // Methods to input a problem //############################################################################# void OGSI::loadProblem(const CoinPackedMatrix &matrix, const double *collb_parm, const double *colub_parm, const double *obj_parm, const double *rowlb_parm, const double *rowub_parm) { #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::loadProblem." << std::endl; #endif /* There's always an existing LPX object. If it's empty, we can simply load in the new data. If it's non-empty, easiest to delete it and start afresh. When we do this, we need to reload parameters. For hints, it's easiest to grab from the existing LPX structure. In any event, get rid of cached data in the OsiGlpk object. */ if (lpx_get_num_cols(lp_) != 0 || lpx_get_num_rows(lp_) != 0) { int presolVal = lpx_get_int_parm(lp_, LPX_K_PRESOL); int usedualVal = lpx_get_int_parm(lp_, LPX_K_DUAL); int scaleVal = lpx_get_int_parm(lp_, LPX_K_SCALE); int logVal = lpx_get_int_parm(lp_, LPX_K_MSGLEV); #if OGSI_TRACK_FRESH > 0 std::cout << " emptying LPX(" << std::hex << lp_ << std::dec << "), " #endif lpx_delete_prob(lp_); lp_ = lpx_create_prob(); assert(lp_); #if OGSI_TRACK_FRESH > 0 std::cout << "loading LPX(" << std::hex << lp_ << std::dec << ")." << std::endl; #endif lpx_set_class(lp_, LPX_MIP); lpx_set_int_parm(lp_, LPX_K_ITLIM, maxIteration_); if (getObjSense() == 1) // minimization { lpx_set_real_parm(lp_, LPX_K_OBJUL, dualObjectiveLimit_); lpx_set_real_parm(lp_, LPX_K_OBJLL, primalObjectiveLimit_); } else // maximization { lpx_set_real_parm(lp_, LPX_K_OBJLL, dualObjectiveLimit_); lpx_set_real_parm(lp_, LPX_K_OBJUL, primalObjectiveLimit_); } lpx_set_real_parm(lp_, LPX_K_TOLDJ, dualTolerance_); lpx_set_real_parm(lp_, LPX_K_TOLBND, primalTolerance_); lpx_set_obj_coef(lp_, 0, objOffset_); lpx_set_prob_name(lp_, const_cast< char * >(probName_.c_str())); lpx_set_int_parm(lp_, LPX_K_PRESOL, presolVal); lpx_set_int_parm(lp_, LPX_K_DUAL, usedualVal); lpx_set_int_parm(lp_, LPX_K_SCALE, scaleVal); lpx_set_int_parm(lp_, LPX_K_MSGLEV, logVal); messageHandler()->setLogLevel(logVal); } freeCachedData(OGSI::KEEPCACHED_NONE); double inf = getInfinity(); int m = matrix.getNumRows(); int n = matrix.getNumCols(); int i, j; double *zeroVec, *infVec, *negInfVec; const double *collb, *colub, *obj, *rowlb, *rowub; /* Check if we need default values for any of the vectors, and set up accordingly. */ if (collb_parm == 0 || obj_parm == 0) { zeroVec = new double[n]; CoinZeroN(zeroVec, n); } else { zeroVec = 0; } if (colub_parm == 0 || rowub_parm == 0) { if (colub_parm == 0 && rowub_parm == 0) { j = CoinMax(m, n); } else if (colub_parm == 0) { j = n; } else { j = m; } infVec = new double[j]; CoinFillN(infVec, j, inf); } else { infVec = 0; } if (rowlb_parm == 0) { negInfVec = new double[m]; CoinFillN(negInfVec, m, -inf); } else { negInfVec = 0; } if (collb_parm == 0) { collb = zeroVec; } else { collb = collb_parm; } if (colub_parm == 0) { colub = infVec; } else { colub = colub_parm; } if (obj_parm == 0) { obj = zeroVec; } else { obj = obj_parm; } if (rowlb_parm == 0) { rowlb = negInfVec; } else { rowlb = rowlb_parm; } if (rowub_parm == 0) { rowub = infVec; } else { rowub = rowub_parm; } /* The actual load. */ if (matrix.isColOrdered()) { for (j = 0; j < n; j++) { const CoinShallowPackedVector reqdBySunCC = matrix.getVector(j); addCol(reqdBySunCC, collb[j], colub[j], obj[j]); } // Make sure there are enough rows if (m > getNumRows()) { lpx_add_rows(lp_, m - getNumRows()); } for (i = 0; i < m; i++) { setRowBounds(i, rowlb[i], rowub[i]); } } else { for (i = 0; i < m; i++) { const CoinShallowPackedVector reqdBySunCC = matrix.getVector(i); addRow(reqdBySunCC, rowlb[i], rowub[i]); } // Make sure there are enough columns if (n > getNumCols()) { lpx_add_cols(lp_, n - getNumCols()); } for (j = 0; j < n; j++) { setColBounds(j, collb[j], colub[j]); setObjCoeff(j, obj[j]); } } /* Cleanup. */ if (zeroVec) delete[] zeroVec; if (infVec) delete[] infVec; if (negInfVec) delete[] negInfVec; return; } //----------------------------------------------------------------------------- void OGSI::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) { // Could be in OsiSolverInterfaceImpl. loadProblem(*matrix, collb, colub, obj, rowlb, rowub); delete matrix; matrix = NULL; delete[] collb; collb = NULL; delete[] colub; colub = NULL; delete[] obj; obj = NULL; delete[] rowlb; rowlb = NULL; delete[] rowub; rowub = NULL; } //----------------------------------------------------------------------------- void OGSI::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { // Could be in OsiSolverInterfaceImpl. int numrows = matrix.getNumRows(); double *rowlb = new double[numrows]; double *rowub = new double[numrows]; int i; for (i = numrows - 1; i >= 0; --i) { convertSenseToBound(rowsen ? rowsen[i] : 'G', rowrhs ? rowrhs[i] : 0.0, rowrng ? rowrng[i] : 0.0, rowlb[i], rowub[i]); } loadProblem(matrix, collb, colub, obj, rowlb, rowub); delete[] rowlb; delete[] rowub; } //----------------------------------------------------------------------------- void OGSI::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) { // Could be in OsiSolverInterfaceImpl. loadProblem(*matrix, collb, colub, obj, rowsen, rowrhs, rowrng); delete matrix; matrix = NULL; delete[] collb; collb = NULL; delete[] colub; colub = NULL; delete[] obj; obj = NULL; delete[] rowsen; rowsen = NULL; delete[] rowrhs; rowrhs = NULL; delete[] rowrng; rowrng = NULL; } //----------------------------------------------------------------------------- void OGSI::loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { freeCachedData(OGSI::KEEPCACHED_NONE); LPX *model = getMutableModelPtr(); double inf = getInfinity(); // Can't send 0 to lpx_add_xxx if (numcols > 0) lpx_add_cols(model, numcols); if (numrows > 0) lpx_add_rows(model, numrows); // How many elements? Column-major, so indices of start are columns CoinBigIndex numelem = start[numcols]; // int numelem = 0; // while ( index[numelem] != 0 ) // numelem++; int *index_adj = new int[1 + numelem]; double *value_adj = new double[1 + numelem]; int i; for (i = 1; i <= numelem; i++) { index_adj[i] = index[i - 1] + 1; value_adj[i] = value[i - 1]; } for (i = 0; i < numcols; i++) { setColBounds(i, collb ? collb[i] : 0.0, colub ? colub[i] : inf); lpx_set_mat_col(model, i + 1, static_cast< int >(start[i + 1] - start[i]), &(index_adj[start[i]]), &(value_adj[start[i]])); setObjCoeff(i, obj ? obj[i] : 0.0); } int j; for (j = 0; j < numrows; j++) { setRowBounds(j, rowlb ? rowlb[j] : -inf, rowub ? rowub[j] : inf); } delete[] index_adj; delete[] value_adj; } //----------------------------------------------------------------------------- void OGSI::loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { double *rowlb = new double[numrows]; double *rowub = new double[numrows]; for (int i = numrows - 1; i >= 0; --i) { convertSenseToBound(rowsen != NULL ? rowsen[i] : 'G', rowrhs != NULL ? rowrhs[i] : 0.0, rowrng != NULL ? rowrng[i] : 0.0, rowlb[i], rowub[i]); } loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowlb, rowub); delete[] rowlb; delete[] rowub; } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- /* Call OSI::readMps, which will parse the mps file and call OsiGlpk::loadProblem. */ int OGSI::readMps(const char *filename, const char *extension) { int retval = OsiSolverInterface::readMps(filename, extension); return (retval); } //----------------------------------------------------------------------------- // Write mps files //----------------------------------------------------------------------------- void OGSI::writeMps(const char *filename, const char *extension, double /*objSense*/) const { // Could be in OsiSolverInterfaceImpl. #if 1 std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; lpx_write_mps(getMutableModelPtr(), const_cast< char * >(fullname.c_str())); #else // Fall back on native MPS writer. // These few lines of code haven't been tested. 2004/10/15 std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; OsiSolverInterface::writeMpsNative(fullname.c_str(), NULL, NULL, 0, 2, objSense); #endif } //############################################################################ // GLPK-specific methods //############################################################################ // Get a pointer to the instance LPX *OGSI::getModelPtr() { freeCachedResults(); return lp_; } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# //----------------------------------------------------------------------------- // Default Constructor //----------------------------------------------------------------------------- OGSI::OsiGlpkSolverInterface() : OsiSolverInterface() { gutsOfConstructor(); incrementInstanceCounter(); #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << std::dec << "): default constructor." << std::endl; #endif } //----------------------------------------------------------------------------- // Clone //----------------------------------------------------------------------------- OsiSolverInterface *OGSI::clone(bool copyData) const { #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << std::dec << "): cloning." << std::endl; #endif if (copyData) return (new OsiGlpkSolverInterface(*this)); else return (new OsiGlpkSolverInterface()); } //----------------------------------------------------------------------------- // Copy constructor //----------------------------------------------------------------------------- OGSI::OsiGlpkSolverInterface(const OsiGlpkSolverInterface &source) : OsiSolverInterface(source) { gutsOfConstructor(); gutsOfCopy(source); incrementInstanceCounter(); #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << "): copy from " << &source << std::dec << "." << std::endl; #endif } //----------------------------------------------------------------------------- // Destructor //----------------------------------------------------------------------------- OGSI::~OsiGlpkSolverInterface() { gutsOfDestructor(); decrementInstanceCounter(); #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << std::dec << "): destructor." << std::endl; #endif } // Resets // ??? look over this carefully to be sure it is correct void OGSI::reset() { setInitialData(); // this is from the base class OsiSolverInterface gutsOfDestructor(); gutsOfConstructor(); #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << std::dec << "): reset." << std::endl; #endif return; } //----------------------------------------------------------------------------- // Assignment operator //----------------------------------------------------------------------------- OsiGlpkSolverInterface &OGSI::operator=(const OsiGlpkSolverInterface &rhs) { if (this != &rhs) { OsiSolverInterface::operator=(rhs); gutsOfDestructor(); gutsOfConstructor(); if (rhs.lp_ != NULL) gutsOfCopy(rhs); } #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << "): assign from " << &rhs << std::dec << "." << std::endl; #endif return *this; } //############################################################################# // Applying cuts //############################################################################# void OGSI::applyColCut(const OsiColCut &cc) { // Could be in OsiSolverInterfaceImpl. const double *colLb = getColLower(); const double *colUb = getColUpper(); const CoinPackedVector &lbs = cc.lbs(); const CoinPackedVector &ubs = cc.ubs(); int i; #if 0 // replaced (JJF) because colLb and colUb are invalidated by sets for( i = 0; i < lbs.getNumElements(); ++i ) if( lbs.getElements()[i] > colLb[lbs.getIndices()[i]] ) setColLower( lbs.getIndices()[i], lbs.getElements()[i] ); for( i = 0; i < ubs.getNumElements(); ++i ) if( ubs.getElements()[i] < colUb[ubs.getIndices()[i]] ) setColUpper( ubs.getIndices()[i], ubs.getElements()[i] ); #else double inf = getInfinity(); int type; // lower bounds for (i = 0; i < lbs.getNumElements(); ++i) { int column = lbs.getIndices()[i]; double lower = lbs.getElements()[i]; double upper = colUb[column]; if (lower > colLb[column]) { // update cached version as well collower_[column] = lower; if (lower == upper) type = LPX_FX; else if (lower > -inf && upper < inf) type = LPX_DB; else if (lower > -inf) type = LPX_LO; else if (upper < inf) type = LPX_UP; else type = LPX_FR; lpx_set_col_bnds(getMutableModelPtr(), column + 1, type, lower, upper); } } // lower bounds for (i = 0; i < ubs.getNumElements(); ++i) { int column = ubs.getIndices()[i]; double upper = ubs.getElements()[i]; double lower = colLb[column]; if (upper < colUb[column]) { // update cached version as well colupper_[column] = upper; if (lower == upper) type = LPX_FX; else if (lower > -inf && upper < inf) type = LPX_DB; else if (lower > -inf) type = LPX_LO; else if (upper < inf) type = LPX_UP; else type = LPX_FR; lpx_set_col_bnds(getMutableModelPtr(), column + 1, type, lower, upper); } } #endif } //----------------------------------------------------------------------------- void OGSI::applyRowCut(const OsiRowCut &rowCut) { // Could be in OsiSolverInterfaceImpl. addRow(rowCut.row(), rowCut.lb(), rowCut.ub()); } //############################################################################# // Private methods (non-static and static) and static data //############################################################################# LPX *OGSI::getMutableModelPtr(void) const { return lp_; } /* This routine must work even if there's no problem loaded in the solver. */ void OGSI::gutsOfCopy(const OsiGlpkSolverInterface &source) { LPX *srclpx = source.lp_; LPX *lpx = lp_; double dblParam; int intParam; std::string strParam; /* Copy information from the source OSI that a user might change before loading a problem: objective sense and offset, other OSI parameters. Use the get/set parameter calls here to hide pushing information into the LPX object. */ setObjSense(source.getObjSense()); source.getDblParam(OsiObjOffset, dblParam); setDblParam(OsiObjOffset, dblParam); source.getIntParam(OsiNameDiscipline, intParam); setIntParam(OsiNameDiscipline, intParam); source.getIntParam(OsiMaxNumIteration, intParam); setIntParam(OsiMaxNumIteration, intParam); source.getIntParam(OsiMaxNumIterationHotStart, intParam); setIntParam(OsiMaxNumIterationHotStart, intParam); source.getDblParam(OsiPrimalObjectiveLimit, dblParam); setDblParam(OsiPrimalObjectiveLimit, dblParam); source.getDblParam(OsiDualObjectiveLimit, dblParam); setDblParam(OsiDualObjectiveLimit, dblParam); source.getDblParam(OsiPrimalTolerance, dblParam); setDblParam(OsiPrimalTolerance, dblParam); source.getDblParam(OsiDualTolerance, dblParam); setDblParam(OsiDualTolerance, dblParam); /* For hints, we need to be a little more circumspect, so as not to pump out a bunch of warnings. Pull parameters from the source LPX object and load into the copy. The actual values of the hint parameters (sense & strength) are held up on the parent OSI object, so we don't need to worry about copying them. */ intParam = lpx_get_int_parm(srclpx, LPX_K_PRESOL); lpx_set_int_parm(lpx, LPX_K_PRESOL, intParam); intParam = lpx_get_int_parm(srclpx, LPX_K_DUAL); lpx_set_int_parm(lpx, LPX_K_DUAL, intParam); intParam = lpx_get_int_parm(srclpx, LPX_K_SCALE); lpx_set_int_parm(lpx, LPX_K_SCALE, intParam); /* Printing is a bit more complicated. Pull the parameter and set the log level in the message handler and set the print parameter in glpk. */ intParam = lpx_get_int_parm(srclpx, LPX_K_MSGLEV); lpx_set_int_parm(lpx, LPX_K_MSGLEV, intParam); messageHandler()->setLogLevel(intParam); #ifdef LPX_K_USECUTS intParam = lpx_get_int_parm(lp_, LPX_K_USECUTS); lpx_set_int_parm(lp_, LPX_K_USECUTS, intParam); #endif /* Now --- do we have a problem loaded? If not, we're done. */ int n = source.getNumCols(); int m = source.getNumRows(); assert(m >= 0 && n >= 0); if (m == 0 && n == 0) { #if OGSI_TRACK_SOLVERS > 0 std::cout << " no problem loaded." << std::endl; #endif return; } /* We have rows and/or columns, so we need to transfer the problem. Do a few parameters and status fields that may have changed if a problem is loaded. Then pull the problem information and load it into the lpx object for this OSI. Information on integrality must be copied over separately. */ source.getStrParam(OsiProbName, strParam); setStrParam(OsiProbName, strParam); bbWasLast_ = source.bbWasLast_; iter_used_ = source.iter_used_; const double *obj = source.getObjCoefficients(); const CoinPackedMatrix *cols = source.getMatrixByCol(); const double *lb = source.getColLower(); const double *ub = source.getColUpper(); const double *rlb = source.getRowLower(); const double *rub = source.getRowUpper(); loadProblem(*cols, lb, ub, obj, rlb, rub); int i, j; for (j = 0; j < n; j++) { if (source.isInteger(j)) { setInteger(j); } } /* Copy the solution information. We need to be a bit careful here. Even though the source has something loaded as a problem, there's no guarantee that we've even called glpk, so we can't consult glpk directly for solution values. */ setColSolution(source.getColSolution()); setRowPrice(source.getRowPrice()); /* We can, however, consult it directly for variable status: glpk initialises this information as soon as columns and/or rows are created. Of course, that applies to the problem we've just created, too. If we're just copying nonsense, then don't bother. Once we've copied the status into the new lpx object, do the warm-up. */ if (lpx_get_status(srclpx) != LPX_UNDEF) { for (j = 1; j <= n; j++) { int statj = lpx_get_col_stat(srclpx, j); lpx_set_col_stat(lpx, j, statj); } for (i = 1; i <= m; i++) { int stati = lpx_get_row_stat(srclpx, i); lpx_set_row_stat(lpx, i, stati); } #ifndef NDEBUG int retval = lpx_warm_up(lpx); #endif #if OGSI_TRACK_SOLVERS > 1 std::cout << " lpx_warm_up returns " << retval << "." << std::endl; #endif assert(retval == LPX_E_OK); } return; } //----------------------------------------------------------------------------- void OGSI::gutsOfConstructor() { bbWasLast_ = 0; iter_used_ = 0; obj_ = NULL; collower_ = NULL; colupper_ = NULL; ctype_ = NULL; rowsense_ = NULL; rhs_ = NULL; rowrange_ = NULL; rowlower_ = NULL; rowupper_ = NULL; colsol_ = NULL; rowsol_ = NULL; redcost_ = NULL; rowact_ = NULL; matrixByRow_ = NULL; matrixByCol_ = NULL; maxIteration_ = COIN_INT_MAX; hotStartMaxIteration_ = 0; nameDisc_ = 0; dualObjectiveLimit_ = getInfinity(); primalObjectiveLimit_ = -getInfinity(); dualTolerance_ = 1.0e-6; primalTolerance_ = 1.0e-6; objOffset_ = 0.0; probName_ = ""; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; isIterationLimitReached_ = false; isTimeLimitReached_ = false; isAbandoned_ = false; isPrimInfeasible_ = false; isDualInfeasible_ = false; isObjLowerLimitReached_ = false; isObjUpperLimitReached_ = false; isFeasible_ = false; lp_ = lpx_create_prob(); assert(lp_ != NULL); // Make all problems MIPs. See note at top of file. lpx_set_class(lp_, LPX_MIP); // Push OSI parameters down into LPX object. lpx_set_int_parm(lp_, LPX_K_ITLIM, maxIteration_); if (getObjSense() == 1.0) // minimization { lpx_set_real_parm(lp_, LPX_K_OBJUL, dualObjectiveLimit_); lpx_set_real_parm(lp_, LPX_K_OBJLL, primalObjectiveLimit_); } else // maximization { lpx_set_real_parm(lp_, LPX_K_OBJLL, dualObjectiveLimit_); lpx_set_real_parm(lp_, LPX_K_OBJUL, -primalObjectiveLimit_); } lpx_set_real_parm(lp_, LPX_K_TOLDJ, dualTolerance_); lpx_set_real_parm(lp_, LPX_K_TOLBND, primalTolerance_); lpx_set_obj_coef(lp_, 0, objOffset_); lpx_set_prob_name(lp_, const_cast< char * >(probName_.c_str())); /* Stefan: with the new simplex algorithm in Glpk 4.31, some netlib instances (e.g., dfl001) take very long or get into a cycle. Thus, let's try to leave parameters onto their defaults. */ // lpx_set_int_parm(lp_,LPX_K_PRESOL,0) ; // lpx_set_int_parm(lp_,LPX_K_DUAL,1) ; // lpx_set_int_parm(lp_,LPX_K_SCALE,3) ; /* Printing is a bit more complicated. Set the log level in the handler and set the print parameter in glpk. */ lpx_set_int_parm(lp_, LPX_K_MSGLEV, 1); messageHandler()->setLogLevel(1); /* Enable cuts if they're available. This is a bit of a pain, as the interface has changed since it was first introduced in 4.9. LPX_K_USECUTS appears in 4.9; the parameter value appears to be unused in this version. LPX_C_ALL appears in 4.10. */ #ifdef LPX_K_USECUTS #ifdef LPX_C_ALL lpx_set_int_parm(lp_, LPX_K_USECUTS, LPX_C_ALL); #else lpx_set_int_parm(lp_, LPX_K_USECUTS, 0); #endif #endif } //----------------------------------------------------------------------------- void OGSI::gutsOfDestructor() { if (lp_ != NULL) { lpx_delete_prob(lp_); lp_ = NULL; freeAllMemory(); } assert(lp_ == NULL); assert(obj_ == NULL); assert(collower_ == NULL); assert(colupper_ == NULL); assert(ctype_ == NULL); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(rowlower_ == NULL); assert(rowupper_ == NULL); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(redcost_ == NULL); assert(rowact_ == NULL); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); } //----------------------------------------------------------------------------- // free cached vectors //----------------------------------------------------------------------------- void OGSI::freeCachedColRim() { delete[] ctype_; delete[] obj_; delete[] collower_; delete[] colupper_; ctype_ = NULL; obj_ = NULL; collower_ = NULL; colupper_ = NULL; } //----------------------------------------------------------------------------- void OGSI::freeCachedRowRim() { delete[] rowsense_; delete[] rhs_; delete[] rowrange_; delete[] rowlower_; delete[] rowupper_; rowsense_ = NULL; rhs_ = NULL; rowrange_ = NULL; rowlower_ = NULL; rowupper_ = NULL; } //----------------------------------------------------------------------------- void OGSI::freeCachedMatrix() { delete matrixByRow_; delete matrixByCol_; matrixByRow_ = NULL; matrixByCol_ = NULL; } //----------------------------------------------------------------------------- void OGSI::freeCachedResults() { iter_used_ = 0; isAbandoned_ = false; isIterationLimitReached_ = false; isTimeLimitReached_ = false; isPrimInfeasible_ = false; isDualInfeasible_ = false; isFeasible_ = false; delete[] colsol_; delete[] rowsol_; delete[] redcost_; delete[] rowact_; colsol_ = NULL; rowsol_ = NULL; redcost_ = NULL; rowact_ = NULL; } //----------------------------------------------------------------------------- void OGSI::freeCachedData(int keepCached) { if (!(keepCached & OGSI::KEEPCACHED_COLUMN)) freeCachedColRim(); if (!(keepCached & OGSI::KEEPCACHED_ROW)) freeCachedRowRim(); if (!(keepCached & OGSI::KEEPCACHED_MATRIX)) freeCachedMatrix(); if (!(keepCached & OGSI::KEEPCACHED_RESULTS)) freeCachedResults(); } //----------------------------------------------------------------------------- void OGSI::freeAllMemory() { freeCachedData(OGSI::KEEPCACHED_NONE); delete[] hotStartCStat_; delete[] hotStartRStat_; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; } //----------------------------------------------------------------------------- /*! Set the objective function name. */ void OGSI::setObjName(std::string name) { OsiSolverInterface::setObjName(name); lpx_set_obj_name(lp_, const_cast< char * >(name.c_str())); } /*! Set a row name. Make sure both glpk and OSI see the same name. */ void OGSI::setRowName(int ndx, std::string name) { int nameDiscipline; /* Quietly do nothing if the index is out of bounds. */ if (ndx < 0 || ndx >= getNumRows()) { return; } /* Get the name discipline. Quietly do nothing if it's auto. */ (void)getIntParam(OsiNameDiscipline, nameDiscipline); if (nameDiscipline == 0) { return; } /* Set the name in the OSI base, then in the consys structure. */ OsiSolverInterface::setRowName(ndx, name); lpx_set_row_name(lp_, ndx + 1, const_cast< char * >(name.c_str())); return; } /*! Set a column name. Make sure both glpk and OSI see the same name. */ void OGSI::setColName(int ndx, std::string name) { int nameDiscipline; /* Quietly do nothing if the index is out of bounds. */ if (ndx < 0 || ndx >= getNumCols()) { return; } /* Get the name discipline. Quietly do nothing if it's auto. */ (void)getIntParam(OsiNameDiscipline, nameDiscipline); if (nameDiscipline == 0) { return; } /* Set the name in the OSI base, then in the consys structure. */ OsiSolverInterface::setColName(ndx, name); lpx_set_col_name(lp_, ndx + 1, const_cast< char * >(name.c_str())); return; } //----------------------------------------------------------------------------- unsigned int OsiGlpkSolverInterface::numInstances_ = 0; void OsiGlpkSolverInterface::decrementInstanceCounter() { assert(numInstances_ != 0); if (--numInstances_ == 0) glp_free_env(); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiGlpk/osi-glpk.pc.in0000644000175000017500000000051111510106235016651 0ustar sudipsudipprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiGlpk Description: COIN-OR Open Solver Interface for GLPK URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiGlpk @OSIGLPKLIB_PCLIBS@ Cflags: -I${includedir} Requires: osi @OSIGLPKLIB_PCREQUIRES@ Vol-1.5.4/Osi/src/OsiGlpk/Makefile.am0000644000175000017500000000330612243462564016252 0ustar sudipsudip# Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1942 2013-11-21 19:56:36Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiGlpk # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiGlpk.la # List all source files for this library, including headers libOsiGlpk_la_SOURCES = \ OsiGlpkSolverInterface.cpp OsiGlpkSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiGlpk_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la endif # This is for libtool libOsiGlpk_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) $(GLPK_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiGlpkSolverInterface.hpp Vol-1.5.4/Osi/src/Osi/0000755000175000017500000000000013434204224013364 5ustar sudipsudipVol-1.5.4/Osi/src/Osi/OsiChooseVariable.cpp0000644000175000017500000011335213414504051017435 0ustar sudipsudip// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include "CoinPragma.hpp" #include "OsiSolverInterface.hpp" #include "OsiAuxInfo.hpp" #include "OsiSolverBranch.hpp" #include "CoinWarmStartBasis.hpp" #include "CoinPackedMatrix.hpp" #include "CoinTime.hpp" #include "CoinSort.hpp" #include "CoinFinite.hpp" #include "OsiChooseVariable.hpp" using namespace std; OsiChooseVariable::OsiChooseVariable() : goodObjectiveValue_(COIN_DBL_MAX) , upChange_(0.0) , downChange_(0.0) , goodSolution_(NULL) , list_(NULL) , useful_(NULL) , solver_(NULL) , status_(-1) , bestObjectIndex_(-1) , bestWhichWay_(-1) , firstForcedObjectIndex_(-1) , firstForcedWhichWay_(-1) , numberUnsatisfied_(0) , numberStrong_(0) , numberOnList_(0) , numberStrongDone_(0) , numberStrongIterations_(0) , numberStrongFixed_(0) , trustStrongForBound_(true) , trustStrongForSolution_(true) { } OsiChooseVariable::OsiChooseVariable(const OsiSolverInterface *solver) : goodObjectiveValue_(COIN_DBL_MAX) , upChange_(0.0) , downChange_(0.0) , goodSolution_(NULL) , solver_(solver) , status_(-1) , bestObjectIndex_(-1) , bestWhichWay_(-1) , firstForcedObjectIndex_(-1) , firstForcedWhichWay_(-1) , numberUnsatisfied_(0) , numberStrong_(0) , numberOnList_(0) , numberStrongDone_(0) , numberStrongIterations_(0) , numberStrongFixed_(0) , trustStrongForBound_(true) , trustStrongForSolution_(true) { // create useful arrays int numberObjects = solver_->numberObjects(); list_ = new int[numberObjects]; useful_ = new double[numberObjects]; } OsiChooseVariable::OsiChooseVariable(const OsiChooseVariable &rhs) { goodObjectiveValue_ = rhs.goodObjectiveValue_; upChange_ = rhs.upChange_; downChange_ = rhs.downChange_; status_ = rhs.status_; bestObjectIndex_ = rhs.bestObjectIndex_; bestWhichWay_ = rhs.bestWhichWay_; firstForcedObjectIndex_ = rhs.firstForcedObjectIndex_; firstForcedWhichWay_ = rhs.firstForcedWhichWay_; numberUnsatisfied_ = rhs.numberUnsatisfied_; numberStrong_ = rhs.numberStrong_; numberOnList_ = rhs.numberOnList_; numberStrongDone_ = rhs.numberStrongDone_; numberStrongIterations_ = rhs.numberStrongIterations_; numberStrongFixed_ = rhs.numberStrongFixed_; trustStrongForBound_ = rhs.trustStrongForBound_; trustStrongForSolution_ = rhs.trustStrongForSolution_; solver_ = rhs.solver_; if (solver_) { int numberObjects = solver_->numberObjects(); int numberColumns = solver_->getNumCols(); if (rhs.goodSolution_) { goodSolution_ = CoinCopyOfArray(rhs.goodSolution_, numberColumns); } else { goodSolution_ = NULL; } list_ = CoinCopyOfArray(rhs.list_, numberObjects); useful_ = CoinCopyOfArray(rhs.useful_, numberObjects); } else { goodSolution_ = NULL; list_ = NULL; useful_ = NULL; } } OsiChooseVariable & OsiChooseVariable::operator=(const OsiChooseVariable &rhs) { if (this != &rhs) { delete[] goodSolution_; delete[] list_; delete[] useful_; goodObjectiveValue_ = rhs.goodObjectiveValue_; upChange_ = rhs.upChange_; downChange_ = rhs.downChange_; status_ = rhs.status_; bestObjectIndex_ = rhs.bestObjectIndex_; bestWhichWay_ = rhs.bestWhichWay_; firstForcedObjectIndex_ = rhs.firstForcedObjectIndex_; firstForcedWhichWay_ = rhs.firstForcedWhichWay_; numberUnsatisfied_ = rhs.numberUnsatisfied_; numberStrong_ = rhs.numberStrong_; numberOnList_ = rhs.numberOnList_; numberStrongDone_ = rhs.numberStrongDone_; numberStrongIterations_ = rhs.numberStrongIterations_; numberStrongFixed_ = rhs.numberStrongFixed_; trustStrongForBound_ = rhs.trustStrongForBound_; trustStrongForSolution_ = rhs.trustStrongForSolution_; solver_ = rhs.solver_; if (solver_) { int numberObjects = solver_->numberObjects(); int numberColumns = solver_->getNumCols(); if (rhs.goodSolution_) { goodSolution_ = CoinCopyOfArray(rhs.goodSolution_, numberColumns); } else { goodSolution_ = NULL; } list_ = CoinCopyOfArray(rhs.list_, numberObjects); useful_ = CoinCopyOfArray(rhs.useful_, numberObjects); } else { goodSolution_ = NULL; list_ = NULL; useful_ = NULL; } } return *this; } OsiChooseVariable::~OsiChooseVariable() { delete[] goodSolution_; delete[] list_; delete[] useful_; } // Clone OsiChooseVariable * OsiChooseVariable::clone() const { return new OsiChooseVariable(*this); } // Set solver and redo arrays void OsiChooseVariable::setSolver(const OsiSolverInterface *solver) { solver_ = solver; delete[] list_; delete[] useful_; // create useful arrays int numberObjects = solver_->numberObjects(); list_ = new int[numberObjects]; useful_ = new double[numberObjects]; } // Initialize int OsiChooseVariable::setupList(OsiBranchingInformation *info, bool initialize) { if (initialize) { status_ = -2; delete[] goodSolution_; bestObjectIndex_ = -1; numberStrongDone_ = 0; numberStrongIterations_ = 0; numberStrongFixed_ = 0; goodSolution_ = NULL; goodObjectiveValue_ = COIN_DBL_MAX; } numberOnList_ = 0; numberUnsatisfied_ = 0; int numberObjects = solver_->numberObjects(); assert(numberObjects); double check = 0.0; int checkIndex = 0; int bestPriority = COIN_INT_MAX; // pretend one strong even if none int maximumStrong = numberStrong_ ? CoinMin(numberStrong_, numberObjects) : 1; int putOther = numberObjects; int i; for (i = 0; i < maximumStrong; i++) { list_[i] = -1; useful_[i] = 0.0; } OsiObject **object = info->solver_->objects(); // Say feasible bool feasible = true; for (i = 0; i < numberObjects; i++) { int way; double value = object[i]->infeasibility(info, way); if (value > 0.0) { numberUnsatisfied_++; if (value == COIN_DBL_MAX) { // infeasible feasible = false; break; } int priorityLevel = object[i]->priority(); // Better priority? Flush choices. if (priorityLevel < bestPriority) { for (int j = 0; j < maximumStrong; j++) { if (list_[j] >= 0) { int iObject = list_[j]; list_[j] = -1; useful_[j] = 0.0; list_[--putOther] = iObject; } } bestPriority = priorityLevel; check = 0.0; } if (priorityLevel == bestPriority) { if (value > check) { //add to list int iObject = list_[checkIndex]; if (iObject >= 0) list_[--putOther] = iObject; // to end list_[checkIndex] = i; useful_[checkIndex] = value; // find worst check = COIN_DBL_MAX; for (int j = 0; j < maximumStrong; j++) { if (list_[j] >= 0) { if (useful_[j] < check) { check = useful_[j]; checkIndex = j; } } else { check = 0.0; checkIndex = j; break; } } } else { // to end list_[--putOther] = i; } } else { // to end list_[--putOther] = i; } } } // Get list numberOnList_ = 0; if (feasible) { for (i = 0; i < maximumStrong; i++) { if (list_[i] >= 0) { list_[numberOnList_] = list_[i]; useful_[numberOnList_++] = -useful_[i]; } } if (numberOnList_) { // Sort CoinSort_2(useful_, useful_ + numberOnList_, list_); // move others i = numberOnList_; for (; putOther < numberObjects; putOther++) list_[i++] = list_[putOther]; assert(i == numberUnsatisfied_); if (!numberStrong_) numberOnList_ = 0; } } else { // not feasible numberUnsatisfied_ = -1; } return numberUnsatisfied_; } /* Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from whichObject() and whichWay() We can pick up a forced branch (can change bound) from whichForcedObject() and whichForcedWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() */ int OsiChooseVariable::chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *, bool) { if (numberUnsatisfied_) { bestObjectIndex_ = list_[0]; bestWhichWay_ = solver->object(bestObjectIndex_)->whichWay(); firstForcedObjectIndex_ = -1; firstForcedWhichWay_ = -1; return 0; } else { return 1; } } // Returns true if solution looks feasible against given objects bool OsiChooseVariable::feasibleSolution(const OsiBranchingInformation *info, const double *solution, int numberObjects, const OsiObject **objects) { bool satisfied = true; const double *saveSolution = info->solution_; info->solution_ = solution; for (int i = 0; i < numberObjects; i++) { double value = objects[i]->checkInfeasibility(info); if (value > 0.0) { satisfied = false; break; } } info->solution_ = saveSolution; return satisfied; } // Saves a good solution void OsiChooseVariable::saveSolution(const OsiSolverInterface *solver) { delete[] goodSolution_; int numberColumns = solver->getNumCols(); goodSolution_ = CoinCopyOfArray(solver->getColSolution(), numberColumns); goodObjectiveValue_ = solver->getObjSense() * solver->getObjValue(); } // Clears out good solution after use void OsiChooseVariable::clearGoodSolution() { delete[] goodSolution_; goodSolution_ = NULL; goodObjectiveValue_ = COIN_DBL_MAX; } /* This is a utility function which does strong branching on a list of objects and stores the results in OsiHotInfo.objects. On entry the object sequence is stored in the OsiHotInfo object and maybe more. It returns - -1 - one branch was infeasible both ways 0 - all inspected - nothing can be fixed 1 - all inspected - some can be fixed (returnCriterion==0) 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) 3 - returning because max time */ int OsiChooseStrong::doStrongBranching(OsiSolverInterface *solver, OsiBranchingInformation *info, int numberToDo, int returnCriterion) { // Might be faster to extend branch() to return bounds changed double *saveLower = NULL; double *saveUpper = NULL; int numberColumns = solver->getNumCols(); solver->markHotStart(); const double *lower = info->lower_; const double *upper = info->upper_; saveLower = CoinCopyOfArray(info->lower_, numberColumns); saveUpper = CoinCopyOfArray(info->upper_, numberColumns); numResults_ = 0; int returnCode = 0; double timeStart = CoinCpuTime(); for (int iDo = 0; iDo < numberToDo; iDo++) { OsiHotInfo *result = results_ + iDo; // For now just 2 way OsiBranchingObject *branch = result->branchingObject(); assert(branch->numberBranches() == 2); /* Try the first direction. Each subsequent call to branch() performs the specified branch and advances the branch object state to the next branch alternative.) */ OsiSolverInterface *thisSolver = solver; if (branch->boundBranch()) { // ordinary branch->branch(solver); // maybe we should check bounds for stupidities here? solver->solveFromHotStart(); } else { // adding cuts or something thisSolver = solver->clone(); branch->branch(thisSolver); // set hot start iterations int limit; thisSolver->getIntParam(OsiMaxNumIterationHotStart, limit); thisSolver->setIntParam(OsiMaxNumIteration, limit); thisSolver->resolve(); } // can check if we got solution // status is 0 finished, 1 infeasible and 2 unfinished and 3 is solution int status0 = result->updateInformation(thisSolver, info, this); numberStrongIterations_ += thisSolver->getIterationCount(); if (status0 == 3) { // new solution already saved if (trustStrongForSolution_) { info->cutoff_ = goodObjectiveValue_; status0 = 0; } } if (solver != thisSolver) delete thisSolver; // Restore bounds for (int j = 0; j < numberColumns; j++) { if (saveLower[j] != lower[j]) solver->setColLower(j, saveLower[j]); if (saveUpper[j] != upper[j]) solver->setColUpper(j, saveUpper[j]); } /* Try the next direction */ thisSolver = solver; if (branch->boundBranch()) { // ordinary branch->branch(solver); // maybe we should check bounds for stupidities here? solver->solveFromHotStart(); } else { // adding cuts or something thisSolver = solver->clone(); branch->branch(thisSolver); // set hot start iterations int limit; thisSolver->getIntParam(OsiMaxNumIterationHotStart, limit); thisSolver->setIntParam(OsiMaxNumIteration, limit); thisSolver->resolve(); } // can check if we got solution // status is 0 finished, 1 infeasible and 2 unfinished and 3 is solution int status1 = result->updateInformation(thisSolver, info, this); numberStrongDone_++; numberStrongIterations_ += thisSolver->getIterationCount(); if (status1 == 3) { // new solution already saved if (trustStrongForSolution_) { info->cutoff_ = goodObjectiveValue_; status1 = 0; } } if (solver != thisSolver) delete thisSolver; // Restore bounds for (int j = 0; j < numberColumns; j++) { if (saveLower[j] != lower[j]) solver->setColLower(j, saveLower[j]); if (saveUpper[j] != upper[j]) solver->setColUpper(j, saveUpper[j]); } /* End of evaluation for this candidate variable. Possibilities are: * Both sides below cutoff; this variable is a candidate for branching. * Both sides infeasible or above the objective cutoff: no further action here. Break from the evaluation loop and assume the node will be purged by the caller. * One side below cutoff: Install the branch (i.e., fix the variable). Possibly break from the evaluation loop and assume the node will be reoptimised by the caller. */ numResults_++; if (status0 == 1 && status1 == 1) { // infeasible returnCode = -1; break; // exit loop } else if (status0 == 1 || status1 == 1) { numberStrongFixed_++; if (!returnCriterion) { returnCode = 1; } else { returnCode = 2; break; } } bool hitMaxTime = (CoinCpuTime() - timeStart > info->timeRemaining_); if (hitMaxTime) { returnCode = 3; break; } } delete[] saveLower; delete[] saveUpper; // Delete the snapshot solver->unmarkHotStart(); return returnCode; } // Given a candidate fill in useful information e.g. estimates void OsiChooseVariable::updateInformation(const OsiBranchingInformation *info, int, OsiHotInfo *hotInfo) { int index = hotInfo->whichObject(); assert(index < solver_->numberObjects()); //assert (branch<2); OsiObject **object = info->solver_->objects(); upChange_ = object[index]->upEstimate(); downChange_ = object[index]->downEstimate(); } #if 1 // Given a branch fill in useful information e.g. estimates void OsiChooseVariable::updateInformation(int index, int branch, double, double, int) { assert(index < solver_->numberObjects()); assert(branch < 2); OsiObject **object = solver_->objects(); if (branch) upChange_ = object[index]->upEstimate(); else downChange_ = object[index]->downEstimate(); } #endif //############################################################################## void OsiPseudoCosts::gutsOfDelete() { if (numberObjects_ > 0) { numberObjects_ = 0; numberBeforeTrusted_ = 0; delete[] upTotalChange_; upTotalChange_ = NULL; delete[] downTotalChange_; downTotalChange_ = NULL; delete[] upNumber_; upNumber_ = NULL; delete[] downNumber_; downNumber_ = NULL; } } void OsiPseudoCosts::gutsOfCopy(const OsiPseudoCosts &rhs) { numberObjects_ = rhs.numberObjects_; numberBeforeTrusted_ = rhs.numberBeforeTrusted_; if (numberObjects_ > 0) { upTotalChange_ = CoinCopyOfArray(rhs.upTotalChange_, numberObjects_); downTotalChange_ = CoinCopyOfArray(rhs.downTotalChange_, numberObjects_); upNumber_ = CoinCopyOfArray(rhs.upNumber_, numberObjects_); downNumber_ = CoinCopyOfArray(rhs.downNumber_, numberObjects_); } } OsiPseudoCosts::OsiPseudoCosts() : upTotalChange_(NULL) , downTotalChange_(NULL) , upNumber_(NULL) , downNumber_(NULL) , numberObjects_(0) , numberBeforeTrusted_(0) { } OsiPseudoCosts::~OsiPseudoCosts() { gutsOfDelete(); } OsiPseudoCosts::OsiPseudoCosts(const OsiPseudoCosts &rhs) : upTotalChange_(NULL) , downTotalChange_(NULL) , upNumber_(NULL) , downNumber_(NULL) , numberObjects_(0) , numberBeforeTrusted_(0) { gutsOfCopy(rhs); } OsiPseudoCosts & OsiPseudoCosts::operator=(const OsiPseudoCosts &rhs) { if (this != &rhs) { gutsOfDelete(); gutsOfCopy(rhs); } return *this; } void OsiPseudoCosts::initialize(int n) { gutsOfDelete(); numberObjects_ = n; if (numberObjects_ > 0) { upTotalChange_ = new double[numberObjects_]; downTotalChange_ = new double[numberObjects_]; upNumber_ = new int[numberObjects_]; downNumber_ = new int[numberObjects_]; CoinZeroN(upTotalChange_, numberObjects_); CoinZeroN(downTotalChange_, numberObjects_); CoinZeroN(upNumber_, numberObjects_); CoinZeroN(downNumber_, numberObjects_); } } //############################################################################## OsiChooseStrong::OsiChooseStrong() : OsiChooseVariable() , shadowPriceMode_(0) , pseudoCosts_() , results_(NULL) , numResults_(0) { } OsiChooseStrong::OsiChooseStrong(const OsiSolverInterface *solver) : OsiChooseVariable(solver) , shadowPriceMode_(0) , pseudoCosts_() , results_(NULL) , numResults_(0) { // create useful arrays pseudoCosts_.initialize(solver_->numberObjects()); } OsiChooseStrong::OsiChooseStrong(const OsiChooseStrong &rhs) : OsiChooseVariable(rhs) , shadowPriceMode_(rhs.shadowPriceMode_) , pseudoCosts_(rhs.pseudoCosts_) , results_(NULL) , numResults_(0) { } OsiChooseStrong & OsiChooseStrong::operator=(const OsiChooseStrong &rhs) { if (this != &rhs) { OsiChooseVariable::operator=(rhs); shadowPriceMode_ = rhs.shadowPriceMode_; pseudoCosts_ = rhs.pseudoCosts_; delete[] results_; results_ = NULL; numResults_ = 0; } return *this; } OsiChooseStrong::~OsiChooseStrong() { delete[] results_; } // Clone OsiChooseVariable * OsiChooseStrong::clone() const { return new OsiChooseStrong(*this); } #define MAXMIN_CRITERION 0.85 // Initialize int OsiChooseStrong::setupList(OsiBranchingInformation *info, bool initialize) { if (initialize) { status_ = -2; delete[] goodSolution_; bestObjectIndex_ = -1; numberStrongDone_ = 0; numberStrongIterations_ = 0; numberStrongFixed_ = 0; goodSolution_ = NULL; goodObjectiveValue_ = COIN_DBL_MAX; } numberOnList_ = 0; numberUnsatisfied_ = 0; int numberObjects = solver_->numberObjects(); if (numberObjects > pseudoCosts_.numberObjects()) { // redo useful arrays pseudoCosts_.initialize(numberObjects); } double check = -COIN_DBL_MAX; int checkIndex = 0; int bestPriority = COIN_INT_MAX; int maximumStrong = CoinMin(numberStrong_, numberObjects); int putOther = numberObjects; int i; for (i = 0; i < numberObjects; i++) { list_[i] = -1; useful_[i] = 0.0; } OsiObject **object = info->solver_->objects(); // Get average pseudo costs and see if pseudo shadow prices possible int shadowPossible = shadowPriceMode_; if (shadowPossible) { for (i = 0; i < numberObjects; i++) { if (!object[i]->canHandleShadowPrices()) { shadowPossible = 0; break; } } if (shadowPossible) { int numberRows = solver_->getNumRows(); const double *pi = info->pi_; double sumPi = 0.0; for (i = 0; i < numberRows; i++) sumPi += fabs(pi[i]); sumPi /= static_cast< double >(numberRows); // and scale back sumPi *= 0.01; info->defaultDual_ = sumPi; // switch on int numberColumns = solver_->getNumCols(); int size = CoinMax(numberColumns, 2 * numberRows); info->usefulRegion_ = new double[size]; CoinZeroN(info->usefulRegion_, size); info->indexRegion_ = new int[size]; } } double sumUp = 0.0; double numberUp = 0.0; double sumDown = 0.0; double numberDown = 0.0; const double *upTotalChange = pseudoCosts_.upTotalChange(); const double *downTotalChange = pseudoCosts_.downTotalChange(); const int *upNumber = pseudoCosts_.upNumber(); const int *downNumber = pseudoCosts_.downNumber(); const int numberBeforeTrusted = pseudoCosts_.numberBeforeTrusted(); for (i = 0; i < numberObjects; i++) { sumUp += upTotalChange[i]; numberUp += upNumber[i]; sumDown += downTotalChange[i]; numberDown += downNumber[i]; } double upMultiplier = (1.0 + sumUp) / (1.0 + numberUp); double downMultiplier = (1.0 + sumDown) / (1.0 + numberDown); // Say feasible bool feasible = true; #if 0 int pri[]={10,1000,10000}; int priCount[]={0,0,0}; #endif for (i = 0; i < numberObjects; i++) { int way; double value = object[i]->infeasibility(info, way); if (value > 0.0) { numberUnsatisfied_++; if (value == COIN_DBL_MAX) { // infeasible feasible = false; break; } int priorityLevel = object[i]->priority(); #if 0 for (int k=0;k<3;k++) { if (priorityLevel==pri[k]) priCount[k]++; } #endif // Better priority? Flush choices. if (priorityLevel < bestPriority) { for (int j = maximumStrong - 1; j >= 0; j--) { if (list_[j] >= 0) { int iObject = list_[j]; list_[j] = -1; useful_[j] = 0.0; list_[--putOther] = iObject; } } maximumStrong = CoinMin(maximumStrong, putOther); bestPriority = priorityLevel; check = -COIN_DBL_MAX; checkIndex = 0; } if (priorityLevel == bestPriority) { // Modify value sumUp = upTotalChange[i] + 1.0e-30; numberUp = upNumber[i]; sumDown = downTotalChange[i] + 1.0e-30; numberDown = downNumber[i]; double upEstimate = object[i]->upEstimate(); double downEstimate = object[i]->downEstimate(); if (shadowPossible < 2) { upEstimate = numberUp ? ((upEstimate * sumUp) / numberUp) : (upEstimate * upMultiplier); if (numberUp < numberBeforeTrusted) upEstimate *= (numberBeforeTrusted + 1.0) / (numberUp + 1.0); downEstimate = numberDown ? ((downEstimate * sumDown) / numberDown) : (downEstimate * downMultiplier); if (numberDown < numberBeforeTrusted) downEstimate *= (numberBeforeTrusted + 1.0) / (numberDown + 1.0); } else { // use shadow prices always } value = MAXMIN_CRITERION * CoinMin(upEstimate, downEstimate) + (1.0 - MAXMIN_CRITERION) * CoinMax(upEstimate, downEstimate); if (value > check) { //add to list int iObject = list_[checkIndex]; if (iObject >= 0) { assert(list_[putOther - 1] < 0); list_[--putOther] = iObject; // to end } list_[checkIndex] = i; assert(checkIndex < putOther); useful_[checkIndex] = value; // find worst check = COIN_DBL_MAX; maximumStrong = CoinMin(maximumStrong, putOther); for (int j = 0; j < maximumStrong; j++) { if (list_[j] >= 0) { if (useful_[j] < check) { check = useful_[j]; checkIndex = j; } } else { check = 0.0; checkIndex = j; break; } } } else { // to end assert(list_[putOther - 1] < 0); list_[--putOther] = i; maximumStrong = CoinMin(maximumStrong, putOther); } } else { // worse priority // to end assert(list_[putOther - 1] < 0); list_[--putOther] = i; maximumStrong = CoinMin(maximumStrong, putOther); } } } #if 0 printf("%d at %d, %d at %d and %d at %d\n",priCount[0],pri[0], priCount[1],pri[1],priCount[2],pri[2]); #endif // Get list numberOnList_ = 0; if (feasible) { for (i = 0; i < CoinMin(maximumStrong, putOther); i++) { if (list_[i] >= 0) { list_[numberOnList_] = list_[i]; useful_[numberOnList_++] = -useful_[i]; } } if (numberOnList_) { // Sort CoinSort_2(useful_, useful_ + numberOnList_, list_); // move others i = numberOnList_; for (; putOther < numberObjects; putOther++) list_[i++] = list_[putOther]; assert(i == numberUnsatisfied_); if (!numberStrong_) numberOnList_ = 0; } } else { // not feasible numberUnsatisfied_ = -1; } // Get rid of any shadow prices info info->defaultDual_ = -1.0; // switch off delete[] info->usefulRegion_; delete[] info->indexRegion_; return numberUnsatisfied_; } void OsiChooseStrong::resetResults(int num) { delete[] results_; numResults_ = 0; results_ = new OsiHotInfo[num]; } /* Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from whichObject() and whichWay() We can pick up a forced branch (can change bound) from whichForcedObject() and whichForcedWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() */ int OsiChooseStrong::chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *info, bool fixVariables) { if (numberUnsatisfied_) { const double *upTotalChange = pseudoCosts_.upTotalChange(); const double *downTotalChange = pseudoCosts_.downTotalChange(); const int *upNumber = pseudoCosts_.upNumber(); const int *downNumber = pseudoCosts_.downNumber(); int numberBeforeTrusted = pseudoCosts_.numberBeforeTrusted(); // Somehow we can get here with it 0 ! if (!numberBeforeTrusted) { numberBeforeTrusted = 5; pseudoCosts_.setNumberBeforeTrusted(numberBeforeTrusted); } int numberLeft = CoinMin(numberStrong_ - numberStrongDone_, numberUnsatisfied_); int numberToDo = 0; resetResults(numberLeft); int returnCode = 0; bestObjectIndex_ = -1; bestWhichWay_ = -1; firstForcedObjectIndex_ = -1; firstForcedWhichWay_ = -1; double bestTrusted = -COIN_DBL_MAX; for (int i = 0; i < numberLeft; i++) { int iObject = list_[i]; if (upNumber[iObject] < numberBeforeTrusted || downNumber[iObject] < numberBeforeTrusted) { results_[numberToDo++] = OsiHotInfo(solver, info, solver->objects(), iObject); } else { const OsiObject *obj = solver->object(iObject); double upEstimate = (upTotalChange[iObject] * obj->upEstimate()) / upNumber[iObject]; double downEstimate = (downTotalChange[iObject] * obj->downEstimate()) / downNumber[iObject]; double value = MAXMIN_CRITERION * CoinMin(upEstimate, downEstimate) + (1.0 - MAXMIN_CRITERION) * CoinMax(upEstimate, downEstimate); if (value > bestTrusted) { bestObjectIndex_ = iObject; bestWhichWay_ = upEstimate > downEstimate ? 0 : 1; bestTrusted = value; } } } int numberFixed = 0; if (numberToDo) { returnCode = doStrongBranching(solver, info, numberToDo, 1); if (returnCode >= 0 && returnCode <= 2) { if (returnCode) { returnCode = 4; if (bestObjectIndex_ >= 0) returnCode = 3; } for (int i = 0; i < numResults_; i++) { int iObject = results_[i].whichObject(); double upEstimate; if (results_[i].upStatus() != 1) { assert(results_[i].upStatus() >= 0); upEstimate = results_[i].upChange(); } else { // infeasible - just say expensive if (info->cutoff_ < 1.0e50) upEstimate = 2.0 * (info->cutoff_ - info->objectiveValue_); else upEstimate = 2.0 * fabs(info->objectiveValue_); if (firstForcedObjectIndex_ < 0) { firstForcedObjectIndex_ = iObject; firstForcedWhichWay_ = 0; } numberFixed++; if (fixVariables) { const OsiObject *obj = solver->object(iObject); OsiBranchingObject *branch = obj->createBranch(solver, info, 0); branch->branch(solver); delete branch; } } double downEstimate; if (results_[i].downStatus() != 1) { assert(results_[i].downStatus() >= 0); downEstimate = results_[i].downChange(); } else { // infeasible - just say expensive if (info->cutoff_ < 1.0e50) downEstimate = 2.0 * (info->cutoff_ - info->objectiveValue_); else downEstimate = 2.0 * fabs(info->objectiveValue_); if (firstForcedObjectIndex_ < 0) { firstForcedObjectIndex_ = iObject; firstForcedWhichWay_ = 1; } numberFixed++; if (fixVariables) { const OsiObject *obj = solver->object(iObject); OsiBranchingObject *branch = obj->createBranch(solver, info, 1); branch->branch(solver); delete branch; } } double value = MAXMIN_CRITERION * CoinMin(upEstimate, downEstimate) + (1.0 - MAXMIN_CRITERION) * CoinMax(upEstimate, downEstimate); if (value > bestTrusted) { bestTrusted = value; bestObjectIndex_ = iObject; bestWhichWay_ = upEstimate > downEstimate ? 0 : 1; // but override if there is a preferred way const OsiObject *obj = solver->object(iObject); if (obj->preferredWay() >= 0 && obj->infeasibility()) bestWhichWay_ = obj->preferredWay(); if (returnCode) returnCode = 2; } } } else if (returnCode == 3) { // max time - just choose one bestObjectIndex_ = list_[0]; bestWhichWay_ = 0; returnCode = 0; } } else { bestObjectIndex_ = list_[0]; } if (bestObjectIndex_ >= 0) { OsiObject *obj = solver->objects()[bestObjectIndex_]; obj->setWhichWay(bestWhichWay_); } if (numberFixed == numberUnsatisfied_ && numberFixed) returnCode = 4; return returnCode; } else { return 1; } } // Given a candidate fill in useful information e.g. estimates void OsiPseudoCosts::updateInformation(const OsiBranchingInformation *info, int branch, OsiHotInfo *hotInfo) { int index = hotInfo->whichObject(); assert(index < info->solver_->numberObjects()); const OsiObject *object = info->solver_->object(index); assert(object->upEstimate() > 0.0 && object->downEstimate() > 0.0); assert(branch < 2); if (branch) { if (hotInfo->upStatus() != 1) { assert(hotInfo->upStatus() >= 0); upTotalChange_[index] += hotInfo->upChange() / object->upEstimate(); upNumber_[index]++; } else { #if 0 // infeasible - just say expensive if (info->cutoff_<1.0e50) upTotalChange_[index] += 2.0*(info->cutoff_-info->objectiveValue_)/object->upEstimate(); else upTotalChange_[index] += 2.0*fabs(info->objectiveValue_)/object->upEstimate(); #endif } } else { if (hotInfo->downStatus() != 1) { assert(hotInfo->downStatus() >= 0); downTotalChange_[index] += hotInfo->downChange() / object->downEstimate(); downNumber_[index]++; } else { #if 0 // infeasible - just say expensive if (info->cutoff_<1.0e50) downTotalChange_[index] += 2.0*(info->cutoff_-info->objectiveValue_)/object->downEstimate(); else downTotalChange_[index] += 2.0*fabs(info->objectiveValue_)/object->downEstimate(); #endif } } } #if 1 // Given a branch fill in useful information e.g. estimates void OsiPseudoCosts::updateInformation(int index, int branch, double changeInObjective, double changeInValue, int status) { //assert (indexnumberObjects()); assert(branch < 2); assert(changeInValue > 0.0); assert(branch < 2); if (branch) { if (status != 1) { assert(status >= 0); upTotalChange_[index] += changeInObjective / changeInValue; upNumber_[index]++; } } else { if (status != 1) { assert(status >= 0); downTotalChange_[index] += changeInObjective / changeInValue; downNumber_[index]++; } } } #endif OsiHotInfo::OsiHotInfo() : originalObjectiveValue_(COIN_DBL_MAX) , changes_(NULL) , iterationCounts_(NULL) , statuses_(NULL) , branchingObject_(NULL) , whichObject_(-1) { } OsiHotInfo::OsiHotInfo(OsiSolverInterface *solver, const OsiBranchingInformation *info, const OsiObject *const *objects, int whichObject) : originalObjectiveValue_(COIN_DBL_MAX) , whichObject_(whichObject) { originalObjectiveValue_ = info->objectiveValue_; const OsiObject *object = objects[whichObject_]; // create object - "down" first branchingObject_ = object->createBranch(solver, info, 0); // create arrays int numberBranches = branchingObject_->numberBranches(); changes_ = new double[numberBranches]; iterationCounts_ = new int[numberBranches]; statuses_ = new int[numberBranches]; CoinZeroN(changes_, numberBranches); CoinZeroN(iterationCounts_, numberBranches); CoinFillN(statuses_, numberBranches, -1); } OsiHotInfo::OsiHotInfo(const OsiHotInfo &rhs) { originalObjectiveValue_ = rhs.originalObjectiveValue_; whichObject_ = rhs.whichObject_; if (rhs.branchingObject_) { branchingObject_ = rhs.branchingObject_->clone(); int numberBranches = branchingObject_->numberBranches(); changes_ = CoinCopyOfArray(rhs.changes_, numberBranches); iterationCounts_ = CoinCopyOfArray(rhs.iterationCounts_, numberBranches); statuses_ = CoinCopyOfArray(rhs.statuses_, numberBranches); } else { branchingObject_ = NULL; changes_ = NULL; iterationCounts_ = NULL; statuses_ = NULL; } } OsiHotInfo & OsiHotInfo::operator=(const OsiHotInfo &rhs) { if (this != &rhs) { delete branchingObject_; delete[] changes_; delete[] iterationCounts_; delete[] statuses_; originalObjectiveValue_ = rhs.originalObjectiveValue_; whichObject_ = rhs.whichObject_; if (rhs.branchingObject_) { branchingObject_ = rhs.branchingObject_->clone(); int numberBranches = branchingObject_->numberBranches(); changes_ = CoinCopyOfArray(rhs.changes_, numberBranches); iterationCounts_ = CoinCopyOfArray(rhs.iterationCounts_, numberBranches); statuses_ = CoinCopyOfArray(rhs.statuses_, numberBranches); } else { branchingObject_ = NULL; changes_ = NULL; iterationCounts_ = NULL; statuses_ = NULL; } } return *this; } OsiHotInfo::~OsiHotInfo() { delete branchingObject_; delete[] changes_; delete[] iterationCounts_; delete[] statuses_; } // Clone OsiHotInfo * OsiHotInfo::clone() const { return new OsiHotInfo(*this); } /* Fill in useful information after strong branch */ int OsiHotInfo::updateInformation(const OsiSolverInterface *solver, const OsiBranchingInformation *info, OsiChooseVariable *choose) { int iBranch = branchingObject_->branchIndex() - 1; assert(iBranch >= 0 && iBranch < branchingObject_->numberBranches()); iterationCounts_[iBranch] += solver->getIterationCount(); int status; if (solver->isProvenOptimal()) status = 0; // optimal else if (solver->isIterationLimitReached() && !solver->isDualObjectiveLimitReached()) status = 2; // unknown else status = 1; // infeasible // Could do something different if we can't trust double newObjectiveValue = solver->getObjSense() * solver->getObjValue(); changes_[iBranch] = CoinMax(0.0, newObjectiveValue - originalObjectiveValue_); // we might have got here by primal if (choose->trustStrongForBound()) { if (!status && newObjectiveValue >= info->cutoff_) { status = 1; // infeasible changes_[iBranch] = 1.0e100; } } statuses_[iBranch] = status; if (!status && choose->trustStrongForSolution() && newObjectiveValue < choose->goodObjectiveValue()) { // check if solution const OsiSolverInterface *saveSolver = info->solver_; info->solver_ = solver; const double *saveLower = info->lower_; info->lower_ = solver->getColLower(); const double *saveUpper = info->upper_; info->upper_ = solver->getColUpper(); // also need to make sure bounds OK as may not be info solver #if 0 if (saveSolver->getMatrixByCol()) { const CoinBigIndex * columnStart = info->columnStart_; assert (saveSolver->getMatrixByCol()->getVectorStarts()==columnStart); } #endif if (choose->feasibleSolution(info, solver->getColSolution(), solver->numberObjects(), const_cast< const OsiObject ** >(solver->objects()))) { // put solution somewhere choose->saveSolution(solver); status = 3; } info->solver_ = saveSolver; info->lower_ = saveLower; info->upper_ = saveUpper; } // Now update - possible strong branching info choose->updateInformation(info, iBranch, this); return status; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiBranchingObject.hpp0000644000175000017500000007565013414504051017606 0ustar sudipsudip// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiBranchingObject_H #define OsiBranchingObject_H #include #include #include #include "CoinError.hpp" #include "CoinTypes.hpp" class OsiSolverInterface; class OsiSolverBranch; class OsiBranchingObject; class OsiBranchingInformation; //############################################################################# //This contains the abstract base class for an object and for branching. //It also contains a simple integer class //############################################################################# /** Abstract base class for `objects'. The branching model used in Osi is based on the idea of an object. In the abstract, an object is something that has a feasible region, can be evaluated for infeasibility, can be branched on (i.e., there's some constructive action to be taken to move toward feasibility), and allows comparison of the effect of branching. This class (OsiObject) is the base class for an object. To round out the branching model, the class OsiBranchingObject describes how to perform a branch, and the class OsiBranchDecision describes how to compare two OsiBranchingObjects. To create a new type of object you need to provide three methods: #infeasibility(), #feasibleRegion(), and #createBranch(), described below. This base class is primarily virtual to allow for any form of structure. Any form of discontinuity is allowed. As there is an overhead in getting information from solvers and because other useful information is available there is also an OsiBranchingInformation class which can contain pointers to information. If used it must at minimum contain pointers to current value of objective, maximum allowed objective and pointers to arrays for bounds and solution and direction of optimization. Also integer and primal tolerance. Classes which inherit might have other information such as depth, number of solutions, pseudo-shadow prices etc etc. May be easier just to throw in here - as I keep doing */ class OsiObject { public: /// Default Constructor OsiObject(); /// Copy constructor OsiObject(const OsiObject &); /// Assignment operator OsiObject &operator=(const OsiObject &rhs); /// Clone virtual OsiObject *clone() const = 0; /// Destructor virtual ~OsiObject(); /** Infeasibility of the object This is some measure of the infeasibility of the object. 0.0 indicates that the object is satisfied. The preferred branching direction is returned in whichWay, where for normal two-way branching 0 is down, 1 is up This is used to prepare for strong branching but should also think of case when no strong branching The object may also compute an estimate of cost of going "up" or "down". This will probably be based on pseudo-cost ideas This should also set mutable infeasibility_ and whichWay_ This is for instant re-use for speed Default for this just calls infeasibility with OsiBranchingInformation NOTE - Convention says that an infeasibility of COIN_DBL_MAX means object has worked out it can't be satisfied! */ double infeasibility(const OsiSolverInterface *solver, int &whichWay) const; // Faster version when more information available virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const = 0; // This does NOT set mutable stuff virtual double checkInfeasibility(const OsiBranchingInformation *info) const; /** For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. Returns measure of how much it had to move solution to make feasible */ virtual double feasibleRegion(OsiSolverInterface *solver) const; /** For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. Returns measure of how much it had to move solution to make feasible Faster version */ virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const = 0; /** Create a branching object and indicate which way to branch first. The branching object has to know how to create branches (fix variables, etc.) */ virtual OsiBranchingObject *createBranch(OsiSolverInterface * /*solver*/, const OsiBranchingInformation * /*info*/, int /*way*/) const { throw CoinError("Need code", "createBranch", "OsiBranchingObject"); return NULL; } /** \brief Return true if object can take part in normal heuristics */ virtual bool canDoHeuristics() const { return true; } /** \brief Return true if object can take part in move to nearest heuristic */ virtual bool canMoveToNearest() const { return false; } /** Column number if single column object -1 otherwise, Used by heuristics */ virtual int columnNumber() const; /// Return Priority - note 1 is highest priority inline int priority() const { return priority_; } /// Set priority inline void setPriority(int priority) { priority_ = priority; } /** \brief Return true if branch should only bound variables */ virtual bool boundBranch() const { return true; } /// Return true if knows how to deal with Pseudo Shadow Prices virtual bool canHandleShadowPrices() const { return false; } /// Return maximum number of ways branch may have inline int numberWays() const { return numberWays_; } /// Set maximum number of ways branch may have inline void setNumberWays(int numberWays) { numberWays_ = static_cast< short int >(numberWays); } /** Return preferred way to branch. If two then way=0 means down and 1 means up, otherwise way points to preferred branch */ inline void setWhichWay(int way) { whichWay_ = static_cast< short int >(way); } /** Return current preferred way to branch. If two then way=0 means down and 1 means up, otherwise way points to preferred branch */ inline int whichWay() const { return whichWay_; } /// Get pre-emptive preferred way of branching - -1 off, 0 down, 1 up (for 2-way) virtual int preferredWay() const { return -1; } /// Return infeasibility inline double infeasibility() const { return infeasibility_; } /// Return "up" estimate (default 1.0e-5) virtual double upEstimate() const; /// Return "down" estimate (default 1.0e-5) virtual double downEstimate() const; /** Reset variable bounds to their original values. Bounds may be tightened, so it may be good to be able to reset them to their original values. */ virtual void resetBounds(const OsiSolverInterface *) {} /** Change column numbers after preprocessing */ virtual void resetSequenceEtc(int, const int *) {} /// Updates stuff like pseudocosts before threads virtual void updateBefore(const OsiObject *) {} /// Updates stuff like pseudocosts after threads finished virtual void updateAfter(const OsiObject *, const OsiObject *) {} protected: /// data /// Computed infeasibility mutable double infeasibility_; /// Computed preferred way to branch mutable short whichWay_; /// Maximum number of ways on branch short numberWays_; /// Priority int priority_; }; /// Define a class to add a bit of complexity to OsiObject /// This assumes 2 way branching class OsiObject2 : public OsiObject { public: /// Default Constructor OsiObject2(); /// Copy constructor OsiObject2(const OsiObject2 &); /// Assignment operator OsiObject2 &operator=(const OsiObject2 &rhs); /// Destructor virtual ~OsiObject2(); /// Set preferred way of branching - -1 off, 0 down, 1 up (for 2-way) inline void setPreferredWay(int value) { preferredWay_ = value; } /// Get preferred way of branching - -1 off, 0 down, 1 up (for 2-way) virtual int preferredWay() const { return preferredWay_; } protected: /// Preferred way of branching - -1 off, 0 down, 1 up (for 2-way) int preferredWay_; /// "Infeasibility" on other way mutable double otherInfeasibility_; }; /** \brief Abstract branching object base class In the abstract, an OsiBranchingObject contains instructions for how to branch. We want an abstract class so that we can describe how to branch on simple objects (e.g., integers) and more exotic objects (e.g., cliques or hyperplanes). The #branch() method is the crucial routine: it is expected to be able to step through a set of branch arms, executing the actions required to create each subproblem in turn. The base class is primarily virtual to allow for a wide range of problem modifications. See OsiObject for an overview of the two classes (OsiObject and OsiBranchingObject) which make up Osi's branching model. */ class OsiBranchingObject { public: /// Default Constructor OsiBranchingObject(); /// Constructor OsiBranchingObject(OsiSolverInterface *solver, double value); /// Copy constructor OsiBranchingObject(const OsiBranchingObject &); /// Assignment operator OsiBranchingObject &operator=(const OsiBranchingObject &rhs); /// Clone virtual OsiBranchingObject *clone() const = 0; /// Destructor virtual ~OsiBranchingObject(); /// The number of branch arms created for this branching object inline int numberBranches() const { return numberBranches_; } /// The number of branch arms left for this branching object inline int numberBranchesLeft() const { return numberBranches_ - branchIndex_; } /// Increment the number of branch arms left for this branching object inline void incrementNumberBranchesLeft() { numberBranches_++; } /** Set the number of branch arms left for this branching object Just for forcing */ inline void setNumberBranchesLeft(int /*value*/) { /*assert (value==1&&!branchIndex_);*/ numberBranches_ = 1; } /// Decrement the number of branch arms left for this branching object inline void decrementNumberBranchesLeft() { branchIndex_++; } /** \brief Execute the actions required to branch, as specified by the current state of the branching object, and advance the object's state. Returns change in guessed objective on next branch */ virtual double branch(OsiSolverInterface *solver) = 0; /** \brief Execute the actions required to branch, as specified by the current state of the branching object, and advance the object's state. Returns change in guessed objective on next branch */ virtual double branch() { return branch(NULL); } /** \brief Return true if branch should fix variables */ virtual bool boundBranch() const { return true; } /** Get the state of the branching object This is just the branch index */ inline int branchIndex() const { return branchIndex_; } /** Set the state of the branching object. */ inline void setBranchingIndex(int branchIndex) { branchIndex_ = static_cast< short int >(branchIndex); } /// Current value inline double value() const { return value_; } /// Return pointer back to object which created inline const OsiObject *originalObject() const { return originalObject_; } /// Set pointer back to object which created inline void setOriginalObject(const OsiObject *object) { originalObject_ = object; } /** Double checks in case node can change its mind! Returns objective value Can change objective etc */ virtual void checkIsCutoff(double) {} /// For debug int columnNumber() const; /** \brief Print something about branch - only if log level high */ virtual void print(const OsiSolverInterface * = NULL) const {} protected: /// Current value - has some meaning about branch double value_; /// Pointer back to object which created const OsiObject *originalObject_; /** Number of branches */ int numberBranches_; /** The state of the branching object. i.e. branch index This starts at 0 when created */ short branchIndex_; }; /* This contains information This could also contain pseudo shadow prices or information for dealing with computing and trusting pseudo-costs */ class OsiBranchingInformation { public: /// Default Constructor OsiBranchingInformation(); /** Useful Constructor (normalSolver true if has matrix etc etc) copySolution true if constructot should make a copy */ OsiBranchingInformation(const OsiSolverInterface *solver, bool normalSolver, bool copySolution = false); /// Copy constructor OsiBranchingInformation(const OsiBranchingInformation &); /// Assignment operator OsiBranchingInformation &operator=(const OsiBranchingInformation &rhs); /// Clone virtual OsiBranchingInformation *clone() const; /// Destructor virtual ~OsiBranchingInformation(); // Note public public: /// data /** State of search 0 - no solution 1 - only heuristic solutions 2 - branched to a solution 3 - no solution but many nodes */ int stateOfSearch_; /// Value of objective function (in minimization sense) double objectiveValue_; /// Value of objective cutoff (in minimization sense) double cutoff_; /// Direction 1.0 for minimization, -1.0 for maximization double direction_; /// Integer tolerance double integerTolerance_; /// Primal tolerance double primalTolerance_; /// Maximum time remaining before stopping on time double timeRemaining_; /// Dual to use if row bound violated (if negative then pseudoShadowPrices off) double defaultDual_; /// Pointer to solver mutable const OsiSolverInterface *solver_; /// The number of columns int numberColumns_; /// Pointer to current lower bounds on columns mutable const double *lower_; /// Pointer to current solution mutable const double *solution_; /// Pointer to current upper bounds on columns mutable const double *upper_; /// Highly optional target (hot start) solution const double *hotstartSolution_; /// Pointer to duals const double *pi_; /// Pointer to row activity const double *rowActivity_; /// Objective const double *objective_; /// Pointer to current lower bounds on rows const double *rowLower_; /// Pointer to current upper bounds on rows const double *rowUpper_; /// Elements in column copy of matrix const double *elementByColumn_; /// Column starts const CoinBigIndex *columnStart_; /// Column lengths const int *columnLength_; /// Row indices const int *row_; /** Useful region of length CoinMax(numberColumns,2*numberRows) This is allocated and deleted before OsiObject::infeasibility It is zeroed on entry and should be so on exit It only exists if defaultDual_>=0.0 */ double *usefulRegion_; /// Useful index region to go with usefulRegion_ int *indexRegion_; /// Number of solutions found int numberSolutions_; /// Number of branching solutions found (i.e. exclude heuristics) int numberBranchingSolutions_; /// Depth in tree int depth_; /// TEMP bool owningSolution_; }; /// This just adds two-wayness to a branching object class OsiTwoWayBranchingObject : public OsiBranchingObject { public: /// Default constructor OsiTwoWayBranchingObject(); /** Create a standard tw0-way branch object Specifies a simple two-way branch. Specify way = -1 to set the object state to perform the down arm first, way = 1 for the up arm. */ OsiTwoWayBranchingObject(OsiSolverInterface *solver, const OsiObject *originalObject, int way, double value); /// Copy constructor OsiTwoWayBranchingObject(const OsiTwoWayBranchingObject &); /// Assignment operator OsiTwoWayBranchingObject &operator=(const OsiTwoWayBranchingObject &rhs); /// Destructor virtual ~OsiTwoWayBranchingObject(); using OsiBranchingObject::branch; /** \brief Sets the bounds for the variable according to the current arm of the branch and advances the object state to the next arm. state. Returns change in guessed objective on next branch */ virtual double branch(OsiSolverInterface *solver) = 0; inline int firstBranch() const { return firstBranch_; } /// Way returns -1 on down +1 on up inline int way() const { return !branchIndex_ ? firstBranch_ : -firstBranch_; } protected: /// Which way was first branch -1 = down, +1 = up int firstBranch_; }; /// Define a single integer class class OsiSimpleInteger : public OsiObject2 { public: /// Default Constructor OsiSimpleInteger(); /// Useful constructor - passed solver index OsiSimpleInteger(const OsiSolverInterface *solver, int iColumn); /// Useful constructor - passed solver index and original bounds OsiSimpleInteger(int iColumn, double lower, double upper); /// Copy constructor OsiSimpleInteger(const OsiSimpleInteger &); /// Clone virtual OsiObject *clone() const; /// Assignment operator OsiSimpleInteger &operator=(const OsiSimpleInteger &rhs); /// Destructor virtual ~OsiSimpleInteger(); using OsiObject::infeasibility; /// Infeasibility - large is 0.5 virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const; using OsiObject::feasibleRegion; /** Set bounds to fix the variable at the current (integer) value. Given an integer value, set the lower and upper bounds to fix the variable. Returns amount it had to move variable. */ virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const; /** Creates a branching object The preferred direction is set by \p way, 0 for down, 1 for up. */ virtual OsiBranchingObject *createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const; /// Set solver column number inline void setColumnNumber(int value) { columnNumber_ = value; } /** Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics */ virtual int columnNumber() const; /// Original bounds inline double originalLowerBound() const { return originalLower_; } inline void setOriginalLowerBound(double value) { originalLower_ = value; } inline double originalUpperBound() const { return originalUpper_; } inline void setOriginalUpperBound(double value) { originalUpper_ = value; } /** Reset variable bounds to their original values. Bounds may be tightened, so it may be good to be able to reset them to their original values. */ virtual void resetBounds(const OsiSolverInterface *solver); /** Change column numbers after preprocessing */ virtual void resetSequenceEtc(int numberColumns, const int *originalColumns); /// Return "up" estimate (default 1.0e-5) virtual double upEstimate() const; /// Return "down" estimate (default 1.0e-5) virtual double downEstimate() const; /// Return true if knows how to deal with Pseudo Shadow Prices virtual bool canHandleShadowPrices() const { return false; } protected: /// data /// Original lower bound double originalLower_; /// Original upper bound double originalUpper_; /// Column number in solver int columnNumber_; }; /** Simple branching object for an integer variable This object can specify a two-way branch on an integer variable. For each arm of the branch, the upper and lower bounds on the variable can be independently specified. 0 -> down, 1-> up. */ class OsiIntegerBranchingObject : public OsiTwoWayBranchingObject { public: /// Default constructor OsiIntegerBranchingObject(); /** Create a standard floor/ceiling branch object Specifies a simple two-way branch. Let \p value = x*. One arm of the branch will be lb <= x <= floor(x*), the other ceil(x*) <= x <= ub. Specify way = -1 to set the object state to perform the down arm first, way = 1 for the up arm. */ OsiIntegerBranchingObject(OsiSolverInterface *solver, const OsiSimpleInteger *originalObject, int way, double value); /** Create a standard floor/ceiling branch object Specifies a simple two-way branch in a more flexible way. One arm of the branch will be lb <= x <= downUpperBound, the other upLowerBound <= x <= ub. Specify way = -1 to set the object state to perform the down arm first, way = 1 for the up arm. */ OsiIntegerBranchingObject(OsiSolverInterface *solver, const OsiSimpleInteger *originalObject, int way, double value, double downUpperBound, double upLowerBound); /// Copy constructor OsiIntegerBranchingObject(const OsiIntegerBranchingObject &); /// Assignment operator OsiIntegerBranchingObject &operator=(const OsiIntegerBranchingObject &rhs); /// Clone virtual OsiBranchingObject *clone() const; /// Destructor virtual ~OsiIntegerBranchingObject(); using OsiBranchingObject::branch; /** \brief Sets the bounds for the variable according to the current arm of the branch and advances the object state to the next arm. state. Returns change in guessed objective on next branch */ virtual double branch(OsiSolverInterface *solver); using OsiBranchingObject::print; /** \brief Print something about branch - only if log level high */ virtual void print(const OsiSolverInterface *solver = NULL); protected: // Probably could get away with just value which is already stored /// Lower [0] and upper [1] bounds for the down arm (way_ = -1) double down_[2]; /// Lower [0] and upper [1] bounds for the up arm (way_ = 1) double up_[2]; }; /** Define Special Ordered Sets of type 1 and 2. These do not have to be integer - so do not appear in lists of integers. which_ points columns of matrix */ class OsiSOS : public OsiObject2 { public: // Default Constructor OsiSOS(); /** Useful constructor - which are indices and weights are also given. If null then 0,1,2.. type is SOS type */ OsiSOS(const OsiSolverInterface *solver, int numberMembers, const int *which, const double *weights, int type = 1); // Copy constructor OsiSOS(const OsiSOS &); /// Clone virtual OsiObject *clone() const; // Assignment operator OsiSOS &operator=(const OsiSOS &rhs); // Destructor virtual ~OsiSOS(); using OsiObject::infeasibility; /// Infeasibility - large is 0.5 virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const; using OsiObject::feasibleRegion; /** Set bounds to fix the variable at the current (integer) value. Given an integer value, set the lower and upper bounds to fix the variable. Returns amount it had to move variable. */ virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const; /** Creates a branching object The preferred direction is set by \p way, 0 for down, 1 for up. */ virtual OsiBranchingObject *createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const; /// Return "up" estimate (default 1.0e-5) virtual double upEstimate() const; /// Return "down" estimate (default 1.0e-5) virtual double downEstimate() const; /// Redoes data when sequence numbers change virtual void resetSequenceEtc(int numberColumns, const int *originalColumns); /// Number of members inline int numberMembers() const { return numberMembers_; } /// Members (indices in range 0 ... numberColumns-1) inline const int *members() const { return members_; } /// SOS type inline int sosType() const { return sosType_; } /// SOS type inline int setType() const { return sosType_; } /** Array of weights */ inline const double *weights() const { return weights_; } /** \brief Return true if object can take part in normal heuristics */ virtual bool canDoHeuristics() const { return (sosType_ == 1 && integerValued_); } /// Set whether set is integer valued or not inline void setIntegerValued(bool yesNo) { integerValued_ = yesNo; } /// Return true if knows how to deal with Pseudo Shadow Prices virtual bool canHandleShadowPrices() const { return true; } /// Set number of members inline void setNumberMembers(int value) { numberMembers_ = value; } /// Members (indices in range 0 ... numberColumns-1) inline int *mutableMembers() const { return members_; } /// Set SOS type inline void setSosType(int value) { sosType_ = value; } /** Array of weights */ inline double *mutableWeights() const { return weights_; } protected: /// data /// Members (indices in range 0 ... numberColumns-1) int *members_; /// Weights double *weights_; /// Number of members int numberMembers_; /// SOS type int sosType_; /// Whether integer valued bool integerValued_; }; /** Branching object for Special ordered sets */ class OsiSOSBranchingObject : public OsiTwoWayBranchingObject { public: // Default Constructor OsiSOSBranchingObject(); // Useful constructor OsiSOSBranchingObject(OsiSolverInterface *solver, const OsiSOS *originalObject, int way, double separator); // Copy constructor OsiSOSBranchingObject(const OsiSOSBranchingObject &); // Assignment operator OsiSOSBranchingObject &operator=(const OsiSOSBranchingObject &rhs); /// Clone virtual OsiBranchingObject *clone() const; // Destructor virtual ~OsiSOSBranchingObject(); using OsiBranchingObject::branch; /// Does next branch and updates state virtual double branch(OsiSolverInterface *solver); using OsiBranchingObject::print; /** \brief Print something about branch - only if log level high */ virtual void print(const OsiSolverInterface *solver = NULL); private: /// data }; /** Lotsize class */ class OsiLotsize : public OsiObject2 { public: // Default Constructor OsiLotsize(); /* Useful constructor - passed model index. Also passed valid values - if range then pairs */ OsiLotsize(const OsiSolverInterface *solver, int iColumn, int numberPoints, const double *points, bool range = false); // Copy constructor OsiLotsize(const OsiLotsize &); /// Clone virtual OsiObject *clone() const; // Assignment operator OsiLotsize &operator=(const OsiLotsize &rhs); // Destructor virtual ~OsiLotsize(); using OsiObject::infeasibility; /// Infeasibility - large is 0.5 virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const; using OsiObject::feasibleRegion; /** Set bounds to contain the current solution. More precisely, for the variable associated with this object, take the value given in the current solution, force it within the current bounds if required, then set the bounds to fix the variable at the integer nearest the solution value. Returns amount it had to move variable. */ virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const; /** Creates a branching object The preferred direction is set by \p way, 0 for down, 1 for up. */ virtual OsiBranchingObject *createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const; /// Set solver column number inline void setColumnNumber(int value) { columnNumber_ = value; } /** Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics */ virtual int columnNumber() const; /** Reset original upper and lower bound values from the solver. Handy for updating bounds held in this object after bounds held in the solver have been tightened. */ virtual void resetBounds(const OsiSolverInterface *solver); /** Finds range of interest so value is feasible in range range_ or infeasible between hi[range_] and lo[range_+1]. Returns true if feasible. */ bool findRange(double value, double integerTolerance) const; /** Returns floor and ceiling */ virtual void floorCeiling(double &floorLotsize, double &ceilingLotsize, double value, double tolerance) const; /// Original bounds inline double originalLowerBound() const { return bound_[0]; } inline double originalUpperBound() const { return bound_[rangeType_ * numberRanges_ - 1]; } /// Type - 1 points, 2 ranges inline int rangeType() const { return rangeType_; } /// Number of points inline int numberRanges() const { return numberRanges_; } /// Ranges inline double *bound() const { return bound_; } /** Change column numbers after preprocessing */ virtual void resetSequenceEtc(int numberColumns, const int *originalColumns); /// Return "up" estimate (default 1.0e-5) virtual double upEstimate() const; /// Return "down" estimate (default 1.0e-5) virtual double downEstimate() const; /// Return true if knows how to deal with Pseudo Shadow Prices virtual bool canHandleShadowPrices() const { return true; } /** \brief Return true if object can take part in normal heuristics */ virtual bool canDoHeuristics() const { return false; } private: /// data /// Column number in model int columnNumber_; /// Type - 1 points, 2 ranges int rangeType_; /// Number of points int numberRanges_; // largest gap double largestGap_; /// Ranges double *bound_; /// Current range mutable int range_; }; /** Lotsize branching object This object can specify a two-way branch on an integer variable. For each arm of the branch, the upper and lower bounds on the variable can be independently specified. Variable_ holds the index of the integer variable in the integerVariable_ array of the model. */ class OsiLotsizeBranchingObject : public OsiTwoWayBranchingObject { public: /// Default constructor OsiLotsizeBranchingObject(); /** Create a lotsize floor/ceiling branch object Specifies a simple two-way branch. Let \p value = x*. One arm of the branch will be is lb <= x <= valid range below(x*), the other valid range above(x*) <= x <= ub. Specify way = -1 to set the object state to perform the down arm first, way = 1 for the up arm. */ OsiLotsizeBranchingObject(OsiSolverInterface *solver, const OsiLotsize *originalObject, int way, double value); /// Copy constructor OsiLotsizeBranchingObject(const OsiLotsizeBranchingObject &); /// Assignment operator OsiLotsizeBranchingObject &operator=(const OsiLotsizeBranchingObject &rhs); /// Clone virtual OsiBranchingObject *clone() const; /// Destructor virtual ~OsiLotsizeBranchingObject(); using OsiBranchingObject::branch; /** \brief Sets the bounds for the variable according to the current arm of the branch and advances the object state to the next arm. state. Returns change in guessed objective on next branch */ virtual double branch(OsiSolverInterface *solver); using OsiBranchingObject::print; /** \brief Print something about branch - only if log level high */ virtual void print(const OsiSolverInterface *solver = NULL); protected: /// Lower [0] and upper [1] bounds for the down arm (way_ = -1) double down_[2]; /// Lower [0] and upper [1] bounds for the up arm (way_ = 1) double up_[2]; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiRowCutDebugger.hpp0000644000175000017500000001375513414504051017452 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiRowCutDebugger_H #define OsiRowCutDebugger_H /*! \file OsiRowCutDebugger.hpp \brief Provides a facility to validate cut constraints to ensure that they do not cut off a given solution. */ #include #include "OsiCuts.hpp" #include "OsiSolverInterface.hpp" /*! \brief Validate cuts against a known solution OsiRowCutDebugger provides a facility for validating cuts against a known solution for a problem. The debugger knows an optimal solution for many of the miplib3 problems. Check the source for #activate(const OsiSolverInterface&,const char*) in OsiRowCutDebugger.cpp for the full set of known problems. A full solution vector can be supplied as a parameter with (#activate(const OsiSolverInterface&,const double*,bool)). Only the integer values need to be valid. The default behaviour is to solve an lp relaxation with the integer variables fixed to the specified values and use the optimal solution to fill in the continuous variables in the solution. The debugger can be instructed to preserve the continuous variables (useful when debugging solvers where the linear relaxation doesn't capture all the constraints). Note that the solution must match the problem held in the solver interface. If you want to use the row cut debugger on a problem after applying presolve transformations, your solution must match the presolved problem. (But see #redoSolution().) */ class OsiRowCutDebugger { friend void OsiRowCutDebuggerUnitTest(const OsiSolverInterface *siP, const std::string &mpsDir); public: /*! @name Validate Row Cuts Check that the specified cuts do not cut off the known solution. */ //@{ /*! \brief Check that the set of cuts does not cut off the solution known to the debugger. Check if any generated cuts cut off the solution known to the debugger! If so then print offending cuts. Return the number of invalid cuts. */ virtual int validateCuts(const OsiCuts &cs, int first, int last) const; /*! \brief Check that the cut does not cut off the solution known to the debugger. Return true if cut is invalid */ virtual bool invalidCut(const OsiRowCut &rowcut) const; /*! \brief Returns true if the solution held in the solver is compatible with the known solution. More specifically, returns true if the known solution satisfies the column bounds held in the solver. */ bool onOptimalPath(const OsiSolverInterface &si) const; //@} /*! @name Activate the Debugger The debugger is considered to be active when it holds a known solution. */ //@{ /*! \brief Activate a debugger using the name of a problem. The debugger knows an optimal solution for most of miplib3. Check the source code for the full list. Returns true if the debugger is successfully activated. */ bool activate(const OsiSolverInterface &si, const char *model); /*! \brief Activate a debugger using a full solution array. The solution must have one entry for every variable, but only the entries for integer values are used. By default the debugger will solve an lp relaxation with the integer variables fixed and fill in values for the continuous variables from this solution. If the debugger should preserve the given values for the continuous variables, set \p keepContinuous to \c true. Returns true if debugger activates successfully. */ bool activate(const OsiSolverInterface &si, const double *solution, bool keepContinuous = false); /// Returns true if the debugger is active bool active() const; //@} /*! @name Query or Manipulate the Known Solution */ //@{ /// Return the known solution inline const double *optimalSolution() const { return knownSolution_; } /// Return the number of columns in the known solution inline int numberColumns() const { return (numberColumns_); } /// Return the value of the objective for the known solution inline double optimalValue() const { return knownValue_; } /*! \brief Edit the known solution to reflect column changes Given a translation array \p originalColumns[numberColumns] which can translate current column indices to original column indices, this method will edit the solution held in the debugger so that it matches the current set of columns. Useful when the original problem is preprocessed prior to cut generation. The debugger does keep a record of the changes. */ void redoSolution(int numberColumns, const int *originalColumns); /// Print optimal solution (returns -1 bad debug, 0 on optimal, 1 not) int printOptimalSolution(const OsiSolverInterface &si) const; //@} /**@name Constructors and Destructors */ //@{ /// Default constructor - no checking OsiRowCutDebugger(); /*! \brief Constructor with name of model. See #activate(const OsiSolverInterface&,const char*). */ OsiRowCutDebugger(const OsiSolverInterface &si, const char *model); /*! \brief Constructor with full solution. See #activate(const OsiSolverInterface&,const double*,bool). */ OsiRowCutDebugger(const OsiSolverInterface &si, const double *solution, bool enforceOptimality = false); /// Copy constructor OsiRowCutDebugger(const OsiRowCutDebugger &); /// Assignment operator OsiRowCutDebugger &operator=(const OsiRowCutDebugger &rhs); /// Destructor virtual ~OsiRowCutDebugger(); //@} private: // Private member data /**@name Private member data */ //@{ /// Value of known solution double knownValue_; /*! \brief Number of columns in known solution This must match the number of columns reported by the solver. */ int numberColumns_; /// array specifying integer variables bool *integerVariable_; /// array specifying known solution double *knownSolution_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiRowCut.hpp0000644000175000017500000002030113414504051015766 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiRowCut_H #define OsiRowCut_H #include "CoinPackedVector.hpp" #include "OsiCollections.hpp" #include "OsiCut.hpp" //#define OSI_INLINE_ROWCUT_METHODS #ifdef OSI_INLINE_ROWCUT_METHODS #define OsiRowCut_inline inline #else #define OsiRowCut_inline #endif /** Row Cut Class A row cut has:
  • a lower bound
  • an upper bound
  • a vector of row elements
*/ class OsiRowCut : public OsiCut { friend void OsiRowCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir); public: /**@name Row bounds */ //@{ /// Get lower bound OsiRowCut_inline double lb() const; /// Set lower bound OsiRowCut_inline void setLb(double lb); /// Get upper bound OsiRowCut_inline double ub() const; /// Set upper bound OsiRowCut_inline void setUb(double ub); //@} /**@name Row rhs, sense, range */ //@{ /// Get sense ('E', 'G', 'L', 'N', 'R') char sense() const; /// Get right-hand side double rhs() const; /// Get range (ub - lb for 'R' rows, 0 otherwise) double range() const; //@} //------------------------------------------------------------------- /**@name Row elements */ //@{ /// Set row elements OsiRowCut_inline void setRow( int size, const int *colIndices, const double *elements, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /// Set row elements from a packed vector OsiRowCut_inline void setRow(const CoinPackedVector &v); /// Get row elements OsiRowCut_inline const CoinPackedVector &row() const; /// Get row elements for changing OsiRowCut_inline CoinPackedVector &mutableRow(); //@} /**@name Comparison operators */ //@{ #if __GNUC__ != 2 using OsiCut::operator==; #endif /** equal - true if lower bound, upper bound, row elements, and OsiCut are equal. */ OsiRowCut_inline bool operator==(const OsiRowCut &rhs) const; #if __GNUC__ != 2 using OsiCut::operator!=; #endif /// not equal OsiRowCut_inline bool operator!=(const OsiRowCut &rhs) const; //@} //---------------------------------------------------------------- /**@name Sanity checks on cut */ //@{ /** Returns true if the cut is consistent. This checks to ensure that:
  • The row element vector does not have duplicate indices
  • The row element vector indices are >= 0
*/ OsiRowCut_inline bool consistent() const; /** Returns true if cut is consistent with respect to the solver interface's model. This checks to ensure that
  • The row element vector indices are < the number of columns in the model
*/ OsiRowCut_inline bool consistent(const OsiSolverInterface &im) const; /** Returns true if the row cut itself is infeasible and cannot be satisfied. This checks whether
  • the lower bound is strictly greater than the upper bound.
*/ OsiRowCut_inline bool infeasible(const OsiSolverInterface &im) const; /** Returns infeasibility of the cut with respect to solution passed in i.e. is positive if cuts off that solution. solution is getNumCols() long.. */ virtual double violated(const double *solution) const; //@} /**@name Arithmetic operators. Apply CoinPackedVector methods to the vector */ //@{ /// add value to every vector entry void operator+=(double value) { row_ += value; } /// subtract value from every vector entry void operator-=(double value) { row_ -= value; } /// multiply every vector entry by value void operator*=(double value) { row_ *= value; } /// divide every vector entry by value void operator/=(double value) { row_ /= value; } //@} /// Allow access row sorting function void sortIncrIndex() { row_.sortIncrIndex(); } /**@name Constructors and destructors */ //@{ /// Assignment operator OsiRowCut &operator=(const OsiRowCut &rhs); /// Copy constructor OsiRowCut(const OsiRowCut &); /// Clone virtual OsiRowCut *clone() const; /// Default Constructor OsiRowCut(); /** \brief Ownership Constructor This constructor assumes ownership of the vectors passed as parameters for indices and elements. \p colIndices and \p elements will be NULL on return. */ OsiRowCut(double cutlb, double cutub, int capacity, int size, int *&colIndices, double *&elements); /// Destructor virtual ~OsiRowCut(); //@} /**@name Debug stuff */ //@{ /// Print cuts in collection virtual void print() const; //@} private: /**@name Private member data */ //@{ /// Row elements CoinPackedVector row_; /// Row lower bound double lb_; /// Row upper bound double ub_; //@} }; #ifdef OSI_INLINE_ROWCUT_METHODS //------------------------------------------------------------------- // Set/Get lower & upper bounds //------------------------------------------------------------------- double OsiRowCut::lb() const { return lb_; } void OsiRowCut::setLb(double lb) { lb_ = lb; } double OsiRowCut::ub() const { return ub_; } void OsiRowCut::setUb(double ub) { ub_ = ub; } //------------------------------------------------------------------- // Set row elements //------------------------------------------------------------------- void OsiRowCut::setRow(int size, const int *colIndices, const double *elements) { row_.setVector(size, colIndices, elements); } void OsiRowCut::setRow(const CoinPackedVector &v) { row_ = v; } //------------------------------------------------------------------- // Get the row //------------------------------------------------------------------- const CoinPackedVector &OsiRowCut::row() const { return row_; } //------------------------------------------------------------------- // Get the row so we can change //------------------------------------------------------------------- CoinPackedVector &OsiRowCut::mutableRow() { return row_; } //---------------------------------------------------------------- // == operator //------------------------------------------------------------------- bool OsiRowCut::operator==(const OsiRowCut &rhs) const { if (this->OsiCut::operator!=(rhs)) return false; if (row() != rhs.row()) return false; if (lb() != rhs.lb()) return false; if (ub() != rhs.ub()) return false; return true; } bool OsiRowCut::operator!=(const OsiRowCut &rhs) const { return !((*this) == rhs); } //---------------------------------------------------------------- // consistent & infeasible //------------------------------------------------------------------- bool OsiRowCut::consistent() const { const CoinPackedVector &r = row(); r.duplicateIndex("consistent", "OsiRowCut"); if (r.getMinIndex() < 0) return false; return true; } bool OsiRowCut::consistent(const OsiSolverInterface &im) const { const CoinPackedVector &r = row(); if (r.getMaxIndex() >= im.getNumCols()) return false; return true; } bool OsiRowCut::infeasible(const OsiSolverInterface &im) const { if (lb() > ub()) return true; return false; } #endif /** Row Cut Class which refers back to row which created it. It may be useful to strengthen a row rather than add a cut. To do this we need to know which row is strengthened. This trivial extension to OsiRowCut does that. */ class OsiRowCut2 : public OsiRowCut { public: /**@name Which row */ //@{ /// Get row inline int whichRow() const { return whichRow_; } /// Set row inline void setWhichRow(int row) { whichRow_ = row; } //@} /**@name Constructors and destructors */ //@{ /// Assignment operator OsiRowCut2 &operator=(const OsiRowCut2 &rhs); /// Copy constructor OsiRowCut2(const OsiRowCut2 &); /// Clone virtual OsiRowCut *clone() const; /// Default Constructor OsiRowCut2(int row = -1); /// Destructor virtual ~OsiRowCut2(); //@} private: /**@name Private member data */ //@{ /// Which row int whichRow_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiPresolve.hpp0000644000175000017500000002270613414504051016355 0ustar sudipsudip// Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiPresolve_H #define OsiPresolve_H #include "OsiSolverInterface.hpp" class CoinPresolveAction; #include "CoinPresolveMatrix.hpp" /*! \class OsiPresolve \brief OSI interface to COIN problem simplification capabilities COIN provides a number of classes which implement problem simplification algorithms (CoinPresolveAction, CoinPrePostsolveMatrix, and derived classes). The model of operation is as follows:
  • Create a copy of the original problem.
  • Subject the copy to a series of transformations (the presolve methods) to produce a presolved model. Each transformation is also expected to provide a method to reverse the transformation (the postsolve method). The postsolve methods are collected in a linked list; the postsolve method for the final presolve transformation is at the head of the list.
  • Hand the presolved problem to the solver for optimization.
  • Apply the collected postsolve methods to the presolved problem and solution, restating the solution in terms of the original problem.
The COIN presolve algorithms are unaware of OSI. The OsiPresolve class takes care of the interface. Given an OsiSolverInterface \c origModel, it will take care of creating a clone properly loaded with the presolved problem and ready for optimization. After optimization, it will apply postsolve transformations and load the result back into \c origModel. Assuming a problem has been loaded into an \c OsiSolverInterface \c origModel, a bare-bones application looks like this: \code OsiPresolve pinfo ; OsiSolverInterface *presolvedModel ; // Return an OsiSolverInterface loaded with the presolved problem. presolvedModel = pinfo.presolvedModel(*origModel,1.0e-8,false,numberPasses) ; presolvedModel->initialSolve() ; // Restate the solution and load it back into origModel. pinfo.postsolve(true) ; delete presolvedModel ; \endcode */ class OsiPresolve { public: /// Default constructor (empty object) OsiPresolve(); /// Virtual destructor virtual ~OsiPresolve(); /*! \brief Create a new OsiSolverInterface loaded with the presolved problem. This method implements the first two steps described in the class documentation. It clones \c origModel and applies presolve transformations, storing the resulting list of postsolve transformations. It returns a pointer to a new OsiSolverInterface loaded with the presolved problem, or NULL if the problem is infeasible or unbounded. If \c keepIntegers is true then bounds may be tightened in the original. Bounds will be moved by up to \c feasibilityTolerance to try and stay feasible. When \c doStatus is true, the current solution will be transformed to match the presolved model. This should be paired with postsolve(). It is up to the client to destroy the returned OsiSolverInterface, after calling postsolve(). This method is virtual. Override this method if you need to customize the steps of creating a model to apply presolve transformations. In some sense, a wrapper for presolve(CoinPresolveMatrix*). */ virtual OsiSolverInterface *presolvedModel(OsiSolverInterface &origModel, double feasibilityTolerance = 0.0, bool keepIntegers = true, int numberPasses = 5, const char *prohibited = NULL, bool doStatus = true, const char *rowProhibited = NULL); /*! \brief Restate the solution to the presolved problem in terms of the original problem and load it into the original model. postsolve() restates the solution in terms of the original problem and updates the original OsiSolverInterface supplied to presolvedModel(). If the problem has not been solved to optimality, there are no guarantees. If you are using an algorithm like simplex that has a concept of a basic solution, then set updateStatus The advantage of going back to the original problem is that it will be exactly as it was, i.e., 0.0 will not become 1.0e-19. Note that if you modified the original problem after presolving, then you must ``undo'' these modifications before calling postsolve(). In some sense, a wrapper for postsolve(CoinPostsolveMatrix&). */ virtual void postsolve(bool updateStatus = true); /*! \brief Return a pointer to the presolved model. */ OsiSolverInterface *model() const; /// Return a pointer to the original model OsiSolverInterface *originalModel() const; /// Set the pointer to the original model void setOriginalModel(OsiSolverInterface *model); /// Return a pointer to the original columns const int *originalColumns() const; /// Return a pointer to the original rows const int *originalRows() const; /// Return number of rows in original model inline int getNumRows() const { return nrows_; } /// Return number of columns in original model inline int getNumCols() const { return ncols_; } /** "Magic" number. If this is non-zero then any elements with this value may change and so presolve is very limited in what can be done to the row and column. This is for non-linear problems. */ inline void setNonLinearValue(double value) { nonLinearValue_ = value; } inline double nonLinearValue() const { return nonLinearValue_; } /*! \brief Fine control over presolve actions Set/clear the following bits to allow or suppress actions: - 0x01 allow duplicate column processing on integer columns and dual stuff on integers - 0x02 switch off actions which can change +1 to something else (doubleton, tripleton, implied free) - 0x04 allow transfer of costs from singletons and between integer variables (when advantageous) - 0x08 do not allow x+y+z=1 transform - 0x10 allow actions that don't easily unroll - 0x20 allow dubious gub element reduction GUB element reduction is only partially implemented in CoinPresolve (see gubrow_action) and willl cause an abort at postsolve. It's not clear what's meant by `dual stuff on integers'. -- lh, 110605 -- */ inline void setPresolveActions(int action) { presolveActions_ = (presolveActions_ & 0xffff0000) | (action & 0xffff); } /// Get presolved model inline OsiSolverInterface *presolvedModel() const { return presolvedModel_; } /// Set presolved model inline void setPresolvedModel(OsiSolverInterface *presolvedModel) { presolvedModel_ = presolvedModel; } private: /*! Original model (solver interface loaded with the original problem). Must not be destroyed until after postsolve(). */ OsiSolverInterface *originalModel_; /*! Presolved model (solver interface loaded with the presolved problem) Must be destroyed by the client (using delete) after postsolve(). */ OsiSolverInterface *presolvedModel_; /*! "Magic" number. If this is non-zero then any elements with this value may change and so presolve is very limited in what can be done to the row and column. This is for non-linear problems. One could also allow for cases where sign of coefficient is known. */ double nonLinearValue_; /// Original column numbers int *originalColumn_; /// Original row numbers int *originalRow_; /// The list of transformations applied. const CoinPresolveAction *paction_; /*! \brief Number of columns in original model. The problem will expand back to its former size as postsolve transformations are applied. It is efficient to allocate data structures for the final size of the problem rather than expand them as needed. */ int ncols_; /*! \brief Number of rows in original model. */ int nrows_; /*! \brief Number of nonzero matrix coefficients in the original model. */ CoinBigIndex nelems_; /** Whether we want to skip dual part of presolve etc. 1 bit allows duplicate column processing on integer columns and dual stuff on integers 4 transfers costs to integer variables */ int presolveActions_; /// Number of major passes int numberPasses_; protected: /*! \brief Apply presolve transformations to the problem. Handles the core activity of applying presolve transformations. If you want to apply the individual presolve routines differently, or perhaps add your own to the mix, define a derived class and override this method */ virtual const CoinPresolveAction *presolve(CoinPresolveMatrix *prob); /*! \brief Reverse presolve transformations to recover the solution to the original problem. Handles the core activity of applying postsolve transformations. Postsolving is pretty generic; just apply the transformations in reverse order. You will probably only be interested in overriding this method if you want to add code to test for consistency while debugging new presolve techniques. */ virtual void postsolve(CoinPostsolveMatrix &prob); /*! \brief Destroys queued postsolve actions. E.g., when presolve() determines the problem is infeasible, so that it will not be necessary to actually solve the presolved problem and convert the result back to the original problem. */ void gutsOfDestroy(); }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiSolverInterface.hpp0000644000175000017500000023112113414504051017642 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiSolverInterface_H #define OsiSolverInterface_H #include #include #include #include "CoinTypes.hpp" #include "CoinMessageHandler.hpp" #include "CoinPackedVectorBase.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStart.hpp" #include "CoinFinite.hpp" #include "CoinError.hpp" #include "OsiCollections.hpp" #include "OsiSolverParameters.hpp" class CoinSnapshot; class CoinLpIO; class CoinMpsIO; class OsiCuts; class OsiAuxInfo; class OsiRowCut; class OsiRowCutDebugger; class CoinSet; class CoinBuild; class CoinModel; class OsiSolverBranch; class OsiSolverResult; class OsiObject; //############################################################################# /*! \brief Abstract Base Class for describing an interface to a solver. Many OsiSolverInterface query methods return a const pointer to the requested read-only data. If the model data is changed or the solver is called, these pointers may no longer be valid and should be refreshed by invoking the member function to obtain an updated copy of the pointer. For example: \code OsiSolverInterface solverInterfacePtr ; const double * ruBnds = solverInterfacePtr->getRowUpper(); solverInterfacePtr->applyCuts(someSetOfCuts); // ruBnds is no longer a valid pointer and must be refreshed ruBnds = solverInterfacePtr->getRowUpper(); \endcode Querying a problem that has no data associated with it will result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. */ class OsiSolverInterface { friend void OsiSolverInterfaceCommonUnitTest( const OsiSolverInterface *emptySi, const std::string &mpsDir, const std::string &netlibDir); friend void OsiSolverInterfaceMpsUnitTest( const std::vector< OsiSolverInterface * > &vecSiP, const std::string &mpsDir); public: /// Internal class for obtaining status from the applyCuts method class ApplyCutsReturnCode { friend class OsiSolverInterface; friend class OsiClpSolverInterface; friend class OsiGrbSolverInterface; public: ///@name Constructors and desctructors //@{ /// Default constructor ApplyCutsReturnCode() : intInconsistent_(0) , extInconsistent_(0) , infeasible_(0) , ineffective_(0) , applied_(0) { } /// Copy constructor ApplyCutsReturnCode(const ApplyCutsReturnCode &rhs) : intInconsistent_(rhs.intInconsistent_) , extInconsistent_(rhs.extInconsistent_) , infeasible_(rhs.infeasible_) , ineffective_(rhs.ineffective_) , applied_(rhs.applied_) { } /// Assignment operator ApplyCutsReturnCode &operator=(const ApplyCutsReturnCode &rhs) { if (this != &rhs) { intInconsistent_ = rhs.intInconsistent_; extInconsistent_ = rhs.extInconsistent_; infeasible_ = rhs.infeasible_; ineffective_ = rhs.ineffective_; applied_ = rhs.applied_; } return *this; } /// Destructor ~ApplyCutsReturnCode() {} //@} /**@name Accessing return code attributes */ //@{ /// Number of logically inconsistent cuts inline int getNumInconsistent() const { return intInconsistent_; } /// Number of cuts inconsistent with the current model inline int getNumInconsistentWrtIntegerModel() const { return extInconsistent_; } /// Number of cuts that cause obvious infeasibility inline int getNumInfeasible() const { return infeasible_; } /// Number of redundant or ineffective cuts inline int getNumIneffective() const { return ineffective_; } /// Number of cuts applied inline int getNumApplied() const { return applied_; } //@} private: /**@name Private methods */ //@{ /// Increment logically inconsistent cut counter inline void incrementInternallyInconsistent() { intInconsistent_++; } /// Increment model-inconsistent counter inline void incrementExternallyInconsistent() { extInconsistent_++; } /// Increment infeasible cut counter inline void incrementInfeasible() { infeasible_++; } /// Increment ineffective cut counter inline void incrementIneffective() { ineffective_++; } /// Increment applied cut counter inline void incrementApplied() { applied_++; } //@} ///@name Private member data //@{ /// Counter for logically inconsistent cuts int intInconsistent_; /// Counter for model-inconsistent cuts int extInconsistent_; /// Counter for infeasible cuts int infeasible_; /// Counter for ineffective cuts int ineffective_; /// Counter for applied cuts int applied_; //@} }; //--------------------------------------------------------------------------- ///@name Solve methods //@{ /// Solve initial LP relaxation virtual void initialSolve() = 0; /*! \brief Resolve an LP relaxation after problem modification Note the `re-' in `resolve'. initialSolve() should be used to solve the problem for the first time. */ virtual void resolve() = 0; /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound() = 0; #ifdef CBC_NEXT_VERSION /* Would it make sense to collect all of these routines in a `MIP Helper' section? It'd make it easier for users and implementors to find them. */ /** Solve 2**N (N==depth) problems and return solutions and bases. There are N branches each of which changes bounds on both sides as given by branch. The user should provide an array of (empty) results which will be filled in. See OsiSolveResult for more details (in OsiSolveBranch.?pp) but it will include a basis and primal solution. The order of results is left to right at feasible leaf nodes so first one is down, down, ..... Returns number of feasible leaves. Also sets number of solves done and number of iterations. This is provided so a solver can do faster. If forceBranch true then branch done even if satisfied */ virtual int solveBranches(int depth, const OsiSolverBranch *branch, OsiSolverResult *result, int &numberSolves, int &numberIterations, bool forceBranch = false); #endif //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. When a set method returns false, the original value (if any) should be unchanged. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. \note There is a default implementation of the set/get methods, namely to store/retrieve the given value using an array in the base class. A specific solver implementation can use this feature, for example, to store parameters that should be used later on. Implementors of a solver interface should overload these functions to provide the proper interface to and accurately reflect the capabilities of a specific solver. The format for hints is slightly different in that a boolean specifies the sense of the hint and an enum specifies the strength of the hint. Hints should be initialised when a solver is instantiated. (See OsiSolverParameters.hpp for defined hint parameters and strength.) When specifying the sense of the hint, a value of true means to work with the hint, false to work against it. For example,
  • \code setHintParam(OsiDoScale,true,OsiHintTry) \endcode is a mild suggestion to the solver to scale the constraint system.
  • \code setHintParam(OsiDoScale,false,OsiForceDo) \endcode tells the solver to disable scaling, or throw an exception if it cannot comply.
As another example, a solver interface could use the value and strength of the \c OsiDoReducePrint hint to adjust the amount of information printed by the interface and/or solver. The extent to which a solver obeys hints is left to the solver. The value and strength returned by \c getHintParam will match the most recent call to \c setHintParam, and will not necessarily reflect the solver's ability to comply with the hint. If the hint strength is \c OsiForceDo, the solver is required to throw an exception if it cannot perform the specified action. \note As with the other set/get methods, there is a default implementation which maintains arrays in the base class for hint sense and strength. The default implementation does not store the \c otherInformation pointer, and always throws an exception for strength \c OsiForceDo. Implementors of a solver interface should override these functions to provide the proper interface to and accurately reflect the capabilities of a specific solver. */ //@{ //! Set an integer parameter virtual bool setIntParam(OsiIntParam key, int value) { if (key == OsiLastIntParam) return (false); intParam_[key] = value; return true; } //! Set a double parameter virtual bool setDblParam(OsiDblParam key, double value) { if (key == OsiLastDblParam) return (false); dblParam_[key] = value; return true; } //! Set a string parameter virtual bool setStrParam(OsiStrParam key, const std::string &value) { if (key == OsiLastStrParam) return (false); strParam_[key] = value; return true; } /*! \brief Set a hint parameter The \c otherInformation parameter can be used to pass in an arbitrary block of information which is interpreted by the OSI and the underlying solver. Users are cautioned that this hook is solver-specific. Implementors: The default implementation completely ignores \c otherInformation and always throws an exception for OsiForceDo. This is almost certainly not the behaviour you want; you really should override this method. */ virtual bool setHintParam(OsiHintParam key, bool yesNo = true, OsiHintStrength strength = OsiHintTry, void * /*otherInformation*/ = NULL) { if (key == OsiLastHintParam) return false; hintParam_[key] = yesNo; hintStrength_[key] = strength; if (strength == OsiForceDo) throw CoinError("OsiForceDo illegal", "setHintParam", "OsiSolverInterface"); return true; } //! Get an integer parameter virtual bool getIntParam(OsiIntParam key, int &value) const { if (key == OsiLastIntParam) return (false); value = intParam_[key]; return true; } //! Get a double parameter virtual bool getDblParam(OsiDblParam key, double &value) const { if (key == OsiLastDblParam) return (false); value = dblParam_[key]; return true; } //! Get a string parameter virtual bool getStrParam(OsiStrParam key, std::string &value) const { if (key == OsiLastStrParam) return (false); value = strParam_[key]; return true; } /*! \brief Get a hint parameter (all information) Return all available information for the hint: sense, strength, and any extra information associated with the hint. Implementors: The default implementation will always set \c otherInformation to NULL. This is almost certainly not the behaviour you want; you really should override this method. */ virtual bool getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength, void *&otherInformation) const { if (key == OsiLastHintParam) return false; yesNo = hintParam_[key]; strength = hintStrength_[key]; otherInformation = NULL; return true; } /*! \brief Get a hint parameter (sense and strength only) Return only the sense and strength of the hint. */ virtual bool getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength) const { if (key == OsiLastHintParam) return false; yesNo = hintParam_[key]; strength = hintStrength_[key]; return true; } /*! \brief Get a hint parameter (sense only) Return only the sense (true/false) of the hint. */ virtual bool getHintParam(OsiHintParam key, bool &yesNo) const { if (key == OsiLastHintParam) return false; yesNo = hintParam_[key]; return true; } /*! \brief Copy all parameters in this section from one solver to another Note that the current implementation also copies the appData block, message handler, and rowCutDebugger. Arguably these should have independent copy methods. */ void copyParameters(OsiSolverInterface &rhs); /** \brief Return the integrality tolerance of the underlying solver. We should be able to get an integrality tolerance, but until that time just use the primal tolerance \todo This method should be replaced; it's architecturally wrong. This should be an honest dblParam with a keyword. Underlying solvers that do not support integer variables should return false for set and get on this parameter. Underlying solvers that support integrality should add this to the parameters they support, using whatever tolerance is appropriate. -lh, 091021- */ inline double getIntegerTolerance() const { return dblParam_[OsiPrimalTolerance]; } //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there numerical difficulties? virtual bool isAbandoned() const = 0; /// Is optimality proven? virtual bool isProvenOptimal() const = 0; /// Is primal infeasibility proven? virtual bool isProvenPrimalInfeasible() const = 0; /// Is dual infeasibility proven? virtual bool isProvenDualInfeasible() const = 0; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const = 0; //@} //--------------------------------------------------------------------------- /** \name Warm start methods Note that the warm start methods return a generic CoinWarmStart object. The precise characteristics of this object are solver-dependent. Clients who wish to maintain a maximum degree of solver independence should take care to avoid unnecessary assumptions about the properties of a warm start object. */ //@{ /*! \brief Get an empty warm start object This routine returns an empty warm start object. Its purpose is to provide a way for a client to acquire a warm start object of the appropriate type for the solver, which can then be resized and modified as desired. */ virtual CoinWarmStart *getEmptyWarmStart() const = 0; /** \brief Get warm start information. Return warm start information for the current state of the solver interface. If there is no valid warm start information, an empty warm start object wil be returned. */ virtual CoinWarmStart *getWarmStart() const = 0; /** \brief Get warm start information. Return warm start information for the current state of the solver interface. If there is no valid warm start information, an empty warm start object wil be returned. This does not necessarily create an object - may just point to one. must Delete set true if user should delete returned object. */ virtual CoinWarmStart *getPointerToWarmStart(bool &mustDelete); /** \brief Set warm start information. Return true or false depending on whether the warm start information was accepted or not. By definition, a call to setWarmStart with a null parameter should cause the solver interface to refresh its warm start information from the underlying solver. */ virtual bool setWarmStart(const CoinWarmStart *warmstart) = 0; //@} //--------------------------------------------------------------------------- /**@name Hot start methods Primarily used in strong branching. The user can create a hot start object --- a snapshot of the optimization process --- then reoptimize over and over again, starting from the same point. \note
  • Between hot started optimizations only bound changes are allowed.
  • The copy constructor and assignment operator should NOT copy any hot start information.
  • The default implementation simply extracts a warm start object in \c markHotStart, resets to the warm start object in \c solveFromHotStart, and deletes the warm start object in \c unmarkHotStart. Actual solver implementations are encouraged to do better.
*/ //@{ /// Create a hot start snapshot of the optimization process. virtual void markHotStart(); /// Optimize starting from the hot start snapshot. virtual void solveFromHotStart(); /// Delete the hot start snapshot. virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem query methods Querying a problem that has no data associated with it will result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /// Get the number of columns virtual int getNumCols() const = 0; /// Get the number of rows virtual int getNumRows() const = 0; /// Get the number of nonzero elements virtual CoinBigIndex getNumElements() const = 0; /// Get the number of integer variables virtual int getNumIntegers() const; /// Get a pointer to an array[getNumCols()] of column lower bounds virtual const double *getColLower() const = 0; /// Get a pointer to an array[getNumCols()] of column upper bounds virtual const double *getColUpper() const = 0; /*! \brief Get a pointer to an array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const = 0; /*! \brief Get a pointer to an array[getNumRows()] of row right-hand sides
  • if getRowSense()[i] == 'L' then getRightHandSide()[i] == getRowUpper()[i]
  • if getRowSense()[i] == 'G' then getRightHandSide()[i] == getRowLower()[i]
  • if getRowSense()[i] == 'R' then getRightHandSide()[i] == getRowUpper()[i]
  • if getRowSense()[i] == 'N' then getRightHandSide()[i] == 0.0
*/ virtual const double *getRightHandSide() const = 0; /*! \brief Get a pointer to an array[getNumRows()] of row ranges.
  • if getRowSense()[i] == 'R' then getRowRange()[i] == getRowUpper()[i] - getRowLower()[i]
  • if getRowSense()[i] != 'R' then getRowRange()[i] is 0.0
*/ virtual const double *getRowRange() const = 0; /// Get a pointer to an array[getNumRows()] of row lower bounds virtual const double *getRowLower() const = 0; /// Get a pointer to an array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const = 0; /*! \brief Get a pointer to an array[getNumCols()] of objective function coefficients. */ virtual const double *getObjCoefficients() const = 0; /*! \brief Get the objective function sense - 1 for minimisation (default) - -1 for maximisation */ virtual double getObjSense() const = 0; /// Return true if the variable is continuous virtual bool isContinuous(int colIndex) const = 0; /// Return true if the variable is binary virtual bool isBinary(int colIndex) const; /*! \brief Return true if the variable is integer. This method returns true if the variable is binary or general integer. */ virtual bool isInteger(int colIndex) const; /// Return true if the variable is general integer virtual bool isIntegerNonBinary(int colIndex) const; /// Return true if the variable is binary and not fixed virtual bool isFreeBinary(int colIndex) const; /*! \brief Return an array[getNumCols()] of column types \deprecated See #getColType */ inline const char *columnType(bool refresh = false) const { return getColType(refresh); } /// Set column type inline void setColumnType(int iColumn, char type) { if (!columnType_) getColType(true); columnType_[iColumn] = type; } /*! \brief Return an array[getNumCols()] of column types - 0 - continuous - 1 - binary - 2 - general integer - 3 - if supported - semi-continuous - 4 - if supported - semi-continuous integer If \p refresh is true, the classification of integer variables as binary or general integer will be reevaluated. If the current bounds are [0,1], or if the variable is fixed at 0 or 1, it will be classified as binary, otherwise it will be classified as general integer. */ virtual const char *getColType(bool refresh = false) const; /// Get a pointer to a row-wise copy of the matrix virtual const CoinPackedMatrix *getMatrixByRow() const = 0; /// Get a pointer to a column-wise copy of the matrix virtual const CoinPackedMatrix *getMatrixByCol() const = 0; /*! \brief Get a pointer to a mutable row-wise copy of the matrix. Returns NULL if the request is not meaningful (i.e., the OSI will not recognise any modifications to the matrix). */ virtual CoinPackedMatrix *getMutableMatrixByRow() const { return NULL; } /*! \brief Get a pointer to a mutable column-wise copy of the matrix Returns NULL if the request is not meaningful (i.e., the OSI will not recognise any modifications to the matrix). */ virtual CoinPackedMatrix *getMutableMatrixByCol() const { return NULL; } /// Get the solver's value for infinity virtual double getInfinity() const = 0; //@} /**@name Solution query methods */ //@{ /// Get a pointer to an array[getNumCols()] of primal variable values virtual const double *getColSolution() const = 0; /** Get a pointer to an array[getNumCols()] of primal variable values guaranteed to be between the column lower and upper bounds. */ virtual const double *getStrictColSolution(); /// Get pointer to array[getNumRows()] of dual variable values virtual const double *getRowPrice() const = 0; /// Get a pointer to an array[getNumCols()] of reduced costs virtual const double *getReducedCost() const = 0; /** Get a pointer to array[getNumRows()] of row activity levels. The row activity for a row is the left-hand side evaluated at the current solution. */ virtual const double *getRowActivity() const = 0; /// Get the objective function value. virtual double getObjValue() const = 0; /** Get the number of iterations it took to solve the problem (whatever `iteration' means to the solver). */ virtual int getIterationCount() const = 0; /** Get as many dual rays as the solver can provide. In case of proven primal infeasibility there should (with high probability) be at least one. The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. \note Implementors of solver interfaces note that the double pointers in the vector should point to arrays of length getNumRows() (fullRay = false) or (getNumRows()+getNumCols()) (fullRay = true) and they should be allocated with new[]. \note Clients of solver interfaces note that it is the client's responsibility to free the double pointers in the vector using delete[]. Clients are reminded that a problem can be dual and primal infeasible. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const = 0; /** Get as many primal rays as the solver can provide. In case of proven dual infeasibility there should (with high probability) be at least one. \note Implementors of solver interfaces note that the double pointers in the vector should point to arrays of length getNumCols() and they should be allocated with new[]. \note Clients of solver interfaces note that it is the client's responsibility to free the double pointers in the vector using delete[]. Clients are reminded that a problem can be dual and primal infeasible. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const = 0; /** Get vector of indices of primal variables which are integer variables but have fractional values in the current solution. */ virtual OsiVectorInt getFractionalIndices(const double etol = 1.e-05) const; //@} //------------------------------------------------------------------------- /**@name Methods to modify the objective, bounds, and solution For functions which take a set of indices as parameters (\c setObjCoeffSet(), \c setColSetBounds(), \c setRowSetBounds(), \c setRowSetTypes()), the parameters follow the C++ STL iterator convention: \c indexFirst points to the first index in the set, and \c indexLast points to a position one past the last index in the set. */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue) = 0; /** Set a set of objective function coefficients */ virtual void setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList); /** Set the objective coefficients for all columns. array [getNumCols()] is an array of values for the objective. This defaults to a series of set operations and is here for speed. */ virtual void setObjective(const double *array); /** Set the objective function sense. Use 1 for minimisation (default), -1 for maximisation. \note Implementors note that objective function sense is a parameter of the OSI, not a property of the problem. Objective sense can be set prior to problem load and should not be affected by loading a new problem. */ virtual void setObjSense(double s) = 0; /** Set a single column lower bound. Use -getInfinity() for -infinity. */ virtual void setColLower(int elementIndex, double elementValue) = 0; /** Set the lower bounds for all columns. array [getNumCols()] is an array of values for the lower bounds. This defaults to a series of set operations and is here for speed. */ virtual void setColLower(const double *array); /** Set a single column upper bound. Use getInfinity() for infinity. */ virtual void setColUpper(int elementIndex, double elementValue) = 0; /** Set the upper bounds for all columns. array [getNumCols()] is an array of values for the upper bounds. This defaults to a series of set operations and is here for speed. */ virtual void setColUpper(const double *array); /** Set a single column lower and upper bound. The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds(int elementIndex, double lower, double upper) { setColLower(elementIndex, lower); setColUpper(elementIndex, upper); } /** Set the upper and lower bounds of a set of columns. The default implementation just invokes setColBounds() over and over again. For each column, boundList must contain both a lower and upper bound, in that order. */ virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set a single row lower bound. Use -getInfinity() for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue) = 0; /** Set a single row upper bound. Use getInfinity() for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue) = 0; /** Set a single row lower and upper bound. The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds(int elementIndex, double lower, double upper) { setRowLower(elementIndex, lower); setRowUpper(elementIndex, upper); } /** Set the bounds on a set of rows. The default implementation just invokes setRowBounds() over and over again. For each row, boundList must contain both a lower and upper bound, in that order. */ virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set the type of a single row */ virtual void setRowType(int index, char sense, double rightHandSide, double range) = 0; /** Set the type of a set of rows. The default implementation just invokes setRowType() over and over again. */ virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList); /** Set the primal solution variable values colsol[getNumCols()] is an array of values for the primal variables. These values are copied to memory owned by the solver interface object or the solver. They will be returned as the result of getColSolution() until changed by another call to setColSolution() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol) = 0; /** Set dual solution variable values rowprice[getNumRows()] is an array of values for the dual variables. These values are copied to memory owned by the solver interface object or the solver. They will be returned as the result of getRowPrice() until changed by another call to setRowPrice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice) = 0; /** Fix variables at bound based on reduced cost For variables currently at bound, fix the variable at bound if the reduced cost exceeds the gap. Return the number of variables fixed. If justInteger is set to false, the routine will also fix continuous variables, but the test still assumes a delta of 1.0. */ virtual int reducedCostFix(double gap, bool justInteger = true); //@} //------------------------------------------------------------------------- /**@name Methods to set variable type */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index) = 0; /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index) = 0; /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int *indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int *indices, int len); //@} //------------------------------------------------------------------------- //------------------------------------------------------------------------- /*! \brief Data type for name vectors. */ typedef std::vector< std::string > OsiNameVec; /*! \name Methods for row and column names Osi defines three name management disciplines: `auto names' (0), `lazy names' (1), and `full names' (2). See the description of #OsiNameDiscipline for details. Changing the name discipline (via setIntParam()) will not automatically add or remove name information, but setting the discipline to auto will make existing information inaccessible until the discipline is reset to lazy or full. By definition, a row index of getNumRows() (i.e., one larger than the largest valid row index) refers to the objective function. OSI users and implementors: While the OSI base class can define an interface and provide rudimentary support, use of names really depends on support by the OsiXXX class to ensure that names are managed correctly. If an OsiXXX class does not support names, it should return false for calls to getIntParam() or setIntParam() that reference OsiNameDiscipline. */ //@{ /*! \brief Generate a standard name of the form Rnnnnnnn or Cnnnnnnn Set \p rc to 'r' for a row name, 'c' for a column name. The `nnnnnnn' part is generated from ndx and will contain 7 digits by default, padded with zeros if necessary. As a special case, ndx = getNumRows() is interpreted as a request for the name of the objective function. OBJECTIVE is returned, truncated to digits+1 characters to match the row and column names. */ virtual std::string dfltRowColName(char rc, int ndx, unsigned digits = 7) const; /*! \brief Return the name of the objective function */ virtual std::string getObjName(unsigned maxLen = static_cast< unsigned >(std::string::npos)) const; /*! \brief Set the name of the objective function */ virtual inline void setObjName(std::string name) { objName_ = name; } /*! \brief Return the name of the row. The routine will always return some name, regardless of the name discipline or the level of support by an OsiXXX derived class. Use maxLen to limit the length. */ virtual std::string getRowName(int rowIndex, unsigned maxLen = static_cast< unsigned >(std::string::npos)) const; /*! \brief Return a pointer to a vector of row names If the name discipline (#OsiNameDiscipline) is auto, the return value will be a vector of length zero. If the name discipline is lazy, the vector will contain only names supplied by the client and will be no larger than needed to hold those names; entries not supplied will be null strings. In particular, the objective name is not included in the vector for lazy names. If the name discipline is full, the vector will have getNumRows() names, either supplied or generated, plus one additional entry for the objective name. */ virtual const OsiNameVec &getRowNames(); /*! \brief Set a row name Quietly does nothing if the name discipline (#OsiNameDiscipline) is auto. Quietly fails if the row index is invalid. */ virtual void setRowName(int ndx, std::string name); /*! \brief Set multiple row names The run of len entries starting at srcNames[srcStart] are installed as row names starting at row index tgtStart. The base class implementation makes repeated calls to setRowName. */ virtual void setRowNames(OsiNameVec &srcNames, int srcStart, int len, int tgtStart); /*! \brief Delete len row names starting at index tgtStart The specified row names are removed and the remaining row names are copied down to close the gap. */ virtual void deleteRowNames(int tgtStart, int len); /*! \brief Return the name of the column The routine will always return some name, regardless of the name discipline or the level of support by an OsiXXX derived class. Use maxLen to limit the length. */ virtual std::string getColName(int colIndex, unsigned maxLen = static_cast< unsigned >(std::string::npos)) const; /*! \brief Return a pointer to a vector of column names If the name discipline (#OsiNameDiscipline) is auto, the return value will be a vector of length zero. If the name discipline is lazy, the vector will contain only names supplied by the client and will be no larger than needed to hold those names; entries not supplied will be null strings. If the name discipline is full, the vector will have getNumCols() names, either supplied or generated. */ virtual const OsiNameVec &getColNames(); /*! \brief Set a column name Quietly does nothing if the name discipline (#OsiNameDiscipline) is auto. Quietly fails if the column index is invalid. */ virtual void setColName(int ndx, std::string name); /*! \brief Set multiple column names The run of len entries starting at srcNames[srcStart] are installed as column names starting at column index tgtStart. The base class implementation makes repeated calls to setColName. */ virtual void setColNames(OsiNameVec &srcNames, int srcStart, int len, int tgtStart); /*! \brief Delete len column names starting at index tgtStart The specified column names are removed and the remaining column names are copied down to close the gap. */ virtual void deleteColNames(int tgtStart, int len); /*! \brief Set row and column names from a CoinMpsIO object. Also sets the name of the objective function. If the name discipline is auto, you get what you asked for. This routine does not use setRowName or setColName. */ void setRowColNames(const CoinMpsIO &mps); /*! \brief Set row and column names from a CoinModel object. If the name discipline is auto, you get what you asked for. This routine does not use setRowName or setColName. */ void setRowColNames(CoinModel &mod); /*! \brief Set row and column names from a CoinLpIO object. Also sets the name of the objective function. If the name discipline is auto, you get what you asked for. This routine does not use setRowName or setColName. */ void setRowColNames(CoinLpIO &mod); //@} //------------------------------------------------------------------------- //------------------------------------------------------------------------- /**@name Methods to modify the constraint system. Note that new columns are added as continuous variables. */ //@{ /** Add a column (primal variable) to the problem. */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) = 0; /*! \brief Add a named column (primal variable) to the problem. The default implementation adds the column, then changes the name. This can surely be made more efficient within an OsiXXX class. */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj, std::string name); /** Add a column (primal variable) to the problem. */ virtual void addCol(int numberElements, const int *rows, const double *elements, const double collb, const double colub, const double obj); /*! \brief Add a named column (primal variable) to the problem. The default implementation adds the column, then changes the name. This can surely be made more efficient within an OsiXXX class. */ virtual void addCol(int numberElements, const int *rows, const double *elements, const double collb, const double colub, const double obj, std::string name); /** Add a set of columns (primal variables) to the problem. The default implementation simply makes repeated calls to addCol(). */ virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj); /** Add a set of columns (primal variables) to the problem. The default implementation simply makes repeated calls to addCol(). */ virtual void addCols(const int numcols, const CoinBigIndex *columnStarts, const int *rows, const double *elements, const double *collb, const double *colub, const double *obj); /// Add columns using a CoinBuild object void addCols(const CoinBuild &buildObject); /** Add columns from a model object. returns -1 if object in bad state (i.e. has row information) otherwise number of errors modelObject non const as can be regularized as part of build */ int addCols(CoinModel &modelObject); #if 0 /** */ virtual void addCols(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj); #endif /** \brief Remove a set of columns (primal variables) from the problem. The solver interface for a basis-oriented solver will maintain valid warm start information if all deleted variables are nonbasic. */ virtual void deleteCols(const int num, const int *colIndices) = 0; /*! \brief Add a row (constraint) to the problem. */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) = 0; /*! \brief Add a named row (constraint) to the problem. The default implementation adds the row, then changes the name. This can surely be made more efficient within an OsiXXX class. */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub, std::string name); /*! \brief Add a row (constraint) to the problem. */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) = 0; /*! \brief Add a named row (constraint) to the problem. The default implementation adds the row, then changes the name. This can surely be made more efficient within an OsiXXX class. */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng, std::string name); /*! Add a row (constraint) to the problem. Converts to addRow(CoinPackedVectorBase&,const double,const double). */ virtual void addRow(int numberElements, const int *columns, const double *element, const double rowlb, const double rowub); /*! Add a set of rows (constraints) to the problem. The default implementation simply makes repeated calls to addRow(). */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub); /** Add a set of rows (constraints) to the problem. The default implementation simply makes repeated calls to addRow(). */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng); /** Add a set of rows (constraints) to the problem. The default implementation simply makes repeated calls to addRow(). */ virtual void addRows(const int numrows, const CoinBigIndex *rowStarts, const int *columns, const double *element, const double *rowlb, const double *rowub); /// Add rows using a CoinBuild object void addRows(const CoinBuild &buildObject); /*! Add rows from a CoinModel object. Returns -1 if the object is in the wrong state (i.e., has column-major information), otherwise the number of errors. The modelObject is not const as it can be regularized as part of the build. */ int addRows(CoinModel &modelObject); #if 0 /** */ virtual void addRows(const CoinPackedMatrix& matrix, const double* rowlb, const double* rowub); /** */ virtual void addRows(const CoinPackedMatrix& matrix, const char* rowsen, const double* rowrhs, const double* rowrng); #endif /** \brief Delete a set of rows (constraints) from the problem. The solver interface for a basis-oriented solver will maintain valid warm start information if all deleted rows are loose. */ virtual void deleteRows(const int num, const int *rowIndices) = 0; /** \brief Replace the constraint matrix I (JJF) am getting annoyed because I can't just replace a matrix. The default behavior of this is do nothing so only use where that would not matter, e.g. strengthening a matrix for MIP. */ virtual void replaceMatrixOptional(const CoinPackedMatrix &) {} /** \brief Replace the constraint matrix And if it does matter (not used at present) */ virtual void replaceMatrix(const CoinPackedMatrix &) { abort(); } /** \brief Save a copy of the base model If solver wants it can save a copy of "base" (continuous) model here. */ virtual void saveBaseModel() {} /** \brief Reduce the constraint system to the specified number of constraints. If solver wants it can restore a copy of "base" (continuous) model here. \note The name is somewhat misleading. Implementors should consider the opportunity to optimise behaviour in the common case where \p numberRows is exactly the number of original constraints. Do not, however, neglect the possibility that \p numberRows does not equal the number of original constraints. */ virtual void restoreBaseModel(int numberRows); //----------------------------------------------------------------------- /** Apply a collection of cuts. Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.getNumineffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.getNuminconsistent() -- number of invalid cuts
  • ReturnCode.getNuminconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.getNuminfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.getNumApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == getNumineffective() + getNuminconsistent() + getNuminconsistentWrtIntegerModel() + getNuminfeasible() + getNumApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts &cs, double effectivenessLb = 0.0); /** Apply a collection of row cuts which are all effective. applyCuts seems to do one at a time which seems inefficient. Would be even more efficient to pass an array of pointers. */ virtual void applyRowCuts(int numberCuts, const OsiRowCut *cuts); /** Apply a collection of row cuts which are all effective. This is passed in as an array of pointers. */ virtual void applyRowCuts(int numberCuts, const OsiRowCut **cuts); /// Deletes branching information before columns deleted void deleteBranchingInfo(int numberDeleted, const int *which); //@} //--------------------------------------------------------------------------- /**@name Methods for problem input and output */ //@{ /*! \brief Load in a problem by copying the arguments. The constraints on the rows are given by lower and upper bounds. If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
Note that the default values for rowub and rowlb produce the constraint -infty <= ax <= infty. This is probably not what you want. */ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) = 0; /*! \brief Load in a problem by assuming ownership of the arguments. The constraints on the rows are given by lower and upper bounds. For default argument values see the matching loadProblem method. \warning The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) = 0; /*! \brief Load in a problem by copying the arguments. The constraints on the rows are given by sense/rhs/range triplets. If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
Note that the default values for rowsen, rowrhs, and rowrng produce the constraint ax >= 0. */ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) = 0; /*! \brief Load in a problem by assuming ownership of the arguments. The constraints on the rows are given by sense/rhs/range triplets. For default argument values see the matching loadProblem method. \warning The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) = 0; /*! \brief Load in a problem by copying the arguments. The constraint matrix is is specified with standard column-major column starts / row indices / coefficients vectors. The constraints on the rows are given by lower and upper bounds. The matrix vectors must be gap-free. Note that start must have numcols+1 entries so that the length of the last column can be calculated as start[numcols]-start[numcols-1]. See the previous loadProblem method using rowlb and rowub for default argument values. */ virtual void loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) = 0; /*! \brief Load in a problem by copying the arguments. The constraint matrix is is specified with standard column-major column starts / row indices / coefficients vectors. The constraints on the rows are given by sense/rhs/range triplets. The matrix vectors must be gap-free. Note that start must have numcols+1 entries so that the length of the last column can be calculated as start[numcols]-start[numcols-1]. See the previous loadProblem method using sense/rhs/range for default argument values. */ virtual void loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) = 0; /*! \brief Load a model from a CoinModel object. Return the number of errors encountered. The modelObject parameter cannot be const as it may be changed as part of process. If keepSolution is true will try and keep warmStart. */ virtual int loadFromCoinModel(CoinModel &modelObject, bool keepSolution = false); /*! \brief Read a problem in MPS format from the given filename. The default implementation uses CoinMpsIO::readMps() to read the MPS file and returns the number of errors encountered. */ virtual int readMps(const char *filename, const char *extension = "mps"); /*! \brief Read a problem in MPS format from the given full filename. This uses CoinMpsIO::readMps() to read the MPS file and returns the number of errors encountered. It also may return an array of set information */ virtual int readMps(const char *filename, const char *extension, int &numberSets, CoinSet **&sets); /*! \brief Read a problem in GMPL format from the given filenames. The default implementation uses CoinMpsIO::readGMPL(). This capability is available only if the third-party package Glpk is installed. */ virtual int readGMPL(const char *filename, const char *dataname = NULL); /*! \brief Write the problem in MPS format to the specified file. If objSense is non-zero, a value of -1.0 causes the problem to be written with a maximization objective; +1.0 forces a minimization objective. If objSense is zero, the choice is left to the implementation. */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const = 0; /*! \brief Write the problem in MPS format to the specified file with more control over the output. Row and column names may be null. formatType is
  • 0 - normal
  • 1 - extra accuracy
  • 2 - IEEE hex
Returns non-zero on I/O error */ int writeMpsNative(const char *filename, const char **rowNames, const char **columnNames, int formatType = 0, int numberAcross = 2, double objSense = 0.0, int numberSOS = 0, const CoinSet *setInfo = NULL) const; /***********************************************************************/ // Lp files /** Write the problem into an Lp file of the given filename with the specified extension. Coefficients with value less than epsilon away from an integer value are written as integers. Write at most numberAcross monomials on a line. Write non integer numbers with decimals digits after the decimal point. The written problem is always a minimization problem. If the current problem is a maximization problem, the intended objective function for the written problem is the current objective function multiplied by -1. If the current problem is a minimization problem, the intended objective function for the written problem is the current objective function. If objSense < 0, the intended objective function is multiplied by -1 before writing the problem. It is left unchanged otherwise. Write objective function name and constraint names if useRowNames is true. This version calls writeLpNative(). */ virtual void writeLp(const char *filename, const char *extension = "lp", double epsilon = 1e-5, int numberAcross = 10, int decimals = 9, double objSense = 0.0, bool useRowNames = true) const; /** Write the problem into the file pointed to by the parameter fp. Other parameters are similar to those of writeLp() with first parameter filename. */ virtual void writeLp(FILE *fp, double epsilon = 1e-5, int numberAcross = 10, int decimals = 5, double objSense = 0.0, bool useRowNames = true) const; /** Write the problem into an Lp file. Parameters are similar to those of writeLp(), but in addition row names and column names may be given. Parameter rowNames may be NULL, in which case default row names are used. If rowNames is not NULL, it must have exactly one entry per row in the problem and one additional entry (rowNames[getNumRows()] with the objective function name. These getNumRows()+1 entries must be distinct. If this is not the case, default row names are used. In addition, format restrictions are imposed on names (see CoinLpIO::is_invalid_name() for details). Similar remarks can be made for the parameter columnNames which must either be NULL or have exactly getNumCols() distinct entries. Write objective function name and constraint names if useRowNames is true. */ int writeLpNative(const char *filename, char const *const *const rowNames, char const *const *const columnNames, const double epsilon = 1.0e-5, const int numberAcross = 10, const int decimals = 5, const double objSense = 0.0, const bool useRowNames = true) const; /** Write the problem into the file pointed to by the parameter fp. Other parameters are similar to those of writeLpNative() with first parameter filename. */ int writeLpNative(FILE *fp, char const *const *const rowNames, char const *const *const columnNames, const double epsilon = 1.0e-5, const int numberAcross = 10, const int decimals = 5, const double objSense = 0.0, const bool useRowNames = true) const; /// Read file in LP format from file with name filename. /// See class CoinLpIO for description of this format. virtual int readLp(const char *filename, const double epsilon = 1e-5); /// Read file in LP format from the file pointed to by fp. /// See class CoinLpIO for description of this format. int readLp(FILE *fp, const double epsilon = 1e-5); //@} //--------------------------------------------------------------------------- /**@name Miscellaneous */ //@{ /** Check two models against each other. Return nonzero if different. Ignore names if that set. (Note initial version does not check names) May modify both models by cleaning up */ int differentModel(OsiSolverInterface &other, bool ignoreNames = true); /** Get some statistics about model - min/max always computed type 0->4 , larger gives more information 0 - Just set min and max values of coefficients */ void statistics(double &minimumNegative, double &maximumNegative, double &minimumPositive, double &maximumPositive, int type = 3) const; #ifdef COIN_SNAPSHOT /// Return a CoinSnapshot virtual CoinSnapshot *snapshot(bool createArrays = true) const; #endif #ifdef COIN_FACTORIZATION_INFO /// Return number of entries in L part of current factorization virtual CoinBigIndex getSizeL() const; /// Return number of entries in U part of current factorization virtual CoinBigIndex getSizeU() const; #endif //@} //--------------------------------------------------------------------------- /**@name Setting/Accessing application data */ //@{ /** Set application data. This is a pointer that the application can store into and retrieve from the solver interface. This field is available for the application to optionally define and use. */ void setApplicationData(void *appData); /** Create a clone of an Auxiliary Information object. The base class just stores an application data pointer but can be more general. Application data pointer is designed for one user while this can be extended to cope with more general extensions. */ void setAuxiliaryInfo(OsiAuxInfo *auxiliaryInfo); /// Get application data void *getApplicationData() const; /// Get pointer to auxiliary info object OsiAuxInfo *getAuxiliaryInfo() const; //@} //--------------------------------------------------------------------------- /**@name Message handling See the COIN library documentation for additional information about COIN message facilities. */ //@{ /** Pass in a message handler It is the client's responsibility to destroy a message handler installed by this routine; it will not be destroyed when the solver interface is destroyed. */ virtual void passInMessageHandler(CoinMessageHandler *handler); /// Set language void newLanguage(CoinMessages::Language language); inline void setLanguage(CoinMessages::Language language) { newLanguage(language); } /// Return a pointer to the current message handler inline CoinMessageHandler *messageHandler() const { return handler_; } /// Return the current set of messages inline CoinMessages messages() { return messages_; } /// Return a pointer to the current set of messages inline CoinMessages *messagesPointer() { return &messages_; } /// Return true if default handler inline bool defaultHandler() const { return defaultHandler_; } //@} //--------------------------------------------------------------------------- /**@name Methods for dealing with discontinuities other than integers. Osi should be able to know about SOS and other types. This is an optional section where such information can be stored. */ //@{ /** \brief Identify integer variables and create corresponding objects. Record integer variables and create an OsiSimpleInteger object for each one. All existing OsiSimpleInteger objects will be destroyed. If justCount then no objects created and we just store numberIntegers_ */ void findIntegers(bool justCount); /** \brief Identify integer variables and SOS and create corresponding objects. Record integer variables and create an OsiSimpleInteger object for each one. All existing OsiSimpleInteger objects will be destroyed. If the solver supports SOS then do the same for SOS. If justCount then no objects created and we just store numberIntegers_ Returns number of SOS */ virtual int findIntegersAndSOS(bool justCount); /// Get the number of objects inline int numberObjects() const { return numberObjects_; } /// Set the number of objects inline void setNumberObjects(int number) { numberObjects_ = number; } /// Get the array of objects inline OsiObject **objects() const { return object_; } /// Get the specified object const inline OsiObject *object(int which) const { return object_[which]; } /// Get the specified object inline OsiObject *modifiableObject(int which) const { return object_[which]; } /// Delete all object information void deleteObjects(); /** Add in object information. Objects are cloned; the owner can delete the originals. */ void addObjects(int numberObjects, OsiObject **objects); /** Use current solution to set bounds so current integer feasible solution will stay feasible. Only feasible bounds will be used, even if current solution outside bounds. The amount of such violation will be returned (and if small can be ignored) */ double forceFeasible(); //@} //--------------------------------------------------------------------------- /*! @name Methods related to testing generated cuts See the documentation for OsiRowCutDebugger for additional details. */ //@{ /*! \brief Activate the row cut debugger. If \p modelName is in the set of known models then all cuts are checked to see that they do NOT cut off the optimal solution known to the debugger. */ virtual void activateRowCutDebugger(const char *modelName); /*! \brief Activate the row cut debugger using a full solution array. Activate the debugger for a model not included in the debugger's internal database. Cuts will be checked to see that they do NOT cut off the given solution. \p solution must be a full solution vector, but only the integer variables need to be correct. The debugger will fill in the continuous variables by solving an lp relaxation with the integer variables fixed as specified. If the given values for the continuous variables should be preserved, set \p keepContinuous to true. */ virtual void activateRowCutDebugger(const double *solution, bool enforceOptimality = true); /*! \brief Get the row cut debugger provided the solution known to the debugger is within the feasible region held in the solver. If there is a row cut debugger object associated with model AND if the solution known to the debugger is within the solver's current feasible region (i.e., the column bounds held in the solver are compatible with the known solution) then a pointer to the debugger is returned which may be used to test validity of cuts. Otherwise NULL is returned */ const OsiRowCutDebugger *getRowCutDebugger() const; /*! \brief Get the row cut debugger object Return the row cut debugger object if it exists. One common usage of this method is to obtain a debugger object in order to execute OsiRowCutDebugger::redoSolution (so that the stored solution is again compatible with the problem held in the solver). */ OsiRowCutDebugger *getRowCutDebuggerAlways() const; //@} /*! \name OsiSimplexInterface \brief Simplex Interface Methods for an advanced interface to a simplex solver. The interface comprises two groups of methods. Group 1 contains methods for tableau access. Group 2 contains methods for dictating individual simplex pivots. */ //@{ /*! \brief Return the simplex implementation level. The return codes are: - 0: the simplex interface is not implemented. - 1: the Group 1 (tableau access) methods are implemented. - 2: the Group 2 (pivoting) methods are implemented The codes are cumulative - a solver which implements Group 2 also implements Group 1. */ virtual int canDoSimplexInterface() const; //@} /*! \name OsiSimplex Group 1 \brief Tableau access methods. This group of methods provides access to rows and columns of the basis inverse and to rows and columns of the tableau. */ //@{ /*! \brief Prepare the solver for the use of tableau access methods. Prepares the solver for the use of the tableau access methods, if any such preparation is required. The \c const attribute is required due to the places this method may be called (e.g., within CglCutGenerator::generateCuts()). */ virtual void enableFactorization() const; /*! \brief Undo the effects of #enableFactorization. */ virtual void disableFactorization() const; /*! \brief Check if an optimal basis is available. Returns true if the problem has been solved to optimality and a basis is available. This should be used to see if the tableau access operations are possible and meaningful. \note Implementors please note that this method may be called before #enableFactorization. */ virtual bool basisIsAvailable() const; /// Synonym for #basisIsAvailable inline bool optimalBasisIsAvailable() const { return basisIsAvailable(); } /*! \brief Retrieve status information for column and row variables. This method returns status as integer codes:
  • 0: free
  • 1: basic
  • 2: nonbasic at upper bound
  • 3: nonbasic at lower bound
The #getWarmStart method provides essentially the same functionality for a simplex-oriented solver, but the implementation details are very different. \note Logical variables associated with rows are all assumed to have +1 coefficients, so for a <= constraint the logical will be at lower bound if the constraint is tight. \note Implementors may choose to implement this method as a wrapper which converts a CoinWarmStartBasis to the requested representation. */ virtual void getBasisStatus(int *cstat, int *rstat) const; /*! \brief Set the status of column and row variables and update the basis factorization and solution. Status information should be coded as documented for #getBasisStatus. Returns 0 if all goes well, 1 if something goes wrong. This method differs from #setWarmStart in the format of the input and in its immediate effect. Think of it as #setWarmStart immediately followed by #resolve, but no pivots are allowed. \note Implementors may choose to implement this method as a wrapper that calls #setWarmStart and #resolve if the no pivot requirement can be satisfied. */ virtual int setBasisStatus(const int *cstat, const int *rstat); /*! \brief Calculate duals and reduced costs for the given objective coefficients. The solver's objective coefficient vector is not changed. */ virtual void getReducedGradient(double *columnReducedCosts, double *duals, const double *c) const; /*! \brief Get a row of the tableau If \p slack is not null, it will be loaded with the coefficients for the artificial (logical) variables (i.e., the row of the basis inverse). */ virtual void getBInvARow(int row, double *z, double *slack = NULL) const; /*! \brief Get a row of the basis inverse */ virtual void getBInvRow(int row, double *z) const; /*! \brief Get a column of the tableau */ virtual void getBInvACol(int col, double *vec) const; /*! \brief Get a column of the basis inverse */ virtual void getBInvCol(int col, double *vec) const; /*! \brief Get indices of basic variables If the logical (artificial) for row i is basic, the index should be coded as (#getNumCols + i). The order of indices must match the order of elements in the vectors returned by #getBInvACol and #getBInvCol. */ virtual void getBasics(int *index) const; //@} /*! \name OsiSimplex Group 2 \brief Pivoting methods This group of methods provides for control of individual pivots by a simplex solver. */ //@{ /**Enables normal operation of subsequent functions. This method is supposed to ensure that all typical things (like reduced costs, etc.) are updated when individual pivots are executed and can be queried by other methods. says whether will be doing primal or dual */ virtual void enableSimplexInterface(bool doingPrimal); ///Undo whatever setting changes the above method had to make virtual void disableSimplexInterface(); /** Perform a pivot by substituting a colIn for colOut in the basis. The status of the leaving variable is given in outStatus. Where 1 is to upper bound, -1 to lower bound Return code was undefined - now for OsiClp is 0 for okay, 1 if inaccuracy forced re-factorization (should be okay) and -1 for singular factorization */ virtual int pivot(int colIn, int colOut, int outStatus); /** Obtain a result of the primal pivot Outputs: colOut -- leaving column, outStatus -- its status, t -- step size, and, if dx!=NULL, *dx -- primal ray direction. Inputs: colIn -- entering column, sign -- direction of its change (+/-1). Both for colIn and colOut, artificial variables are index by the negative of the row index minus 1. Return code (for now): 0 -- leaving variable found, -1 -- everything else? Clearly, more informative set of return values is required Primal and dual solutions are updated */ virtual int primalPivotResult(int colIn, int sign, int &colOut, int &outStatus, double &t, CoinPackedVector *dx); /** Obtain a result of the dual pivot (similar to the previous method) Differences: entering variable and a sign of its change are now the outputs, the leaving variable and its statuts -- the inputs If dx!=NULL, then *dx contains dual ray Return code: same */ virtual int dualPivotResult(int &colIn, int &sign, int colOut, int outStatus, double &t, CoinPackedVector *dx); //@} //--------------------------------------------------------------------------- ///@name Constructors and destructors //@{ /// Default Constructor OsiSolverInterface(); /** Clone The result of calling clone(false) is defined to be equivalent to calling the default constructor OsiSolverInterface(). */ virtual OsiSolverInterface *clone(bool copyData = true) const = 0; /// Copy constructor OsiSolverInterface(const OsiSolverInterface &); /// Assignment operator OsiSolverInterface &operator=(const OsiSolverInterface &rhs); /// Destructor virtual ~OsiSolverInterface(); /** Reset the solver interface. A call to reset() returns the solver interface to the same state as it would have if it had just been constructed by calling the default constructor OsiSolverInterface(). */ virtual void reset(); //@} //--------------------------------------------------------------------------- protected: ///@name Protected methods //@{ /** Apply a row cut (append to the constraint matrix). */ virtual void applyRowCut(const OsiRowCut &rc) = 0; /** Apply a column cut (adjust the bounds of one or more variables). */ virtual void applyColCut(const OsiColCut &cc) = 0; /** A quick inlined function to convert from the lb/ub style of constraint definition to the sense/rhs/range style */ inline void convertBoundToSense(const double lower, const double upper, char &sense, double &right, double &range) const; /** A quick inlined function to convert from the sense/rhs/range style of constraint definition to the lb/ub style */ inline void convertSenseToBound(const char sense, const double right, const double range, double &lower, double &upper) const; /** A quick inlined function to force a value to be between a minimum and a maximum value */ template < class T > inline T forceIntoRange(const T value, const T lower, const T upper) const { return value < lower ? lower : (value > upper ? upper : value); } /** Set OsiSolverInterface object state for default constructor This routine establishes the initial values of data fields in the OsiSolverInterface object when the object is created using the default constructor. */ void setInitialData(); //@} ///@name Protected member data //@{ /*! \brief Pointer to row cut debugger object Mutable so that we can update the solution held in the debugger while maintaining const'ness for the Osi object. */ mutable OsiRowCutDebugger *rowCutDebugger_; // Why not just make useful stuff protected? /// Message handler CoinMessageHandler *handler_; /** Flag to say if the currrent handler is the default handler. Indicates if the solver interface object is responsible for destruction of the handler (true) or if the client is responsible (false). */ bool defaultHandler_; /// Messages CoinMessages messages_; /// Number of integers int numberIntegers_; /// Total number of objects int numberObjects_; /// Integer and ... information (integer info normally at beginning) OsiObject **object_; /** Column type 0 - continuous 1 - binary (may get fixed later) 2 - general integer (may get fixed later) 3 - if supported - semi-continuous 4 - if supported - semi-continuous integer */ mutable char *columnType_; //@} //--------------------------------------------------------------------------- private: ///@name Private member data //@{ /// Pointer to user-defined data structure - and more if user wants OsiAuxInfo *appDataEtc_; /// Array of integer parameters int intParam_[OsiLastIntParam]; /// Array of double parameters double dblParam_[OsiLastDblParam]; /// Array of string parameters std::string strParam_[OsiLastStrParam]; /// Array of hint parameters bool hintParam_[OsiLastHintParam]; /// Array of hint strengths OsiHintStrength hintStrength_[OsiLastHintParam]; /** Warm start information used for hot starts when the default hot start implementation is used. */ CoinWarmStart *ws_; /// Column solution satisfying lower and upper column bounds std::vector< double > strictColSolution_; /// Row names OsiNameVec rowNames_; /// Column names OsiNameVec colNames_; /// Objective name std::string objName_; //@} }; //############################################################################# /** A quick inlined function to convert from the lb/ub style of constraint definition to the sense/rhs/range style */ inline void OsiSolverInterface::convertBoundToSense(const double lower, const double upper, char &sense, double &right, double &range) const { double inf = getInfinity(); range = 0.0; if (lower > -inf) { if (upper < inf) { right = upper; if (upper == lower) { sense = 'E'; } else { sense = 'R'; range = upper - lower; } } else { sense = 'G'; right = lower; } } else { if (upper < inf) { sense = 'L'; right = upper; } else { sense = 'N'; right = 0.0; } } } //----------------------------------------------------------------------------- /** A quick inlined function to convert from the sense/rhs/range style of constraint definition to the lb/ub style */ inline void OsiSolverInterface::convertSenseToBound(const char sense, const double right, const double range, double &lower, double &upper) const { double inf = getInfinity(); switch (sense) { case 'E': lower = upper = right; break; case 'L': lower = -inf; upper = right; break; case 'G': lower = right; upper = inf; break; case 'R': lower = right - range; upper = right; break; case 'N': lower = -inf; upper = inf; break; } } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiRowCutDebugger.cpp0000644000175000017500000017103413414504051017440 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include #include #include #include "CoinPragma.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedVector.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiRowCutDebugger.hpp" /* Check if any cuts cut off the known solution. If so then print offending cuts and return non-zero code */ int OsiRowCutDebugger::validateCuts(const OsiCuts &cs, int first, int last) const { int nbad = 0; int i; const double epsilon = 1.0e-8; const int nRowCuts = CoinMin(cs.sizeRowCuts(), last); for (i = first; i < nRowCuts; i++) { OsiRowCut rcut = cs.rowCut(i); CoinPackedVector rpv = rcut.row(); const int n = rpv.getNumElements(); const int *indices = rpv.getIndices(); const double *elements = rpv.getElements(); int k; double lb = rcut.lb(); double ub = rcut.ub(); double sum = 0.0; for (k = 0; k < n; k++) { int column = indices[k]; sum += knownSolution_[column] * elements[k]; } // is it violated if (sum > ub + epsilon || sum < lb - epsilon) { double violation = CoinMax(sum - ub, lb - sum); std::cout << "Cut " << i << " with " << n << " coefficients, cuts off known solution by " << violation << ", lo=" << lb << ", ub=" << ub << std::endl; for (k = 0; k < n; k++) { int column = indices[k]; std::cout << "( " << column << " , " << elements[k] << " ) "; if ((k % 4) == 3) std::cout << std::endl; } std::cout << std::endl; std::cout << "Non zero solution values are" << std::endl; int j = 0; for (k = 0; k < n; k++) { int column = indices[k]; if (fabs(knownSolution_[column]) > 1.0e-9) { std::cout << "( " << column << " , " << knownSolution_[column] << " ) "; if ((j % 4) == 3) std::cout << std::endl; j++; } } std::cout << std::endl; nbad++; } } return nbad; } /* If we are on the path to the known integer solution then check out if generated cut cuts off the known solution! If so then print offending cut and return non-zero code */ bool OsiRowCutDebugger::invalidCut(const OsiRowCut &rcut) const { bool bad = false; const double epsilon = 1.0e-6; CoinPackedVector rpv = rcut.row(); const int n = rpv.getNumElements(); const int *indices = rpv.getIndices(); const double *elements = rpv.getElements(); int k; double lb = rcut.lb(); double ub = rcut.ub(); double sum = 0.0; for (k = 0; k < n; k++) { int column = indices[k]; sum += knownSolution_[column] * elements[k]; } // is it violated if (sum > ub + epsilon || sum < lb - epsilon) { double violation = CoinMax(sum - ub, lb - sum); std::cout << "Cut with " << n << " coefficients, cuts off known solutions by " << violation << ", lo=" << lb << ", ub=" << ub << std::endl; for (k = 0; k < n; k++) { int column = indices[k]; std::cout << "( " << column << " , " << elements[k] << " ) "; if ((k % 4) == 3) std::cout << std::endl; } std::cout << std::endl; std::cout << "Non zero solution values are" << std::endl; int j = 0; for (k = 0; k < n; k++) { int column = indices[k]; if (fabs(knownSolution_[column]) > 1.0e-9) { std::cout << "( " << column << " , " << knownSolution_[column] << " ) "; if ((j % 4) == 3) std::cout << std::endl; j++; } } std::cout << std::endl; bad = true; } return bad; } /* Returns true if the column bounds in the solver do not exclude the solution held by the debugger, false otherwise Inspects only the integer variables. */ bool OsiRowCutDebugger::onOptimalPath(const OsiSolverInterface &si) const { if (integerVariable_) { int nCols = si.getNumCols(); if (nCols != numberColumns_) return false; // check user has not modified problem int i; const double *collower = si.getColLower(); const double *colupper = si.getColUpper(); bool onOptimalPath = true; for (i = 0; i < numberColumns_; i++) { if (collower[i] > colupper[i] + 1.0e-12) { printf("Infeasible bounds for %d - %g, %g\n", i, collower[i], colupper[i]); } if (si.isInteger(i)) { // value of integer variable in solution double value = knownSolution_[i]; if (value > colupper[i] + 1.0e-3 || value < collower[i] - 1.0e-3) { onOptimalPath = false; break; } } } return onOptimalPath; } else { // no information return false; } } /* Returns true if the debugger is active (i.e., if the debugger holds a known solution). */ bool OsiRowCutDebugger::active() const { return (integerVariable_ != NULL); } /* Print known solution Generally, prints the nonzero values of the known solution. Any incorrect values are flagged with an `*'. Zeros are printed if they are incorrect. As an aid to finding the output when there's something wrong, the first two incorrect values are printed again, flagged with `BAD'. Inspects only the integer variables. Returns the number of incorrect variables, or -1 if no solution is available. A mismatch in the number of columns between the debugger's solution and the solver qualifies as `no solution'. */ int OsiRowCutDebugger::printOptimalSolution(const OsiSolverInterface &si) const { int nCols = si.getNumCols(); if (integerVariable_ && nCols == numberColumns_) { const double *collower = si.getColLower(); const double *colupper = si.getColUpper(); /* Dump the nonzeros of the optimal solution. Print zeros if there's a problem. */ int bad[2] = { -1, -1 }; int badVars = 0; for (int j = 0; j < numberColumns_; j++) { if (integerVariable_[j]) { double value = knownSolution_[j]; bool ok = true; if (value > colupper[j] + 1.0e-3 || value < collower[j] - 1.0e-3) { if (bad[0] < 0) { bad[0] = j; } else { bad[1] = j; } ok = false; std::cout << "* "; } if (value || !ok) std::cout << j << " " << value << std::endl; } } for (int i = 0; i < 2; i++) { if (bad[i] >= 0) { int j = bad[i]; std::cout << "BAD " << j << " " << collower[j] << " <= " << knownSolution_[j] << " <= " << colupper[j] << std::endl; } } return (badVars); } else { // no information return -1; } } /* Activate a row cut debugger using the name of the model. A known optimal solution will be used to validate cuts. See the source below for the set of known problems. Most are miplib3. Returns true if the debugger is successfully activated. */ bool OsiRowCutDebugger::activate(const OsiSolverInterface &si, const char *model) { // set to true to print an activation message const bool printActivationNotice = false; int i; //get rid of any arrays delete[] integerVariable_; delete[] knownSolution_; numberColumns_ = 0; int expectedNumberColumns = 0; enum { undefined, pure0_1, continuousWith0_1, generalMip } probType; // Convert input parameter model to be lowercase and // only consider characters between '/' and '.' std::string modelL; //name in lowercase for (i = 0; i < static_cast< int >(strlen(model)); i++) { char value = static_cast< char >(tolower(model[i])); if (value == '/') { modelL.erase(); } else if (value == '.') { break; } else { modelL.append(1, value); } } CoinPackedVector intSoln; probType = undefined; //-------------------------------------------------------- // // Define additional problems by adding it as an additional // "else if ( modelL == '???' ) { ... }" // stanza below. // // Assign values to probType and intSoln. // // probType - pure0_1, continuousWith0_1, or generalMip // // intSoln - // when probType is pure0_1 // intSoln contains the indices of the variables // at 1 in the optimal solution // when probType is continuousWith0_1 // intSoln contains the indices of integer // variables at one in the optimal solution // when probType is generalMip // intSoln contains the the indices of the integer // variables and their value in the optimal solution //-------------------------------------------------------- // exmip1 if (modelL == "exmip1") { probType = continuousWith0_1; intSoln.insert(2, 1.); intSoln.insert(3, 1.); expectedNumberColumns = 8; } // p0033 else if (modelL == "p0033") { probType = pure0_1; // Alternate solution -- 21,23 replace 22. // int intIndicesAt1[]={ 0,6,7,9,13,17,18,21,23,24,25,26,27,28,29 }; int intIndicesAt1[] = { 0, 6, 7, 9, 13, 17, 18, 22, 24, 25, 26, 27, 28, 29 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 33; } // flugpl else if (modelL == "flugpl") { probType = generalMip; int intIndicesV[] = { 1, 3, 4, 6, 7, 9, 10, 12, 13, 15 }; double intSolnV[] = { 6., 60., 6., 60., 16., 70., 7., 70., 12., 75. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 18; } // enigma else if (modelL == "enigma") { probType = pure0_1; int intIndicesAt1[] = { 0, 18, 25, 36, 44, 59, 61, 77, 82, 93 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 100; } // mod011 else if (modelL == "mod011") { probType = continuousWith0_1; int intIndicesAt1[] = { 10, 29, 32, 40, 58, 77, 80, 88 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 10958; } // probing else if (modelL == "probing") { probType = continuousWith0_1; int intIndicesAt1[] = { 1, 18, 33, 59 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 149; } // mas76 else if (modelL == "mas76") { probType = continuousWith0_1; int intIndicesAt1[] = { 4, 11, 13, 18, 42, 46, 48, 52, 85, 93, 114, 119, 123, 128, 147 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 151; } // ltw3 else if (modelL == "ltw3") { probType = continuousWith0_1; int intIndicesAt1[] = { 20, 23, 24, 26, 32, 33, 40, 47 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 48; } // mod008 else if (modelL == "mod008") { probType = pure0_1; int intIndicesAt1[] = { 1, 59, 83, 116, 123 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 319; } // mod010 else if (modelL == "mod010") { probType = pure0_1; int intIndicesAt1[] = { 2, 9, 16, 22, 26, 50, 65, 68, 82, 86, 102, 145, 149, 158, 181, 191, 266, 296, 376, 479, 555, 625, 725, 851, 981, 1030, 1095, 1260, 1321, 1339, 1443, 1459, 1568, 1602, 1780, 1856, 1951, 2332, 2352, 2380, 2471, 2555, 2577, 2610, 2646, 2647 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 2655; } // modglob else if (modelL == "modglob") { probType = continuousWith0_1; int intIndicesAt1[] = { 204, 206, 208, 212, 216, 218, 220, 222, 230, 232, 234, 236, 244, 248, 250, 254, 256, 258, 260, 262, 264, 266, 268, 274, 278, 282, 284, 286, 288 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 422; } // p0201 else if (modelL == "p0201") { probType = pure0_1; int intIndicesAt1[] = { 8, 10, 21, 38, 39, 56, 60, 74, 79, 92, 94, 110, 111, 128, 132, 146, 151, 164, 166, 182, 183, 200 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 201; } // p0282 else if (modelL == "p0282") { probType = pure0_1; int intIndicesAt1[] = { 3, 11, 91, 101, 103, 117, 155, 169, 191, 199, 215, 223, 225, 237, 240, 242, 243, 244, 246, 248, 251, 254, 256, 257, 260, 262, 263, 273, 275, 276, 277, 280, 281 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 282; } // p0548 else if (modelL == "p0548") { probType = pure0_1; int intIndicesAt1[] = { 2, 3, 13, 14, 17, 23, 24, 43, 44, 47, 61, 62, 74, 75, 81, 82, 92, 93, 96, 98, 105, 120, 126, 129, 140, 141, 153, 154, 161, 162, 165, 177, 182, 184, 189, 192, 193, 194, 199, 200, 209, 214, 215, 218, 222, 226, 234, 239, 247, 256, 257, 260, 274, 286, 301, 305, 306, 314, 317, 318, 327, 330, 332, 334, 336, 340, 347, 349, 354, 358, 368, 369, 379, 380, 385, 388, 389, 390, 393, 394, 397, 401, 402, 406, 407, 417, 419, 420, 423, 427, 428, 430, 437, 439, 444, 446, 447, 450, 451, 452, 472, 476, 477, 480, 488, 491, 494, 500, 503, 508, 509, 510, 511, 512, 515, 517, 518, 519, 521, 522, 523, 525, 526, 527, 528, 529, 530, 531, 532, 533, 536, 537, 538, 539, 541, 542, 545, 547 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 548; } // p2756 else if (modelL == "p2756") { probType = pure0_1; int intIndicesAt1[] = { 7, 25, 50, 63, 69, 71, 81, 124, 164, 208, 210, 212, 214, 220, 266, 268, 285, 299, 301, 322, 362, 399, 455, 464, 468, 475, 518, 574, 588, 590, 612, 632, 652, 679, 751, 767, 794, 819, 838, 844, 892, 894, 913, 919, 954, 966, 996, 998, 1021, 1027, 1044, 1188, 1230, 1248, 1315, 1348, 1366, 1367, 1420, 1436, 1473, 1507, 1509, 1521, 1555, 1558, 1607, 1659, 1715, 1746, 1761, 1789, 1800, 1844, 1885, 1913, 1916, 1931, 1992, 2002, 2050, 2091, 2155, 2158, 2159, 2197, 2198, 2238, 2264, 2292, 2318, 2481, 2496, 2497, 2522, 2531, 2573, 2583, 2587, 2588, 2596, 2635, 2637, 2639, 2643, 2645, 2651, 2653, 2672, 2675, 2680, 2683, 2708, 2727, 2730, 2751 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 2756; } /* nw04 It turns out that the NAME line in nw04.mps distributed in miplib is actually NW-capital O-4. Who'd a thunk it? -- lh, 110402 -- */ else if (modelL == "nw04" || modelL == "nwo4") { probType = pure0_1; int intIndicesAt1[] = { 231, 1792, 1980, 7548, 21051, 28514, 53087, 53382, 76917 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 87482; } // bell3a else if (modelL == "bell3a") { probType = generalMip; int intIndicesV[] = { 61, 62, 65, 66, 67, 68, 69, 70 }; double intSolnV[] = { 4., 21., 4., 4., 6., 1., 25., 8. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 133; } // 10teams else if (modelL == "10teams") { probType = continuousWith0_1; int intIndicesAt1[] = { 236, 298, 339, 379, 443, 462, 520, 576, 616, 646, 690, 749, 778, 850, 878, 918, 986, 996, 1065, 1102, 1164, 1177, 1232, 1281, 1338, 1358, 1421, 1474, 1522, 1533, 1607, 1621, 1708, 1714, 1775, 1835, 1887, 1892, 1945, 1989 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 2025; } // rentacar else if (modelL == "rentacar") { probType = continuousWith0_1; int intIndicesAt1[] = { 9502, 9505, 9507, 9511, 9512, 9513, 9514, 9515, 9516, 9521, 9522, 9526, 9534, 9535, 9536, 9537, 9542, 9543, 9544, 9548, 9550, 9554 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 9557; } // qiu else if (modelL == "qiu") { probType = continuousWith0_1; int intIndicesAt1[] = { 0, 5, 8, 9, 11, 13, 16, 17, 19, 20, 24, 28, 32, 33, 35, 37, 40, 47 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 840; } // pk1 else if (modelL == "pk1") { probType = continuousWith0_1; int intIndicesAt1[] = { 1, 4, 5, 6, 7, 11, 13, 16, 17, 23, 24, 27, 28, 34, 35, 37, 43, 44, 45, 46, 47, 51, 52, 54 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 86; } // pp08a else if (modelL == "pp08a") { probType = continuousWith0_1; int intIndicesAt1[] = { 177, 179, 181, 183, 185, 190, 193, 195, 197, 199, 202, 204, 206, 208, 216, 220, 222, 229, 235 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 240; } // pp08aCUTS else if (modelL == "pp08acuts") { probType = continuousWith0_1; int intIndicesAt1[] = { 177, 179, 181, 183, 185, 190, 193, 195, 197, 199, 202, 204, 206, 208, 216, 220, 222, 229, 235 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 240; } // danoint else if (modelL == "danoint") { probType = continuousWith0_1; int intIndicesAt1[] = { 3, 5, 8, 11, 15, 21, 24, 25, 31, 34, 37, 42, 46, 48, 51, 56 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 521; } // dcmulti else if (modelL == "dcmulti") { probType = continuousWith0_1; int intIndicesAt1[] = { 2, 3, 11, 14, 15, 16, 21, 24, 28, 34, 35, 36, 39, 40, 41, 42, 45, 52, 53, 60, 61, 64, 65, 66, 67 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 548; } // egout else if (modelL == "egout") { probType = continuousWith0_1; int intIndicesAt1[] = { 0, 3, 5, 7, 8, 9, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 34, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 54 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 141; } // fixnet6 else if (modelL == "fixnet6") { probType = continuousWith0_1; int intIndicesAt1[] = { 1, 16, 23, 31, 37, 51, 64, 179, 200, 220, 243, 287, 375, 413, 423, 533, 537, 574, 688, 690, 693, 712, 753, 773, 778, 783, 847 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 878; } // khb05250 else if (modelL == "khb05250") { probType = continuousWith0_1; int intIndicesAt1[] = { 1, 3, 8, 11, 12, 15, 16, 17, 18, 21, 22, 23 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 1350; } // lseu else if (modelL == "lseu") { probType = pure0_1; int intIndicesAt1[] = { 0, 1, 6, 13, 26, 33, 38, 43, 50, 52, 63, 65, 85 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 89; } // air03 else if (modelL == "air03") { probType = pure0_1; int intIndicesAt1[] = { 1, 3, 5, 13, 14, 28, 38, 49, 75, 76, 151, 185, 186, 271, 370, 466, 570, 614, 732, 819, 1151, 1257, 1490, 2303, 2524, 3301, 3616, 4129, 4390, 4712, 5013, 5457, 5673, 6436, 7623, 8122, 8929, 10689, 10694, 10741, 10751 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 10757; } // air04 else if (modelL == "air04") { probType = pure0_1; int intIndicesAt1[] = { 0, 1, 3, 4, 5, 6, 7, 9, 11, 12, 13, 17, 19, 20, 21, 25, 26, 27, 28, 29, 32, 35, 36, 39, 40, 42, 44, 45, 47, 48, 49, 50, 51, 52, 53, 56, 57, 58, 60, 63, 64, 66, 67, 68, 73, 74, 80, 81, 83, 85, 87, 92, 93, 94, 95, 99, 101, 102, 105, 472, 616, 680, 902, 1432, 1466, 1827, 2389, 2535, 2551, 2883, 3202, 3215, 3432, 3438, 3505, 3517, 3586, 3811, 3904, 4092, 4685, 4700, 4834, 4847, 4892, 5189, 5211, 5394, 5878, 6045, 6143, 6493, 6988, 7511, 7664, 7730, 7910, 8041, 8350, 8615, 8635, 8670 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 8904; } // air05 else if (modelL == "air05") { probType = pure0_1; int intIndicesAt1[] = { 2, 4, 5, 6, 7, 8, 9, 10, 14, 15, 19, 20, 25, 34, 35, 37, 39, 40, 41, 42, 43, 44, 45, 47, 48, 50, 52, 55, 57, 58, 66, 72, 105, 218, 254, 293, 381, 695, 1091, 1209, 1294, 1323, 1348, 1580, 1769, 2067, 2156, 2162, 2714, 2732, 3113, 3131, 3145, 3323, 3398, 3520, 3579, 4295, 5025, 5175, 5317, 5340, 6324, 6504, 6645, 6809 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 7195; } // seymour else if (modelL == "seymour") { probType = pure0_1; int intIndicesAt1[] = { 1, 2, 3, 5, 6, 7, 9, 11, 12, 16, 18, 22, 23, 25, 27, 31, 32, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 49, 50, 51, 52, 54, 55, 56, 58, 61, 63, 65, 67, 68, 69, 70, 71, 75, 79, 81, 82, 84, 85, 86, 87, 88, 89, 91, 93, 95, 97, 98, 99, 100, 101, 102, 103, 106, 108, 112, 116, 118, 119, 120, 122, 123, 124, 125, 126, 129, 130, 132, 135, 137, 140, 141, 142, 143, 144, 148, 150, 151, 154, 156, 159, 160, 162, 163, 164, 165, 167, 169, 170, 174, 177, 178, 180, 181, 182, 183, 188, 189, 192, 194, 200, 201, 202, 203, 204, 211, 214, 218, 226, 227, 228, 231, 232, 237, 240, 242, 244, 247, 248, 249, 251, 253, 256, 257, 259, 261, 264, 265, 266, 268, 270, 272, 278, 280, 284, 286, 288, 289, 291, 292, 296, 299, 302, 305, 307, 308, 311, 312, 313, 314, 315, 316, 317, 319, 321, 325, 328, 332, 334, 335, 337, 338, 339, 340, 343, 346, 355, 357, 358, 365, 369, 372, 373, 374, 375, 376, 378, 381, 383, 386, 392, 396, 399, 402, 403, 412, 416, 419, 424, 425, 426, 427, 430, 431, 432, 436, 437, 438, 440, 441, 443, 450, 451, 452, 453, 456, 460, 461, 462, 467, 469, 475, 476, 477, 478, 479, 485, 486, 489, 491, 493, 498, 500, 501, 508, 513, 515, 516, 518, 519, 520, 524, 527, 541, 545, 547, 548, 559, 562, 563, 564, 566, 567, 570, 572, 575, 576, 582, 583, 587, 589, 595, 599, 602, 610, 611, 615, 622, 631, 646, 647, 649, 652, 658, 662, 665, 667, 671, 676, 679, 683, 685, 686, 688, 689, 691, 699, 705, 709, 711, 712, 716, 721, 722, 724, 726, 729, 732, 738, 739, 741, 745, 746, 747, 749, 752, 757, 765, 767, 768, 775, 779, 780, 791, 796, 798, 808, 809, 812, 813, 817, 819, 824, 825, 837, 839, 849, 851, 852, 857, 865, 874, 883, 885, 890, 897, 902, 907, 913, 915, 923, 924, 927, 931, 933, 936, 938, 941, 945, 949, 961, 970, 971, 978, 984, 985, 995, 997, 999, 1001, 1010, 1011, 1012, 1025, 1027, 1035, 1043, 1055, 1056, 1065, 1077, 1089, 1091, 1096, 1100, 1104, 1112, 1126, 1130, 1131, 1132, 1134, 1136, 1143, 1149, 1162, 1163, 1164, 1183, 1184, 1191, 1200, 1201, 1209, 1215, 1220, 1226, 1228, 1229, 1233, 1241, 1243, 1244, 1258, 1277, 1279, 1285, 1291, 1300, 1303, 1306, 1311, 1320, 1323, 1333, 1344, 1348, 1349, 1351, 1356, 1363, 1364, 1365, 1366 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 1372; } // stein27 else if (modelL == "stein27") { probType = pure0_1; int intIndicesAt1[] = { 0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13, 16, 17, 19, 21, 22, 25, 26 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 27; } // stein45 else if (modelL == "stein45") { probType = pure0_1; int intIndicesAt1[] = { 0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 14, 17, 18, 19, 21, 23, 24, 25, 26, 28, 31, 32, 33, 36, 37, 39, 40, 42, 43, 44 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 45; } // misc03 else if (modelL == "misc03") { probType = continuousWith0_1; int intIndicesAt1[] = { 4, 40, 62, 75, 99, 114, 127, 134, 147, 148, 150, 152, 154, 155, 157 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 160; } // misc06 else if (modelL == "misc06") { probType = continuousWith0_1; int intIndicesAt1[] = { 1557, 1560, 1561, 1580, 1585, 1588, 1589, 1614, 1615, 1616, 1617, 1626, 1630, 1631, 1642, 1643, 1644, 1645, 1650, 1654, 1658, 1659 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 1808; } // misc07 else if (modelL == "misc07") { probType = continuousWith0_1; int intIndicesAt1[] = { 21, 27, 57, 103, 118, 148, 185, 195, 205, 209, 243, 245, 247, 249, 251, 253, 255, 257 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 260; } // rgn else if (modelL == "rgn") { probType = continuousWith0_1; int intIndicesAt1[] = { 16, 49, 72, 92 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 180; } // mitre else if (modelL == "mitre") { probType = pure0_1; int intIndicesAt1[] = { 4, 37, 67, 93, 124, 154, 177, 209, 240, 255, 287, 319, 340, 372, 403, 425, 455, 486, 516, 547, 579, 596, 628, 661, 676, 713, 744, 758, 795, 825, 851, 881, 910, 933, 963, 993, 1021, 1052, 1082, 1111, 1141, 1172, 1182, 1212, 1242, 1272, 1303, 1332, 1351, 1382, 1414, 1445, 1478, 1508, 1516, 1546, 1576, 1601, 1632, 1662, 1693, 1716, 1749, 1781, 1795, 1828, 1860, 1876, 1909, 1940, 1962, 1994, 2027, 2058, 2091, 2122, 2128, 2161, 2192, 2226, 2261, 2290, 2304, 2339, 2369, 2393, 2426, 2457, 2465, 2500, 2529, 2555, 2590, 2619, 2633, 2665, 2696, 2728, 2760, 2792, 2808, 2838, 2871, 2896, 2928, 2960, 2981, 3014, 3045, 3065, 3098, 3127, 3139, 3170, 3200, 3227, 3260, 3292, 3310, 3345, 3375, 3404, 3437, 3467, 3482, 3513, 3543, 3558, 3593, 3623, 3653, 3686, 3717, 3730, 3762, 3794, 3814, 3845, 3877, 3901, 3936, 3966, 3988, 4019, 4049, 4063, 4096, 4126, 4153, 4186, 4216, 4245, 4276, 4306, 4318, 4350, 4383, 4402, 4435, 4464, 4486, 4519, 4550, 4578, 4611, 4641, 4663, 4695, 4726, 4738, 4768, 4799, 4830, 4863, 4892, 4919, 4950, 4979, 4991, 5024, 5054, 5074, 5107, 5137, 5165, 5198, 5228, 5244, 5275, 5307, 5325, 5355, 5384, 5406, 5436, 5469, 5508, 5538, 5568, 5585, 5615, 5646, 5675, 5705, 5734, 5745, 5774, 5804, 5836, 5865, 5895, 5924, 5954, 5987, 6001, 6033, 6064, 6096, 6126, 6155, 6172, 6202, 6232, 6250, 6280, 6309, 6328, 6361, 6392, 6420, 6450, 6482, 6500, 6531, 6561, 6598, 6629, 6639, 6669, 6699, 6731, 6762, 6784, 6814, 6844, 6861, 6894, 6924, 6955, 6988, 7018, 7042, 7075, 7105, 7116, 7149, 7179, 7196, 7229, 7258, 7282, 7312, 7345, 7376, 7409, 7438, 7457, 7487, 7520, 7534, 7563, 7593, 7624, 7662, 7692, 7701, 7738, 7769, 7794, 7827, 7857, 7872, 7904, 7935, 7960, 7990, 8022, 8038, 8071, 8101, 8137, 8167, 8199, 8207, 8240, 8269, 8301, 8334, 8363, 8387, 8420, 8450, 8470, 8502, 8534, 8550, 8580, 8610, 8639, 8669, 8699, 8709, 8741, 8772, 8803, 8834, 8867, 8883, 8912, 8942, 8973, 9002, 9032, 9061, 9094, 9124, 9128, 9159, 9201, 9232, 9251, 9280, 9310, 9333, 9338, 9405, 9419, 9423, 9428, 9465, 9472, 9482, 9526, 9639, 9644, 9666, 9673, 9729, 9746, 9751, 9819, 9832, 9833, 9894, 9911, 9934, 9990, 10007, 10012, 10083, 10090, 10095, 10137, 10176, 10177, 10271, 10279, 10280, 10288, 10292, 10298, 10299, 10319, 10351, 10490, 10505, 10553, 10571, 10579, 10600, 10612, 10683, 10688 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 10724; } // cap6000 else if (modelL == "cap6000") { probType = pure0_1; int intIndicesAt1[] = { 46, 141, 238, 250, 253, 257, 260, 261, 266, 268, 270, 274, 277, 280, 289, 292, 296, 297, 300, 305, 306, 310, 314, 317, 319, 321, 324, 329, 332, 333, 336, 339, 343, 345, 350, 353, 354, 357, 361, 364, 367, 370, 372, 376, 379, 381, 386, 387, 392, 395, 397, 400, 402, 405, 410, 413, 416, 419, 420, 425, 427, 430, 434, 436, 441, 444, 447, 451, 454, 456, 459, 463, 467, 468, 473, 474, 479, 480, 483, 488, 490, 493, 496, 499, 501, 506, 509, 511, 522, 536, 537, 552, 563, 565, 569, 571, 574, 576, 580, 582, 588, 591, 596, 597, 601, 607, 609, 613, 616, 618, 621, 626, 632, 634, 644, 647, 648, 658, 661, 663, 668, 670, 680, 688, 691, 695, 698, 699, 703, 713, 721, 723, 730, 740, 742, 746, 751, 755, 757, 760, 765, 770, 775, 777, 781, 785, 792, 796, 801, 804, 812, 821, 826, 834, 838, 840, 844, 872, 881, 883, 887, 888, 899, 904, 906, 917, 919, 931, 938, 945, 948, 953, 958, 962, 963, 970, 976, 979, 981, 997, 1000, 1004, 1005, 1009, 1013, 1014, 1024, 1026, 1034, 1039, 1055, 1061, 1069, 1076, 1078, 1084, 1089, 1099, 1101, 1104, 1109, 1111, 1124, 1127, 1129, 1133, 1138, 1140, 1145, 1148, 1149, 1159, 1166, 1167, 1171, 1180, 1187, 1194, 1197, 1205, 1224, 1228, 1246, 1255, 1261, 1269, 1275, 1286, 1289, 1291, 1311, 1390, 1406, 1410, 1413, 1418, 1427, 1435, 1440, 1446, 1453, 1455, 1468, 1477, 1479, 1486, 1492, 1502, 1508, 1509, 1525, 1551, 1559, 1591, 1643, 1657, 1660, 1662, 1677, 1710, 1719, 1752, 1840, 1862, 1870, 1891, 1936, 1986, 2087, 2178, 2203, 2212, 2311, 2503, 2505, 2530, 2532, 2557, 2561, 2564, 2567, 2571, 2578, 2581, 2588, 2591, 2594, 2595, 2598, 2603, 2605, 2616, 2620, 2624, 2630, 2637, 2643, 2647, 2654, 2656, 2681, 2689, 2699, 2703, 2761, 2764, 2867, 2871, 2879, 2936, 2971, 3024, 3076, 3094, 3119, 3378, 3435, 3438, 3446, 3476, 3570, 3605, 3646, 3702, 3725, 3751, 3755, 3758, 3760, 3764, 3765, 3770, 3773, 3776, 3779, 3782, 3784, 3788, 3791, 3792, 3796, 3799, 3803, 3804, 3807, 3811, 3814, 3816, 3821, 3823, 3826, 3830, 3831, 3836, 3838, 3840, 3844, 3847, 3851, 3852, 3855, 3859, 3863, 3864, 3867, 3895, 3921, 3948, 3960, 3970, 3988, 4026, 4032, 4035, 4036, 4038, 4041, 4042, 4045, 4046, 4048, 4050, 4053, 4055, 4057, 4058, 4060, 4063, 4065, 4067, 4069, 4071, 4072, 4075, 4076, 4079, 4081, 4082, 4085, 4087, 4088, 4090, 4092, 4094, 4097, 4099, 4100, 4102, 4104, 4107, 4109, 4111, 4113, 4114, 4207, 4209, 4213, 4216, 4220, 4227, 4233, 4238, 4240, 4248, 4253, 4259, 4260, 4267, 4268, 4273, 4280, 4284, 4290, 4292, 4295, 4301, 4303, 4311, 4319, 4326, 4329, 4332, 4335, 4336, 4344, 4349, 4351, 4355, 4363, 4371, 4372, 4378, 4388, 4401, 4409, 4413, 4417, 4420, 4435, 4441, 4451, 4458, 4463, 4468, 4474, 4478, 4482, 4483, 4488, 4497, 4499, 4522, 4614, 4626, 4645, 4648, 4751, 4755, 4758, 4759, 4763, 4840, 4846, 4859, 4865, 4883, 4943, 4970, 5030, 5084, 5124, 5181, 5224, 5236, 5238, 5328, 5362, 5375, 5378, 5434, 5478, 5483, 5562, 5581, 5586, 5591, 5644, 5684 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 6000; } // gen else if (modelL == "gen") { probType = generalMip; int intIndicesV[] = { 15, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 107, 108, 109, 110, 111, 112, 113, 114, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 432, 433, 434, 435, 436 }; double intSolnV[] = { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 23., 12., 11., 14., 16. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 870; } // dsbmip else if (modelL == "dsbmip") { probType = generalMip; int intIndicesV[] = { 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1729, 1745, 1748, 1751, 1753, 1754, 1758, 1760, 1766, 1771, 1774, 1777, 1781, 1787, 1792, 1796, 1800, 1805, 1811, 1817, 1819, 1821, 1822, 1824, 1828, 1835, 1839, 1841, 1844, 1845, 1851, 1856, 1860, 1862, 1864, 1869, 1875, 1883 }; double intSolnV[] = { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1886; } // gesa2 else if (modelL == "gesa2") { probType = generalMip; int intIndicesV[] = { 323, 324, 336, 337, 349, 350, 362, 363, 375, 376, 388, 389, 401, 402, 414, 415, 423, 424, 426, 427, 428, 436, 437, 439, 440, 441, 449, 450, 452, 453, 454, 462, 463, 465, 466, 467, 475, 476, 478, 479, 480, 489, 491, 492, 493, 502, 504, 505, 506, 514, 515, 517, 518, 519, 527, 528, 530, 531, 532, 537, 538, 540, 541, 543, 544, 545, 550, 551, 553, 554, 556, 557, 558, 563, 564, 566, 567, 569, 570, 571, 573, 577, 579, 580, 582, 583, 584, 592, 593, 595, 596, 597, 605, 606, 608, 609, 610, 622, 623, 1130, 1131, 1134, 1135, 1138, 1139, 1142, 1143, 1146, 1147, 1150, 1151, 1154, 1155, 1158, 1159, 1161, 1162, 1165, 1166, 1169, 1170, 1173, 1174, 1177, 1178, 1182, 1183, 1185, 1186, 1189, 1190, 1193, 1194, 1196, 1197, 1200, 1201, 1204, 1205, 1209, 1210, 1213, 1214, 1218, 1222, 1223 }; double intSolnV[] = { 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 2., 1., 2., 3., 2., 2., 1., 2., 3., 2., 2., 1., 2., 3., 2., 2., 1., 2., 2., 2., 2., 1., 2., 2., 2., 1., 2., 2., 2., 1., 2., 1., 2., 2., 1., 2., 2., 2., 2., 1., 2., 1., 4., 3., 3., 2., 1., 2., 1., 4., 3., 3., 2., 1., 2., 1., 4., 3., 3., 2., 1., 2., 1., 4., 3., 3., 2., 1., 2., 3., 3., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1224; } // gesa2_o else if (modelL == "gesa2_o") { probType = generalMip; int intIndicesV[] = { 315, 316, 328, 329, 341, 342, 354, 355, 367, 368, 380, 381, 393, 394, 406, 407, 419, 420, 423, 427, 428, 432, 433, 436, 440, 441, 445, 446, 449, 453, 454, 458, 459, 462, 466, 467, 471, 472, 475, 479, 480, 484, 485, 492, 493, 497, 498, 505, 506, 510, 511, 514, 518, 519, 523, 524, 527, 531, 532, 536, 537, 539, 540, 543, 544, 545, 549, 550, 552, 553, 556, 557, 558, 562, 563, 565, 566, 569, 570, 571, 575, 576, 577, 579, 582, 583, 584, 588, 589, 592, 596, 597, 601, 602, 605, 609, 610, 614, 615, 735, 739, 740, 748, 826, 839, 851, 852, 855, 856, 889, 1136, 1137, 1138, 1139, 1140, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1165, 1175, 1193, 1194, 1195, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1220, 1221, 1222, 1223 }; double intSolnV[] = { 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 2., 1., 2., 3., 2., 2., 1., 2., 3., 2., 2., 1., 2., 3., 2., 2., 1., 2., 2., 2., 2., 1., 2., 2., 2., 1., 2., 2., 2., 1., 2., 1., 2., 2., 1., 2., 2., 2., 2., 1., 2., 1., 3., 4., 3., 2., 1., 2., 1., 3., 4., 3., 2., 1., 2., 1., 3., 4., 3., 2., 1., 2., 1., 3., 4., 3., 2., 1., 2., 3., 3., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 2., 2., 1., 1., 1., 1., 4., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1224; } // gesa3 else if (modelL == "gesa3") { probType = generalMip; int intIndicesV[] = { 298, 299, 310, 311, 322, 323, 334, 335, 346, 347, 358, 359, 365, 370, 371, 377, 378, 380, 382, 383, 389, 390, 392, 394, 395, 401, 402, 404, 405, 406, 407, 413, 414, 416, 417, 418, 419, 425, 426, 428, 429, 430, 431, 437, 438, 440, 441, 442, 443, 449, 450, 452, 454, 455, 461, 462, 464, 466, 467, 473, 474, 476, 478, 479, 485, 486, 488, 490, 491, 497, 498, 500, 502, 503, 509, 510, 512, 514, 515, 521, 522, 524, 526, 527, 533, 534, 536, 538, 539, 545, 546, 548, 550, 551, 557, 558, 560, 562, 563, 569, 572, 574, 575, 1058, 1059, 1062, 1063, 1066, 1067, 1070, 1071, 1074, 1075, 1078, 1079, 1082, 1083, 1086, 1087, 1090, 1091, 1094, 1095, 1098, 1099, 1102, 1103, 1106, 1107, 1110, 1111, 1114, 1115, 1118, 1119, 1122, 1123, 1126, 1127, 1130, 1131, 1134, 1135, 1138, 1139, 1142, 1143, 1146, 1147, 1150, 1151 }; double intSolnV[] = { 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 1., 2., 2., 1., 1., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 2., 1., 2., 2., 1., 2., 2., 1., 2., 2., 1., 2., 2., 1., 2., 2., 1., 2., 1., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 4., 1., 2., 1., 2., 4., 2., 4., 1., 2., 4., 2., 4., 1., 2., 4., 2., 4., 1., 2., 4., 1., 4., 1., 2., 3., 1., 3., 1., 2., 2., 1., 2., 1., 2., 1., 1., 1., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1152; } // gesa3_o else if (modelL == "gesa3_o") { probType = generalMip; int intIndicesV[] = { 291, 292, 303, 304, 315, 316, 327, 328, 339, 340, 351, 352, 361, 363, 364, 373, 374, 375, 376, 379, 385, 386, 387, 388, 391, 397, 398, 399, 400, 403, 407, 409, 410, 411, 412, 415, 419, 421, 422, 423, 424, 427, 431, 433, 434, 435, 436, 439, 443, 445, 446, 447, 448, 451, 457, 458, 459, 460, 463, 469, 470, 471, 472, 475, 481, 482, 483, 484, 487, 493, 494, 495, 496, 499, 505, 506, 507, 508, 511, 517, 518, 519, 520, 523, 529, 530, 531, 532, 535, 541, 542, 543, 544, 547, 553, 554, 555, 556, 559, 565, 566, 567, 568, 578, 590, 602, 614, 626, 638, 649, 650, 661, 662, 667, 674, 686, 695, 698, 710, 722, 734, 746, 758, 769, 770, 782, 787, 794, 806, 818, 830, 842, 854, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151 }; double intSolnV[] = { 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 1., 2., 2., 1., 1., 2., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 2., 2., 1., 2., 1., 2., 2., 2., 1., 2., 1., 2., 2., 2., 1., 2., 1., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 1., 4., 2., 1., 2., 1., 4., 4., 1., 2., 2., 4., 4., 1., 2., 2., 4., 4., 1., 2., 2., 4., 4., 1., 2., 1., 3., 3., 1., 2., 1., 2., 2., 1., 2., 1., 1., 1., 1., 2., 4., 4., 4., 4., 4., 4., 1., 4., 1., 4., 1., 4., 4., 2., 4., 4., 4., 4., 4., 4., 2., 4., 4., 1., 4., 4., 4., 4., 4., 4., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1152; } // noswot else if (modelL == "noswot_z") { probType = generalMip; int intIndicesV[] = { 1 }; double intSolnV[] = { 1.0 }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 128; } // qnet1 else if (modelL == "qnet1") { probType = generalMip; int intIndicesV[] = { 61, 69, 79, 81, 101, 104, 111, 115, 232, 265, 267, 268, 269, 285, 398, 412, 546, 547, 556, 642, 709, 718, 721, 741, 760, 1073, 1077, 1084, 1097, 1100, 1104, 1106, 1109, 1248, 1259, 1260, 1263, 1265, 1273, 1274, 1276, 1286, 1291, 1302, 1306, 1307, 1316, 1350, 1351, 1363, 1366, 1368, 1371, 1372, 1380, 1381, 1385, 1409 }; double intSolnV[] = { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 2., 1., 1., 1., 1., 3., 1., 2., 1., 1., 1., 1., 6., 3., 1., 1., 5., 2., 1., 2., 2., 1., 2., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1541; } // qnet1_o (? marginally different from qnet1) else if (modelL == "qnet1_o") { probType = generalMip; int intIndicesV[] = { 61, 69, 79, 81, 101, 106, 111, 114, 115, 232, 266, 267, 268, 269, 277, 285, 398, 412, 546, 547, 556, 642, 709, 718, 721, 741, 760, 1073, 1077, 1084, 1097, 1100, 1104, 1106, 1109, 1248, 1259, 1260, 1263, 1265, 1273, 1274, 1276, 1286, 1291, 1302, 1306, 1307, 1316, 1350, 1351, 1363, 1366, 1368, 1371, 1372, 1380, 1381, 1385, 1409 }; double intSolnV[] = { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 2., 1., 1., 1., 1., 3., 1., 2., 1., 1., 1., 1., 6., 3., 1., 1., 5., 2., 1., 2., 2., 1., 2., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1541; } // gt2 else if (modelL == "gt2") { probType = generalMip; int intIndicesV[] = { 82, 85, 88, 92, 94, 95, 102, 103, 117, 121, 122, 128, 141, 146, 151, 152, 165, 166, 176, 179 }; double intSolnV[] = { 1., 3., 1., 5., 2., 1., 1., 2., 2., 2., 1., 2., 1., 1., 2., 1., 1., 6., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 188; } // fiber else if (modelL == "fiber") { probType = continuousWith0_1; int intIndicesAt1[] = { 36, 111, 190, 214, 235, 270, 338, 346, 372, 386, 421, 424, 441, 470, 473, 483, 484, 498, 580, 594, 597, 660, 689, 735, 742, 761, 762, 776, 779, 817, 860, 1044, 1067, 1122, 1238 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 1298; } // vpm1 else if (modelL == "vpm1") { probType = continuousWith0_1; int intIndicesAt1[] = { 180, 181, 182, 185, 195, 211, 214, 226, 231, 232, 244, 251, 263, 269, 285, 294, 306, 307, 314, 319 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 378; } // vpm2 else if (modelL == "vpm2") { probType = continuousWith0_1; int intIndicesAt1[] = { 170, 173, 180, 181, 182, 185, 193, 194, 196, 213, 219, 220, 226, 245, 251, 262, 263, 267, 269, 273, 288, 289, 294, 319, 320 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 378; } // markshare1 else if (modelL == "markshare1") { probType = continuousWith0_1; int intIndicesAt1[] = { 12, 13, 17, 18, 22, 27, 28, 29, 33, 34, 35, 36, 39, 42, 43, 44, 46, 47, 49, 51, 52, 53, 54, 55, 59 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 62; } // markshare2 else if (modelL == "markshare2") { probType = continuousWith0_1; int intIndicesAt1[] = { 16, 21, 25, 26, 29, 30, 31, 32, 34, 35, 37, 40, 42, 44, 45, 47, 48, 52, 53, 57, 58, 59, 60, 61, 62, 63, 65, 71, 73 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 74; } // l152lav else if (modelL == "l152lav") { probType = pure0_1; int intIndicesAt1[] = { 1, 16, 30, 33, 67, 111, 165, 192, 198, 321, 411, 449, 906, 961, 981, 1052, 1075, 1107, 1176, 1231, 1309, 1415, 1727, 1847, 1902, 1917, 1948, 1950 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 1989; } // bell5 else if (modelL == "bell5") { probType = generalMip; int intIndicesV[] = { 0, 1, 2, 3, 4, 6, 33, 34, 36, 47, 48, 49, 50, 51, 52, 53, 54, 56 }; double intSolnV[] = { 1., 1., 1., 1., 1., 1., 1., 1., 11., 2., 38., 2., 498., 125., 10., 17., 41., 19. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 104; } // blend2 else if (modelL == "blend2") { probType = generalMip; int intIndicesV[] = { 24, 35, 44, 45, 46, 52, 63, 64, 70, 71, 76, 84, 85, 132, 134, 151, 152, 159, 164, 172, 173, 289, 300, 309, 310, 311, 317, 328, 329, 335, 336, 341, 349, 350 }; double intSolnV[] = { 2., 1., 1., 1., 1., 1., 1., 1., 2., 1., 1., 1., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 353; } // seymour1 else if (modelL == "seymour_1") { probType = continuousWith0_1; int intIndicesAt1[] = { 0, 2, 3, 4, 6, 7, 8, 11, 12, 15, 18, 22, 23, 25, 27, 31, 32, 34, 35, 36, 37, 39, 40, 41, 42, 44, 45, 46, 49, 51, 54, 55, 56, 58, 61, 62, 63, 65, 67, 68, 69, 70, 71, 75, 79, 81, 82, 84, 85, 86, 87, 88, 89, 91, 93, 94, 95, 97, 98, 99, 101, 102, 103, 104, 106, 108, 110, 111, 112, 116, 118, 119, 120, 122, 123, 125, 126, 128, 129, 130, 131, 135, 140, 141, 142, 143, 144, 148, 149, 151, 152, 153, 156, 158, 160, 162, 163, 164, 165, 167, 169, 170, 173, 177, 178, 179, 181, 182, 186, 188, 189, 192, 193, 200, 201, 202, 203, 204, 211, 214, 218, 226, 227, 228, 231, 233, 234, 235, 238, 242, 244, 246, 249, 251, 252, 254, 257, 259, 260, 263, 266, 268, 270, 271, 276, 278, 284, 286, 288, 289, 291, 292, 299, 305, 307, 308, 311, 313, 315, 316, 317, 319, 321, 325, 328, 332, 334, 335, 337, 338, 340, 343, 346, 347, 354, 355, 357, 358, 365, 369, 372, 373, 374, 375, 376, 379, 381, 383, 386, 392, 396, 399, 402, 403, 412, 416, 423, 424, 425, 427, 430, 431, 432, 436, 437, 438, 440, 441, 443, 449, 450, 451, 452 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); probType = generalMip; expectedNumberColumns = 1372; } // check to see if the model parameter is // a known problem. if (probType != undefined && si.getNumCols() == expectedNumberColumns) { // Specified model is a known problem numberColumns_ = si.getNumCols(); integerVariable_ = new bool[numberColumns_]; knownSolution_ = new double[numberColumns_]; //CoinFillN(integerVariable_, numberColumns_,0); //CoinFillN(knownSolution_,numberColumns_,0.0); if (probType == pure0_1) { // mark all variables as integer CoinFillN(integerVariable_, numberColumns_, true); // set solution to 0.0 for all not mentioned CoinFillN(knownSolution_, numberColumns_, 0.0); // mark column solution that have value 1 for (i = 0; i < intSoln.getNumElements(); i++) { int col = intSoln.getIndices()[i]; knownSolution_[col] = intSoln.getElements()[i]; assert(knownSolution_[col] == 1.); } } else { // Probtype is continuousWith0_1 or generalMip assert(probType == continuousWith0_1 || probType == generalMip); OsiSolverInterface *siCopy = si.clone(); assert(siCopy->getMatrixByCol()->isEquivalent(*si.getMatrixByCol())); // Loop once for each column looking for integer variables for (i = 0; i < numberColumns_; i++) { // Is the this an integer variable? if (siCopy->isInteger(i)) { // integer variable found integerVariable_[i] = true; // Determine optimal solution value for integer i // from values saved in intSoln and probType. double soln; if (probType == continuousWith0_1) { // Since 0_1 problem, had better be binary assert(siCopy->isBinary(i)); // intSoln only contains integers with optimal value of 1 if (intSoln.isExistingIndex(i)) { soln = 1.0; assert(intSoln[i] == 1.); } else { soln = 0.0; } } else { // intSoln only contains integers with nonzero optimal values if (intSoln.isExistingIndex(i)) { soln = intSoln[i]; assert(intSoln[i] >= 1.); } else { soln = 0.0; } } // Set bounds in copyied problem to fix variable to its solution siCopy->setColUpper(i, soln); siCopy->setColLower(i, soln); } else { // this is not an integer variable integerVariable_[i] = false; } } // All integers have been fixed at optimal value. // Now solve to get continuous values #if 0 assert( siCopy->getNumRows()==5); assert( siCopy->getNumCols()==8); int r,c; for ( r=0; rgetNumRows(); r++ ) { std::cerr <<"rhs[" <rhs())[r] <getNumCols(); c++ ) { std::cerr <<"collower[" <collower())[c] <colupper())[c] <setWarmStart(&allSlack); siCopy->setHintParam(OsiDoScale, false); siCopy->initialSolve(); #if 0 for ( c=0; cgetNumCols(); c++ ) { std::cerr <<"colsol[" <colsol())[c] <getObjValue(),3.2368421052632)); #endif assert(siCopy->isProvenOptimal()); knownValue_ = siCopy->getObjValue(); // Save column solution CoinCopyN(siCopy->getColSolution(), numberColumns_, knownSolution_); delete siCopy; } } else if (printActivationNotice) { if (probType != undefined && si.getNumCols() != expectedNumberColumns) { std::cout << std::endl << " OsiRowCutDebugger::activate: expected " << expectedNumberColumns << " cols but see " << si.getNumCols() << "; cannot activate." << std::endl; } else { std::cout << " OsiRowCutDebugger::activate: unrecognised problem " << model << "; cannot activate." << std::endl; } } //if (integerVariable_!=NULL) si.rowCutDebugger_=this; return (integerVariable_ != NULL); } /* Activate a row cut debugger using a full solution array. It's up to the user to get it correct. Returns true if the debugger is activated. The solution array must be getNumCols() in length, but only the entries for integer variables need to be correct. keepContinuous defaults to false, but in some uses (nonlinear solvers, for example) it's useful to keep the given values, as they reflect constraints that are not present in the linear relaxation. */ bool OsiRowCutDebugger::activate(const OsiSolverInterface &si, const double *solution, bool keepContinuous) { // set true to get a debug message about activation const bool printActivationNotice = false; int i; //get rid of any arrays delete[] integerVariable_; delete[] knownSolution_; OsiSolverInterface *siCopy = si.clone(); numberColumns_ = siCopy->getNumCols(); integerVariable_ = new bool[numberColumns_]; knownSolution_ = new double[numberColumns_]; /* Fix the integer variables from the supplied solution (making sure that the values are integer). */ for (i = 0; i < numberColumns_; i++) { if (siCopy->isInteger(i)) { integerVariable_[i] = true; double soln = floor(solution[i] + 0.5); siCopy->setColUpper(i, soln); siCopy->setColLower(i, soln); } else { integerVariable_[i] = false; } } /* Solve the lp relaxation, then cache the primal solution and objective. If we're preserving the values of the given continuous variables, we can't trust the solver's calculation of the objective; it may well be using different values for the continuous variables. */ siCopy->setHintParam(OsiDoScale, false); //siCopy->writeMps("bad.mps") ; siCopy->initialSolve(); if (keepContinuous == false) { if (siCopy->isProvenOptimal()) { CoinCopyN(siCopy->getColSolution(), numberColumns_, knownSolution_); knownValue_ = siCopy->getObjValue(); if (printActivationNotice) { std::cout << std::endl << "OsiRowCutDebugger::activate: activated (opt), z = " << knownValue_ << std::endl; } } else { if (printActivationNotice) { std::cout << std::endl << "OsiRowCutDebugger::activate: solution was not optimal; " << "cannot activate." << std::endl; } delete[] integerVariable_; delete[] knownSolution_; integerVariable_ = NULL; knownSolution_ = NULL; knownValue_ = COIN_DBL_MAX; } } else { CoinCopyN(solution, numberColumns_, knownSolution_); const double *c = siCopy->getObjCoefficients(); knownValue_ = 0.0; for (int j = 0; j < numberColumns_; j++) { knownValue_ += c[j] * solution[j]; } knownValue_ = knownValue_ * siCopy->getObjSense(); if (printActivationNotice) { std::cout << std::endl << "OsiRowCutDebugger::activate: activated, z = " << knownValue_ << std::endl; } } delete siCopy; return (integerVariable_ != NULL); } //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiRowCutDebugger::OsiRowCutDebugger() : knownValue_(COIN_DBL_MAX) , numberColumns_(0) , integerVariable_(NULL) , knownSolution_(NULL) { // nothing to do here } //------------------------------------------------------------------- // Alternate Constructor with model name //------------------------------------------------------------------- // Constructor with name of model OsiRowCutDebugger::OsiRowCutDebugger( const OsiSolverInterface &si, const char *model) : knownValue_(COIN_DBL_MAX) , numberColumns_(0) , integerVariable_(NULL) , knownSolution_(NULL) { activate(si, model); } // Constructor with full solution (only integers need be correct) OsiRowCutDebugger::OsiRowCutDebugger(const OsiSolverInterface &si, const double *solution, bool enforceOptimality) : knownValue_(COIN_DBL_MAX) , numberColumns_(0) , integerVariable_(NULL) , knownSolution_(NULL) { activate(si, solution, enforceOptimality); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiRowCutDebugger::OsiRowCutDebugger(const OsiRowCutDebugger &source) : knownValue_(COIN_DBL_MAX) , numberColumns_(0) , integerVariable_(NULL) , knownSolution_(NULL) { // copy if (source.active()) { assert(source.integerVariable_ != NULL); assert(source.knownSolution_ != NULL); knownValue_ = source.knownValue_; numberColumns_ = source.numberColumns_; integerVariable_ = new bool[numberColumns_]; knownSolution_ = new double[numberColumns_]; CoinCopyN(source.integerVariable_, numberColumns_, integerVariable_); CoinCopyN(source.knownSolution_, numberColumns_, knownSolution_); } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiRowCutDebugger::~OsiRowCutDebugger() { // free memory delete[] integerVariable_; delete[] knownSolution_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiRowCutDebugger & OsiRowCutDebugger::operator=(const OsiRowCutDebugger &rhs) { if (this != &rhs) { delete[] integerVariable_; delete[] knownSolution_; knownValue_ = COIN_DBL_MAX; // copy if (rhs.active()) { assert(rhs.integerVariable_ != NULL); assert(rhs.knownSolution_ != NULL); knownValue_ = rhs.knownValue_; numberColumns_ = rhs.numberColumns_; integerVariable_ = new bool[numberColumns_]; knownSolution_ = new double[numberColumns_]; CoinCopyN(rhs.integerVariable_, numberColumns_, integerVariable_); CoinCopyN(rhs.knownSolution_, numberColumns_, knownSolution_); } } return *this; } /* Edit a solution after column changes (typically column deletion and/or transposition due to preprocessing). Given an array which translates current column indices to original column indices, shrink the solution to match. The transform is irreversible (in the sense that the debugger doesn't keep a record of the changes). */ void OsiRowCutDebugger::redoSolution(int numberColumns, const int *originalColumns) { const bool printRecalcMessage = false; assert(numberColumns <= numberColumns_); if (numberColumns < numberColumns_) { char *mark = new char[numberColumns_]; memset(mark, 0, numberColumns_); int i; for (i = 0; i < numberColumns; i++) mark[originalColumns[i]] = 1; numberColumns = 0; for (i = 0; i < numberColumns_; i++) { if (mark[i]) { integerVariable_[numberColumns] = integerVariable_[i]; knownSolution_[numberColumns++] = knownSolution_[i]; } } delete[] mark; numberColumns_ = numberColumns; if (printRecalcMessage) { #if 0 FILE * fp = fopen("xx.xx","wb"); assert (fp); fwrite(&numberColumns,sizeof(int),1,fp); fwrite(knownSolution_,sizeof(double),numberColumns,fp); fclose(fp); exit(0); #endif printf("debug solution - recalculated\n"); } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/format-source.sh0000755000175000017500000000100313414504051016502 0ustar sudipsudip# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done Vol-1.5.4/Osi/src/Osi/OsiConfig.h0000644000175000017500000000242412101340333015407 0ustar sudipsudip/* Copyright (C) 2011 * All Rights Reserved. * This code is published under the Eclipse Public License. * * $Id: OsiConfig.h 1881 2013-01-28 00:05:47Z stefan $ * * Include file for the configuration of Osi. * * On systems where the code is configured with the configure script * (i.e., compilation is always done with HAVE_CONFIG_H defined), this * header file includes the automatically generated header file. * * On systems that are compiled in other ways (e.g., with the * Developer Studio), a header files is included to define those * macros that depend on the operating system and the compiler. The * macros that define the configuration of the particular user setting * (e.g., presence of other COIN-OR packages or third party code) are set * by the files config_*default.h. The project maintainer needs to remember * to update these file and choose reasonable defines. * A user can modify the default setting by editing the config_*default.h files. */ #ifndef __OSICONFIG_H__ #define __OSICONFIG_H__ #ifdef HAVE_CONFIG_H #ifdef OSI_BUILD #include "config.h" #else #include "config_osi.h" #endif #else /* HAVE_CONFIG_H */ #ifdef OSI_BUILD #include "config_default.h" #else #include "config_osi_default.h" #endif #endif /* HAVE_CONFIG_H */ #endif /*__OSICONFIG_H__*/ Vol-1.5.4/Osi/src/Osi/Makefile.in0000644000175000017500000006232512502175645015452 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2010 Lou Hafer # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Lou Hafer SFU 2010-07-29 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/Osi DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/config_osi.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h config_osi.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsi_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libOsi_la_OBJECTS = OsiAuxInfo.lo OsiBranchingObject.lo \ OsiChooseVariable.lo OsiColCut.lo OsiCut.lo OsiCuts.lo \ OsiNames.lo OsiPresolve.lo OsiRowCut.lo OsiRowCutDebugger.lo \ OsiSolverBranch.lo OsiSolverInterface.lo libOsi_la_OBJECTS = $(am_libOsi_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsi_la_SOURCES) DIST_SOURCES = $(libOsi_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsi # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in $libdir lib_LTLIBRARIES = libOsi.la # List all source files for this library, including headers libOsi_la_SOURCES = \ OsiConfig.h \ OsiAuxInfo.cpp OsiAuxInfo.hpp \ OsiBranchingObject.cpp OsiBranchingObject.hpp \ OsiChooseVariable.cpp OsiChooseVariable.hpp \ OsiColCut.cpp OsiColCut.hpp \ OsiCollections.hpp \ OsiCut.cpp OsiCut.hpp \ OsiCuts.cpp OsiCuts.hpp \ OsiNames.cpp \ OsiPresolve.cpp OsiPresolve.hpp \ OsiRowCut.cpp OsiRowCut.hpp \ OsiRowCutDebugger.cpp OsiRowCutDebugger.hpp \ OsiSolverBranch.cpp OsiSolverBranch.hpp \ OsiSolverInterface.cpp OsiSolverInterface.hpp \ OsiSolverParameters.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsi_la_LIBADD = $(OSILIB_LIBS) # This is for libtool libOsi_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags. AM_CPPFLAGS = $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation. # This "cygpath" stuff is necessary to compile with native compilers on Windows. DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'includedir/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ OsiAuxInfo.hpp \ OsiBranchingObject.hpp \ OsiChooseVariable.hpp \ OsiColCut.hpp \ OsiCollections.hpp \ OsiCut.hpp \ OsiCuts.hpp \ OsiPresolve.hpp \ OsiRowCut.hpp \ OsiRowCutDebugger.hpp \ OsiSolverBranch.hpp \ OsiSolverInterface.hpp \ OsiSolverParameters.hpp all: config.h config_osi.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Osi/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Osi/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/Osi/config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ config_osi.h: stamp-h2 @if test ! -f $@; then \ rm -f stamp-h2; \ $(MAKE) stamp-h2; \ else :; fi stamp-h2: $(srcdir)/config_osi.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status src/Osi/config_osi.h distclean-hdr: -rm -f config.h stamp-h1 config_osi.h stamp-h2 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsi.la: $(libOsi_la_OBJECTS) $(libOsi_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsi_la_LDFLAGS) $(libOsi_la_OBJECTS) $(libOsi_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiAuxInfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiBranchingObject.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiChooseVariable.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiColCut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiCut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiCuts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiNames.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiPresolve.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiRowCut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiRowCutDebugger.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSolverBranch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in config_osi.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in config_osi.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in config_osi.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in config_osi.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h config_osi.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-exec-local install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES uninstall-local .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am \ install-exec-local install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES uninstall-local install-exec-local: $(install_sh_DATA) config_osi.h $(DESTDIR)$(includecoindir)/OsiConfig.h uninstall-local: rm -f $(DESTDIR)$(includecoindir)/OsiConfig.h # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Osi/src/Osi/OsiRowCut.cpp0000644000175000017500000002015013414504051015763 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include "CoinPragma.hpp" #include "CoinFinite.hpp" #include "OsiRowCut.hpp" #ifndef OSI_INLINE_ROWCUT_METHODS // //------------------------------------------------------------------- // // Set/Get lower & upper bounds // //------------------------------------------------------------------- double OsiRowCut::lb() const { return lb_; } void OsiRowCut::setLb(double lb) { lb_ = lb; } double OsiRowCut::ub() const { return ub_; } void OsiRowCut::setUb(double ub) { ub_ = ub; } //------------------------------------------------------------------- // Set row elements //------------------------------------------------------------------- void OsiRowCut::setRow(int size, const int *colIndices, const double *elements, bool testForDuplicateIndex) { row_.setVector(size, colIndices, elements, testForDuplicateIndex); } void OsiRowCut::setRow(const CoinPackedVector &v) { row_ = v; } //------------------------------------------------------------------- // Get the row //------------------------------------------------------------------- const CoinPackedVector &OsiRowCut::row() const { return row_; } //------------------------------------------------------------------- // Get the row for changing //------------------------------------------------------------------- CoinPackedVector &OsiRowCut::mutableRow() { return row_; } //---------------------------------------------------------------- // == operator //------------------------------------------------------------------- bool OsiRowCut::operator==(const OsiRowCut &rhs) const { if (this->OsiCut::operator!=(rhs)) return false; if (row() != rhs.row()) return false; if (lb() != rhs.lb()) return false; if (ub() != rhs.ub()) return false; return true; } bool OsiRowCut::operator!=(const OsiRowCut &rhs) const { return !((*this) == rhs); } //---------------------------------------------------------------- // consistent & infeasible //------------------------------------------------------------------- bool OsiRowCut::consistent() const { const CoinPackedVector &r = row(); r.duplicateIndex("consistent", "OsiRowCut"); if (r.getMinIndex() < 0) return false; return true; } bool OsiRowCut::consistent(const OsiSolverInterface &im) const { const CoinPackedVector &r = row(); if (r.getMaxIndex() >= im.getNumCols()) return false; return true; } bool OsiRowCut::infeasible(const OsiSolverInterface &) const { if (lb() > ub()) return true; return false; } #endif /* Returns infeasibility of the cut with respect to solution passed in i.e. is positive if cuts off that solution. solution is getNumCols() long.. */ double OsiRowCut::violated(const double *solution) const { int i; double sum = 0.0; const int *column = row_.getIndices(); int number = row_.getNumElements(); const double *element = row_.getElements(); for (i = 0; i < number; i++) { int colIndx = column[i]; sum += solution[colIndx] * element[i]; } if (sum > ub_) return sum - ub_; else if (sum < lb_) return lb_ - sum; else return 0.0; } //------------------------------------------------------------------- // Row sense, rhs, range //------------------------------------------------------------------- char OsiRowCut::sense() const { if (lb_ == ub_) return 'E'; else if (lb_ == -COIN_DBL_MAX && ub_ == COIN_DBL_MAX) return 'N'; else if (lb_ == -COIN_DBL_MAX) return 'L'; else if (ub_ == COIN_DBL_MAX) return 'G'; else return 'R'; } double OsiRowCut::rhs() const { if (lb_ == ub_) return ub_; else if (lb_ == -COIN_DBL_MAX && ub_ == COIN_DBL_MAX) return 0.0; else if (lb_ == -COIN_DBL_MAX) return ub_; else if (ub_ == COIN_DBL_MAX) return lb_; else return ub_; } double OsiRowCut::range() const { if (lb_ == ub_) return 0.0; else if (lb_ == -COIN_DBL_MAX && ub_ == COIN_DBL_MAX) return 0.0; else if (lb_ == -COIN_DBL_MAX) return 0.0; else if (ub_ == COIN_DBL_MAX) return 0.0; else return ub_ - lb_; } //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiRowCut::OsiRowCut() : OsiCut() , row_() , lb_(-COIN_DBL_MAX) , ub_(COIN_DBL_MAX) { //#ifdef NDEBUG //row_.setTestForDuplicateIndex(false); //#endif } //------------------------------------------------------------------- // Ownership constructor //------------------------------------------------------------------- OsiRowCut::OsiRowCut(double cutlb, double cutub, int capacity, int size, int *&colIndices, double *&elements) : OsiCut() , row_(capacity, size, colIndices, elements) , lb_(cutlb) , ub_(cutub) { } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiRowCut::OsiRowCut(const OsiRowCut &source) : OsiCut(source) , row_(source.row_) , lb_(source.lb_) , ub_(source.ub_) { // Nothing to do here } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiRowCut *OsiRowCut::clone() const { return (new OsiRowCut(*this)); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiRowCut::~OsiRowCut() { // Nothing to do here } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiRowCut & OsiRowCut::operator=(const OsiRowCut &rhs) { if (this != &rhs) { OsiCut::operator=(rhs); row_ = rhs.row_; lb_ = rhs.lb_; ub_ = rhs.ub_; } return *this; } //---------------------------------------------------------------- // Print //------------------------------------------------------------------- void OsiRowCut::print() const { int i; std::cout << "Row cut has " << row_.getNumElements() << " elements"; if (lb_ < -1.0e20 && ub_ < 1.0e20) std::cout << " with upper rhs of " << ub_; else if (lb_ > -1.0e20 && ub_ > 1.0e20) std::cout << " with lower rhs of " << lb_; else std::cout << " !!! with lower, upper rhs of " << lb_ << " and " << ub_; std::cout << std::endl; for (i = 0; i < row_.getNumElements(); i++) { int colIndx = row_.getIndices()[i]; double element = row_.getElements()[i]; if (i > 0 && element > 0) std::cout << " +"; std::cout << element << " * x" << colIndx << " "; } std::cout << std::endl; } //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiRowCut2::OsiRowCut2(int row) : OsiRowCut() , whichRow_(row) { // nothing to do here } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiRowCut2::OsiRowCut2(const OsiRowCut2 &source) : OsiRowCut(source) , whichRow_(source.whichRow_) { // Nothing to do here } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiRowCut *OsiRowCut2::clone() const { return (new OsiRowCut2(*this)); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiRowCut2::~OsiRowCut2() { // Nothing to do here } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiRowCut2 & OsiRowCut2::operator=(const OsiRowCut2 &rhs) { if (this != &rhs) { OsiRowCut::operator=(rhs); whichRow_ = rhs.whichRow_; } return *this; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiCut.cpp0000644000175000017500000000351313414504051015277 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "OsiCut.hpp" //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiCut::OsiCut() : effectiveness_(0.) , globallyValid_(0) //timesUsed_(0), //timesTested_(0) { // nothing to do here } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiCut::OsiCut( const OsiCut &source) : effectiveness_(source.effectiveness_) , globallyValid_(source.globallyValid_) //timesUsed_(source.timesUsed_), //timesTested_(source.timesTested_) { // nothing to do here } #if 0 //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiCut * OsiCut::clone() const { return (new OsiCut(*this));} #endif //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiCut::~OsiCut() { // nothing to do here } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiCut & OsiCut::operator=(const OsiCut &rhs) { if (this != &rhs) { effectiveness_ = rhs.effectiveness_; globallyValid_ = rhs.globallyValid_; //timesUsed_=rhs.timesUsed_; //timesTested_=rhs.timesTested_; } return *this; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiSolverParameters.hpp0000644000175000017500000001122613414504051020047 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiSolverParameters_H #define OsiSolverParameters_H enum OsiIntParam { /*! \brief Iteration limit for initial solve and resolve. The maximum number of iterations (whatever that means for the given solver) the solver can execute in the OsiSolverinterface::initialSolve() and OsiSolverinterface::resolve() methods before terminating. */ OsiMaxNumIteration = 0, /*! \brief Iteration limit for hot start The maximum number of iterations (whatever that means for the given solver) the solver can execute in the OsiSolverinterface::solveFromHotStart() method before terminating. */ OsiMaxNumIterationHotStart, /*! \brief Handling of row and column names. The name discipline specifies how the solver will handle row and column names: - 0: Auto names: Names cannot be set by the client. Names of the form Rnnnnnnn or Cnnnnnnn are generated on demand when a name for a specific row or column is requested; nnnnnnn is derived from the row or column index. Requests for a vector of names return a vector with zero entries. - 1: Lazy names: Names supplied by the client are retained. Names of the form Rnnnnnnn or Cnnnnnnn are generated on demand if no name has been supplied by the client. Requests for a vector of names return a vector sized to the largest index of a name supplied by the client; some entries in the vector may be null strings. - 2: Full names: Names supplied by the client are retained. Names of the form Rnnnnnnn or Cnnnnnnn are generated on demand if no name has been supplied by the client. Requests for a vector of names return a vector sized to match the constraint system, and all entries will contain either the name specified by the client or a generated name. */ OsiNameDiscipline, /*! \brief End marker. Used by OsiSolverInterface to allocate a fixed-sized array to store integer parameters. */ OsiLastIntParam }; enum OsiDblParam { /*! \brief Dual objective limit. This is to be used as a termination criteria in algorithms where the dual objective changes monotonically (e.g., dual simplex, volume algorithm). */ OsiDualObjectiveLimit = 0, /*! \brief Primal objective limit. This is to be used as a termination criteria in algorithms where the primal objective changes monotonically (e.g., primal simplex) */ OsiPrimalObjectiveLimit, /*! \brief Dual feasibility tolerance. The maximum amount a dual constraint can be violated and still be considered feasible. */ OsiDualTolerance, /*! \brief Primal feasibility tolerance. The maximum amount a primal constraint can be violated and still be considered feasible. */ OsiPrimalTolerance, /** The value of any constant term in the objective function. */ OsiObjOffset, /*! \brief End marker. Used by OsiSolverInterface to allocate a fixed-sized array to store double parameters. */ OsiLastDblParam }; enum OsiStrParam { /*! \brief The name of the loaded problem. This is the string specified on the Name card of an mps file. */ OsiProbName = 0, /*! \brief The name of the solver. This parameter is read-only. */ OsiSolverName, /*! \brief End marker. Used by OsiSolverInterface to allocate a fixed-sized array to store string parameters. */ OsiLastStrParam }; enum OsiHintParam { /** Whether to do a presolve in initialSolve */ OsiDoPresolveInInitial = 0, /** Whether to use a dual algorithm in initialSolve. The reverse is to use a primal algorithm */ OsiDoDualInInitial, /** Whether to do a presolve in resolve */ OsiDoPresolveInResolve, /** Whether to use a dual algorithm in resolve. The reverse is to use a primal algorithm */ OsiDoDualInResolve, /** Whether to scale problem */ OsiDoScale, /** Whether to create a non-slack basis (only in initialSolve) */ OsiDoCrash, /** Whether to reduce amount of printout, e.g., for branch and cut */ OsiDoReducePrint, /** Whether we are in branch and cut - so can modify behavior */ OsiDoInBranchAndCut, /** Just a marker, so that OsiSolverInterface can allocate a static sized array to store parameters. */ OsiLastHintParam }; enum OsiHintStrength { /** Ignore hint (default) */ OsiHintIgnore = 0, /** This means it is only a hint */ OsiHintTry, /** This means do hint if at all possible */ OsiHintDo, /** And this means throw an exception if not possible */ OsiForceDo }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiNames.cpp0000644000175000017500000006165313414504051015620 0ustar sudipsudip// Copyright (C) 2007, Lou Hafer and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include #include "OsiSolverInterface.hpp" #include "CoinLpIO.hpp" #include "CoinMpsIO.hpp" #include "CoinModel.hpp" /* These routines support three name disciplines: 0: No names: No name information is retained. rowNames_ and colNames_ are always vectors of length 0. Requests for individual names will return a name of the form RowNNN or ColNNN, generated on request. 1: Lazy names: Name information supplied by the client is retained. rowNames_ and colNames_ are sized to be large enough to hold names supplied by the client, and no larger. If the client has left holes, those entries will contain a null string. Requests for individual names will return the name supplied by the client, or a generated name. Requests for a vector of names will return a reference to rowNames_ or colNames_, with no modification. This mode is intended for applications like branch-and-cut, where the client is only interested in the original constraint system and could care less about names for generated constraints and variables. The various read[Mps,GMPL,Lp] routines capture the names that are part of the input format. If the client is building from scratch, they'll need to supply the names as they install constraints and variables. 2: Full names: From the client's point of view, this looks exactly like lazy names, except that when a vector of names is requested, the vector is always sized to match the constraint system and all entries have names (either supplied or generated). Internally, full names looks just like lazy names, with the exception that if the client requests one of the name vectors, we generate the full version on the spot and keep it around for further use. This approach sidesteps some ugly implementation issues. The base routines to add a row or column, or load a problem from matrices, are pure virtual. There's just no way to guarantee we can keep the name vectors up-to-date with each modification. Nor do we want to be in the business of generating a name as soon as the row or column appears, only to have our generated name immediately overridden by the client. Arguably these magic numbers should be an enum, but that's not the current OSI style. */ namespace { /* Generate a `name' that's really an error message. A separate routine strictly for standardisation and ease of use. The 'u' code is intended to be used when a routine is expecting one of 'r' or 'c' and saw something else. */ std::string invRowColName(char rcd, int ndx) { std::ostringstream buildName; buildName << "!!invalid "; switch (rcd) { case 'r': { buildName << "Row " << ndx << "!!"; break; } case 'c': { buildName << "Col " << ndx << "!!"; break; } case 'd': { buildName << "Discipline " << ndx << "!!"; break; } case 'u': { buildName << "Row/Col " << ndx << "!!"; break; } default: { buildName << "!!Internal Confusion!!"; break; } } return (buildName.str()); } /* Adjust the allocated capacity of the name vectors, if they're sufficiently far off (more than 1000 elements). Use this routine only if you don't need the current contents of the vectors. The `assignment & swap' bit is a trick lifted from Stroustrop 16.3.8 to make sure we really give back some space. */ void reallocRowColNames(OsiSolverInterface::OsiNameVec &rowNames, int m, OsiSolverInterface::OsiNameVec &colNames, int n) { int rowCap = static_cast< int >(rowNames.capacity()); int colCap = static_cast< int >(colNames.capacity()); if (rowCap - m > 1000) { rowNames.resize(m); OsiSolverInterface::OsiNameVec tmp = rowNames; rowNames.swap(tmp); } else if (rowCap < m) { rowNames.reserve(m); } assert(rowNames.capacity() >= static_cast< unsigned >(m)); if (colCap - n > 1000) { colNames.resize(n); OsiSolverInterface::OsiNameVec tmp = colNames; colNames.swap(tmp); } else if (colCap < n) { colNames.reserve(n); } assert(colNames.capacity() >= static_cast< unsigned >(n)); return; } /* It's handy to have a 0-length name vector hanging around to use as a return value when the name discipline = auto. Then we don't have to worry about what's actually occupying rowNames_ or colNames_. */ const OsiSolverInterface::OsiNameVec zeroLengthNameVec(0); } /* Generate the default RNNNNNNN/CNNNNNNN. This is a separate routine so that it's available to generate names for new rows and columns. If digits is nonzero, it's used, otherwise the default is 7 digits after the initial R or C. If rc = 'o', return the default name for the objective function. Yes, it's true that ndx = m is (by definition) supposed to refer to the objective function. But ... we're often calling this routine to get a name *before* installing the row. Unless you want all your rows to be named OBJECTIVE, something different is needed here. */ std::string OsiSolverInterface::dfltRowColName(char rc, int ndx, unsigned digits) const { std::ostringstream buildName; if (!(rc == 'r' || rc == 'c' || rc == 'o')) { return (invRowColName('u', ndx)); } if (ndx < 0) { return (invRowColName(rc, ndx)); } if (digits <= 0) { digits = 7; } if (rc == 'o') { std::string dfltObjName = "OBJECTIVE"; buildName << dfltObjName.substr(0, digits + 1); } else { buildName << ((rc == 'r') ? "R" : "C"); buildName << std::setw(digits) << std::setfill('0'); buildName << ndx; } return buildName.str(); } /* Return the name of the objective function. */ std::string OsiSolverInterface::getObjName(unsigned maxLen) const { std::string name; if (objName_.length() == 0) { name = dfltRowColName('o', 0, maxLen); } else { name = objName_.substr(0, maxLen); } return (name); } /* Return a row name, according to the current name discipline, truncated if necessary. If the row index is out of range, the name becomes an error message. By definition, ndx = getNumRows() (i.e., one greater than the largest valid row index) is the objective function. */ std::string OsiSolverInterface::getRowName(int ndx, unsigned maxLen) const { int nameDiscipline; std::string name; /* Check for valid row index. */ int m = getNumRows(); if (ndx < 0 || ndx > m) { name = invRowColName('r', ndx); return (name); } /* The objective is kept separately, so we don't always have an entry at index m in the names vector. If no name is set, return the default. */ if (ndx == m) { return (getObjName(maxLen)); } /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Find/generate the proper name, based on discipline. */ switch (nameDiscipline) { case 0: { name = dfltRowColName('r', ndx); break; } case 1: case 2: { name = ""; if (static_cast< unsigned >(ndx) < rowNames_.size()) name = rowNames_[ndx]; if (name.length() == 0) name = dfltRowColName('r', ndx); break; } default: { name = invRowColName('d', nameDiscipline); return (name); } } /* Return the (possibly truncated) substring. The default for maxLen is npos (no truncation). */ return (name.substr(0, maxLen)); } /* Return the vector of row names. The vector we need depends on the name discipline: 0: return a vector of length 0 1: return rowNames_, no tweaking required 2: Check that rowNames_ is complete. Generate a complete vector on the spot if we need it. */ const OsiSolverInterface::OsiNameVec &OsiSolverInterface::getRowNames() { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Return the proper vector, as described at the head of the routine. If we need to generate a full vector, resize the existing vector and scan, filling in entries as required. */ switch (nameDiscipline) { case 0: { return (zeroLengthNameVec); } case 1: { return (rowNames_); } case 2: { int m = getNumRows(); if (rowNames_.size() < static_cast< unsigned >(m + 1)) { rowNames_.resize(m + 1); } for (int i = 0; i < m; i++) { if (rowNames_[i].length() == 0) { rowNames_[i] = dfltRowColName('r', i); } } if (rowNames_[m].length() == 0) { rowNames_[m] = getObjName(); } return (rowNames_); } default: { /* quietly fail */ return (zeroLengthNameVec); } } /* We should never reach here. */ assert(false); return (zeroLengthNameVec); } /* Return a column name, according to the current name discipline, truncated if necessary. If the column index is out of range, the name becomes an error message. */ std::string OsiSolverInterface::getColName(int ndx, unsigned maxLen) const { int nameDiscipline; std::string name; /* Check for valid column index. */ if (ndx < 0 || ndx >= getNumCols()) { name = invRowColName('c', ndx); return (name); } /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Find/generate the proper name, based on discipline. */ switch (nameDiscipline) { case 0: { name = dfltRowColName('c', ndx); break; } case 1: case 2: { name = ""; if (static_cast< unsigned >(ndx) < colNames_.size()) name = colNames_[ndx]; if (name.length() == 0) name = dfltRowColName('c', ndx); break; } default: { name = invRowColName('d', nameDiscipline); return (name); } } /* Return the (possibly truncated) substring. The default for maxLen is npos (no truncation). */ return (name.substr(0, maxLen)); } /* Return the vector of column names. The vector we need depends on the name discipline: 0: return a vector of length 0 1: return colNames_, no tweaking required 2: Check that colNames_ is complete. Generate a complete vector on the spot if we need it. */ const OsiSolverInterface::OsiNameVec &OsiSolverInterface::getColNames() { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Return the proper vector, as described at the head of the routine. If we need to generate a full vector, resize the existing vector and scan, filling in entries as required. */ switch (nameDiscipline) { case 0: { return (zeroLengthNameVec); } case 1: { return (colNames_); } case 2: { int n = getNumCols(); if (colNames_.size() < static_cast< unsigned >(n)) { colNames_.resize(n); } for (int j = 0; j < n; j++) { if (colNames_[j].length() == 0) { colNames_[j] = dfltRowColName('c', j); } } return (colNames_); } default: { /* quietly fail */ return (zeroLengthNameVec); } } /* We should never reach here. */ assert(false); return (zeroLengthNameVec); } /* Set a single row name. Quietly does nothing if the index or name discipline is invalid. */ void OsiSolverInterface::setRowName(int ndx, std::string name) { int nameDiscipline; /* Quietly do nothing if the index is out of bounds. This should be changed, but what's our error convention, eh? There's no precedent in OsiSolverInterface.cpp. */ if (ndx < 0 || ndx >= getNumRows()) { return; } /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Do the right thing, according to the discipline. */ switch (nameDiscipline) { case 0: { break; } case 1: case 2: { if (static_cast< unsigned >(ndx) > rowNames_.capacity()) { rowNames_.resize(ndx + 1); } else if (static_cast< unsigned >(ndx) >= rowNames_.size()) { rowNames_.resize(ndx + 1); } rowNames_[ndx] = name; break; } default: { break; } } return; } /* Set a run of row names. Quietly fail if the specified indices are invalid. On the target side, [tgtStart, tgtStart+len-1] must be in the range [0,m-1], where m is the number of rows. On the source side, srcStart must be zero or greater. If we run off the end of srcNames, we just generate default names. */ void OsiSolverInterface::setRowNames(OsiNameVec &srcNames, int srcStart, int len, int tgtStart) { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* If the name discipline is auto, we're already done. */ if (nameDiscipline == 0) { return; } /* A little self-protection. Check that we're within [0,m-1] on the target side, and that srcStart is zero or greater. Quietly fail if the indices don't fit. */ int m = getNumRows(); if (tgtStart < 0 || tgtStart + len > m) { return; } if (srcStart < 0) { return; } int srcLen = static_cast< int >(srcNames.size()); /* Load 'em up. */ int srcNdx = srcStart; int tgtNdx = tgtStart; for (; tgtNdx < tgtStart + len; srcNdx++, tgtNdx++) { if (srcNdx < srcLen) { setRowName(tgtNdx, srcNames[srcNdx]); } else { setRowName(tgtNdx, dfltRowColName('r', tgtNdx)); } } return; } /* Delete one or more row names. */ void OsiSolverInterface::deleteRowNames(int tgtStart, int len) { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* If the name discipline is auto, we're done. */ if (nameDiscipline == 0) { return; } /* Trim the range to names that exist in the name vector. If we're doing lazy names, it's quite likely that we don't need to do any work. */ int lastNdx = static_cast< int >(rowNames_.size()); if (tgtStart < 0 || tgtStart >= lastNdx) { return; } if (tgtStart + len > lastNdx) { len = lastNdx - tgtStart; } /* Erase the names. */ OsiNameVec::iterator firstIter, lastIter; firstIter = rowNames_.begin() + tgtStart; lastIter = firstIter + len; rowNames_.erase(firstIter, lastIter); return; } /* Set a single column name. Quietly does nothing if the index or name discipline is invalid. */ void OsiSolverInterface::setColName(int ndx, std::string name) { int nameDiscipline; /* Quietly do nothing if the index is out of bounds. This should be changed, but what's our error convention, eh? There's no precedent in OsiSolverInterface.cpp. */ if (ndx < 0 || ndx >= getNumCols()) { return; } /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Do the right thing, according to the discipline. */ switch (nameDiscipline) { case 0: { break; } case 1: case 2: { if (static_cast< unsigned >(ndx) > colNames_.capacity()) { colNames_.resize(ndx + 1); } else if (static_cast< unsigned >(ndx) >= colNames_.size()) { colNames_.resize(ndx + 1); } colNames_[ndx] = name; break; } default: { break; } } return; } /* Set a run of column names. Quietly fail if the specified indices are invalid. On the target side, [tgtStart, tgtStart+len-1] must be in the range [0,n-1], where n is the number of columns. On the source side, srcStart must be zero or greater. If we run off the end of srcNames, we just generate default names. */ void OsiSolverInterface::setColNames(OsiNameVec &srcNames, int srcStart, int len, int tgtStart) { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* If the name discipline is auto, we're already done. */ if (nameDiscipline == 0) { return; } /* A little self-protection. Check that we're within [0,m-1] on the target side, and that srcStart is zero or greater. Quietly fail if the indices don't fit. */ int n = getNumCols(); if (tgtStart < 0 || tgtStart + len > n) { return; } if (srcStart < 0) { return; } int srcLen = static_cast< int >(srcNames.size()); /* Load 'em up. */ int srcNdx = srcStart; int tgtNdx = tgtStart; for (; tgtNdx < tgtStart + len; srcNdx++, tgtNdx++) { if (srcNdx < srcLen) { setColName(tgtNdx, srcNames[srcNdx]); } else { setColName(tgtNdx, dfltRowColName('c', tgtNdx)); } } return; } /* Delete one or more column names. Quietly fail if firstNdx is less than zero or if firstNdx+len is greater than the number of columns. */ void OsiSolverInterface::deleteColNames(int tgtStart, int len) { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* If the name discipline is auto, we're done. */ if (nameDiscipline == 0) { return; } /* Trim the range to names that exist in the name vector. If we're doing lazy names, it's quite likely that we don't need to do any work. */ int lastNdx = static_cast< int >(colNames_.size()); if (tgtStart < 0 || tgtStart >= lastNdx) { return; } if (tgtStart + len > lastNdx) { len = lastNdx - tgtStart; } /* Erase the names. */ OsiNameVec::iterator firstIter, lastIter; firstIter = colNames_.begin() + tgtStart; lastIter = firstIter + len; colNames_.erase(firstIter, lastIter); return; } /* Install the name information from a CoinMpsIO object. */ void OsiSolverInterface::setRowColNames(const CoinMpsIO &mps) { int nameDiscipline, m, n; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Whatever happens, we're about to clean out the current name vectors. Decide on an appropriate size and call reallocRowColNames to adjust capacity. */ if (nameDiscipline == 0) { m = 0; n = 0; } else { m = mps.getNumRows(); n = mps.getNumCols(); } reallocRowColNames(rowNames_, m, colNames_, n); /* If name discipline is auto, we're done already. Otherwise, load 'em up. If I understand MPS correctly, names are required. */ if (nameDiscipline != 0) { rowNames_.resize(m); for (int i = 0; i < m; i++) { rowNames_[i] = mps.rowName(i); } objName_ = mps.getObjectiveName(); colNames_.resize(n); for (int j = 0; j < n; j++) { colNames_[j] = mps.columnName(j); } } return; } /* Install the name information from a CoinModel object. CoinModel does not maintain a name for the objective function (in fact, it has no concept of objective function). */ void OsiSolverInterface::setRowColNames(CoinModel &mod) { int nameDiscipline, m, n; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Whatever happens, we're about to clean out the current name vectors. Decide on an appropriate size and call reallocRowColNames to adjust capacity. */ if (nameDiscipline == 0) { m = 0; n = 0; } else { m = mod.rowNames()->numberItems(); n = mod.columnNames()->numberItems(); } reallocRowColNames(rowNames_, m, colNames_, n); /* If name discipline is auto, we're done already. Otherwise, load 'em up. As best I can see, there's no guarantee that we'll have names for all rows and columns, so we need to pay attention. */ if (nameDiscipline != 0) { int maxRowNdx = -1, maxColNdx = -1; const char *const *names = mod.rowNames()->names(); rowNames_.resize(m); for (int i = 0; i < m; i++) { std::string nme = names[i]; if (nme.length() == 0) { if (nameDiscipline == 2) { nme = dfltRowColName('r', i); } } if (nme.length() > 0) { maxRowNdx = i; } rowNames_[i] = nme; } rowNames_.resize(maxRowNdx + 1); names = mod.columnNames()->names(); colNames_.resize(n); for (int j = 0; j < n; j++) { std::string nme = names[j]; if (nme.length() == 0) { if (nameDiscipline == 2) { nme = dfltRowColName('c', j); } } if (nme.length() > 0) { maxColNdx = j; } colNames_[j] = nme; } colNames_.resize(maxColNdx + 1); } /* And we're done. */ return; } /* Install the name information from a CoinLpIO object. Nearly identical to the previous routine, but we start from a different object. */ void OsiSolverInterface::setRowColNames(CoinLpIO &mod) { int nameDiscipline, m, n; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Whatever happens, we're about to clean out the current name vectors. Decide on an appropriate size and call reallocRowColNames to adjust capacity. */ if (nameDiscipline == 0) { m = 0; n = 0; } else { m = mod.getNumRows(); n = mod.getNumCols(); } reallocRowColNames(rowNames_, m, colNames_, n); /* If name discipline is auto, we're done already. Otherwise, load 'em up. I have no idea whether we can guarantee valid names for all rows and columns, so we need to pay attention. */ if (nameDiscipline != 0) { int maxRowNdx = -1, maxColNdx = -1; const char *const *names = mod.getRowNames(); rowNames_.resize(m); for (int i = 0; i < m; i++) { std::string nme = names[i]; if (nme.length() == 0) { if (nameDiscipline == 2) { nme = dfltRowColName('r', i); } } if (nme.length() > 0) { maxRowNdx = i; } rowNames_[i] = nme; } rowNames_.resize(maxRowNdx + 1); objName_ = mod.getObjName(); names = mod.getColNames(); colNames_.resize(n); for (int j = 0; j < n; j++) { std::string nme = names[j]; if (nme.length() == 0) { if (nameDiscipline == 2) { nme = dfltRowColName('c', j); } } if (nme.length() > 0) { maxColNdx = j; } colNames_[j] = nme; } colNames_.resize(maxColNdx + 1); } /* And we're done. */ return; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiColCut.hpp0000644000175000017500000002011013414504051015732 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiColCut_H #define OsiColCut_H #include #include "CoinPackedVector.hpp" #include "OsiCollections.hpp" #include "OsiCut.hpp" /** Column Cut Class Column Cut Class has:
  • a sparse vector of column lower bounds
  • a sparse vector of column upper bounds
*/ class OsiColCut : public OsiCut { friend void OsiColCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir); public: //---------------------------------------------------------------- /**@name Setting column bounds */ //@{ /// Set column lower bounds inline void setLbs( int nElements, const int *colIndices, const double *lbElements); /// Set column lower bounds from a packed vector inline void setLbs(const CoinPackedVector &lbs); /// Set column upper bounds inline void setUbs( int nElements, const int *colIndices, const double *ubElements); /// Set column upper bounds from a packed vector inline void setUbs(const CoinPackedVector &ubs); //@} //---------------------------------------------------------------- /**@name Getting column bounds */ //@{ /// Get column lower bounds inline const CoinPackedVector &lbs() const; /// Get column upper bounds inline const CoinPackedVector &ubs() const; //@} /**@name Comparison operators */ //@{ #if __GNUC__ != 2 using OsiCut::operator==; #endif /** equal - true if lower bounds, upper bounds, and OsiCut are equal. */ inline virtual bool operator==(const OsiColCut &rhs) const; #if __GNUC__ != 2 using OsiCut::operator!=; #endif /// not equal inline virtual bool operator!=(const OsiColCut &rhs) const; //@} //---------------------------------------------------------------- /**@name Sanity checks on cut */ //@{ /** Returns true if the cut is consistent with respect to itself. This checks to ensure that:
  • The bound vectors do not have duplicate indices,
  • The bound vectors indices are >=0
*/ inline virtual bool consistent() const; /** Returns true if cut is consistent with respect to the solver interface's model. This checks to ensure that the lower & upperbound packed vectors:
  • do not have an index >= the number of column is the model.
*/ inline virtual bool consistent(const OsiSolverInterface &im) const; /** Returns true if the cut is infeasible with respect to its bounds and the column bounds in the solver interface's models. This checks whether:
  • the maximum of the new and existing lower bounds is strictly greater than the minimum of the new and existing upper bounds.
*/ inline virtual bool infeasible(const OsiSolverInterface &im) const; /** Returns infeasibility of the cut with respect to solution passed in i.e. is positive if cuts off that solution. solution is getNumCols() long.. */ virtual double violated(const double *solution) const; //@} //---------------------------------------------------------------- /**@name Constructors and destructors */ //@{ /// Assignment operator OsiColCut &operator=(const OsiColCut &rhs); /// Copy constructor OsiColCut(const OsiColCut &); /// Default Constructor OsiColCut(); /// Clone virtual OsiColCut *clone() const; /// Destructor virtual ~OsiColCut(); //@} /**@name Debug stuff */ //@{ /// Print cuts in collection virtual void print() const; //@} private: /**@name Private member data */ //@{ /// Lower bounds CoinPackedVector lbs_; /// Upper bounds CoinPackedVector ubs_; //@} }; //------------------------------------------------------------------- // Set lower & upper bound vectors //------------------------------------------------------------------- void OsiColCut::setLbs( int size, const int *colIndices, const double *lbElements) { lbs_.setVector(size, colIndices, lbElements); } // void OsiColCut::setUbs( int size, const int *colIndices, const double *ubElements) { ubs_.setVector(size, colIndices, ubElements); } // void OsiColCut::setLbs(const CoinPackedVector &lbs) { lbs_ = lbs; } // void OsiColCut::setUbs(const CoinPackedVector &ubs) { ubs_ = ubs; } //------------------------------------------------------------------- // Get Column Lower Bounds and Column Upper Bounds //------------------------------------------------------------------- const CoinPackedVector &OsiColCut::lbs() const { return lbs_; } // const CoinPackedVector &OsiColCut::ubs() const { return ubs_; } //---------------------------------------------------------------- // == operator //------------------------------------------------------------------- bool OsiColCut::operator==( const OsiColCut &rhs) const { if (this->OsiCut::operator!=(rhs)) return false; if (lbs() != rhs.lbs()) return false; if (ubs() != rhs.ubs()) return false; return true; } // bool OsiColCut::operator!=( const OsiColCut &rhs) const { return !((*this) == rhs); } //---------------------------------------------------------------- // consistent & infeasible //------------------------------------------------------------------- bool OsiColCut::consistent() const { const CoinPackedVector &lb = lbs(); const CoinPackedVector &ub = ubs(); // Test for consistent cut. // Are packed vectors consistent? lb.duplicateIndex("consistent", "OsiColCut"); ub.duplicateIndex("consistent", "OsiColCut"); if (lb.getMinIndex() < 0) return false; if (ub.getMinIndex() < 0) return false; return true; } // bool OsiColCut::consistent(const OsiSolverInterface &im) const { const CoinPackedVector &lb = lbs(); const CoinPackedVector &ub = ubs(); // Test for consistent cut. if (lb.getMaxIndex() >= im.getNumCols()) return false; if (ub.getMaxIndex() >= im.getNumCols()) return false; return true; } #if 0 bool OsiColCut::feasible(const OsiSolverInterface &im) const { const double * oldColLb = im.getColLower(); const double * oldColUb = im.getColUpper(); const CoinPackedVector & cutLbs = lbs(); const CoinPackedVector & cutUbs = ubs(); int i; for ( i=0; i oldColLb[colIndx] ) newLb = cutLbs.elements()[i]; else newLb = oldColLb[colIndx]; double newUb = oldColUb[colIndx]; if ( cutUbs.indexExists(colIndx) ) if ( cutUbs[colIndx] < newUb ) newUb = cutUbs[colIndx]; if ( newLb > newUb ) return false; } for ( i=0; i newLb ) newLb = cutLbs[colIndx]; if ( newUb < newLb ) return false; } return true; } #endif bool OsiColCut::infeasible(const OsiSolverInterface &im) const { const double *oldColLb = im.getColLower(); const double *oldColUb = im.getColUpper(); const CoinPackedVector &cutLbs = lbs(); const CoinPackedVector &cutUbs = ubs(); int i; for (i = 0; i < cutLbs.getNumElements(); i++) { int colIndx = cutLbs.getIndices()[i]; double newLb = cutLbs.getElements()[i] > oldColLb[colIndx] ? cutLbs.getElements()[i] : oldColLb[colIndx]; double newUb = oldColUb[colIndx]; if (cutUbs.isExistingIndex(colIndx)) if (cutUbs[colIndx] < newUb) newUb = cutUbs[colIndx]; if (newLb > newUb) return true; } for (i = 0; i < cutUbs.getNumElements(); i++) { int colIndx = cutUbs.getIndices()[i]; double newUb = cutUbs.getElements()[i] < oldColUb[colIndx] ? cutUbs.getElements()[i] : oldColUb[colIndx]; double newLb = oldColLb[colIndx]; if (cutLbs.isExistingIndex(colIndx)) if (cutLbs[colIndx] > newLb) newLb = cutLbs[colIndx]; if (newUb < newLb) return true; } return false; } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiSolverInterface.cpp0000644000175000017500000025371113414504051017646 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinPragma.hpp" #include "CoinHelperFunctions.hpp" #include "CoinMpsIO.hpp" #include "CoinMessage.hpp" #include "CoinWarmStart.hpp" #ifdef COIN_SNAPSHOT #include "CoinSnapshot.hpp" #endif #include "OsiSolverInterface.hpp" #ifdef CBC_NEXT_VERSION #include "OsiSolverBranch.hpp" #endif #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "OsiRowCutDebugger.hpp" #include "OsiAuxInfo.hpp" #include "OsiBranchingObject.hpp" #include #include "CoinFinite.hpp" #include "CoinBuild.hpp" #include "CoinModel.hpp" #include "CoinLpIO.hpp" //############################################################################# // Hotstart related methods (primarily used in strong branching) // It is assumed that only bounds (on vars/constraints) can change between // markHotStart() and unmarkHotStart() //############################################################################# void OsiSolverInterface::markHotStart() { delete ws_; ws_ = getWarmStart(); } void OsiSolverInterface::solveFromHotStart() { setWarmStart(ws_); resolve(); } void OsiSolverInterface::unmarkHotStart() { delete ws_; ws_ = NULL; } //############################################################################# // Get indices of solution vector which are integer variables presently at // fractional values //############################################################################# OsiVectorInt OsiSolverInterface::getFractionalIndices(const double etol) const { const int colnum = getNumCols(); OsiVectorInt frac; CoinAbsFltEq eq(etol); for (int i = 0; i < colnum; ++i) { if (isInteger(i)) { const double ci = getColSolution()[i]; const double distanceFromInteger = ci - floor(ci + 0.5); if (!eq(distanceFromInteger, 0.0)) frac.push_back(i); } } return frac; } CoinBigIndex OsiSolverInterface::getNumElements() const { return getMatrixByRow()->getNumElements(); } //############################################################################# // Methods for determining the type of column variable. // The method isContinuous() is presently implemented in the derived classes. // The methods below depend on isContinuous and the values // stored in the column bounds. //############################################################################# bool OsiSolverInterface::isBinary(int colIndex) const { if (isContinuous(colIndex)) return false; const double *cu = getColUpper(); const double *cl = getColLower(); if ( (cu[colIndex] == 1 || cu[colIndex] == 0) && (cl[colIndex] == 0 || cl[colIndex] == 1)) return true; else return false; } //############################################################################# // Method for getting a column solution that is guaranteed to be // between the column lower and upper bounds. // // This method is was introduced for Cgl. Osi developers can // improve performance for their favorite solvers by // overriding this method and providing an implementation that caches // strictColSolution_. //############################################################################# const double * OsiSolverInterface::getStrictColSolution() { const double *colSolution = getColSolution(); const double *colLower = getColLower(); const double *colUpper = getColUpper(); const int numCols = getNumCols(); strictColSolution_.clear(); strictColSolution_.insert(strictColSolution_.end(), colSolution, colSolution + numCols); for (int i = numCols - 1; i > 0; --i) { if (colSolution[i] <= colUpper[i]) { if (colSolution[i] >= colLower[i]) { continue; } else { strictColSolution_[i] = colLower[i]; } } else { strictColSolution_[i] = colUpper[i]; } } return &strictColSolution_[0]; } //----------------------------------------------------------------------------- bool OsiSolverInterface::isInteger(int colIndex) const { return !isContinuous(colIndex); } //----------------------------------------------------------------------------- /* Return number of integer variables. OSI implementors really should replace this one, it's generally trivial from within the OSI, but this is the only safe way to do it generically. */ int OsiSolverInterface::getNumIntegers() const { if (numberIntegers_ >= 0) { // we already know return numberIntegers_; } else { // work out const int numCols = getNumCols(); int numIntegers = 0; for (int i = 0; i < numCols; ++i) { if (!isContinuous(i)) { numIntegers++; } } return (numIntegers); } } //----------------------------------------------------------------------------- bool OsiSolverInterface::isIntegerNonBinary(int colIndex) const { if (isInteger(colIndex) && !isBinary(colIndex)) return true; else return false; } //----------------------------------------------------------------------------- bool OsiSolverInterface::isFreeBinary(int colIndex) const { if (isContinuous(colIndex)) return false; const double *cu = getColUpper(); const double *cl = getColLower(); if ( (cu[colIndex] == 1) && (cl[colIndex] == 0)) return true; else return false; } /* Return array of column length 0 - continuous 1 - binary (may get fixed later) 2 - general integer (may get fixed later) */ const char * OsiSolverInterface::getColType(bool refresh) const { if (!columnType_ || refresh) { const int numCols = getNumCols(); if (!columnType_) columnType_ = new char[numCols]; const double *cu = getColUpper(); const double *cl = getColLower(); for (int i = 0; i < numCols; ++i) { if (!isContinuous(i)) { if ((cu[i] == 1 || cu[i] == 0) && (cl[i] == 0 || cl[i] == 1)) columnType_[i] = 1; else columnType_[i] = 2; } else { columnType_[i] = 0; } } } return columnType_; } /* ############################################################################### Built-in methods for problem modification Some of these can surely be reimplemented more efficiently given knowledge of the derived OsiXXX data structures, but we can't make assumptions here. For others, it's less clear. Given standard vector data structures in the underlying OsiXXX, likely the only possible gain is avoiding a method call. ############################################################################### */ void OsiSolverInterface::setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList) { const std::ptrdiff_t cnt = indexLast - indexFirst; for (std::ptrdiff_t i = 0; i < cnt; ++i) { setObjCoeff(indexFirst[i], coeffList[i]); } } //----------------------------------------------------------------------------- void OsiSolverInterface::setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { while (indexFirst != indexLast) { setColBounds(*indexFirst, boundList[0], boundList[1]); ++indexFirst; boundList += 2; } } //----------------------------------------------------------------------------- void OsiSolverInterface::setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { while (indexFirst != indexLast) { setRowBounds(*indexFirst, boundList[0], boundList[1]); ++indexFirst; boundList += 2; } } //----------------------------------------------------------------------------- void OsiSolverInterface::setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList) { while (indexFirst != indexLast) { setRowType(*indexFirst++, *senseList++, *rhsList++, *rangeList++); } } //----------------------------------------------------------------------------- void OsiSolverInterface::setContinuous(const int *indices, int len) { for (int i = 0; i < len; ++i) { setContinuous(indices[i]); } } //----------------------------------------------------------------------------- void OsiSolverInterface::setInteger(const int *indices, int len) { for (int i = 0; i < len; ++i) { setInteger(indices[i]); } } //----------------------------------------------------------------------------- /* Set the objective coefficients for all columns array [getNumCols()] is an array of values for the objective. This defaults to a series of set operations and is here for speed. */ void OsiSolverInterface::setObjective(const double *array) { int n = getNumCols(); for (int i = 0; i < n; i++) setObjCoeff(i, array[i]); } //----------------------------------------------------------------------------- /* Set the lower bounds for all columns array [getNumCols()] is an array of values for the objective. This defaults to a series of set operations and is here for speed. */ void OsiSolverInterface::setColLower(const double *array) { int n = getNumCols(); for (int i = 0; i < n; i++) setColLower(i, array[i]); } //----------------------------------------------------------------------------- /* Set the upper bounds for all columns array [getNumCols()] is an array of values for the objective. This defaults to a series of set operations and is here for speed. */ void OsiSolverInterface::setColUpper(const double *array) { int n = getNumCols(); for (int i = 0; i < n; i++) setColUpper(i, array[i]); } //----------------------------------------------------------------------------- /* Add a named column. Less than efficient, because the underlying solver almost surely generates an internal name when creating the column, which is then replaced. */ void OsiSolverInterface::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj, std::string name) { int ndx = getNumCols(); addCol(vec, collb, colub, obj); setColName(ndx, name); } void OsiSolverInterface::addCol(int numberElements, const int *rows, const double *elements, const double collb, const double colub, const double obj, std::string name) { int ndx = getNumCols(); addCol(numberElements, rows, elements, collb, colub, obj); setColName(ndx, name); } /* Convenience alias for addCol */ void OsiSolverInterface::addCol(int numberElements, const int *rows, const double *elements, const double collb, const double colub, const double obj) { CoinPackedVector column(numberElements, rows, elements); addCol(column, collb, colub, obj); } //----------------------------------------------------------------------------- /* Add a set of columns (primal variables) to the problem. Default implementation simply makes repeated calls to addCol(). */ void OsiSolverInterface::addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj) { for (int i = 0; i < numcols; ++i) { addCol(*cols[i], collb[i], colub[i], obj[i]); } } void OsiSolverInterface::addCols(const int numcols, const CoinBigIndex *columnStarts, const int *rows, const double *elements, const double *collb, const double *colub, const double *obj) { double infinity = getInfinity(); for (int i = 0; i < numcols; ++i) { CoinBigIndex start = columnStarts[i]; int number = static_cast< int >(columnStarts[i + 1] - start); assert(number >= 0); addCol(number, rows + start, elements + start, collb ? collb[i] : 0.0, colub ? colub[i] : infinity, obj ? obj[i] : 0.0); } } //----------------------------------------------------------------------------- // Add columns from a build object void OsiSolverInterface::addCols(const CoinBuild &buildObject) { assert(buildObject.type() == 1); // check correct int number = buildObject.numberColumns(); if (number) { CoinPackedVectorBase **columns = new CoinPackedVectorBase *[number]; int iColumn; double *objective = new double[number]; double *lower = new double[number]; double *upper = new double[number]; for (iColumn = 0; iColumn < number; iColumn++) { const int *rows; const double *elements; int numberElements = buildObject.column(iColumn, lower[iColumn], upper[iColumn], objective[iColumn], rows, elements); columns[iColumn] = new CoinPackedVector(numberElements, rows, elements); } addCols(number, columns, lower, upper, objective); for (iColumn = 0; iColumn < number; iColumn++) delete columns[iColumn]; delete[] columns; delete[] objective; delete[] lower; delete[] upper; } return; } // Add columns from a model object int OsiSolverInterface::addCols(CoinModel &modelObject) { bool goodState = true; if (modelObject.rowLowerArray()) { // some row information exists int numberRows2 = modelObject.numberRows(); const double *rowLower = modelObject.rowLowerArray(); const double *rowUpper = modelObject.rowUpperArray(); for (int i = 0; i < numberRows2; i++) { if (rowLower[i] != -COIN_DBL_MAX) goodState = false; if (rowUpper[i] != COIN_DBL_MAX) goodState = false; } } if (goodState) { // can do addColumns int numberErrors = 0; // Set arrays for normal use double *rowLower = modelObject.rowLowerArray(); double *rowUpper = modelObject.rowUpperArray(); double *columnLower = modelObject.columnLowerArray(); double *columnUpper = modelObject.columnUpperArray(); double *objective = modelObject.objectiveArray(); int *integerType = modelObject.integerTypeArray(); double *associated = modelObject.associatedArray(); // If strings then do copies if (modelObject.stringsExist()) { numberErrors = modelObject.createArrays(rowLower, rowUpper, columnLower, columnUpper, objective, integerType, associated); } CoinPackedMatrix matrix; modelObject.createPackedMatrix(matrix, associated); int numberColumns = getNumCols(); // save number of columns int numberColumns2 = modelObject.numberColumns(); if (numberColumns2 && !numberErrors) { // Clean up infinity double infinity = getInfinity(); int iColumn; for (iColumn = 0; iColumn < numberColumns2; iColumn++) { if (columnUpper[iColumn] > 1.0e30) columnUpper[iColumn] = infinity; if (columnLower[iColumn] < -1.0e30) columnLower[iColumn] = -infinity; } const int *row = matrix.getIndices(); const int *columnLength = matrix.getVectorLengths(); const CoinBigIndex *columnStart = matrix.getVectorStarts(); const double *element = matrix.getElements(); CoinPackedVectorBase **columns = new CoinPackedVectorBase *[numberColumns2]; assert(columnLower); for (iColumn = 0; iColumn < numberColumns2; iColumn++) { CoinBigIndex start = columnStart[iColumn]; columns[iColumn] = new CoinPackedVector(columnLength[iColumn], row + start, element + start); } addCols(numberColumns2, columns, columnLower, columnUpper, objective); for (iColumn = 0; iColumn < numberColumns2; iColumn++) delete columns[iColumn]; delete[] columns; // Do integers if wanted assert(integerType); for (iColumn = 0; iColumn < numberColumns2; iColumn++) { if (integerType[iColumn]) setInteger(iColumn + numberColumns); } } if (columnLower != modelObject.columnLowerArray()) { delete[] rowLower; delete[] rowUpper; delete[] columnLower; delete[] columnUpper; delete[] objective; delete[] integerType; delete[] associated; //if (numberErrors) //handler_->message(CLP_BAD_STRING_VALUES,messages_) // <message(CLP_COMPLICATED_MODEL,messages_) //<(rowStarts[i + 1] - start); assert(number >= 0); addRow(number, columns + start, elements + start, rowlb ? rowlb[i] : -infinity, rowub ? rowub[i] : infinity); } } void OsiSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub) { for (int i = 0; i < numrows; ++i) { addRow(*rows[i], rowlb[i], rowub[i]); } } void OsiSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng) { for (int i = 0; i < numrows; ++i) { addRow(*rows[i], rowsen[i], rowrhs[i], rowrng[i]); } } //----------------------------------------------------------------------------- void OsiSolverInterface::addRows(const CoinBuild &buildObject) { int number = buildObject.numberRows(); if (number) { CoinPackedVectorBase **rows = new CoinPackedVectorBase *[number]; int iRow; double *lower = new double[number]; double *upper = new double[number]; for (iRow = 0; iRow < number; iRow++) { const int *columns; const double *elements; int numberElements = buildObject.row(iRow, lower[iRow], upper[iRow], columns, elements); rows[iRow] = new CoinPackedVector(numberElements, columns, elements); } addRows(number, rows, lower, upper); for (iRow = 0; iRow < number; iRow++) delete rows[iRow]; delete[] rows; delete[] lower; delete[] upper; } } //----------------------------------------------------------------------------- int OsiSolverInterface::addRows(CoinModel &modelObject) { bool goodState = true; if (modelObject.columnLowerArray()) { // some column information exists int numberColumns2 = modelObject.numberColumns(); const double *columnLower = modelObject.columnLowerArray(); const double *columnUpper = modelObject.columnUpperArray(); const double *objective = modelObject.objectiveArray(); const int *integerType = modelObject.integerTypeArray(); for (int i = 0; i < numberColumns2; i++) { if (columnLower[i] != 0.0) goodState = false; if (columnUpper[i] != COIN_DBL_MAX) goodState = false; if (objective[i] != 0.0) goodState = false; if (integerType[i] != 0) goodState = false; } } if (goodState) { // can do addRows int numberErrors = 0; // Set arrays for normal use double *rowLower = modelObject.rowLowerArray(); double *rowUpper = modelObject.rowUpperArray(); double *columnLower = modelObject.columnLowerArray(); double *columnUpper = modelObject.columnUpperArray(); double *objective = modelObject.objectiveArray(); int *integerType = modelObject.integerTypeArray(); double *associated = modelObject.associatedArray(); // If strings then do copies if (modelObject.stringsExist()) { numberErrors = modelObject.createArrays(rowLower, rowUpper, columnLower, columnUpper, objective, integerType, associated); } CoinPackedMatrix matrix; modelObject.createPackedMatrix(matrix, associated); int numberRows2 = modelObject.numberRows(); if (numberRows2 && !numberErrors) { // Clean up infinity double infinity = getInfinity(); int iRow; for (iRow = 0; iRow < numberRows2; iRow++) { if (rowUpper[iRow] > 1.0e30) rowUpper[iRow] = infinity; if (rowLower[iRow] < -1.0e30) rowLower[iRow] = -infinity; } // matrix by rows matrix.reverseOrdering(); const int *column = matrix.getIndices(); const int *rowLength = matrix.getVectorLengths(); const CoinBigIndex *rowStart = matrix.getVectorStarts(); const double *element = matrix.getElements(); CoinPackedVectorBase **rows = new CoinPackedVectorBase *[numberRows2]; assert(rowLower); for (iRow = 0; iRow < numberRows2; iRow++) { CoinBigIndex start = rowStart[iRow]; rows[iRow] = new CoinPackedVector(rowLength[iRow], column + start, element + start); } addRows(numberRows2, rows, rowLower, rowUpper); for (iRow = 0; iRow < numberRows2; iRow++) delete rows[iRow]; delete[] rows; } if (rowLower != modelObject.rowLowerArray()) { delete[] rowLower; delete[] rowUpper; delete[] columnLower; delete[] columnUpper; delete[] objective; delete[] integerType; delete[] associated; //if (numberErrors) //handler_->message(CLP_BAD_STRING_VALUES,messages_) // <message(CLP_COMPLICATED_MODEL,messages_) //< 1.0e30) columnUpper[iColumn] = infinity; if (columnLower[iColumn] < -1.0e30) columnLower[iColumn] = -infinity; } for (iRow = 0; iRow < numberRows; iRow++) { if (rowUpper[iRow] > 1.0e30) rowUpper[iRow] = infinity; if (rowLower[iRow] < -1.0e30) rowLower[iRow] = -infinity; } CoinWarmStart *ws = getWarmStart(); bool restoreBasis = keepSolution && numberRows && numberRows == getNumRows() && numberColumns == getNumCols(); loadProblem(matrix, columnLower, columnUpper, objective, rowLower, rowUpper); setRowColNames(modelObject); if (restoreBasis) setWarmStart(ws); delete ws; // Do integers if wanted assert(integerType); for (int iColumn = 0; iColumn < numberColumns; iColumn++) { if (integerType[iColumn]) setInteger(iColumn); } if (rowLower != modelObject.rowLowerArray() || columnLower != modelObject.columnLowerArray()) { delete[] rowLower; delete[] rowUpper; delete[] columnLower; delete[] columnUpper; delete[] objective; delete[] integerType; delete[] associated; //if (numberErrors) // handler_->message(CLP_BAD_STRING_VALUES,messages_) // <getApplicationData(); } void OsiSolverInterface::setAuxiliaryInfo(OsiAuxInfo *auxiliaryInfo) { delete appDataEtc_; appDataEtc_ = auxiliaryInfo->clone(); } // Get pointer to auxiliary info object OsiAuxInfo * OsiSolverInterface::getAuxiliaryInfo() const { return appDataEtc_; } //############################################################################# // Methods related to Row Cut Debuggers //############################################################################# //------------------------------------------------------------------- // Activate Row Cut Debugger
// If the model name passed is on list of known models // then all cuts are checked to see that they do NOT cut // off the known optimal solution. void OsiSolverInterface::activateRowCutDebugger(const char *modelName) { delete rowCutDebugger_; rowCutDebugger_ = NULL; // so won't use in new rowCutDebugger_ = new OsiRowCutDebugger(*this, modelName); } /* Activate debugger using full solution array. Only integer values need to be correct. Up to user to get it correct. */ void OsiSolverInterface::activateRowCutDebugger(const double *solution, bool keepContinuous) { delete rowCutDebugger_; rowCutDebugger_ = NULL; // so won't use in new rowCutDebugger_ = new OsiRowCutDebugger(*this, solution, keepContinuous); } //------------------------------------------------------------------- // Get Row Cut Debugger
// If there is a row cut debugger object associated with // model AND if the known optimal solution is within the // current feasible region then a pointer to the object is // returned which may be used to test validity of cuts. // Otherwise NULL is returned const OsiRowCutDebugger *OsiSolverInterface::getRowCutDebugger() const { if (rowCutDebugger_ && rowCutDebugger_->onOptimalPath(*this)) { return rowCutDebugger_; } else { return NULL; } } // If you want to get debugger object even if not on optimal path then use this OsiRowCutDebugger *OsiSolverInterface::getRowCutDebuggerAlways() const { if (rowCutDebugger_ && rowCutDebugger_->active()) { return rowCutDebugger_; } else { return NULL; } } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiSolverInterface::OsiSolverInterface() : rowCutDebugger_(NULL) , handler_(NULL) , defaultHandler_(true) , columnType_(NULL) , appDataEtc_(NULL) , ws_(NULL) { setInitialData(); } // Set data for default constructor void OsiSolverInterface::setInitialData() { delete rowCutDebugger_; rowCutDebugger_ = NULL; delete ws_; ws_ = NULL; delete appDataEtc_; appDataEtc_ = new OsiAuxInfo(); if (defaultHandler_) { delete handler_; handler_ = NULL; } defaultHandler_ = true; delete[] columnType_; columnType_ = NULL; intParam_[OsiMaxNumIteration] = 9999999; intParam_[OsiMaxNumIterationHotStart] = 9999999; intParam_[OsiNameDiscipline] = 0; // Dual objective limit is acceptable `badness'; for minimisation, COIN_DBL_MAX dblParam_[OsiDualObjectiveLimit] = COIN_DBL_MAX; // Primal objective limit is desired `goodness'; for minimisation, -COIN_DBL_MAX dblParam_[OsiPrimalObjectiveLimit] = -COIN_DBL_MAX; dblParam_[OsiDualTolerance] = 1e-6; dblParam_[OsiPrimalTolerance] = 1e-6; dblParam_[OsiObjOffset] = 0.0; strParam_[OsiProbName] = "OsiDefaultName"; strParam_[OsiSolverName] = "Unknown Solver"; handler_ = new CoinMessageHandler(); messages_ = CoinMessage(); // initialize all hints int hint; for (hint = OsiDoPresolveInInitial; hint < OsiLastHintParam; hint++) { hintParam_[hint] = false; hintStrength_[hint] = OsiHintIgnore; } // objects numberObjects_ = 0; numberIntegers_ = -1; object_ = NULL; // names rowNames_ = OsiNameVec(0); colNames_ = OsiNameVec(0); objName_ = ""; } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiSolverInterface::OsiSolverInterface(const OsiSolverInterface &rhs) : rowCutDebugger_(NULL) , ws_(NULL) { appDataEtc_ = rhs.appDataEtc_->clone(); if (rhs.rowCutDebugger_ != NULL) rowCutDebugger_ = new OsiRowCutDebugger(*rhs.rowCutDebugger_); defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } messages_ = CoinMessages(rhs.messages_); CoinDisjointCopyN(rhs.intParam_, OsiLastIntParam, intParam_); CoinDisjointCopyN(rhs.dblParam_, OsiLastDblParam, dblParam_); CoinDisjointCopyN(rhs.strParam_, OsiLastStrParam, strParam_); CoinDisjointCopyN(rhs.hintParam_, OsiLastHintParam, hintParam_); CoinDisjointCopyN(rhs.hintStrength_, OsiLastHintParam, hintStrength_); // objects numberObjects_ = rhs.numberObjects_; numberIntegers_ = rhs.numberIntegers_; if (numberObjects_) { object_ = new OsiObject *[numberObjects_]; for (int i = 0; i < numberObjects_; i++) object_[i] = rhs.object_[i]->clone(); } else { object_ = NULL; } // names rowNames_ = rhs.rowNames_; colNames_ = rhs.colNames_; objName_ = rhs.objName_; // NULL as number of columns not known columnType_ = NULL; } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiSolverInterface::~OsiSolverInterface() { // delete debugger - should be safe as only ever returned const delete rowCutDebugger_; rowCutDebugger_ = NULL; delete ws_; ws_ = NULL; delete appDataEtc_; if (defaultHandler_) { delete handler_; handler_ = NULL; } for (int i = 0; i < numberObjects_; i++) delete object_[i]; delete[] object_; delete[] columnType_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiSolverInterface & OsiSolverInterface::operator=(const OsiSolverInterface &rhs) { if (this != &rhs) { delete appDataEtc_; appDataEtc_ = rhs.appDataEtc_->clone(); delete rowCutDebugger_; if (rhs.rowCutDebugger_ != NULL) rowCutDebugger_ = new OsiRowCutDebugger(*rhs.rowCutDebugger_); else rowCutDebugger_ = NULL; CoinDisjointCopyN(rhs.intParam_, OsiLastIntParam, intParam_); CoinDisjointCopyN(rhs.dblParam_, OsiLastDblParam, dblParam_); CoinDisjointCopyN(rhs.strParam_, OsiLastStrParam, strParam_); CoinDisjointCopyN(rhs.hintParam_, OsiLastHintParam, hintParam_); CoinDisjointCopyN(rhs.hintStrength_, OsiLastHintParam, hintStrength_); delete ws_; ws_ = NULL; if (defaultHandler_) { delete handler_; handler_ = NULL; } defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } // objects int i; for (i = 0; i < numberObjects_; i++) delete object_[i]; delete[] object_; numberObjects_ = rhs.numberObjects_; numberIntegers_ = rhs.numberIntegers_; if (numberObjects_) { object_ = new OsiObject *[numberObjects_]; for (i = 0; i < numberObjects_; i++) object_[i] = rhs.object_[i]->clone(); } else { object_ = NULL; } // names rowNames_ = rhs.rowNames_; colNames_ = rhs.colNames_; objName_ = rhs.objName_; delete[] columnType_; // NULL as number of columns not known columnType_ = NULL; } return *this; } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- int OsiSolverInterface::readMps(const char *filename, const char *extension) { CoinMpsIO m; int logLvl = handler_->logLevel(); if (logLvl > 1) { m.messageHandler()->setLogLevel(handler_->logLevel()); } else { m.messageHandler()->setLogLevel(0); } m.setInfinity(getInfinity()); int numberErrors = m.readMps(filename, extension); handler_->message(COIN_SOLVER_MPS, messages_) << m.getProblemName() << numberErrors << CoinMessageEol; if (!numberErrors) { // set objective function offest setDblParam(OsiObjOffset, m.objectiveOffset()); // set problem name setStrParam(OsiProbName, m.getProblemName()); // no errors --- load problem, set names and integrality loadProblem(*m.getMatrixByCol(), m.getColLower(), m.getColUpper(), m.getObjCoefficients(), m.getRowSense(), m.getRightHandSide(), m.getRowRange()); setRowColNames(m); const char *integer = m.integerColumns(); if (integer) { int i, n = 0; int nCols = m.getNumCols(); int *index = new int[nCols]; for (i = 0; i < nCols; i++) { if (integer[i]) { index[n++] = i; } } setInteger(index, n); delete[] index; } } return numberErrors; } /* Read a problem in GMPL format from the given filenames. Will only work if glpk installed */ int OsiSolverInterface::readGMPL(const char *filename, const char *dataname) { CoinMpsIO m; m.setInfinity(getInfinity()); m.passInMessageHandler(handler_); int numberErrors = m.readGMPL(filename, dataname, false); handler_->message(COIN_SOLVER_MPS, messages_) << m.getProblemName() << numberErrors << CoinMessageEol; if (!numberErrors) { // set objective function offest setDblParam(OsiObjOffset, m.objectiveOffset()); // set problem name setStrParam(OsiProbName, m.getProblemName()); // no errors --- load problem, set names and integrality loadProblem(*m.getMatrixByCol(), m.getColLower(), m.getColUpper(), m.getObjCoefficients(), m.getRowSense(), m.getRightHandSide(), m.getRowRange()); setRowColNames(m); const char *integer = m.integerColumns(); if (integer) { int i, n = 0; int nCols = m.getNumCols(); int *index = new int[nCols]; for (i = 0; i < nCols; i++) { if (integer[i]) { index[n++] = i; } } setInteger(index, n); delete[] index; } } return numberErrors; } /* Read a problem in MPS format from the given full filename. This uses CoinMpsIO::readMps() to read the MPS file and returns the number of errors encountered. It also may return an array of set information */ int OsiSolverInterface::readMps(const char *filename, const char *extension, int &numberSets, CoinSet **&sets) { CoinMpsIO m; m.setInfinity(getInfinity()); int numberErrors = m.readMps(filename, extension, numberSets, sets); handler_->message(COIN_SOLVER_MPS, messages_) << m.getProblemName() << numberErrors << CoinMessageEol; if (!numberErrors) { // set objective function offset setDblParam(OsiObjOffset, m.objectiveOffset()); // set problem name setStrParam(OsiProbName, m.getProblemName()); // no errors --- load problem, set names and integrality loadProblem(*m.getMatrixByCol(), m.getColLower(), m.getColUpper(), m.getObjCoefficients(), m.getRowSense(), m.getRightHandSide(), m.getRowRange()); setRowColNames(m); const char *integer = m.integerColumns(); if (integer) { int i, n = 0; int nCols = m.getNumCols(); int *index = new int[nCols]; for (i = 0; i < nCols; i++) { if (integer[i]) { index[n++] = i; } } setInteger(index, n); delete[] index; } } return numberErrors; } int OsiSolverInterface::writeMpsNative(const char *filename, const char **rowNames, const char **columnNames, int formatType, int numberAcross, double objSense, int numberSOS, const CoinSet *setInfo) const { const int numcols = getNumCols(); char *integrality = CoinCopyOfArray(getColType(false), numcols); bool hasInteger = false; for (int i = 0; i < numcols; ++i) { if (isInteger(i)) { hasInteger = true; break; } } // Get multiplier for objective function - default 1.0 double *objective = new double[numcols]; memcpy(objective, getObjCoefficients(), numcols * sizeof(double)); //if (objSense*getObjSense()<0.0) { double locObjSense = (objSense == 0 ? 1 : objSense); if (getObjSense() * locObjSense < 0.0) { for (int i = 0; i < numcols; ++i) objective[i] = -objective[i]; } CoinMpsIO writer; writer.setInfinity(getInfinity()); writer.passInMessageHandler(handler_); writer.setMpsData(*getMatrixByCol(), getInfinity(), getColLower(), getColUpper(), objective, hasInteger ? integrality : 0, getRowLower(), getRowUpper(), columnNames, rowNames); double objOffset = 0.0; getDblParam(OsiObjOffset, objOffset); writer.setObjectiveOffset(objOffset); delete[] objective; delete[] integrality; return writer.writeMps(filename, 1 /*gzip it*/, formatType, numberAcross, NULL, numberSOS, setInfo); } /***********************************************************************/ void OsiSolverInterface::writeLp(const char *filename, const char *extension, double epsilon, int numberAcross, int decimals, double objSense, bool useRowNames) const { std::string f(filename); std::string e(extension); std::string fullname; if (e != "") { fullname = f + "." + e; } else { // no extension so no trailing period fullname = f; } char **colnames; char **rownames; int nameDiscipline; if (!getIntParam(OsiNameDiscipline, nameDiscipline)) nameDiscipline = 0; if (useRowNames && nameDiscipline == 2) { colnames = new char *[getNumCols()]; rownames = new char *[getNumRows() + 1]; for (int i = 0; i < getNumCols(); ++i) colnames[i] = strdup(getColName(i).c_str()); for (int i = 0; i < getNumRows(); ++i) rownames[i] = strdup(getRowName(i).c_str()); rownames[getNumRows()] = strdup(getObjName().c_str()); } else { colnames = NULL; rownames = NULL; } // Fall back on Osi version OsiSolverInterface::writeLpNative(fullname.c_str(), rownames, colnames, epsilon, numberAcross, decimals, objSense, useRowNames); if (useRowNames && nameDiscipline == 2) { for (int i = 0; i < getNumCols(); ++i) free(colnames[i]); for (int i = 0; i < getNumRows() + 1; ++i) free(rownames[i]); delete[] colnames; delete[] rownames; } } /*************************************************************************/ void OsiSolverInterface::writeLp(FILE *fp, double epsilon, int numberAcross, int decimals, double objSense, bool useRowNames) const { char **colnames; char **rownames; int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (useRowNames && nameDiscipline == 2) { colnames = new char *[getNumCols()]; rownames = new char *[getNumRows() + 1]; for (int i = 0; i < getNumCols(); ++i) colnames[i] = strdup(getColName(i).c_str()); for (int i = 0; i < getNumRows(); ++i) rownames[i] = strdup(getRowName(i).c_str()); rownames[getNumRows()] = strdup(getObjName().c_str()); } else { colnames = NULL; rownames = NULL; } // Fall back on Osi version OsiSolverInterface::writeLpNative(fp, rownames, colnames, epsilon, numberAcross, decimals, objSense, useRowNames); if (useRowNames && nameDiscipline == 2) { for (int i = 0; i < getNumCols(); ++i) free(colnames[i]); for (int i = 0; i < getNumRows() + 1; ++i) free(rownames[i]); delete[] colnames; delete[] rownames; } } /***********************************************************************/ int OsiSolverInterface::writeLpNative(const char *filename, char const *const *const rowNames, char const *const *const columnNames, const double epsilon, const int numberAcross, const int decimals, const double objSense, const bool useRowNames) const { FILE *fp = NULL; fp = fopen(filename, "w"); if (!fp) { printf("### ERROR: in OsiSolverInterface::writeLpNative(): unable to open file %s\n", filename); exit(1); } int nerr = writeLpNative(fp, rowNames, columnNames, epsilon, numberAcross, decimals, objSense, useRowNames); fclose(fp); return (nerr); } /***********************************************************************/ int OsiSolverInterface::writeLpNative(FILE *fp, char const *const *const rowNames, char const *const *const columnNames, const double epsilon, const int numberAcross, const int decimals, const double objSense, const bool useRowNames) const { const int numcols = getNumCols(); char *integrality = new char[numcols]; bool hasInteger = false; for (int i = 0; i < numcols; i++) { if (isInteger(i)) { integrality[i] = 1; hasInteger = true; } else { integrality[i] = 0; } } // Get multiplier for objective function - default 1.0 double *objective = new double[numcols]; const double *curr_obj = getObjCoefficients(); //if(getObjSense() * objSense < 0.0) { double locObjSense = (objSense == 0 ? 1 : objSense); if (getObjSense() * locObjSense < 0.0) { for (int i = 0; i < numcols; i++) { objective[i] = -curr_obj[i]; } } else { for (int i = 0; i < numcols; i++) { objective[i] = curr_obj[i]; } } CoinLpIO writer; writer.setInfinity(getInfinity()); writer.setEpsilon(epsilon); writer.setNumberAcross(numberAcross); writer.setDecimals(decimals); writer.setLpDataWithoutRowAndColNames(*getMatrixByRow(), getColLower(), getColUpper(), objective, hasInteger ? integrality : 0, getRowLower(), getRowUpper()); writer.setLpDataRowAndColNames(rowNames, columnNames); //writer.print(); delete[] objective; delete[] integrality; return writer.writeLp(fp, epsilon, numberAcross, decimals, useRowNames); } /*writeLpNative */ /*************************************************************************/ int OsiSolverInterface::readLp(const char *filename, const double epsilon) { FILE *fp = fopen(filename, "r"); if (!fp) { printf("### ERROR: OsiSolverInterface::readLp(): Unable to open file %s for reading\n", filename); return (1); } int nerr = readLp(fp, epsilon); // closed by readLP fclose(fp); return (nerr); } /*************************************************************************/ int OsiSolverInterface::readLp(FILE *fp, const double epsilon) { CoinLpIO m; m.readLp(fp, epsilon); // set objective function offest setDblParam(OsiObjOffset, 0); // set problem name setStrParam(OsiProbName, m.getProblemName()); // no errors --- load problem, set names and integrality loadProblem(*m.getMatrixByRow(), m.getColLower(), m.getColUpper(), m.getObjCoefficients(), m.getRowLower(), m.getRowUpper()); setRowColNames(m); const char *integer = m.integerColumns(); if (integer) { int i, n = 0; int nCols = m.getNumCols(); int *index = new int[nCols]; for (i = 0; i < nCols; i++) { if (integer[i]) { index[n++] = i; } } setInteger(index, n); delete[] index; } setObjSense(1); return (0); } /* readLp */ /*************************************************************************/ // Pass in Message handler (not deleted at end) void OsiSolverInterface::passInMessageHandler(CoinMessageHandler *handler) { if (defaultHandler_) { delete handler_; handler_ = NULL; } defaultHandler_ = false; handler_ = handler; } // Set language void OsiSolverInterface::newLanguage(CoinMessages::Language language) { messages_ = CoinMessage(language); } // Is the given primal objective limit reached? bool OsiSolverInterface::isPrimalObjectiveLimitReached() const { double primalobjlimit; if (getDblParam(OsiPrimalObjectiveLimit, primalobjlimit)) return getObjSense() * getObjValue() < getObjSense() * primalobjlimit; else return false; } // Is the given dual objective limit reached? bool OsiSolverInterface::isDualObjectiveLimitReached() const { double dualobjlimit; if (getDblParam(OsiDualObjectiveLimit, dualobjlimit)) return getObjSense() * getObjValue() > getObjSense() * dualobjlimit; else return false; } // copy all parameters in this section from one solver to another void OsiSolverInterface::copyParameters(OsiSolverInterface &rhs) { /* We should think about this block of code. appData, rowCutDebugger, and handler_ are not part of the standard parameter data. Arguably copy actions for them belong in the base Osi.clone() or as separate methods. -lh, 091021- */ delete appDataEtc_; appDataEtc_ = rhs.appDataEtc_->clone(); delete rowCutDebugger_; if (rhs.rowCutDebugger_ != NULL) rowCutDebugger_ = new OsiRowCutDebugger(*rhs.rowCutDebugger_); else rowCutDebugger_ = NULL; if (defaultHandler_) { delete handler_; } /* Is this correct? Shouldn't we clone a non-default handler instead of simply assigning the pointer? -lh, 091021- */ defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } CoinDisjointCopyN(rhs.intParam_, OsiLastIntParam, intParam_); CoinDisjointCopyN(rhs.dblParam_, OsiLastDblParam, dblParam_); CoinDisjointCopyN(rhs.strParam_, OsiLastStrParam, strParam_); CoinDisjointCopyN(rhs.hintParam_, OsiLastHintParam, hintParam_); CoinDisjointCopyN(rhs.hintStrength_, OsiLastHintParam, hintStrength_); } // Resets as if default constructor void OsiSolverInterface::reset() { // Throw an exception throw CoinError("Needs coding for this interface", "reset", "OsiSolverInterface"); } /*Enables normal operation of subsequent functions. This method is supposed to ensure that all typical things (like reduced costs, etc.) are updated when individual pivots are executed and can be queried by other methods. says whether will be doing primal or dual */ void OsiSolverInterface::enableSimplexInterface(bool) {} //Undo whatever setting changes the above method had to make void OsiSolverInterface::disableSimplexInterface() {} /* Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ int OsiSolverInterface::canDoSimplexInterface() const { return 0; } /* Tells solver that calls to getBInv etc are about to take place. Underlying code may need mutable as this may be called from CglCut:;generateCuts which is const. If that is too horrific then each solver e.g. BCP or CBC will have to do something outside main loop. */ void OsiSolverInterface::enableFactorization() const { // Throw an exception throw CoinError("Needs coding for this interface", "enableFactorization", "OsiSolverInterface"); } // and stop void OsiSolverInterface::disableFactorization() const { // Throw an exception throw CoinError("Needs coding for this interface", "disableFactorization", "OsiSolverInterface"); } //Returns true if a basis is available bool OsiSolverInterface::basisIsAvailable() const { return false; } /* (JJF ?date?) The following two methods may be replaced by the methods of OsiSolverInterface using OsiWarmStartBasis if: 1. OsiWarmStartBasis resize operation is implemented more efficiently and 2. It is ensured that effects on the solver are the same (lh 100818) 1. CoinWarmStartBasis is the relevant resize, and John's right, it needs to be reworked. The problem is that when new columns or rows are added, the new space is initialised two bits at a time. It needs to be done in bulk. There are other problems with CoinWarmStartBasis that should be addressed at the same time. 2. setWarmStart followed by resolve should do it. */ void OsiSolverInterface::getBasisStatus(int *, int *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBasisStatus", "OsiSolverInterface"); } /* Set the status of structural/artificial variables and factorize, update solution etc NOTE artificials are treated as +1 elements so for <= rhs artificial will be at lower bound if constraint is tight */ int OsiSolverInterface::setBasisStatus(const int *, const int *) { // Throw an exception throw CoinError("Needs coding for this interface", "setBasisStatus", "OsiSolverInterface"); } /* Perform a pivot by substituting a colIn for colOut in the basis. The status of the leaving variable is given in statOut. Where 1 is to upper bound, -1 to lower bound */ int OsiSolverInterface::pivot(int, int, int) { // Throw an exception throw CoinError("Needs coding for this interface", "pivot", "OsiSolverInterface"); } /* Obtain a result of the primal pivot Outputs: colOut -- leaving column, outStatus -- its status, t -- step size, and, if dx!=NULL, *dx -- primal ray direction. Inputs: colIn -- entering column, sign -- direction of its change (+/-1). Both for colIn and colOut, artificial variables are index by the negative of the row index minus 1. Return code (for now): 0 -- leaving variable found, -1 -- everything else? Clearly, more informative set of return values is required Primal and dual solutions are updated */ int OsiSolverInterface::primalPivotResult(int, int, int &, int &, double &, CoinPackedVector *) { // Throw an exception throw CoinError("Needs coding for this interface", "primalPivotResult", "OsiSolverInterface"); } /* Obtain a result of the dual pivot (similar to the previous method) Differences: entering variable and a sign of its change are now the outputs, the leaving variable and its statuts -- the inputs If dx!=NULL, then *dx contains dual ray Return code: same */ int OsiSolverInterface::dualPivotResult(int &, int &, int, int, double &, CoinPackedVector *) { // Throw an exception throw CoinError("Needs coding for this interface", "dualPivotResult", "OsiSolverInterface"); } //Get the reduced gradient for the cost vector c void OsiSolverInterface::getReducedGradient(double *, double *, const double *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getReducedGradient", "OsiSolverInterface"); } //Get a row of the tableau (slack part in slack if not NULL) void OsiSolverInterface::getBInvARow(int, double *, double *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBInvARow", "OsiSolverInterface"); } //Get a row of the basis inverse void OsiSolverInterface::getBInvRow(int, double *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBInvRow", "OsiSolverInterface"); } //Get a column of the tableau void OsiSolverInterface::getBInvACol(int, double *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBInvACol", "OsiSolverInterface"); } //Get a column of the basis inverse void OsiSolverInterface::getBInvCol(int, double *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBInvCol", "OsiSolverInterface"); } /* Get warm start information. Return warm start information for the current state of the solver interface. If there is no valid warm start information, an empty warm start object wil be returned. This does not necessarily create an object - may just point to one. must Delete set true if user should delete returned object. OsiClp version always returns pointer and false. */ CoinWarmStart * OsiSolverInterface::getPointerToWarmStart(bool &mustDelete) { mustDelete = true; return getWarmStart(); } /* Get basic indices (order of indices corresponds to the order of elements in a vector retured by getBInvACol() and getBInvCol()). */ void OsiSolverInterface::getBasics(int *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBasics", "OsiSolverInterface"); } /* Check two models against each other. Return nonzero if different. Ignore names if that set. May modify both models by cleaning up */ int OsiSolverInterface::differentModel(OsiSolverInterface &other, bool /*ignoreNames*/) { // set reasonable defaults bool takeHint; OsiHintStrength strength; // Switch off printing if asked to bool gotHint = (getHintParam(OsiDoReducePrint, takeHint, strength)); assert(gotHint); bool printStuff = true; if (strength != OsiHintIgnore && takeHint) printStuff = false; int returnCode = 0; int numberRows = getNumRows(); int numberColumns = getNumCols(); int numberIntegers = getNumIntegers(); if (numberRows != other.getNumRows() || numberColumns != other.getNumCols()) { if (printStuff) printf("** Mismatch on size, this has %d rows, %d columns - other has %d rows, %d columns\n", numberRows, numberColumns, other.getNumRows(), other.getNumCols()); return 1000; } if (numberIntegers != other.getNumIntegers()) { if (printStuff) printf("** Mismatch on number of integers, this has %d - other has %d\n", numberIntegers, other.getNumIntegers()); return 1001; } int numberErrors1 = 0; int numberErrors2 = 0; for (int i = 0; i < numberColumns; i++) { if (isInteger(i)) { if (!other.isInteger(i)) numberErrors1++; } else { if (other.isInteger(i)) numberErrors2++; } } if (numberErrors1 || numberErrors2) { if (printStuff) printf("** Mismatch on integers, %d (this int, other not), %d (this not other int)\n", numberErrors1, numberErrors2); return 1002; } // Arrays const double *rowLower = getRowLower(); const double *rowUpper = getRowUpper(); const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); const double *objective = getObjCoefficients(); const double *rowLower2 = other.getRowLower(); const double *rowUpper2 = other.getRowUpper(); const double *columnLower2 = other.getColLower(); const double *columnUpper2 = other.getColUpper(); const double *objective2 = other.getObjCoefficients(); const CoinPackedMatrix *matrix = getMatrixByCol(); const CoinPackedMatrix *matrix2 = other.getMatrixByCol(); CoinRelFltEq tolerance; int numberDifferentL = 0; int numberDifferentU = 0; for (int i = 0; i < numberRows; i++) { if (!tolerance(rowLower[i], rowLower2[i])) numberDifferentL++; if (!tolerance(rowUpper[i], rowUpper2[i])) numberDifferentU++; } int n = numberDifferentL + numberDifferentU; returnCode += n; if (n && printStuff) printf("Row differences , %d lower, %d upper\n", numberDifferentL, numberDifferentU); numberDifferentL = 0; numberDifferentU = 0; int numberDifferentO = 0; for (int i = 0; i < numberColumns; i++) { if (!tolerance(columnLower[i], columnLower2[i])) numberDifferentL++; if (!tolerance(columnUpper[i], columnUpper2[i])) numberDifferentU++; if (!tolerance(objective[i], objective2[i])) numberDifferentO++; } n = numberDifferentL + numberDifferentU + numberDifferentO; returnCode += n; if (n && printStuff) printf("Column differences , %d lower, %d upper, %d objective\n", numberDifferentL, numberDifferentU, numberDifferentO); if (matrix->getNumElements() == other.getNumElements()) { if (!matrix->isEquivalent(*matrix2, tolerance)) { returnCode += 100; if (printStuff) printf("Two matrices are not same\n"); } } else { returnCode += 200; if (printStuff) printf("Two matrices are not same - %d elements and %d elements\n", matrix->getNumElements(), matrix2->getNumElements()); } return returnCode; } #ifdef COIN_SNAPSHOT // Fill in a CoinSnapshot CoinSnapshot * OsiSolverInterface::snapshot(bool createArrays) const { CoinSnapshot *snap = new CoinSnapshot(); // scalars snap->setObjSense(getObjSense()); snap->setInfinity(getInfinity()); snap->setObjValue(getObjValue()); double objOffset = 0.0; getDblParam(OsiObjOffset, objOffset); snap->setObjOffset(objOffset); snap->setDualTolerance(dblParam_[OsiDualTolerance]); snap->setPrimalTolerance(dblParam_[OsiPrimalTolerance]); snap->setIntegerTolerance(getIntegerTolerance()); snap->setIntegerUpperBound(dblParam_[OsiDualObjectiveLimit]); if (createArrays) { snap->loadProblem(*getMatrixByCol(), getColLower(), getColUpper(), getObjCoefficients(), getRowLower(), getRowUpper()); snap->createRightHandSide(); // Solution snap->setColSolution(getColSolution(), true); snap->setRowPrice(getRowPrice(), true); snap->setReducedCost(getReducedCost(), true); snap->setRowActivity(getRowActivity(), true); } else { snap->setNumCols(getNumCols()); snap->setNumRows(getNumRows()); snap->setNumElements(getNumElements()); snap->setMatrixByCol(getMatrixByCol(), false); snap->setColLower(getColLower(), false); snap->setColUpper(getColUpper(), false); snap->setObjCoefficients(getObjCoefficients(), false); snap->setRowLower(getRowLower(), false); snap->setRowUpper(getRowUpper(), false); // Solution snap->setColSolution(getColSolution(), false); snap->setRowPrice(getRowPrice(), false); snap->setReducedCost(getReducedCost(), false); snap->setRowActivity(getRowActivity(), false); } // If integer then create array (which snapshot has to own); int numberColumns = getNumCols(); char *type = new char[numberColumns]; int numberIntegers = 0; for (int i = 0; i < numberColumns; i++) { if (isInteger(i)) { numberIntegers++; if (isBinary(i)) type[i] = 'B'; else type[i] = 'I'; } else { type[i] = 'C'; } } if (numberIntegers) snap->setColType(type, true); else snap->setNumIntegers(0); delete[] type; return snap; } #endif /* Identify integer variables and create corresponding objects. Record integer variables and create an OsiSimpleInteger object for each one. All existing OsiSimpleInteger objects will be destroyed. New */ void OsiSolverInterface::findIntegers(bool justCount) { numberIntegers_ = 0; int numberColumns = getNumCols(); int iColumn; for (iColumn = 0; iColumn < numberColumns; iColumn++) { if (isInteger(iColumn)) numberIntegers_++; } if (justCount) { assert(!numberObjects_); assert(!object_); return; } int numberIntegers = 0; int iObject; for (iObject = 0; iObject < numberObjects_; iObject++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(object_[iObject]); if (obj) numberIntegers++; } // if same number return if (numberIntegers_ == numberIntegers) return; // space for integers int *marked = new int[numberColumns]; for (iColumn = 0; iColumn < numberColumns; iColumn++) marked[iColumn] = -1; // mark simple integers OsiObject **oldObject = object_; int nObjects = numberObjects_; for (iObject = 0; iObject < nObjects; iObject++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(oldObject[iObject]); if (obj) { iColumn = obj->columnNumber(); assert(iColumn >= 0 && iColumn < numberColumns); marked[iColumn] = iObject; } } // make a large enough array for new objects numberObjects_ += numberIntegers_ - numberIntegers; if (numberObjects_) object_ = new OsiObject *[numberObjects_]; else object_ = NULL; /* Walk the variables again, filling in the indices and creating objects for the integer variables. Initially, the objects hold the index and upper & lower bounds. */ numberObjects_ = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { if (isInteger(iColumn)) { iObject = marked[iColumn]; if (iObject >= 0) object_[numberObjects_++] = oldObject[iObject]; else object_[numberObjects_++] = new OsiSimpleInteger(this, iColumn); } } // Now append other objects for (iObject = 0; iObject < nObjects; iObject++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(oldObject[iObject]); if (!obj) object_[numberObjects_++] = oldObject[iObject]; } // Delete old array (just array) delete[] oldObject; delete[] marked; } /* Identify integer variables and SOS and create corresponding objects. Record integer variables and create an OsiSimpleInteger object for each one. All existing OsiSimpleInteger objects will be destroyed. If the solver supports SOS then do the same for SOS. If justCount then no objects created and we just store numberIntegers_ Returns number of SOS */ int OsiSolverInterface::findIntegersAndSOS(bool justCount) { findIntegers(justCount); return 0; } // Delete all object information void OsiSolverInterface::deleteObjects() { for (int i = 0; i < numberObjects_; i++) delete object_[i]; delete[] object_; object_ = NULL; numberObjects_ = 0; } /* Add in object information. Objects are cloned; the owner can delete the originals. */ void OsiSolverInterface::addObjects(int numberObjects, OsiObject **objects) { // Create integers if first time if (!numberObjects_) findIntegers(false); /* But if incoming objects inherit from simple integer we just want to replace */ int numberColumns = getNumCols(); /** mark is -1 if not integer, >=0 if using existing simple integer and >=numberColumns if using new integer */ int *mark = new int[numberColumns]; int i; for (i = 0; i < numberColumns; i++) mark[i] = -1; int newNumberObjects = numberObjects; int newIntegers = 0; for (i = 0; i < numberObjects; i++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(objects[i]); if (obj) { int iColumn = obj->columnNumber(); mark[iColumn] = i + numberColumns; newIntegers++; } } // and existing for (i = 0; i < numberObjects_; i++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(object_[i]); if (obj) { int iColumn = obj->columnNumber(); if (mark[iColumn] < 0) { newIntegers++; newNumberObjects++; mark[iColumn] = i; } else { // But delete existing delete object_[i]; object_[i] = NULL; } } else { newNumberObjects++; } } numberIntegers_ = newIntegers; OsiObject **temp = new OsiObject *[newNumberObjects]; // Put integers first newIntegers = 0; numberIntegers_ = 0; for (i = 0; i < numberColumns; i++) { int which = mark[i]; if (which >= 0) { if (!isInteger(i)) { newIntegers++; setInteger(i); } if (which < numberColumns) { temp[numberIntegers_] = object_[which]; } else { temp[numberIntegers_] = objects[which - numberColumns]->clone(); } numberIntegers_++; } } int n = numberIntegers_; // Now rest of old for (i = 0; i < numberObjects_; i++) { if (object_[i]) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(object_[i]); if (!obj) { temp[n++] = object_[i]; } } } // and rest of new for (i = 0; i < numberObjects; i++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(objects[i]); if (!obj) { temp[n++] = objects[i]->clone(); } } delete[] mark; delete[] object_; object_ = temp; numberObjects_ = newNumberObjects; } // Deletes branching information before columns deleted void OsiSolverInterface::deleteBranchingInfo(int numberDeleted, const int *which) { if (numberObjects_) { int numberColumns = getNumCols(); // mark is -1 if deleted and new number if not deleted int *mark = new int[numberColumns]; int i; int iColumn; for (i = 0; i < numberColumns; i++) mark[i] = 0; for (i = 0; i < numberDeleted; i++) { iColumn = which[i]; if (iColumn >= 0 && iColumn < numberColumns) mark[iColumn] = -1; } iColumn = 0; for (i = 0; i < numberColumns; i++) { if (mark[i] >= 0) { mark[i] = iColumn; iColumn++; } } int oldNumberObjects = numberObjects_; numberIntegers_ = 0; numberObjects_ = 0; for (i = 0; i < oldNumberObjects; i++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(object_[i]); if (obj) { iColumn = obj->columnNumber(); int jColumn = mark[iColumn]; if (jColumn >= 0) { obj->setColumnNumber(jColumn); object_[numberObjects_++] = obj; numberIntegers_++; } else { delete obj; } } else { // not integer - all I know about is SOS OsiSOS *obj = dynamic_cast< OsiSOS * >(object_[i]); if (obj) { int oldNumberMembers = obj->numberMembers(); int numberMembers = 0; double *weight = obj->mutableWeights(); int *members = obj->mutableMembers(); for (int k = 0; k < oldNumberMembers; k++) { iColumn = members[k]; int jColumn = mark[iColumn]; if (jColumn >= 0) { members[numberMembers] = jColumn; weight[numberMembers++] = weight[k]; } } if (numberMembers) { obj->setNumberMembers(numberMembers); object_[numberObjects_++] = obj; } } } } delete[] mark; } else { findIntegers(false); } } /* Use current solution to set bounds so current integer feasible solution will stay feasible. Only feasible bounds will be used, even if current solution outside bounds. The amount of such violation will be returned (and if small can be ignored) */ double OsiSolverInterface::forceFeasible() { /* Run through the objects and use feasibleRegion() to set variable bounds so as to fix the variables specified in the objects at their value in this solution. Since the object list contains (at least) one object for every integer variable, this has the effect of fixing all integer variables. */ int i; // Can't guarantee has matrix const OsiBranchingInformation info(this, false, false); double infeasibility = 0.0; for (i = 0; i < numberObjects_; i++) infeasibility += object_[i]->feasibleRegion(this, &info); return infeasibility; } /* For variables currently at bound, fix at bound if reduced cost >= gap Returns number fixed */ int OsiSolverInterface::reducedCostFix(double gap, bool justInteger) { double direction = getObjSense(); double tolerance; getDblParam(OsiPrimalTolerance, tolerance); if (gap <= 0.0) return 0; const double *lower = getColLower(); const double *upper = getColUpper(); const double *solution = getColSolution(); const double *reducedCost = getReducedCost(); int numberFixed = 0; int numberColumns = getNumCols(); for (int iColumn = 0; iColumn < numberColumns; iColumn++) { if (isInteger(iColumn) || !justInteger) { double djValue = direction * reducedCost[iColumn]; if (upper[iColumn] - lower[iColumn] > tolerance) { if (solution[iColumn] < lower[iColumn] + tolerance && djValue > gap) { setColUpper(iColumn, lower[iColumn]); numberFixed++; } else if (solution[iColumn] > upper[iColumn] - tolerance && -djValue > gap) { setColLower(iColumn, upper[iColumn]); numberFixed++; } } } } return numberFixed; } #ifdef COIN_FACTORIZATION_INFO // Return number of entries in L part of current factorization CoinBigIndex OsiSolverInterface::getSizeL() const { return -1; } // Return number of entries in U part of current factorization CoinBigIndex OsiSolverInterface::getSizeU() const { return -1; } #endif #ifdef CBC_NEXT_VERSION /* Solve 2**N (N==depth) problems and return solutions and bases. There are N branches each of which changes bounds on both sides as given by branch. The user should provide an array of (empty) results which will be filled in. See OsiSolveResult for more details (in OsiSolveBranch.?pp) but it will include a basis and primal solution. The order of results is left to right at feasible leaf nodes so first one is down, down, ..... Returns number of feasible leaves. Also sets number of solves done and number of iterations. This is provided so a solver can do faster. If forceBranch true then branch done even if satisfied */ int OsiSolverInterface::solveBranches(int depth, const OsiSolverBranch *branch, OsiSolverResult *result, int &numberSolves, int &numberIterations, bool forceBranch) { int *stack = new int[depth]; CoinWarmStart **basis = new CoinWarmStart *[depth]; int iDepth; for (iDepth = 0; iDepth < depth; iDepth++) { stack[iDepth] = -1; basis[iDepth] = NULL; } //#define PRINTALL #ifdef PRINTALL int seq[10]; double val[10]; assert(iDepth <= 10); for (iDepth = 0; iDepth < depth; iDepth++) { assert(branch[iDepth].starts()[4] == 2); assert(branch[iDepth].which()[0] == branch[iDepth].which()[1]); assert(branch[iDepth].bounds()[0] == branch[iDepth].bounds()[1] - 1.0); seq[iDepth] = branch[iDepth].which()[0]; val[iDepth] = branch[iDepth].bounds()[0]; printf("depth %d seq %d nominal value %g\n", iDepth, seq[iDepth], val[iDepth] + 0.5); } #endif int numberColumns = getNumCols(); double *lowerBefore = CoinCopyOfArray(getColLower(), numberColumns); double *upperBefore = CoinCopyOfArray(getColUpper(), numberColumns); iDepth = 0; int numberFeasible = 0; bool finished = false; bool backTrack = false; bool iterated = false; numberIterations = 0; numberSolves = 0; int nFeas = 0; while (!finished) { bool feasible = true; if (stack[iDepth] == -1) { delete basis[iDepth]; basis[iDepth] = getWarmStart(); } else { setWarmStart(basis[iDepth]); } // may be a faster way setColLower(lowerBefore); setColUpper(upperBefore); for (int i = 0; i < iDepth; i++) { // skip if values feasible and not forceBranch if (stack[i]) branch[i].applyBounds(*this, stack[i]); } bool doBranch = true; if (!forceBranch && !backTrack) { // see if feasible on one side if (!branch[iDepth].feasibleOneWay(*this)) { branch[iDepth].applyBounds(*this, stack[iDepth]); } else { doBranch = false; stack[iDepth] = 0; } } else { branch[iDepth].applyBounds(*this, stack[iDepth]); } if (doBranch) { resolve(); numberIterations += getIterationCount(); numberSolves++; iterated = true; if (!isProvenOptimal() || isDualObjectiveLimitReached()) { feasible = false; #ifdef PRINTALL const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); const double *columnSolution = getColSolution(); printf("infeas depth %d ", iDepth); for (int jDepth = 0; jDepth <= iDepth; jDepth++) { int iColumn = seq[jDepth]; printf(" (%d %g, %g, %g (nom %g))", iColumn, columnLower[iColumn], columnSolution[iColumn], columnUpper[iColumn], val[jDepth] + 0.5); } printf("\n"); #endif } } else { // must be feasible nFeas++; #ifdef PRINTALL const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); const double *columnSolution = getColSolution(); printf("feas depth %d ", iDepth); int iColumn = seq[iDepth]; printf(" (%d %g, %g, %g (nom %g))", iColumn, columnLower[iColumn], columnSolution[iColumn], columnUpper[iColumn], val[iDepth] + 0.5); printf("\n"); #endif } backTrack = false; iDepth++; if (iDepth == depth || !feasible) { if (feasible && iterated) { result[numberFeasible++] = OsiSolverResult(*this, lowerBefore, upperBefore); #ifdef PRINTALL const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); const double *columnSolution = getColSolution(); printf("sol obj %g", getObjValue()); for (int jDepth = 0; jDepth < depth; jDepth++) { int iColumn = seq[jDepth]; printf(" (%d %g, %g, %g (nom %g))", iColumn, columnLower[iColumn], columnSolution[iColumn], columnUpper[iColumn], val[jDepth] + 0.5); } printf("\n"); #endif } // on to next iDepth--; iterated = false; backTrack = true; while (stack[iDepth] >= 0) { if (iDepth == 0) { // finished finished = true; break; } stack[iDepth] = -1; iDepth--; } if (!finished) { stack[iDepth] = 1; } } } delete[] stack; for (iDepth = 0; iDepth < depth; iDepth++) delete basis[iDepth]; delete[] basis; // restore bounds setColLower(lowerBefore); setColUpper(upperBefore); delete[] lowerBefore; delete[] upperBefore; #if 0 static int xxxxxx=0; static int yyyyyy=0; static int zzzzzz=0; zzzzzz += nFeas; for (int j=0;j<(1<4 , larger gives more information 0 - Just set min and max values of coefficients */ void OsiSolverInterface::statistics(double &minimumNegative, double &maximumNegative, double &minimumPositive, double &maximumPositive, int type) const { minimumNegative = -COIN_DBL_MAX; maximumNegative = 0.0; minimumPositive = COIN_DBL_MAX; maximumPositive = 0.0; // get matrix data pointers const double *elementByColumn = getMatrixByCol()->getElements(); const CoinBigIndex *columnStart = getMatrixByCol()->getVectorStarts(); const int *columnLength = getMatrixByCol()->getVectorLengths(); const int *row = getMatrixByCol()->getIndices(); int numberColumns = getNumCols(); int numberRows = getNumRows(); CoinBigIndex numberElements = getMatrixByCol()->getNumElements(); int i; for (i = 0; i < numberColumns; i++) { CoinBigIndex j; for (j = columnStart[i]; j < columnStart[i] + columnLength[i]; j++) { double value = elementByColumn[j]; if (value > 0.0) { minimumPositive = CoinMin(minimumPositive, value); maximumPositive = CoinMax(maximumPositive, value); } else if (value < 0.0) { minimumNegative = CoinMax(minimumNegative, value); maximumNegative = CoinMin(maximumNegative, value); } } } if (!type) return; // more statistics const char *integerInformation = getColType(); const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); int numberIntegers = getNumIntegers(); int iRow, iColumn; int numberBinary = 0; if (numberIntegers) { for (iColumn = 0; iColumn < numberColumns; iColumn++) { if (integerInformation[iColumn] == 1) numberBinary++; } if (type == 1) printf("Problem has %d rows, %d columns - %d integers (%d of which binary)\n", numberRows, numberColumns, numberIntegers, numberBinary); else printf("Problem has %d integers (%d of which binary)\n", numberIntegers, numberBinary); } else if (type == 1) { printf("Problem has %d rows, %d columns\n", numberRows, numberColumns); } const double *objective = getObjCoefficients(); if (numberIntegers) { double *obj = new double[numberIntegers]; int *which = new int[numberIntegers]; int numberFixed = 0; int numberZeroContinuous = 0; int numberZeroInteger = 0; int numberSort = 0; for (int iColumn = 0; iColumn < numberColumns; iColumn++) { if (columnUpper[iColumn] > columnLower[iColumn]) { if (!objective[iColumn]) { if (integerInformation[iColumn]) numberZeroInteger++; else numberZeroContinuous++; } else if (integerInformation[iColumn]) { obj[numberSort] = objective[iColumn]; which[numberSort++] = iColumn; } } else { numberFixed++; } } if (numberFixed) printf("%d variables fixed\n", numberFixed); if (numberZeroContinuous || numberZeroInteger) printf("Zero Objective coefficients - %d continuous and %d integer\n", numberZeroContinuous, numberZeroInteger); for (int ifAbs = 0; ifAbs < 2; ifAbs++) { int numberDifferentObj = 0; CoinSort_2(obj, obj + numberSort, which); double last = obj[0]; for (int jColumn = 1; jColumn < numberSort; jColumn++) { if (fabs(obj[jColumn] - last) > 1.0e-12) { numberDifferentObj++; last = obj[jColumn]; } obj[jColumn] = fabs(last); } numberDifferentObj++; printf("Range of integer objective coefficients %s ", ifAbs ? "(absolute values) " : ""); printf("(%g -> %g) - %d unique values\n", obj[0], last, numberDifferentObj); obj[0] = fabs(last); } delete[] which; delete[] obj; } if (type < 2) return; printf("\n"); const double *rowLower = getRowLower(); const double *rowUpper = getRowUpper(); int *number = new int[2 * CoinMax(numberRows, numberColumns)]; memset(number, 0, 2 * CoinMax(numberRows, numberColumns) * sizeof(int)); int *rowCount = number + CoinMax(numberRows, numberColumns); int numberObjSingletons = 0; /* cType 0 0/inf, 1 0/up, 2 lo/inf, 3 lo/up, 4 free, 5 fix, 6 -inf/0, 7 -inf/up, 8 0/1 */ int cType[9]; std::string cName[] = { "0.0->inf,", "0.0->up,", "lo->inf,", "lo->up,", "free,", "fixed,", "-inf->0.0,", "-inf->up,", "0.0->1.0" }; int nObjective = 0; memset(cType, 0, sizeof(cType)); for (iColumn = 0; iColumn < numberColumns; iColumn++) { int length = columnLength[iColumn]; if (length == 1 && objective[iColumn]) numberObjSingletons++; number[length]++; CoinBigIndex j; for (j = columnStart[iColumn]; j < columnStart[iColumn] + columnLength[iColumn]; j++) { rowCount[row[j]]++; } if (objective[iColumn]) nObjective++; if (columnLower[iColumn] > -1.0e20) { if (columnLower[iColumn] == 0.0) { if (columnUpper[iColumn] > 1.0e20) cType[0]++; else if (columnUpper[iColumn] == 1.0) cType[8]++; else if (columnUpper[iColumn] == 0.0) cType[5]++; else cType[1]++; } else { if (columnUpper[iColumn] > 1.0e20) cType[2]++; else if (columnUpper[iColumn] == columnLower[iColumn]) cType[5]++; else cType[3]++; } } else { if (columnUpper[iColumn] > 1.0e20) cType[4]++; else if (columnUpper[iColumn] == 0.0) cType[6]++; else cType[7]++; } } /* rType 0 E 0, 1 E 1, 2 E -1, 3 E other, 4 G 0, 5 G 1, 6 G other, 7 L 0, 8 L 1, 9 L other, 10 Range 0/1, 11 Range other, 12 free */ int rType[13]; std::string rName[] = { "E 0.0,", "E 1.0,", "E -1.0,", "E other,", "G 0.0,", "G 1.0,", "G other,", "L 0.0,", "L 1.0,", "L other,", "Range 0.0->1.0,", "Range other,", "Free" }; memset(rType, 0, sizeof(rType)); for (iRow = 0; iRow < numberRows; iRow++) { if (rowLower[iRow] > -1.0e20) { if (rowLower[iRow] == 0.0) { if (rowUpper[iRow] > 1.0e20) rType[4]++; else if (rowUpper[iRow] == 1.0) rType[10]++; else if (rowUpper[iRow] == 0.0) rType[0]++; else rType[11]++; } else if (rowLower[iRow] == 1.0) { if (rowUpper[iRow] > 1.0e20) rType[5]++; else if (rowUpper[iRow] == rowLower[iRow]) rType[1]++; else rType[11]++; } else if (rowLower[iRow] == -1.0) { if (rowUpper[iRow] > 1.0e20) rType[6]++; else if (rowUpper[iRow] == rowLower[iRow]) rType[2]++; else rType[11]++; } else { if (rowUpper[iRow] > 1.0e20) rType[6]++; else if (rowUpper[iRow] == rowLower[iRow]) rType[3]++; else rType[11]++; } } else { if (rowUpper[iRow] > 1.0e20) rType[12]++; else if (rowUpper[iRow] == 0.0) rType[7]++; else if (rowUpper[iRow] == 1.0) rType[8]++; else rType[9]++; } } // Basic statistics printf("Problem has %d rows, %d columns (%d with objective) and %d elements\n", numberRows, numberColumns, nObjective, numberElements); if (number[0] + number[1]) { printf("There are "); if (numberObjSingletons) printf("%d singletons with objective ", numberObjSingletons); int numberNoObj = number[1] - numberObjSingletons; if (numberNoObj) printf("%d singletons with no objective ", numberNoObj); if (number[0]) printf("** %d columns have no entries", number[0]); printf("\n"); } printf("Column breakdown:\n"); int k; for (k = 0; k < static_cast< int >(sizeof(cType) / sizeof(int)); k++) { printf("%d of type %s ", cType[k], cName[k].c_str()); if (((k + 1) % 3) == 0) printf("\n"); } if ((k % 3) != 0) printf("\n"); printf("\nRow breakdown:\n"); for (k = 0; k < static_cast< int >(sizeof(rType) / sizeof(int)); k++) { printf("%d of type %s ", rType[k], rName[k].c_str()); if (((k + 1) % 3) == 0) printf("\n"); } if ((k % 3) != 0) printf("\n"); if (type < 3) return; int kMax = type > 3 ? 1000000 : 10; k = 0; printf("\n"); for (iRow = 1; iRow <= numberRows; iRow++) { if (number[iRow]) { k++; printf("%d columns have %d entries\n", number[iRow], iRow); if (k == kMax) break; } } if (k == kMax) { int n = 0; for (; iRow < numberRows; iRow++) { n += number[iRow]; } if (n) printf("%d columns have more than %d entries\n", n, kMax); } memset(number, 0, numberColumns * sizeof(int)); for (iRow = 0; iRow < numberRows; iRow++) { int length = rowCount[iRow]; number[length]++; } k = 0; printf("\n"); for (iRow = 1; iRow <= numberRows; iRow++) { if (number[iRow]) { k++; printf("%d rows have %d entries\n", number[iRow], iRow); if (k == kMax) break; } } if (k == kMax) { int n = 0; for (; iRow < numberRows; iRow++) { n += number[iRow]; } if (n) printf("%d rows have more than %d entries\n", n, kMax); } delete[] number; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiPresolve.cpp0000644000175000017500000014632613414504051016355 0ustar sudipsudip// Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* Debug compile symbols for CoinPresolve. PRESOLVE_CONSISTENCY, PRESOLVE_DEBUG, and PRESOLVE_SUMMARY control consistency checking and debugging in the continuous presolve. See the comments in CoinPresolvePsdebug.hpp. DO NOT just define the symbols here in this file. Unless these symbols are consistent across all presolve code, you'll get something between garbage and a core dump. */ #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiSolverInterface.hpp" #include "OsiPresolve.hpp" #include "CoinPresolveMatrix.hpp" #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 || PRESOLVE_SUMMARY > 0 #include "CoinPresolvePsdebug.hpp" #include "CoinPresolveMonitor.hpp" #endif #include "CoinPresolveEmpty.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveSingleton.hpp" #include "CoinPresolveDoubleton.hpp" #include "CoinPresolveTripleton.hpp" #include "CoinPresolveZeros.hpp" #include "CoinPresolveSubst.hpp" #include "CoinPresolveForcing.hpp" #include "CoinPresolveDual.hpp" #include "CoinPresolveTighten.hpp" #include "CoinPresolveUseless.hpp" #include "CoinPresolveDupcol.hpp" #include "CoinPresolveImpliedFree.hpp" #include "CoinPresolveIsolated.hpp" #include "CoinMessage.hpp" OsiPresolve::OsiPresolve() : originalModel_(NULL) , presolvedModel_(NULL) , nonLinearValue_(0.0) , originalColumn_(NULL) , originalRow_(NULL) , paction_(0) , ncols_(0) , nrows_(0) , nelems_(0) , presolveActions_(0) , numberPasses_(5) { } OsiPresolve::~OsiPresolve() { gutsOfDestroy(); } // Gets rid of presolve actions (e.g.when infeasible) void OsiPresolve::gutsOfDestroy() { const CoinPresolveAction *paction = paction_; while (paction) { const CoinPresolveAction *next = paction->next; delete paction; paction = next; } delete[] originalColumn_; delete[] originalRow_; paction_ = NULL; originalColumn_ = NULL; originalRow_ = NULL; } /* This version of presolve returns a pointer to a new presolved model. NULL if infeasible doStatus controls activities required to transform an existing solution to match the presolved problem. I'd (lh) argue that this should default to false, but to maintain previous behaviour it defaults to true. Really, this is only useful if you've already optimised before applying presolve and also want to work with the solution after presolve. I think that this is the less common case. The more common situation is to apply presolve before optimising. */ OsiSolverInterface * OsiPresolve::presolvedModel(OsiSolverInterface &si, double feasibilityTolerance, bool keepIntegers, int numberPasses, const char *prohibited, bool doStatus, const char *rowProhibited) { ncols_ = si.getNumCols(); nrows_ = si.getNumRows(); nelems_ = si.getNumElements(); numberPasses_ = numberPasses; double maxmin = si.getObjSense(); originalModel_ = &si; delete[] originalColumn_; originalColumn_ = new int[ncols_]; delete[] originalRow_; originalRow_ = new int[nrows_]; int i; for (i = 0; i < ncols_; i++) originalColumn_[i] = i; for (i = 0; i < nrows_; i++) originalRow_[i] = i; // result is 0 - okay, 1 infeasible, -1 go round again int result = -1; // User may have deleted - its their responsibility presolvedModel_ = NULL; // Messages CoinMessages msgs = CoinMessage(si.messages().language()); // Only go round 100 times even if integer preprocessing int totalPasses = 100; while (result == -1) { // make new copy delete presolvedModel_; presolvedModel_ = si.clone(); totalPasses--; // drop integer information if wanted if (!keepIntegers) { int i; for (i = 0; i < ncols_; i++) presolvedModel_->setContinuous(i); } CoinPresolveMatrix prob(ncols_, maxmin, presolvedModel_, nrows_, nelems_, doStatus, nonLinearValue_, prohibited, rowProhibited); // make sure row solution correct if (doStatus) { double *colels = prob.colels_; int *hrow = prob.hrow_; CoinBigIndex *mcstrt = prob.mcstrt_; int *hincol = prob.hincol_; int ncols = prob.ncols_; double *csol = prob.sol_; double *acts = prob.acts_; int nrows = prob.nrows_; int colx; memset(acts, 0, nrows * sizeof(double)); for (colx = 0; colx < ncols; ++colx) { double solutionValue = csol[colx]; for (CoinBigIndex i = mcstrt[colx]; i < mcstrt[colx] + hincol[colx]; ++i) { int row = hrow[i]; double coeff = colels[i]; acts[row] += solutionValue * coeff; } } } // move across feasibility tolerance prob.feasibilityTolerance_ = feasibilityTolerance; /* Do presolve. Allow for the possibility that presolve might be ineffective (i.e., we're feasible but no postsolve actions are queued. */ paction_ = presolve(&prob); result = 0; // Get rid of useful arrays prob.deleteStuff(); /* This we don't need to do unless presolve actually reduced the system. */ if (prob.status_ == 0 && paction_) { // Looks feasible but double check to see if anything slipped through int n = prob.ncols_; double *lo = prob.clo_; double *up = prob.cup_; int i; for (i = 0; i < n; i++) { if (up[i] < lo[i]) { if (up[i] < lo[i] - 1.0e-8) { // infeasible prob.status_ = 1; } else { up[i] = lo[i]; } } } n = prob.nrows_; lo = prob.rlo_; up = prob.rup_; for (i = 0; i < n; i++) { if (up[i] < lo[i]) { if (up[i] < lo[i] - 1.0e-8) { // infeasible prob.status_ = 1; } else { up[i] = lo[i]; } } } } /* If we're feasible, load the presolved system into the solver. Presumably we could skip model update and copying of status and solution if presolve took no action. */ if (prob.status_ == 0) { prob.update_model(presolvedModel_, nrows_, ncols_, nelems_); #if PRESOLVE_CONSISTENCY > 0 if (doStatus) { int basicCnt = 0; int basicColumns = 0; int i; CoinPresolveMatrix::Status status; for (i = 0; i < prob.ncols_; i++) { status = prob.getColumnStatus(i); if (status == CoinPrePostsolveMatrix::basic) basicColumns++; } basicCnt = basicColumns; for (i = 0; i < prob.nrows_; i++) { status = prob.getRowStatus(i); if (status == CoinPrePostsolveMatrix::basic) basicCnt++; } #if PRESOLVE_DEBUG > 0 presolve_check_nbasic(&prob); #endif if (basicCnt > prob.nrows_) { // Take out slacks double *acts = prob.acts_; double *rlo = prob.rlo_; double *rup = prob.rup_; double infinity = si.getInfinity(); for (i = 0; i < prob.nrows_; i++) { status = prob.getRowStatus(i); if (status == CoinPrePostsolveMatrix::basic) { basicCnt--; double down = acts[i] - rlo[i]; double up = rup[i] - acts[i]; if (CoinMin(up, down) < infinity) { if (down <= up) prob.setRowStatus(i, CoinPrePostsolveMatrix::atLowerBound); else prob.setRowStatus(i, CoinPrePostsolveMatrix::atUpperBound); } else { prob.setRowStatus(i, CoinPrePostsolveMatrix::isFree); } } if (basicCnt == prob.nrows_) break; } } } #endif /* Install the status and primal solution, if we've been carrying them along. The code that copies status is efficient but brittle. The current definitions for CoinWarmStartBasis::Status and CoinPrePostsolveMatrix::Status are in one-to-one correspondence. This code will fail if that ever changes. */ if (doStatus) { presolvedModel_->setColSolution(prob.sol_); CoinWarmStartBasis *basis = dynamic_cast< CoinWarmStartBasis * >(presolvedModel_->getEmptyWarmStart()); basis->resize(prob.nrows_, prob.ncols_); int i; for (i = 0; i < prob.ncols_; i++) { CoinWarmStartBasis::Status status = static_cast< CoinWarmStartBasis::Status >(prob.getColumnStatus(i)); basis->setStructStatus(i, status); } for (i = 0; i < prob.nrows_; i++) { CoinWarmStartBasis::Status status = static_cast< CoinWarmStartBasis::Status >(prob.getRowStatus(i)); basis->setArtifStatus(i, status); } presolvedModel_->setWarmStart(basis); delete basis; delete[] prob.sol_; delete[] prob.acts_; delete[] prob.colstat_; prob.sol_ = NULL; prob.acts_ = NULL; prob.colstat_ = NULL; } /* Copy original column and row information from the CoinPresolveMatrix object so it'll be available for postsolve. */ int ncolsNow = presolvedModel_->getNumCols(); memcpy(originalColumn_, prob.originalColumn_, ncolsNow * sizeof(int)); delete[] prob.originalColumn_; prob.originalColumn_ = NULL; int nrowsNow = presolvedModel_->getNumRows(); memcpy(originalRow_, prob.originalRow_, nrowsNow * sizeof(int)); delete[] prob.originalRow_; prob.originalRow_ = NULL; // now clean up integer variables. This can modify original { int numberChanges = 0; const double *lower0 = originalModel_->getColLower(); const double *upper0 = originalModel_->getColUpper(); const double *lower = presolvedModel_->getColLower(); const double *upper = presolvedModel_->getColUpper(); for (i = 0; i < ncolsNow; i++) { if (!presolvedModel_->isInteger(i)) continue; int iOriginal = originalColumn_[i]; double lowerValue0 = lower0[iOriginal]; double upperValue0 = upper0[iOriginal]; double lowerValue = ceil(lower[i] - 1.0e-5); double upperValue = floor(upper[i] + 1.0e-5); presolvedModel_->setColBounds(i, lowerValue, upperValue); // need to be careful if dupcols if (lowerValue > upperValue) { numberChanges++; CoinMessageHandler *hdlr = presolvedModel_->messageHandler(); hdlr->message(COIN_PRESOLVE_COLINFEAS, msgs) << iOriginal << lowerValue << upperValue << CoinMessageEol; result = 1; } else if ((prob.presolveOptions_ & 0x80000000) == 0) { if (lowerValue > lowerValue0 + 1.0e-8) { originalModel_->setColLower(iOriginal, lowerValue); numberChanges++; } if (upperValue < upperValue0 - 1.0e-8) { originalModel_->setColUpper(iOriginal, upperValue); numberChanges++; } } } if (numberChanges) { CoinMessageHandler *hdlr = presolvedModel_->messageHandler(); hdlr->message(COIN_PRESOLVE_INTEGERMODS, msgs) << numberChanges << CoinMessageEol; // we can't go round again in integer if dupcols if (!result && totalPasses > 0 && (prob.presolveOptions_ & 0x80000000) == 0) { result = -1; // round again const CoinPresolveAction *paction = paction_; while (paction) { const CoinPresolveAction *next = paction->next; delete paction; paction = next; } paction_ = NULL; } } } } else if (prob.status_ != 0) { // infeasible or unbounded result = 1; } } if (!result) { int nrowsAfter = presolvedModel_->getNumRows(); int ncolsAfter = presolvedModel_->getNumCols(); CoinBigIndex nelsAfter = presolvedModel_->getNumElements(); CoinMessageHandler *hdlr = presolvedModel_->messageHandler(); hdlr->message(COIN_PRESOLVE_STATS, msgs) << nrowsAfter << -(nrows_ - nrowsAfter) << ncolsAfter << -(ncols_ - ncolsAfter) << nelsAfter << -(nelems_ - nelsAfter) << CoinMessageEol; } else { gutsOfDestroy(); delete presolvedModel_; presolvedModel_ = NULL; } return presolvedModel_; } // Return pointer to presolved model OsiSolverInterface * OsiPresolve::model() const { return presolvedModel_; } // Return pointer to original model OsiSolverInterface * OsiPresolve::originalModel() const { return originalModel_; } void OsiPresolve::postsolve(bool updateStatus) { // Messages CoinMessages msgs = CoinMessage(presolvedModel_->messages().language()); CoinMessageHandler *hdlr = presolvedModel_->messageHandler(); if (!presolvedModel_->isProvenOptimal()) { hdlr->message(COIN_PRESOLVE_NONOPTIMAL, msgs) << CoinMessageEol; } // this is the size of the original problem const int ncols0 = ncols_; const int nrows0 = nrows_; const CoinBigIndex nelems0 = nelems_; // reality check assert(ncols0 == originalModel_->getNumCols()); assert(nrows0 == originalModel_->getNumRows()); // this is the reduced problem int ncols = presolvedModel_->getNumCols(); int nrows = presolvedModel_->getNumRows(); double *acts = new double[nrows0]; double *sol = new double[ncols0]; CoinZeroN(acts, nrows0); CoinZeroN(sol, ncols0); unsigned char *rowstat = NULL; unsigned char *colstat = NULL; CoinWarmStartBasis *presolvedBasis = dynamic_cast< CoinWarmStartBasis * >(presolvedModel_->getWarmStart()); if (!presolvedBasis) updateStatus = false; if (updateStatus) { colstat = new unsigned char[ncols0 + nrows0]; #ifdef ZEROFAULT memset(colstat, 0, ((ncols0 + nrows0) * sizeof(char))); #endif rowstat = colstat + ncols0; for (int i = 0; i < ncols; i++) { colstat[i] = presolvedBasis->getStructStatus(i); } for (int i = 0; i < nrows; i++) { rowstat[i] = presolvedBasis->getArtifStatus(i); } } delete presolvedBasis; #if PRESOLVE_CONSISTENCY > 0 if (updateStatus) { int basicCnt = 0; for (int i = 0; i < ncols; i++) { if (colstat[i] == CoinWarmStartBasis::basic) basicCnt++; } for (int i = 0; i < nrows; i++) { if (rowstat[i] == CoinWarmStartBasis::basic) basicCnt++; } assert(basicCnt == nrows); } #endif /* Postsolve back to the original problem. The CoinPostsolveMatrix object assumes ownership of sol, acts, colstat, and rowstat. */ CoinPostsolveMatrix prob(presolvedModel_, ncols0, nrows0, nelems0, presolvedModel_->getObjSense(), sol, acts, colstat, rowstat); postsolve(prob); #if PRESOLVE_CONSISTENCY > 0 if (updateStatus) { int basicCnt = 0; for (int i = 0; i < ncols0; i++) { if (prob.getColumnStatus(i) == CoinPrePostsolveMatrix::basic) basicCnt++; } for (int i = 0; i < nrows0; i++) { if (prob.getRowStatus(i) == CoinPrePostsolveMatrix::basic) basicCnt++; } assert(basicCnt == nrows0); } #endif originalModel_->setColSolution(sol); if (updateStatus) { CoinWarmStartBasis *basis = dynamic_cast< CoinWarmStartBasis * >(presolvedModel_->getEmptyWarmStart()); basis->setSize(ncols0, nrows0); const double *lower = originalModel_->getColLower(); const double *upper = originalModel_->getColUpper(); const double *solution = originalModel_->getColSolution(); for (int i = 0; i < ncols0; i++) { CoinWarmStartBasis::Status status = static_cast< CoinWarmStartBasis::Status >(prob.getColumnStatus(i)); // Fix obvious mistakes if (status != CoinWarmStartBasis::basic && status != CoinWarmStartBasis::isFree) { if (solution[i] < lower[i] + 1.0e-8) status = CoinWarmStartBasis::atLowerBound; else if (solution[i] > upper[i] - 1.0e-8) status = CoinWarmStartBasis::atUpperBound; } assert(status != CoinWarmStartBasis::atLowerBound || originalModel_->getColLower()[i] > -originalModel_->getInfinity()); assert(status != CoinWarmStartBasis::atUpperBound || originalModel_->getColUpper()[i] < originalModel_->getInfinity()); basis->setStructStatus(i, status); } #if PRESOLVE_DEBUG > 0 /* Do a thorough check of row and column solutions. There should be no inconsistencies at this point. */ std::cout << "Checking solution before transferring basis." << std::endl; presolve_check_sol(&prob, 2, 2, 2); int errs = 0; #endif for (int i = 0; i < nrows0; i++) { CoinWarmStartBasis::Status status = static_cast< CoinWarmStartBasis::Status >(prob.getRowStatus(i)); basis->setArtifStatus(i, status); } originalModel_->setWarmStart(basis); delete basis; } } // return pointer to original columns const int * OsiPresolve::originalColumns() const { return originalColumn_; } // return pointer to original rows const int * OsiPresolve::originalRows() const { return originalRow_; } // Set pointer to original model void OsiPresolve::setOriginalModel(OsiSolverInterface *model) { originalModel_ = model; } #if 0 // A lazy way to restrict which transformations are applied // during debugging. static int ATOI(const char *name) { return true; #if PRESOLVE_DEBUG > 0 || PRESOLVE_SUMMARY > 0 if (getenv(name)) { int val = atoi(getenv(name)); printf("%s = %d\n", name, val); return (val); } else { if (strcmp(name,"off")) return (true); else return (false); } #else return (true); #endif } #endif #if PRESOLVE_DEBUG > 0 // Anonymous namespace for debug routines namespace { /* A control routine for debug checks --- keeps down the clutter in doPresolve. Each time it's called, it prints a list of transforms applied since the last call, then does checks. */ void check_and_tell(const CoinPresolveMatrix *const prob, const CoinPresolveAction *first, const CoinPresolveAction *&mark) { const CoinPresolveAction *current; if (first != mark) { printf("PRESOLVE: applied"); for (current = first; current != mark && current != 0; current = current->next) { printf(" %s", current->name()); } printf("\n"); presolve_check_sol(prob); presolve_check_nbasic(prob); mark = first; } return; } /* At a guess, this code is intended to allow a known solution to be checked against presolve progress. Pulled it into the local debug namespace, but really should be integrated with CoinPresolvePsdebug. At the least, needs a method to conveniently set debugSolution. -- lh, 110605 -- */ double *debugSolution = NULL; int debugNumberColumns = -1; int counter = 1000000; bool break2(CoinPresolveMatrix *prob) { if (counter > 0) printf("break2: counter %d\n", counter); counter--; if (debugSolution && prob->ncols_ == debugNumberColumns) { for (int i = 0; i < prob->ncols_; i++) { double value = debugSolution[i]; if (value < prob->clo_[i]) { printf("%d inf %g %g %g\n", i, prob->clo_[i], value, prob->cup_[i]); } else if (value > prob->cup_[i]) { printf("%d inf %g %g %g\n", i, prob->clo_[i], value, prob->cup_[i]); } } } if (!counter) { printf("skipping next and all\n"); } return (counter <= 0); } } // end anonymous namespace for debug routines #endif #if PRESOLVE_DEBUG > 0 #define possibleBreak \ if (break2(prob)) \ break #define possibleSkip if (!break2(prob)) #else #define possibleBreak #define possibleSkip #endif // This is the presolve loop. // It is a separate virtual function so that it can be easily // customized by subclassing CoinPresolve. const CoinPresolveAction *OsiPresolve::presolve(CoinPresolveMatrix *prob) { paction_ = 0; prob->status_ = 0; // say feasible #if PRESOLVE_DEBUG > 0 const CoinPresolveAction *pactiond = 0; presolve_check_sol(prob, 2, 1, 1); // CoinPresolveMonitor *monitor = new CoinPresolveMonitor(prob,true,22) ; CoinPresolveMonitor *monitor = 0; #endif /* Transfer costs off of singleton variables, and also between integer variables when advantageous. transferCosts is defined in CoinPresolveFixed.cpp */ if ((presolveActions_ & 0x04) != 0) { transferCosts(prob); #if PRESOLVE_DEBUG > 0 if (monitor) monitor->checkAndTell(prob); #endif } /* Fix variables before we get into the main transform loop. */ paction_ = make_fixed(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif // if integers then switch off dual stuff // later just do individually bool doDualStuff = true; if ((presolveActions_ & 0x01) == 0) { int ncol = presolvedModel_->getNumCols(); for (int i = 0; i < ncol; i++) if (presolvedModel_->isInteger(i)) doDualStuff = false; } #if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob); #endif /* If we're feasible, set up for the main presolve transform loop. */ if (!prob->status_) { #if 0 /* This block is used during debugging. See ATOI to see how it works. Some editing will be required to turn it all on. */ bool slackd = ATOI("SLACKD")!=0; //bool forcing = ATOI("FORCING")!=0; bool doubleton = ATOI("DOUBLETON")!=0; bool forcing = ATOI("off")!=0; bool ifree = ATOI("off")!=0; bool zerocost = ATOI("off")!=0; bool dupcol = ATOI("off")!=0; bool duprow = ATOI("off")!=0; bool dual = ATOI("off")!=0; #else #if 1 // normal operation --- all transforms enabled bool slackSingleton = true; bool slackd = true; bool doubleton = true; bool tripleton = true; bool forcing = true; bool ifree = true; bool zerocost = true; bool dupcol = true; bool duprow = true; bool dual = doDualStuff; #else // compile time selection of transforms. bool slackSingleton = true; bool slackd = false; bool doubleton = true; bool tripleton = true; bool forcing = true; bool ifree = false; bool zerocost = false; bool dupcol = false; bool duprow = false; bool dual = false; #endif #endif /* Process OsiPresolve options. Set corresponding CoinPresolve options and control variables here. */ // Switch off some stuff if would annoy set partitioning etc if ((presolveActions_ & 0x02) != 0) { doubleton = false; tripleton = false; ifree = false; } // stop x+y+z=1 if ((presolveActions_ & 0x08) != 0) prob->setPresolveOptions(prob->presolveOptions() | 0x04); // switch on stuff which can't be unrolled easily if ((presolveActions_ & 0x10) != 0) prob->setPresolveOptions(prob->presolveOptions() | 0x10); // switch on gub stuff (unimplemented as of 110605 -- lh --) if ((presolveActions_ & 0x20) != 0) prob->setPresolveOptions(prob->presolveOptions() | 0x20); // allow duplicate column processing for integer columns if ((presolveActions_ & 0x01) != 0) prob->setPresolveOptions(prob->presolveOptions() | 0x01); /* Set [rows,cols]ToDo to process all rows & cols unless there are specific prohibitions. */ prob->initColsToDo(); prob->initRowsToDo(); /* Try to remove duplicate rows and columns. */ if (dupcol) { possibleSkip; paction_ = dupcol_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 if (monitor) monitor->checkAndTell(prob); #endif } if (duprow) { possibleSkip; paction_ = duprow_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 if (monitor) monitor->checkAndTell(prob); #endif } /* The main loop starts with a minor loop that does inexpensive presolve transforms until convergence. At each iteration of this loop, next[Rows,Cols]ToDo is copied over to [rows,cols]ToDo. Then there's a block to set [rows,cols]ToDo to examine all rows & cols, followed by executions of expensive transforms. Then we come back around for another iteration of the main loop. [rows,cols]ToDo is not reset as we come back around, so we dive into the inexpensive loop set up to process all. lastDropped is a count of total number of rows dropped by presolve. Used as an additional criterion to end the main presolve loop. */ int lastDropped = 0; prob->pass_ = 0; for (int iLoop = 0; iLoop < numberPasses_; iLoop++) { #if PRESOLVE_SUMMARY > 0 std::cout << "Starting major pass " << (iLoop + 1) << std::endl; #endif const CoinPresolveAction *const paction0 = paction_; // #define IMPLIED 3 #ifdef IMPLIED int fill_level = 3; #define IMPLIED2 1 #if IMPLIED != 3 #if IMPLIED > 0 && IMPLIED < 11 fill_level = IMPLIED; printf("** fill_level == %d !\n", fill_level); #endif #if IMPLIED > 11 && IMPLIED < 21 fill_level = -(IMPLIED - 10); printf("** fill_level == %d !\n", fill_level); #endif #endif #else // look for substitutions with no fill int fill_level = 2; #endif int whichPass = 0; /* Apply inexpensive transforms until convergence or infeasible/unbounded. */ while (true) { whichPass++; prob->pass_++; const CoinPresolveAction *const paction1 = paction_; if (slackd) { bool notFinished = true; while (notFinished) { possibleBreak; paction_ = slack_doubleton_action::presolve(prob, paction_, notFinished); } #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (zerocost) { possibleBreak; paction_ = do_tighten_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (dual && whichPass == 1) { possibleBreak; // this can also make E rows so do one bit here paction_ = remove_dual_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (doubleton) { possibleBreak; paction_ = doubleton_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (tripleton) { possibleBreak; paction_ = tripleton_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (forcing) { possibleBreak; paction_ = forcing_constraint_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (ifree && (whichPass % 5) == 1) { possibleBreak; paction_ = implied_free_action::presolve(prob, paction_, fill_level); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } #if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob); presolve_no_zeros(prob); presolve_consistent(prob); #endif /* Set up for next pass. Original comment adds: later do faster if many changes i.e. memset and memcpy */ prob->stepRowsToDo(); #if PRESOLVE_DEBUG > 0 int rowCheck = -1; bool rowFound = false; for (int i = 0; i < prob->numberRowsToDo_; i++) { int index = prob->rowsToDo_[i]; if (index == rowCheck) { std::cout << " row " << index << " on list after pass " << whichPass << std::endl; rowFound = true; } } if (!rowFound && rowCheck >= 0) prob->rowsToDo_[prob->numberRowsToDo_++] = rowCheck; #endif prob->stepColsToDo(); #if PRESOLVE_DEBUG > 0 int colCheck = -1; bool colFound = false; for (int i = 0; i < prob->numberNextColsToDo_; i++) { int index = prob->colsToDo_[i]; if (index == colCheck) { std::cout << " col " << index << " on list after pass " << whichPass << std::endl; colFound = true; } } if (!colFound && colCheck >= 0) prob->colsToDo_[prob->numberColsToDo_++] = colCheck; #endif /* Break if nothing happened (no postsolve actions queued). The check for fill_level > 0 is a hack to allow repeating the loop with some modified fill level (playing with negative values). fill_level = 0 (as set in other places) will clearly be a problem. -- lh, 110605 -- */ if (paction_ == paction1 && fill_level > 0) break; } /* End of inexpensive transform loop. Reset [rows,cols]ToDo to process all rows and columns unless there are specfic prohibitions. */ prob->initRowsToDo(); prob->initColsToDo(); /* Try expensive presolve transforms. Original comment adds: this caused world.mps to run into numerical difficulties */ #if PRESOLVE_SUMMARY > 0 std::cout << "Starting expensive." << std::endl; #endif /* Try and fix variables at upper or lower bound by calculating bounds on the dual variables and propagating them to the reduced costs. Every other iteration, see if this has created free variables. */ if (dual) { for (int itry = 0; itry < 5; itry++) { const CoinPresolveAction *const paction2 = paction_; possibleBreak; paction_ = remove_dual_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; if (ifree) { #ifdef IMPLIED #if IMPLIED2 == 0 int fill_level = 0; // switches off substitution #elif IMPLIED2 != 99 int fill_level = IMPLIED2; #endif #endif if ((itry & 1) == 0) { possibleBreak; paction_ = implied_free_action::presolve(prob, paction_, fill_level); } #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (paction_ == paction2) break; } } else if (ifree) { /* Just check for free variables. */ #ifdef IMPLIED #if IMPLIED2 == 0 int fill_level = 0; // switches off substitution #elif IMPLIED2 != 99 int fill_level = IMPLIED2; #endif #endif possibleBreak; paction_ = implied_free_action::presolve(prob, paction_, fill_level); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } /* Check if other transformations have produced duplicate rows or columns. */ if (dupcol) { possibleBreak; paction_ = dupcol_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (duprow) { possibleBreak; paction_ = duprow_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } // Will trigger abort due to unimplemented postsolve -- lh, 110605 -- if ((presolveActions_ & 0x20) != 0) { possibleBreak; paction_ = gubrow_action::presolve(prob, paction_); } /* Count the number of empty rows and see if we've made progress in this pass. */ bool stopLoop = false; { const int *const hinrow = prob->hinrow_; int numberDropped = 0; for (int i = 0; i < nrows_; i++) if (!hinrow[i]) numberDropped++; #if PRESOLVE_DEBUG > 0 std::cout << " " << (numberDropped - lastDropped) << " rows dropped in pass " << iLoop << "." << std::endl; #endif if (numberDropped == lastDropped) stopLoop = true; else lastDropped = numberDropped; } /* Check for singleton variables that can act like a logical, allowing a row to be transformed from an equality to an inequality. The third parameter allows for costs for the existing logicals. This is apparently used by clp; consult the clp presolve before implementing it here. -- lh, 110605 -- Original comment: Do this here as not very loopy */ if (slackSingleton) { possibleBreak; paction_ = slack_singleton_action::presolve(prob, paction_, NULL); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif } #if PRESOLVE_DEBUG > 0 presolve_check_sol(prob, 1); #endif if (paction_ == paction0 || stopLoop) break; } // End of major pass loop } /* Final cleanup: drop zero coefficients from the matrix, then drop empty rows and columns. */ if (!prob->status_) { paction_ = drop_zero_coefficients(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif paction_ = drop_empty_cols_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); #endif paction_ = drop_empty_rows_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); #endif } /* Not feasible? Say something and clean up. */ CoinMessageHandler *hdlr = prob->messageHandler(); CoinMessages msgs = CoinMessage(prob->messages().language()); if (prob->status_) { if (prob->status_ == 1) hdlr->message(COIN_PRESOLVE_INFEAS, msgs) << prob->feasibilityTolerance_ << CoinMessageEol; else if (prob->status_ == 2) hdlr->message(COIN_PRESOLVE_UNBOUND, msgs) << CoinMessageEol; else hdlr->message(COIN_PRESOLVE_INFEASUNBOUND, msgs) << CoinMessageEol; gutsOfDestroy(); } return (paction_); } /* We could have implemented this by having each postsolve routine directly call the next one, but this makes it easier to add debugging checks. */ void OsiPresolve::postsolve(CoinPostsolveMatrix &prob) { const CoinPresolveAction *paction = paction_; #if PRESOLVE_DEBUG > 0 std::cout << "Begin POSTSOLVING." << std::endl; if (prob.colstat_) { presolve_check_nbasic(&prob); presolve_check_sol(&prob, 2, 2, 2); } presolve_check_duals(&prob); #endif while (paction) { #if PRESOLVE_DEBUG > 0 std::cout << "POSTSOLVING " << paction->name() << std::endl; #endif paction->postsolve(&prob); #if PRESOLVE_DEBUG > 0 if (prob.colstat_) { presolve_check_nbasic(&prob); presolve_check_sol(&prob, 2, 2, 2); } #endif paction = paction->next; #if PRESOLVE_DEBUG > 0 presolve_check_duals(&prob); #endif } #if PRESOLVE_DEBUG > 0 std::cout << "End POSTSOLVING" << std::endl; #endif #if PRESOLVE_DEBUG > 0 for (int j = 0; j < prob.ncols_; j++) { if (!prob.cdone_[j]) { printf("!cdone[%d]\n", j); abort(); } } for (int i = 0; i < prob.nrows_; i++) { if (!prob.rdone_[i]) { printf("!rdone[%d]\n", i); abort(); } } for (int j = 0; j < prob.ncols_; j++) { if (prob.sol_[j] < -1e10 || prob.sol_[j] > 1e10) printf("!!!%d %g\n", j, prob.sol_[j]); } #endif /* Put back duals. Flip sign for maximisation problems. */ double maxmin = originalModel_->getObjSense(); if (maxmin < 0.0) { double *pi = prob.rowduals_; for (int i = 0; i < nrows_; i++) pi[i] = -pi[i]; } originalModel_->setRowPrice(prob.rowduals_); } static inline double getTolerance(const OsiSolverInterface *si, OsiDblParam key) { double tol; if (!si->getDblParam(key, tol)) { CoinPresolveAction::throwCoinError("getDblParam failed", "CoinPrePostsolveMatrix::CoinPrePostsolveMatrix"); } return (tol); } // Assumptions: // 1. nrows>=m.getNumRows() // 2. ncols>=m.getNumCols() // // In presolve, these values are equal. // In postsolve, they may be inequal, since the reduced problem // may be smaller, but we need room for the large problem. // ncols may be larger than si.getNumCols() in postsolve, // this at that point si will be the reduced problem, // but we need to reserve enough space for the original problem. CoinPrePostsolveMatrix::CoinPrePostsolveMatrix(const OsiSolverInterface *si, int ncols_in, int nrows_in, CoinBigIndex nelems_in) : ncols_(si->getNumCols()) , nelems_(si->getNumElements()) , ncols0_(ncols_in) , nrows0_(nrows_in) , bulkRatio_(2.0) , mcstrt_(new CoinBigIndex[ncols_in + 1]) , hincol_(new int[ncols_in + 1]) , cost_(new double[ncols_in]) , clo_(new double[ncols_in]) , cup_(new double[ncols_in]) , rlo_(new double[nrows_in]) , rup_(new double[nrows_in]) , originalColumn_(new int[ncols_in]) , originalRow_(new int[nrows_in]) , ztolzb_(getTolerance(si, OsiPrimalTolerance)) , ztoldj_(getTolerance(si, OsiDualTolerance)) , maxmin_(si->getObjSense()) , handler_(0) , defaultHandler_(false) , messages_() { bulk0_ = static_cast< CoinBigIndex >(bulkRatio_ * nelems_in + ncols_in); hrow_ = new int[bulk0_ + ncols_in]; colels_ = new double[bulk0_ + ncols_in]; si->getDblParam(OsiObjOffset, originalOffset_); int ncols = si->getNumCols(); int nrows = si->getNumRows(); setMessageHandler(si->messageHandler()); CoinDisjointCopyN(si->getColLower(), ncols, clo_); CoinDisjointCopyN(si->getColUpper(), ncols, cup_); CoinDisjointCopyN(si->getObjCoefficients(), ncols, cost_); CoinDisjointCopyN(si->getRowLower(), nrows, rlo_); CoinDisjointCopyN(si->getRowUpper(), nrows, rup_); int i; // initialize and clean up bounds double infinity = si->getInfinity(); if (infinity != COIN_DBL_MAX) { for (i = 0; i < ncols; i++) { if (clo_[i] == -infinity) clo_[i] = -COIN_DBL_MAX; if (cup_[i] == infinity) cup_[i] = COIN_DBL_MAX; } for (i = 0; i < nrows; i++) { if (rlo_[i] == -infinity) rlo_[i] = -COIN_DBL_MAX; if (rup_[i] == infinity) rup_[i] = COIN_DBL_MAX; } } for (i = 0; i < ncols_in; i++) originalColumn_[i] = i; for (i = 0; i < nrows_in; i++) originalRow_[i] = i; sol_ = NULL; rowduals_ = NULL; acts_ = NULL; rcosts_ = NULL; colstat_ = NULL; rowstat_ = NULL; } // I am not familiar enough with CoinPackedMatrix to be confident // that I will implement a row-ordered version of toColumnOrderedGapFree // properly. static bool isGapFree(const CoinPackedMatrix &matrix) { const CoinBigIndex *start = matrix.getVectorStarts(); const int *length = matrix.getVectorLengths(); int i; for (i = matrix.getSizeVectorLengths() - 1; i >= 0; --i) { if (start[i + 1] - start[i] != length[i]) break; } return (!(i >= 0)); } CoinPresolveMatrix::CoinPresolveMatrix(int ncols0_in, double maxmin, // end prepost members OsiSolverInterface *si, // rowrep int nrows_in, CoinBigIndex nelems_in, bool doStatus, double nonLinearValue, const char *prohibited, const char *rowProhibited) : CoinPrePostsolveMatrix(si, ncols0_in, nrows_in, nelems_in) , clink_(new presolvehlink[ncols0_in + 1]) , rlink_(new presolvehlink[nrows_in + 1]) , dobias_(0.0) , // temporary init mrstrt_(new CoinBigIndex[nrows_in + 1]) , hinrow_(new int[nrows_in + 1]) , integerType_(new unsigned char[ncols0_in]) , anyInteger_(false) , tuning_(false) , startTime_(0.0) , feasibilityTolerance_(0.0) , status_(-1) , maxSubstLevel_(3) , colsToDo_(new int[ncols0_in]) , numberColsToDo_(0) , nextColsToDo_(new int[ncols0_in]) , numberNextColsToDo_(0) , rowsToDo_(new int[nrows_in]) , numberRowsToDo_(0) , nextRowsToDo_(new int[nrows_in]) , numberNextRowsToDo_(0) , presolveOptions_(0) { rowels_ = new double[bulk0_]; hcol_ = new int[bulk0_]; nrows_ = si->getNumRows(); const CoinBigIndex bufsize = static_cast< CoinBigIndex >(bulk0_); // Set up change bits rowChanged_ = new unsigned char[nrows_]; memset(rowChanged_, 0, nrows_); colChanged_ = new unsigned char[ncols_]; memset(colChanged_, 0, ncols_); const CoinPackedMatrix *m1 = si->getMatrixByCol(); // The coefficient matrix is a big hunk of stuff. // Do the copy here to try to avoid running out of memory. const CoinBigIndex *start = m1->getVectorStarts(); const int *length = m1->getVectorLengths(); const int *row = m1->getIndices(); const double *element = m1->getElements(); int icol; CoinBigIndex nel = 0; mcstrt_[0] = 0; for (icol = 0; icol < ncols_; icol++) { CoinBigIndex j; for (j = start[icol]; j < start[icol] + length[icol]; j++) { if (fabs(element[j]) > ZTOLDP) { hrow_[nel] = row[j]; colels_[nel++] = element[j]; } } hincol_[icol] = static_cast< int >(nel - mcstrt_[icol]); mcstrt_[icol + 1] = nel; } // same thing for row rep CoinPackedMatrix *m = new CoinPackedMatrix(); m->reverseOrderedCopyOf(*si->getMatrixByCol()); // do by hand because of zeros m->removeGaps(); CoinDisjointCopyN(m->getVectorStarts(), nrows_, mrstrt_); mrstrt_[nrows_] = nelems_; CoinDisjointCopyN(m->getVectorLengths(), nrows_, hinrow_); CoinDisjointCopyN(m->getIndices(), nelems_, hcol_); CoinDisjointCopyN(m->getElements(), nelems_, rowels_); start = m->getVectorStarts(); length = m->getVectorLengths(); const int *column = m->getIndices(); element = m->getElements(); // out zeros int irow; nel = 0; mrstrt_[0] = 0; for (irow = 0; irow < nrows_; irow++) { CoinBigIndex j; for (j = start[irow]; j < start[irow] + length[irow]; j++) { if (fabs(element[j]) > ZTOLDP) { hcol_[nel] = column[j]; rowels_[nel++] = element[j]; } } hinrow_[irow] = static_cast< int >(nel - mrstrt_[irow]); mrstrt_[irow + 1] = nel; } nelems_ = nel; delete m; { int i; int numberIntegers = 0; for (i = 0; i < ncols_; i++) { if (si->isInteger(i)) { integerType_[i] = 1; numberIntegers++; } else { integerType_[i] = 0; } } anyInteger_ = (numberIntegers != 0); } // Set up prohibited bits if needed if (nonLinearValue) { anyProhibited_ = true; for (icol = 0; icol < ncols_; icol++) { CoinBigIndex j; bool nonLinearColumn = false; if (cost_[icol] == nonLinearValue) nonLinearColumn = true; for (j = mcstrt_[icol]; j < mcstrt_[icol + 1]; j++) { if (colels_[j] == nonLinearValue) { nonLinearColumn = true; setRowProhibited(hrow_[j]); } } if (nonLinearColumn) setColProhibited(icol); } } else if (prohibited) { anyProhibited_ = true; for (icol = 0; icol < ncols_; icol++) { if (prohibited[icol]) setColProhibited(icol); } } else { anyProhibited_ = false; } // Any rows special? if (rowProhibited) { anyProhibited_ = true; for (int irow = 0; irow < nrows_; irow++) { if (rowProhibited[irow]) setRowProhibited(irow); } } // Go to minimization if (maxmin < 0.0) { for (int i = 0; i < ncols_; i++) cost_[i] = -cost_[i]; maxmin_ = 1.0; } if (doStatus) { // allow for status and solution sol_ = new double[ncols_]; const double *presol; presol = si->getColSolution(); memcpy(sol_, presol, ncols_ * sizeof(double)); ; acts_ = new double[nrows_]; memcpy(acts_, si->getRowActivity(), nrows_ * sizeof(double)); CoinWarmStartBasis *basis = dynamic_cast< CoinWarmStartBasis * >(si->getWarmStart()); colstat_ = new unsigned char[nrows_ + ncols_]; rowstat_ = colstat_ + ncols_; // If basis is NULL then put in all slack basis if (basis && basis->getNumStructural() == ncols_) { int i; for (i = 0; i < ncols_; i++) { colstat_[i] = basis->getStructStatus(i); } for (i = 0; i < nrows_; i++) { rowstat_[i] = basis->getArtifStatus(i); } } else { int i; // no basis for (i = 0; i < ncols_; i++) { colstat_[i] = 3; } for (i = 0; i < nrows_; i++) { rowstat_[i] = 1; } } delete basis; } #if 0 for (i=0; i 0 presolve_consistent(this); #endif } // avoid compiler warnings about unused variables #if PRESOLVE_SUMMARY > 0 void CoinPresolveMatrix::update_model(OsiSolverInterface *si, int nrows0, int ncols0, CoinBigIndex nelems0) #else void CoinPresolveMatrix::update_model(OsiSolverInterface *si, int /*nrows0*/, int /*ncols0*/, CoinBigIndex /*nelems0*/) #endif { int nels = 0; int i; if (si->getObjSense() < 0.0) { for (int i = 0; i < ncols_; i++) cost_[i] = -cost_[i]; dobias_ = -dobias_; maxmin_ = -1.0; } for (i = 0; i < ncols_; i++) nels += hincol_[i]; CoinPackedMatrix m(true, nrows_, ncols_, nels, colels_, hrow_, mcstrt_, hincol_); si->loadProblem(m, clo_, cup_, cost_, rlo_, rup_); for (i = 0; i < ncols_; i++) { if (integerType_[i]) si->setInteger(i); else si->setContinuous(i); } si->setDblParam(OsiObjOffset, originalOffset_ - dobias_); #if PRESOLVE_SUMMARY > 0 std::cout << "New ncol/nrow/nels: " << ncols_ << "(-" << ncols0 - ncols_ << ") " << nrows_ << "(-" << nrows0 - nrows_ << ") " << si->getNumElements() << "(-" << nelems0 - si->getNumElements() << ") " << std::endl; #endif } //////////////// POSTSOLVE CoinPostsolveMatrix::CoinPostsolveMatrix(OsiSolverInterface *si, int ncols0_in, int nrows0_in, CoinBigIndex nelems0, double maxmin, // end prepost members double *sol_in, double *acts_in, unsigned char *colstat_in, unsigned char *rowstat_in) : CoinPrePostsolveMatrix(si, ncols0_in, nrows0_in, nelems0) , /* Used only to mark processed columns and rows so that debugging routines know what to check. */ #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 cdone_(new char[ncols0_in]) , rdone_(new char[nrows0_in]) #else cdone_(0) , rdone_(0) #endif { /* The CoinPrePostsolveMatrix constructor will set bulk0_ to bulkRatio_*nelems0. By default, bulkRatio_ is 2. This is certainly larger than absolutely necessary, but good for efficiency (minimises the need to compress the bulk store). The main storage arrays for the threaded column-major representation (hrow_, colels_, link_) should be allocated to this size. */ free_list_ = 0; maxlink_ = bulk0_; link_ = new CoinBigIndex[maxlink_]; nrows_ = si->getNumRows(); ncols_ = si->getNumCols(); sol_ = sol_in; rowduals_ = NULL; acts_ = acts_in; rcosts_ = NULL; colstat_ = colstat_in; rowstat_ = rowstat_in; // this is the *reduced* model, which is probably smaller int ncols1 = ncols_; int nrows1 = nrows_; const CoinPackedMatrix *m = si->getMatrixByCol(); #if 0 if (! isGapFree(*m)) { CoinPresolveAction::throwCoinError("Matrix not gap free", "CoinPostsolveMatrix"); } #endif const CoinBigIndex nelemsr = m->getNumElements(); if (isGapFree(*m)) { CoinDisjointCopyN(m->getVectorStarts(), ncols1, mcstrt_); CoinZeroN(mcstrt_ + ncols1, ncols0_ - ncols1); mcstrt_[ncols_] = nelems0; // points to end of bulk store CoinDisjointCopyN(m->getVectorLengths(), ncols1, hincol_); CoinDisjointCopyN(m->getIndices(), nelemsr, hrow_); CoinDisjointCopyN(m->getElements(), nelemsr, colels_); } else { CoinPackedMatrix *mm = new CoinPackedMatrix(*m); if (mm->hasGaps()) mm->removeGaps(); assert(nelemsr == mm->getNumElements()); CoinDisjointCopyN(mm->getVectorStarts(), ncols1, mcstrt_); CoinZeroN(mcstrt_ + ncols1, ncols0_ - ncols1); mcstrt_[ncols_] = nelems0; // points to end of bulk store CoinDisjointCopyN(mm->getVectorLengths(), ncols1, hincol_); CoinDisjointCopyN(mm->getIndices(), nelemsr, hrow_); CoinDisjointCopyN(mm->getElements(), nelemsr, colels_); } #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 memset(cdone_, -1, ncols0_); memset(rdone_, -1, nrows0_); #endif rowduals_ = new double[nrows0_]; CoinDisjointCopyN(si->getRowPrice(), nrows1, rowduals_); rcosts_ = new double[ncols0_]; CoinDisjointCopyN(si->getReducedCost(), ncols1, rcosts_); #if PRESOLVE_DEBUG > 0 // check accuracy of reduced costs (rcosts_ is recalculated reduced costs) si->getMatrixByCol()->transposeTimes(rowduals_, rcosts_); const double *obj = si->getObjCoefficients(); const double *dj = si->getReducedCost(); { int i; for (i = 0; i < ncols1; i++) { double newDj = obj[i] - rcosts_[i]; rcosts_[i] = newDj; assert(fabs(newDj - dj[i]) < 1.0e-1); } } // check reduced costs are 0 for basic variables { int i; for (i = 0; i < ncols1; i++) if (columnIsBasic(i)) assert(fabs(rcosts_[i]) < 1.0e-5); for (i = 0; i < nrows1; i++) if (rowIsBasic(i)) assert(fabs(rowduals_[i]) < 1.0e-5); } #endif /* CoinPresolve may, once, have handled both minimisation and maximisation, but hard-wired minimisation has crept in. */ if (maxmin < 0.0) { for (int i = 0; i < nrows1; i++) rowduals_[i] = -rowduals_[i]; for (int j = 0; j < ncols1; j++) { rcosts_[j] = -rcosts_[j]; } } /* CoinPresolve requires both column solution and row activity for correct operation. */ CoinDisjointCopyN(si->getColSolution(), ncols1, sol_); CoinDisjointCopyN(si->getRowActivity(), nrows1, acts_); si->setDblParam(OsiObjOffset, originalOffset_); for (int j = 0; j < ncols1; j++) { CoinBigIndex kcs = mcstrt_[j]; CoinBigIndex kce = kcs + hincol_[j]; for (CoinBigIndex k = kcs; k < kce; ++k) { link_[k] = k + 1; } if (kce > 0) link_[kce - 1] = NO_LINK; } if (maxlink_ > 0) { CoinBigIndex ml = maxlink_; for (CoinBigIndex k = nelemsr; k < ml; ++k) link_[k] = k + 1; link_[ml - 1] = NO_LINK; } free_list_ = nelemsr; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 /* These are used to track the action of postsolve transforms during debugging. */ CoinFillN(cdone_, ncols1, PRESENT_IN_REDUCED); CoinZeroN(cdone_ + ncols1, ncols0_in - ncols1); CoinFillN(rdone_, nrows1, PRESENT_IN_REDUCED); CoinZeroN(rdone_ + nrows1, nrows0_in - nrows1); #endif } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiColCut.cpp0000644000175000017500000000676113414504051015745 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "OsiColCut.hpp" #include #include #include //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiColCut::OsiColCut() : OsiCut() , lbs_() , ubs_() { // nothing to do here } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiColCut::OsiColCut(const OsiColCut &source) : OsiCut(source) , lbs_(source.lbs_) , ubs_(source.ubs_) { // Nothing to do here } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiColCut *OsiColCut::clone() const { return (new OsiColCut(*this)); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiColCut::~OsiColCut() { // Nothing to do here } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiColCut & OsiColCut::operator=(const OsiColCut &rhs) { if (this != &rhs) { OsiCut::operator=(rhs); lbs_ = rhs.lbs_; ubs_ = rhs.ubs_; } return *this; } //---------------------------------------------------------------- // Print //------------------------------------------------------------------- void OsiColCut::print() const { const CoinPackedVector &cutLbs = lbs(); const CoinPackedVector &cutUbs = ubs(); int i; std::cout << "Column cut has " << cutLbs.getNumElements() << " lower bound cuts and " << cutUbs.getNumElements() << " upper bound cuts" << std::endl; for (i = 0; i < cutLbs.getNumElements(); i++) { int colIndx = cutLbs.getIndices()[i]; double newLb = cutLbs.getElements()[i]; std::cout << "[ x" << colIndx << " >= " << newLb << "] "; } for (i = 0; i < cutUbs.getNumElements(); i++) { int colIndx = cutUbs.getIndices()[i]; double newUb = cutUbs.getElements()[i]; std::cout << "[ x" << colIndx << " <= " << newUb << "] "; } std::cout << std::endl; } /* Returns infeasibility of the cut with respect to solution passed in i.e. is positive if cuts off that solution. solution is getNumCols() long.. */ double OsiColCut::violated(const double *solution) const { const CoinPackedVector &cutLbs = lbs(); const CoinPackedVector &cutUbs = ubs(); double sum = 0.0; int i; const int *column = cutLbs.getIndices(); int number = cutLbs.getNumElements(); const double *bound = cutLbs.getElements(); for (i = 0; i < number; i++) { int colIndx = column[i]; double newLb = bound[i]; if (newLb > solution[colIndx]) sum += newLb - solution[colIndx]; } column = cutUbs.getIndices(); number = cutUbs.getNumElements(); bound = cutUbs.getElements(); for (i = 0; i < number; i++) { int colIndx = column[i]; double newUb = bound[i]; if (newUb < solution[colIndx]) sum += solution[colIndx] - newUb; } return sum; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiCollections.hpp0000644000175000017500000000157013414504051017030 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiCollections_H #define OsiCollections_H #include //Forward declarations class OsiColCut; class OsiRowCut; class OsiCut; /* Collection Classes */ /**@name Typedefs for Standard Template Library collections of Osi Objects. */ //@{ /// Vector of int typedef std::vector< int > OsiVectorInt; /// Vector of double typedef std::vector< double > OsiVectorDouble; /// Vector of OsiColCut pointers typedef std::vector< OsiColCut * > OsiVectorColCutPtr; /// Vector of OsiRowCut pointers typedef std::vector< OsiRowCut * > OsiVectorRowCutPtr; /// Vector of OsiCut pointers typedef std::vector< OsiCut * > OsiVectorCutPtr; //@} #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiSolverBranch.cpp0000644000175000017500000003450013414504051017134 0ustar sudipsudip// Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinHelperFunctions.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiConfig.h" #include "CoinFinite.hpp" #include "OsiSolverInterface.hpp" #include "OsiSolverBranch.hpp" #include #include #include //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiSolverBranch::OsiSolverBranch() : indices_(NULL) , bound_(NULL) { memset(start_, 0, sizeof(start_)); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiSolverBranch::OsiSolverBranch(const OsiSolverBranch &rhs) { memcpy(start_, rhs.start_, sizeof(start_)); int size = start_[4]; if (size) { indices_ = CoinCopyOfArray(rhs.indices_, size); bound_ = CoinCopyOfArray(rhs.bound_, size); } else { indices_ = NULL; bound_ = NULL; } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiSolverBranch::~OsiSolverBranch() { delete[] indices_; delete[] bound_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiSolverBranch & OsiSolverBranch::operator=(const OsiSolverBranch &rhs) { if (this != &rhs) { delete[] indices_; delete[] bound_; memcpy(start_, rhs.start_, sizeof(start_)); int size = start_[4]; if (size) { indices_ = CoinCopyOfArray(rhs.indices_, size); bound_ = CoinCopyOfArray(rhs.bound_, size); } else { indices_ = NULL; bound_ = NULL; } } return *this; } //----------------------------------------------------------------------------- // add simple branch //----------------------------------------------------------------------------- void OsiSolverBranch::addBranch(int iColumn, double value) { delete[] indices_; delete[] bound_; indices_ = new int[2]; bound_ = new double[2]; indices_[0] = iColumn; indices_[1] = iColumn; start_[0] = 0; start_[1] = 0; start_[2] = 1; bound_[0] = floor(value); start_[3] = 2; bound_[1] = ceil(value); start_[4] = 2; assert(bound_[0] != bound_[1]); } //----------------------------------------------------------------------------- // Add bounds - way =-1 is first , +1 is second //----------------------------------------------------------------------------- void OsiSolverBranch::addBranch(int way, int numberTighterLower, const int *whichLower, const double *newLower, int numberTighterUpper, const int *whichUpper, const double *newUpper) { assert(way == -1 || way == 1); int numberNew = numberTighterLower + numberTighterUpper; int base = way + 1; // will be 0 or 2 int numberNow = start_[4 - base] - start_[2 - base]; int *tempI = new int[numberNow + numberNew]; double *tempD = new double[numberNow + numberNew]; int putNew = (way == -1) ? 0 : start_[2]; int putNow = (way == -1) ? numberNew : 0; memcpy(tempI + putNow, indices_ + start_[2 - base], numberNow * sizeof(int)); memcpy(tempD + putNow, bound_ + start_[2 - base], numberNow * sizeof(double)); memcpy(tempI + putNew, whichLower, numberTighterLower * sizeof(int)); memcpy(tempD + putNew, newLower, numberTighterLower * sizeof(double)); putNew += numberTighterLower; memcpy(tempI + putNew, whichUpper, numberTighterUpper * sizeof(int)); memcpy(tempD + putNew, newUpper, numberTighterUpper * sizeof(double)); delete[] indices_; indices_ = tempI; delete[] bound_; bound_ = tempD; int numberOldLower = start_[3 - base] - start_[2 - base]; int numberOldUpper = start_[4 - base] - start_[3 - base]; start_[0] = 0; if (way == -1) { start_[1] = numberTighterLower; start_[2] = start_[1] + numberTighterUpper; start_[3] = start_[2] + numberOldLower; start_[4] = start_[3] + numberOldUpper; } else { start_[1] = numberOldLower; start_[2] = start_[1] + numberOldUpper; start_[3] = start_[2] + numberTighterLower; start_[4] = start_[3] + numberTighterUpper; } } //----------------------------------------------------------------------------- // Add bounds - way =-1 is first , +1 is second //----------------------------------------------------------------------------- void OsiSolverBranch::addBranch(int way, int numberColumns, const double *oldLower, const double *newLower2, const double *oldUpper, const double *newUpper2) { assert(way == -1 || way == 1); // find int i; int *whichLower = new int[numberColumns]; double *newLower = new double[numberColumns]; int numberTighterLower = 0; for (i = 0; i < numberColumns; i++) { if (newLower2[i] > oldLower[i]) { whichLower[numberTighterLower] = i; newLower[numberTighterLower++] = newLower2[i]; } } int *whichUpper = new int[numberColumns]; double *newUpper = new double[numberColumns]; int numberTighterUpper = 0; for (i = 0; i < numberColumns; i++) { if (newUpper2[i] < oldUpper[i]) { whichUpper[numberTighterUpper] = i; newUpper[numberTighterUpper++] = newUpper2[i]; } } int numberNew = numberTighterLower + numberTighterUpper; int base = way + 1; // will be 0 or 2 int numberNow = start_[4 - base] - start_[2 - base]; int *tempI = new int[numberNow + numberNew]; double *tempD = new double[numberNow + numberNew]; int putNew = (way == -1) ? 0 : start_[2]; int putNow = (way == -1) ? numberNew : 0; memcpy(tempI + putNow, indices_ + start_[2 - base], numberNow * sizeof(int)); memcpy(tempD + putNow, bound_ + start_[2 - base], numberNow * sizeof(double)); memcpy(tempI + putNew, whichLower, numberTighterLower * sizeof(int)); memcpy(tempD + putNew, newLower, numberTighterLower * sizeof(double)); putNew += numberTighterLower; memcpy(tempI + putNew, whichUpper, numberTighterUpper * sizeof(int)); memcpy(tempD + putNew, newUpper, numberTighterUpper * sizeof(double)); delete[] indices_; indices_ = tempI; delete[] bound_; bound_ = tempD; int numberOldLower = start_[3 - base] - start_[2 - base]; int numberOldUpper = start_[4 - base] - start_[3 - base]; start_[0] = 0; if (way == -1) { start_[1] = numberTighterLower; start_[2] = start_[1] + numberTighterUpper; start_[3] = start_[2] + numberOldLower; start_[4] = start_[3] + numberOldUpper; } else { start_[1] = numberOldLower; start_[2] = start_[1] + numberOldUpper; start_[3] = start_[2] + numberTighterLower; start_[4] = start_[3] + numberTighterUpper; } delete[] whichLower; delete[] newLower; delete[] whichUpper; delete[] newUpper; } // Apply bounds void OsiSolverBranch::applyBounds(OsiSolverInterface &solver, int way) const { int base = way + 1; assert(way == -1 || way == 1); int numberColumns = solver.getNumCols(); const double *columnLower = solver.getColLower(); int i; for (i = start_[base]; i < start_[base + 1]; i++) { int iColumn = indices_[i]; if (iColumn < numberColumns) { double value = CoinMax(bound_[i], columnLower[iColumn]); solver.setColLower(iColumn, value); } else { int iRow = iColumn - numberColumns; const double *rowLower = solver.getRowLower(); double value = CoinMax(bound_[i], rowLower[iRow]); solver.setRowLower(iRow, value); } } const double *columnUpper = solver.getColUpper(); for (i = start_[base + 1]; i < start_[base + 2]; i++) { int iColumn = indices_[i]; if (iColumn < numberColumns) { double value = CoinMin(bound_[i], columnUpper[iColumn]); solver.setColUpper(iColumn, value); } else { int iRow = iColumn - numberColumns; const double *rowUpper = solver.getRowUpper(); double value = CoinMin(bound_[i], rowUpper[iRow]); solver.setRowUpper(iRow, value); } } } // Returns true if current solution satsifies one side of branch bool OsiSolverBranch::feasibleOneWay(const OsiSolverInterface &solver) const { bool feasible = false; int numberColumns = solver.getNumCols(); const double *columnLower = solver.getColLower(); const double *columnUpper = solver.getColUpper(); const double *columnSolution = solver.getColSolution(); double primalTolerance; solver.getDblParam(OsiPrimalTolerance, primalTolerance); for (int base = 0; base < 4; base += 2) { feasible = true; int i; for (i = start_[base]; i < start_[base + 1]; i++) { int iColumn = indices_[i]; if (iColumn < numberColumns) { double value = CoinMax(bound_[i], columnLower[iColumn]); if (columnSolution[iColumn] < value - primalTolerance) { feasible = false; break; } } else { abort(); // do later (other stuff messed up anyway - e.g. CBC) } } if (!feasible) break; for (i = start_[base + 1]; i < start_[base + 2]; i++) { int iColumn = indices_[i]; if (iColumn < numberColumns) { double value = CoinMin(bound_[i], columnUpper[iColumn]); if (columnSolution[iColumn] > value + primalTolerance) { feasible = false; break; } } else { abort(); // do later (other stuff messed up anyway - e.g. CBC) } } if (feasible) break; // OK this way } return feasible; } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiSolverResult::OsiSolverResult() : objectiveValue_(COIN_DBL_MAX) , primalSolution_(NULL) , dualSolution_(NULL) { } //------------------------------------------------------------------- // Constructor from solver //------------------------------------------------------------------- OsiSolverResult::OsiSolverResult(const OsiSolverInterface &solver, const double *lowerBefore, const double *upperBefore) : objectiveValue_(COIN_DBL_MAX) , primalSolution_(NULL) , dualSolution_(NULL) { if (solver.isProvenOptimal() && !solver.isDualObjectiveLimitReached()) { objectiveValue_ = solver.getObjValue() * solver.getObjSense(); CoinWarmStartBasis *basis = dynamic_cast< CoinWarmStartBasis * >(solver.getWarmStart()); assert(basis); basis_ = *basis; delete basis; int numberRows = basis_.getNumArtificial(); int numberColumns = basis_.getNumStructural(); assert(numberColumns == solver.getNumCols()); assert(numberRows == solver.getNumRows()); primalSolution_ = CoinCopyOfArray(solver.getColSolution(), numberColumns); dualSolution_ = CoinCopyOfArray(solver.getRowPrice(), numberRows); fixed_.addBranch(-1, numberColumns, lowerBefore, solver.getColLower(), upperBefore, solver.getColUpper()); } } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiSolverResult::OsiSolverResult(const OsiSolverResult &rhs) { objectiveValue_ = rhs.objectiveValue_; basis_ = rhs.basis_; fixed_ = rhs.fixed_; int numberRows = basis_.getNumArtificial(); int numberColumns = basis_.getNumStructural(); if (numberColumns) { primalSolution_ = CoinCopyOfArray(rhs.primalSolution_, numberColumns); dualSolution_ = CoinCopyOfArray(rhs.dualSolution_, numberRows); } else { primalSolution_ = NULL; dualSolution_ = NULL; } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiSolverResult::~OsiSolverResult() { delete[] primalSolution_; delete[] dualSolution_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiSolverResult & OsiSolverResult::operator=(const OsiSolverResult &rhs) { if (this != &rhs) { delete[] primalSolution_; delete[] dualSolution_; objectiveValue_ = rhs.objectiveValue_; basis_ = rhs.basis_; fixed_ = rhs.fixed_; int numberRows = basis_.getNumArtificial(); int numberColumns = basis_.getNumStructural(); if (numberColumns) { primalSolution_ = CoinCopyOfArray(rhs.primalSolution_, numberColumns); dualSolution_ = CoinCopyOfArray(rhs.dualSolution_, numberRows); } else { primalSolution_ = NULL; dualSolution_ = NULL; } } return *this; } // Create result void OsiSolverResult::createResult(const OsiSolverInterface &solver, const double *lowerBefore, const double *upperBefore) { delete[] primalSolution_; delete[] dualSolution_; if (solver.isProvenOptimal() && !solver.isDualObjectiveLimitReached()) { objectiveValue_ = solver.getObjValue() * solver.getObjSense(); CoinWarmStartBasis *basis = dynamic_cast< CoinWarmStartBasis * >(solver.getWarmStart()); assert(basis); basis_ = *basis; int numberRows = basis_.getNumArtificial(); int numberColumns = basis_.getNumStructural(); assert(numberColumns == solver.getNumCols()); assert(numberRows == solver.getNumRows()); primalSolution_ = CoinCopyOfArray(solver.getColSolution(), numberColumns); dualSolution_ = CoinCopyOfArray(solver.getRowPrice(), numberRows); fixed_.addBranch(-1, numberColumns, lowerBefore, solver.getColLower(), upperBefore, solver.getColUpper()); } else { // infeasible objectiveValue_ = COIN_DBL_MAX; basis_ = CoinWarmStartBasis(); ; primalSolution_ = NULL; dualSolution_ = NULL; } } // Restore result void OsiSolverResult::restoreResult(OsiSolverInterface &solver) const { //solver.setObjValue(objectiveValue_)*solver.getObjSense(); solver.setWarmStart(&basis_); solver.setColSolution(primalSolution_); solver.setRowPrice(dualSolution_); fixed_.applyBounds(solver, -1); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiAuxInfo.cpp0000644000175000017500000001101313414504051016107 0ustar sudipsudip// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include "CoinPragma.hpp" #include "CoinHelperFunctions.hpp" #include "OsiSolverInterface.hpp" #include "OsiAuxInfo.hpp" // Default Constructor OsiAuxInfo::OsiAuxInfo(void *appData) : appData_(appData) { } // Destructor OsiAuxInfo::~OsiAuxInfo() { } // Clone OsiAuxInfo * OsiAuxInfo::clone() const { return new OsiAuxInfo(*this); } // Copy constructor OsiAuxInfo::OsiAuxInfo(const OsiAuxInfo &rhs) : appData_(rhs.appData_) { } OsiAuxInfo & OsiAuxInfo::operator=(const OsiAuxInfo &rhs) { if (this != &rhs) { appData_ = rhs.appData_; } return *this; } // Default Constructor OsiBabSolver::OsiBabSolver(int solverType) : OsiAuxInfo() , bestObjectiveValue_(1.0e100) , mipBound_(-1.0e100) , solver_(NULL) , bestSolution_(NULL) , beforeLower_(NULL) , beforeUpper_(NULL) , extraInfo_(NULL) , solverType_(solverType) , sizeSolution_(0) , extraCharacteristics_(0) { } // Destructor OsiBabSolver::~OsiBabSolver() { delete[] bestSolution_; } // Clone OsiAuxInfo * OsiBabSolver::clone() const { return new OsiBabSolver(*this); } // Copy constructor OsiBabSolver::OsiBabSolver(const OsiBabSolver &rhs) : OsiAuxInfo(rhs) , bestObjectiveValue_(rhs.bestObjectiveValue_) , mipBound_(rhs.mipBound_) , solver_(rhs.solver_) , bestSolution_(NULL) , beforeLower_(rhs.beforeLower_) , beforeUpper_(rhs.beforeUpper_) , extraInfo_(rhs.extraInfo_) , solverType_(rhs.solverType_) , sizeSolution_(rhs.sizeSolution_) , extraCharacteristics_(rhs.extraCharacteristics_) { if (rhs.bestSolution_) { assert(solver_); bestSolution_ = CoinCopyOfArray(rhs.bestSolution_, sizeSolution_); } } OsiBabSolver & OsiBabSolver::operator=(const OsiBabSolver &rhs) { if (this != &rhs) { OsiAuxInfo::operator=(rhs); delete[] bestSolution_; solver_ = rhs.solver_; solverType_ = rhs.solverType_; bestObjectiveValue_ = rhs.bestObjectiveValue_; bestSolution_ = NULL; mipBound_ = rhs.mipBound_; sizeSolution_ = rhs.sizeSolution_; extraCharacteristics_ = rhs.extraCharacteristics_; beforeLower_ = rhs.beforeLower_; beforeUpper_ = rhs.beforeUpper_; extraInfo_ = rhs.extraInfo_; if (rhs.bestSolution_) { assert(solver_); bestSolution_ = CoinCopyOfArray(rhs.bestSolution_, sizeSolution_); } } return *this; } // Returns 1 if solution, 0 if not int OsiBabSolver::solution(double &solutionValue, double *betterSolution, int numberColumns) { if (!solver_) return 0; //printf("getSol %x solution_address %x - value %g\n", // this,bestSolution_,bestObjectiveValue_); if (bestObjectiveValue_ < solutionValue && bestSolution_) { // new solution memcpy(betterSolution, bestSolution_, CoinMin(numberColumns, sizeSolution_) * sizeof(double)); if (sizeSolution_ < numberColumns) CoinZeroN(betterSolution + sizeSolution_, numberColumns - sizeSolution_); solutionValue = bestObjectiveValue_; // free up //delete [] bestSolution_; //bestSolution_=NULL; //bestObjectiveValue_=1.0e100; return 1; } else { return 0; } } bool OsiBabSolver::hasSolution(double &solutionValue, double *solution) { if (!bestSolution_) return false; int numberColumns = solver_->getNumCols(); memcpy(solution, bestSolution_, numberColumns * sizeof(double)); solutionValue = bestObjectiveValue_; return true; } // set solution void OsiBabSolver::setSolution(const double *solution, int numberColumns, double objectiveValue) { assert(solver_); // just in case size has changed delete[] bestSolution_; sizeSolution_ = CoinMin(solver_->getNumCols(), numberColumns); bestSolution_ = new double[sizeSolution_]; CoinZeroN(bestSolution_, sizeSolution_); CoinMemcpyN(solution, CoinMin(sizeSolution_, numberColumns), bestSolution_); bestObjectiveValue_ = objectiveValue * solver_->getObjSense(); } // Get objective (well mip bound) double OsiBabSolver::mipBound() const { assert(solver_); if (solverType_ != 3) return solver_->getObjSense() * solver_->getObjValue(); else return mipBound_; } // Returns true if node feasible bool OsiBabSolver::mipFeasible() const { assert(solver_); if (solverType_ == 0) return true; else if (solverType_ != 3) return solver_->isProvenOptimal(); else return mipBound_ < 1.0e50; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/Makefile.am0000644000175000017500000000460212243462564015434 0ustar sudipsudip# Copyright (C) 2010 Lou Hafer # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1942 2013-11-21 19:56:36Z stefan $ # Author: Lou Hafer SFU 2010-07-29 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsi # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in $libdir lib_LTLIBRARIES = libOsi.la # List all source files for this library, including headers libOsi_la_SOURCES = \ OsiConfig.h \ OsiAuxInfo.cpp OsiAuxInfo.hpp \ OsiBranchingObject.cpp OsiBranchingObject.hpp \ OsiChooseVariable.cpp OsiChooseVariable.hpp \ OsiColCut.cpp OsiColCut.hpp \ OsiCollections.hpp \ OsiCut.cpp OsiCut.hpp \ OsiCuts.cpp OsiCuts.hpp \ OsiNames.cpp \ OsiPresolve.cpp OsiPresolve.hpp \ OsiRowCut.cpp OsiRowCut.hpp \ OsiRowCutDebugger.cpp OsiRowCutDebugger.hpp \ OsiSolverBranch.cpp OsiSolverBranch.hpp \ OsiSolverInterface.cpp OsiSolverInterface.hpp \ OsiSolverParameters.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsi_la_LIBADD = $(OSILIB_LIBS) endif # This is for libtool libOsi_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags. AM_CPPFLAGS = $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation. # This "cygpath" stuff is necessary to compile with native compilers on Windows. DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'includedir/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ OsiAuxInfo.hpp \ OsiBranchingObject.hpp \ OsiChooseVariable.hpp \ OsiColCut.hpp \ OsiCollections.hpp \ OsiCut.hpp \ OsiCuts.hpp \ OsiPresolve.hpp \ OsiRowCut.hpp \ OsiRowCutDebugger.hpp \ OsiSolverBranch.hpp \ OsiSolverInterface.hpp \ OsiSolverParameters.hpp install-exec-local: $(install_sh_DATA) config_osi.h $(DESTDIR)$(includecoindir)/OsiConfig.h uninstall-local: rm -f $(DESTDIR)$(includecoindir)/OsiConfig.h Vol-1.5.4/Osi/src/Osi/OsiCut.hpp0000644000175000017500000001657713414504051015322 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiCut_H #define OsiCut_H #include "OsiCollections.hpp" #include "OsiSolverInterface.hpp" /** Base Class for cut. The Base cut class contains:
  • a measure of the cut's effectivness
*/ /* COIN_NOTEST_DUPLICATE is rooted in CoinUtils. Check there before you meddle here. */ #ifdef COIN_FAST_CODE #ifndef COIN_NOTEST_DUPLICATE #define COIN_NOTEST_DUPLICATE #endif #endif #ifndef COIN_NOTEST_DUPLICATE #define COIN_DEFAULT_VALUE_FOR_DUPLICATE true #else #define COIN_DEFAULT_VALUE_FOR_DUPLICATE false #endif class OsiCut { public: //------------------------------------------------------------------- /**@name Effectiveness */ //@{ /// Set effectiveness inline void setEffectiveness(double e); /// Get effectiveness inline double effectiveness() const; //@} /**@name GloballyValid */ //@{ /// Set globallyValid (nonzero true) inline void setGloballyValid(bool trueFalse) { globallyValid_ = trueFalse ? 1 : 0; } inline void setGloballyValid() { globallyValid_ = 1; } inline void setNotGloballyValid() { globallyValid_ = 0; } /// Get globallyValid inline bool globallyValid() const { return globallyValid_ != 0; } /// Set globallyValid as integer (nonzero true) inline void setGloballyValidAsInteger(int trueFalse) { globallyValid_ = trueFalse; } /// Get globallyValid inline int globallyValidAsInteger() const { return globallyValid_; } //@} /**@name Debug stuff */ //@{ /// Print cuts in collection virtual void print() const {} //@} #if 0 / **@name Times used */ / /@{ / // Set times used inline void setTimesUsed( int t ); / // Increment times used inline void incrementTimesUsed(); / // Get times used inline int timesUsed() const; / /@} / **@name Times tested */ / /@{ / // Set times tested inline void setTimesTested( int t ); / // Increment times tested inline void incrementTimesTested(); / // Get times tested inline int timesTested() const; / /@} #endif //---------------------------------------------------------------- /**@name Comparison operators */ //@{ ///equal. 2 cuts are equal if there effectiveness are equal inline virtual bool operator==(const OsiCut &rhs) const; /// not equal inline virtual bool operator!=(const OsiCut &rhs) const; /// less than. True if this.effectiveness < rhs.effectiveness inline virtual bool operator<(const OsiCut &rhs) const; /// less than. True if this.effectiveness > rhs.effectiveness inline virtual bool operator>(const OsiCut &rhs) const; //@} //---------------------------------------------------------------- // consistent() - returns true if the cut is consistent with repect to itself. // This might include checks to ensure that a packed vector // itself does not have a negative index. // consistent(const OsiSolverInterface& si) - returns true if cut is consistent with // respect to the solver interface's model. This might include a check to // make sure a column index is not greater than the number // of columns in the problem. // infeasible(const OsiSolverInterface& si) - returns true if the cut is infeasible // "with respect to itself". This might include a check to ensure // the lower bound is greater than the upper bound, or if the // cut simply replaces bounds that the new bounds are feasible with // respect to the old bounds. //----------------------------------------------------------------- /**@name Sanity checks on cut */ //@{ /** Returns true if the cut is consistent with respect to itself, without considering any data in the model. For example, it might check to ensure that a column index is not negative. */ inline virtual bool consistent() const = 0; /** Returns true if cut is consistent when considering the solver interface's model. For example, it might check to ensure that a column index is not greater than the number of columns in the model. Assumes consistent() is true. */ inline virtual bool consistent(const OsiSolverInterface &si) const = 0; /** Returns true if the cut is infeasible "with respect to itself" and cannot be satisfied. This method does NOT check whether adding the cut to the solver interface's model will make the -model- infeasble. A cut which returns !infeasible(si) may very well make the model infeasible. (Of course, adding a cut with returns infeasible(si) will make the model infeasible.) The "with respect to itself" is in quotes becaues in the case where the cut simply replaces existing bounds, it may make sense to test infeasibility with respect to the current bounds held in the solver interface's model. For example, if the cut has a single variable in it, it might check that the maximum of new and existing lower bounds is greater than the minium of the new and existing upper bounds. Assumes that consistent(si) is true.
Infeasible cuts can be a useful mechanism for a cut generator to inform the solver interface that its detected infeasibility of the problem. */ inline virtual bool infeasible(const OsiSolverInterface &si) const = 0; /** Returns infeasibility of the cut with respect to solution passed in i.e. is positive if cuts off that solution. solution is getNumCols() long.. */ virtual double violated(const double *solution) const = 0; //@} protected: /**@name Constructors and destructors */ //@{ /// Default Constructor OsiCut(); /// Copy constructor OsiCut(const OsiCut &); /// Assignment operator OsiCut &operator=(const OsiCut &rhs); /// Destructor virtual ~OsiCut(); //@} private: /**@name Private member data */ //@{ /// Effectiveness double effectiveness_; /// If cut has global validity i.e. can be used anywhere in tree int globallyValid_; #if 0 /// Times used int timesUsed_; /// Times tested int timesTested_; #endif //@} }; //------------------------------------------------------------------- // Set/Get member data //------------------------------------------------------------------- void OsiCut::setEffectiveness(double e) { effectiveness_ = e; } double OsiCut::effectiveness() const { return effectiveness_; } #if 0 void OsiCut::setTimesUsed( int t ) { timesUsed_=t; } void OsiCut::incrementTimesUsed() { timesUsed_++; } int OsiCut::timesUsed() const { return timesUsed_; } void OsiCut::setTimesTested( int t ) { timesTested_=t; } void OsiCut::incrementTimesTested() { timesTested_++; } int OsiCut::timesTested() const{ return timesTested_; } #endif //---------------------------------------------------------------- // == operator //------------------------------------------------------------------- bool OsiCut::operator==(const OsiCut &rhs) const { return effectiveness() == rhs.effectiveness(); } bool OsiCut::operator!=(const OsiCut &rhs) const { return !((*this) == rhs); } bool OsiCut::operator<(const OsiCut &rhs) const { return effectiveness() < rhs.effectiveness(); } bool OsiCut::operator>(const OsiCut &rhs) const { return effectiveness() > rhs.effectiveness(); } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiAuxInfo.hpp0000644000175000017500000002065313414504051016126 0ustar sudipsudip// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiAuxInfo_H #define OsiAuxInfo_H class OsiSolverInterface; //############################################################################# /** This class allows for a more structured use of algorithmic tweaking to an OsiSolverInterface. It is designed to replace the simple use of appData_ pointer. This has been done to make it easier to use NonLinear solvers and other exotic beasts in a branch and bound mode. After this class definition there is one for a derived class for just such a purpose. */ class OsiAuxInfo { public: // Default Constructor OsiAuxInfo(void *appData = NULL); // Copy Constructor OsiAuxInfo(const OsiAuxInfo &rhs); // Destructor virtual ~OsiAuxInfo(); /// Clone virtual OsiAuxInfo *clone() const; /// Assignment operator OsiAuxInfo &operator=(const OsiAuxInfo &rhs); /// Get application data inline void *getApplicationData() const { return appData_; } protected: /// Pointer to user-defined data structure void *appData_; }; //############################################################################# /** This class allows for the use of more exotic solvers e.g. Non-Linear or Volume. You can derive from this although at present I can't see the need. */ class OsiBabSolver : public OsiAuxInfo { public: // Default Constructor OsiBabSolver(int solverType = 0); // Copy Constructor OsiBabSolver(const OsiBabSolver &rhs); // Destructor virtual ~OsiBabSolver(); /// Clone virtual OsiAuxInfo *clone() const; /// Assignment operator OsiBabSolver &operator=(const OsiBabSolver &rhs); /// Update solver inline void setSolver(const OsiSolverInterface *solver) { solver_ = solver; } /// Update solver inline void setSolver(const OsiSolverInterface &solver) { solver_ = &solver; } /** returns 0 if no heuristic solution, 1 if valid solution with better objective value than one passed in Sets solution values if good, sets objective value numberColumns is size of newSolution */ int solution(double &objectiveValue, double *newSolution, int numberColumns); /** Set solution and objective value. Number of columns and optimization direction taken from current solver. Size of solution is numberColumns (may be padded or truncated in function) */ void setSolution(const double *solution, int numberColumns, double objectiveValue); /** returns true if the object stores a solution, false otherwise. If there is a solution then solutionValue and solution will be filled out as well. In that case the user needs to allocate solution to be a big enough array. */ bool hasSolution(double &solutionValue, double *solution); /** Sets solver type 0 - normal LP solver 1 - DW - may also return heuristic solutions 2 - NLP solver or similar - can't compute objective value just from solution check solver to see if feasible and what objective value is - may also return heuristic solution 3 - NLP solver or similar - can't compute objective value just from solution check this (rather than solver) to see if feasible and what objective value is. Using Outer Approximation so called lp based - may also return heuristic solution 4 - normal solver but cuts are needed for integral solution */ inline void setSolverType(int value) { solverType_ = value; } /** gets solver type 0 - normal LP solver 1 - DW - may also return heuristic solutions 2 - NLP solver or similar - can't compute objective value just from solution check this (rather than solver) to see if feasible and what objective value is - may also return heuristic solution 3 - NLP solver or similar - can't compute objective value just from solution check this (rather than solver) to see if feasible and what objective value is. Using Outer Approximation so called lp based - may also return heuristic solution 4 - normal solver but cuts are needed for integral solution */ inline int solverType() const { return solverType_; } /** Return true if getting solution may add cuts so hot start etc will be obsolete */ inline bool solutionAddsCuts() const { return solverType_ == 3; } /// Return true if we should try cuts at root even if looks satisfied inline bool alwaysTryCutsAtRootNode() const { return solverType_ == 4; } /** Returns true if can use solver objective or feasible values, otherwise use mipBound etc */ inline bool solverAccurate() const { return solverType_ == 0 || solverType_ == 2 || solverType_ == 4; } /// Returns true if can use reduced costs for fixing inline bool reducedCostsAccurate() const { return solverType_ == 0 || solverType_ == 4; } /// Get objective (well mip bound) double mipBound() const; /// Returns true if node feasible bool mipFeasible() const; /// Set mip bound (only used for some solvers) inline void setMipBound(double value) { mipBound_ = value; } /// Get objective value of saved solution inline double bestObjectiveValue() const { return bestObjectiveValue_; } /// Says whether we want to try cuts at all inline bool tryCuts() const { return solverType_ != 2; } /// Says whether we have a warm start (so can do strong branching) inline bool warmStart() const { return solverType_ != 2; } /** Get bit mask for odd actions of solvers 1 - solution or bound arrays may move in mysterious ways e.g. cplex 2 - solver may want bounds before branch */ inline int extraCharacteristics() const { return extraCharacteristics_; } /** Set bit mask for odd actions of solvers 1 - solution or bound arrays may move in mysterious ways e.g. cplex 2 - solver may want bounds before branch */ inline void setExtraCharacteristics(int value) { extraCharacteristics_ = value; } /// Pointer to lower bounds before branch (only if extraCharacteristics set) inline const double *beforeLower() const { return beforeLower_; } /// Set pointer to lower bounds before branch (only if extraCharacteristics set) inline void setBeforeLower(const double *array) { beforeLower_ = array; } /// Pointer to upper bounds before branch (only if extraCharacteristics set) inline const double *beforeUpper() const { return beforeUpper_; } /// Set pointer to upper bounds before branch (only if extraCharacteristics set) inline void setBeforeUpper(const double *array) { beforeUpper_ = array; } /// Set pointer to extra stuff inline void setExtraPointer(void *extraInfo) { extraInfo_ = extraInfo; } /// get pointer to extra info inline void *getExtraPointer() const { return extraInfo_; } protected: /// Objective value of best solution (if there is one) (minimization) double bestObjectiveValue_; /// Current lower bound on solution ( if > 1.0e50 infeasible) double mipBound_; /// Solver to use for getting/setting solutions etc const OsiSolverInterface *solver_; /// Best integer feasible solution double *bestSolution_; /// Pointer to lower bounds before branch (only if extraCharacteristics set) const double *beforeLower_; /// Pointer to upper bounds before branch (only if extraCharacteristics set) const double *beforeUpper_; /// Pointer to extra info void *extraInfo_; /** Solver type 0 - normal LP solver 1 - DW - may also return heuristic solutions 2 - NLP solver or similar - can't compute objective value just from solution check this (rather than solver) to see if feasible and what objective value is - may also return heuristic solution 3 - NLP solver or similar - can't compute objective value just from solution check this (rather than solver) to see if feasible and what objective value is. Using Outer Approximation so called lp based - may also return heuristic solution */ int solverType_; /// Size of solution int sizeSolution_; /** Bit mask for odd actions of solvers 1 - solution or bound arrays may move in mysterious ways e.g. cplex 2 - solver may want bounds before branch */ int extraCharacteristics_; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiCuts.hpp0000644000175000017500000003250613414504051015473 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiCuts_H #define OsiCuts_H #include "CoinPragma.hpp" #include #include #include "OsiCollections.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinFloatEqual.hpp" /** Collections of row cuts and column cuts */ class OsiCuts { friend void OsiCutsUnitTest(); public: /**@name Iterator classes */ //@{ /** Iterator This is a class for iterating over the collection of cuts. */ class iterator { friend class OsiCuts; public: iterator(OsiCuts &cuts); iterator(const iterator &src); iterator &operator=(const iterator &rhs); ~iterator(); OsiCut *operator*() const { return cutP_; } iterator operator++(); iterator operator++(int) { iterator temp = *this; ++*this; return temp; } bool operator==(const iterator &it) const { return (colCutIndex_ + rowCutIndex_) == (it.colCutIndex_ + it.rowCutIndex_); } bool operator!=(const iterator &it) const { return !((*this) == it); } bool operator<(const iterator &it) const { return (colCutIndex_ + rowCutIndex_) < (it.colCutIndex_ + it.rowCutIndex_); } private: iterator(); // *THINK* : how to inline these without sticking the code here (ugly...) iterator begin(); iterator end(); OsiCuts &cuts_; int rowCutIndex_; int colCutIndex_; OsiCut *cutP_; }; /** Const Iterator This is a class for iterating over the collection of cuts. */ class const_iterator { friend class OsiCuts; public: typedef std::forward_iterator_tag iterator_category; typedef OsiCut *value_type; typedef size_t difference_type; typedef OsiCut **pointer; typedef OsiCut *&reference; public: const_iterator(const OsiCuts &cuts); const_iterator(const const_iterator &src); const_iterator &operator=(const const_iterator &rhs); ~const_iterator(); const OsiCut *operator*() const { return cutP_; } const_iterator operator++(); const_iterator operator++(int) { const_iterator temp = *this; ++*this; return temp; } bool operator==(const const_iterator &it) const { return (colCutIndex_ + rowCutIndex_) == (it.colCutIndex_ + it.rowCutIndex_); } bool operator!=(const const_iterator &it) const { return !((*this) == it); } bool operator<(const const_iterator &it) const { return (colCutIndex_ + rowCutIndex_) < (it.colCutIndex_ + it.rowCutIndex_); } private: inline const_iterator(); // *THINK* : how to inline these without sticking the code here (ugly...) const_iterator begin(); const_iterator end(); const OsiCuts *cutsPtr_; int rowCutIndex_; int colCutIndex_; const OsiCut *cutP_; }; //@} //------------------------------------------------------------------- // // Cuts class definition begins here: // //------------------------------------------------------------------- /** \name Inserting a cut into collection */ //@{ /** \brief Insert a row cut */ inline void insert(const OsiRowCut &rc); /** \brief Insert a row cut unless it is a duplicate - cut may get sorted. Duplicate is defined as CoinAbsFltEq says same*/ void insertIfNotDuplicate(OsiRowCut &rc, CoinAbsFltEq treatAsSame = CoinAbsFltEq(1.0e-12)); /** \brief Insert a row cut unless it is a duplicate - cut may get sorted. Duplicate is defined as CoinRelFltEq says same*/ void insertIfNotDuplicate(OsiRowCut &rc, CoinRelFltEq treatAsSame); /** \brief Insert a column cut */ inline void insert(const OsiColCut &cc); /** \brief Insert a row cut. The OsiCuts object takes control of the cut object. On return, \c rcPtr is NULL. */ inline void insert(OsiRowCut *&rcPtr); /** \brief Insert a column cut. The OsiCuts object takes control of the cut object. On return \c ccPtr is NULL. */ inline void insert(OsiColCut *&ccPtr); #if 0 inline void insert( OsiCut * & cPtr ); #endif /** \brief Insert a set of cuts */ inline void insert(const OsiCuts &cs); //@} /**@name Number of cuts in collection */ //@{ /// Number of row cuts in collection inline int sizeRowCuts() const; /// Number of column cuts in collection inline int sizeColCuts() const; /// Number of cuts in collection inline int sizeCuts() const; //@} /**@name Debug stuff */ //@{ /// Print cuts in collection inline void printCuts() const; //@} /**@name Get a cut from collection */ //@{ /// Get pointer to i'th row cut inline OsiRowCut *rowCutPtr(int i); /// Get const pointer to i'th row cut inline const OsiRowCut *rowCutPtr(int i) const; /// Get pointer to i'th column cut inline OsiColCut *colCutPtr(int i); /// Get const pointer to i'th column cut inline const OsiColCut *colCutPtr(int i) const; /// Get reference to i'th row cut inline OsiRowCut &rowCut(int i); /// Get const reference to i'th row cut inline const OsiRowCut &rowCut(int i) const; /// Get reference to i'th column cut inline OsiColCut &colCut(int i); /// Get const reference to i'th column cut inline const OsiColCut &colCut(int i) const; /// Get const pointer to the most effective cut inline const OsiCut *mostEffectiveCutPtr() const; /// Get pointer to the most effective cut inline OsiCut *mostEffectiveCutPtr(); //@} /**@name Deleting cut from collection */ //@{ /// Remove i'th row cut from collection inline void eraseRowCut(int i); /// Remove i'th column cut from collection inline void eraseColCut(int i); /// Get pointer to i'th row cut and remove ptr from collection inline OsiRowCut *rowCutPtrAndZap(int i); /*! \brief Clear all row cuts without deleting them Handy in case one wants to use CGL without managing cuts in one of the OSI containers. Client is ultimately responsible for deleting the data structures holding the row cuts. */ inline void dumpCuts(); /*! \brief Selective delete and clear for row cuts. Deletes the cuts specified in \p to_erase then clears remaining cuts without deleting them. A hybrid of eraseRowCut(int) and dumpCuts(). Client is ultimately responsible for deleting the data structures for row cuts not specified in \p to_erase. */ inline void eraseAndDumpCuts(const std::vector< int > to_erase); //@} /**@name Sorting collection */ //@{ /// Cuts with greatest effectiveness are first. inline void sort(); //@} /**@name Iterators Example of using an iterator to sum effectiveness of all cuts in the collection.
     double sumEff=0.0;
     for ( OsiCuts::iterator it=cuts.begin(); it!=cuts.end(); ++it )
           sumEff+= (*it)->effectiveness();
     
*/ //@{ /// Get iterator to beginning of collection inline iterator begin() { iterator it(*this); it.begin(); return it; } /// Get const iterator to beginning of collection inline const_iterator begin() const { const_iterator it(*this); it.begin(); return it; } /// Get iterator to end of collection inline iterator end() { iterator it(*this); it.end(); return it; } /// Get const iterator to end of collection inline const_iterator end() const { const_iterator it(*this); it.end(); return it; } //@} /**@name Constructors and destructors */ //@{ /// Default constructor OsiCuts(); /// Copy constructor OsiCuts(const OsiCuts &); /// Assignment operator OsiCuts &operator=(const OsiCuts &rhs); /// Destructor virtual ~OsiCuts(); //@} private: //*@name Function operator for sorting cuts by efectiveness */ //@{ class OsiCutCompare { public: /// Function for sorting cuts by effectiveness inline bool operator()(const OsiCut *c1P, const OsiCut *c2P) { return c1P->effectiveness() > c2P->effectiveness(); } }; //@} /**@name Private methods */ //@{ /// Copy internal data void gutsOfCopy(const OsiCuts &source); /// Delete internal data void gutsOfDestructor(); //@} /**@name Private member data */ //@{ /// Vector of row cuts pointers OsiVectorRowCutPtr rowCutPtrs_; /// Vector of column cuts pointers OsiVectorColCutPtr colCutPtrs_; //@} }; //------------------------------------------------------------------- // insert cuts into collection //------------------------------------------------------------------- void OsiCuts::insert(const OsiRowCut &rc) { OsiRowCut *newCutPtr = rc.clone(); //assert(dynamic_cast(newCutPtr) != NULL ); rowCutPtrs_.push_back(static_cast< OsiRowCut * >(newCutPtr)); } void OsiCuts::insert(const OsiColCut &cc) { OsiColCut *newCutPtr = cc.clone(); //assert(dynamic_cast(newCutPtr) != NULL ); colCutPtrs_.push_back(static_cast< OsiColCut * >(newCutPtr)); } void OsiCuts::insert(OsiRowCut *&rcPtr) { rowCutPtrs_.push_back(rcPtr); rcPtr = NULL; } void OsiCuts::insert(OsiColCut *&ccPtr) { colCutPtrs_.push_back(ccPtr); ccPtr = NULL; } #if 0 void OsiCuts::insert( OsiCut* & cPtr ) { OsiRowCut * rcPtr = dynamic_cast(cPtr); if ( rcPtr != NULL ) { insert( rcPtr ); cPtr = rcPtr; } else { OsiColCut * ccPtr = dynamic_cast(cPtr); assert( ccPtr != NULL ); insert( ccPtr ); cPtr = ccPtr; } } #endif // LANNEZ SEBASTIEN added Thu May 25 01:22:51 EDT 2006 void OsiCuts::insert(const OsiCuts &cs) { for (OsiCuts::const_iterator it = cs.begin(); it != cs.end(); it++) { const OsiRowCut *rCut = dynamic_cast< const OsiRowCut * >(*it); const OsiColCut *cCut = dynamic_cast< const OsiColCut * >(*it); assert(rCut || cCut); if (rCut) insert(*rCut); else insert(*cCut); } } //------------------------------------------------------------------- // sort //------------------------------------------------------------------- void OsiCuts::sort() { std::sort(colCutPtrs_.begin(), colCutPtrs_.end(), OsiCutCompare()); std::sort(rowCutPtrs_.begin(), rowCutPtrs_.end(), OsiCutCompare()); } //------------------------------------------------------------------- // Get number of in collections //------------------------------------------------------------------- int OsiCuts::sizeRowCuts() const { return static_cast< int >(rowCutPtrs_.size()); } int OsiCuts::sizeColCuts() const { return static_cast< int >(colCutPtrs_.size()); } int OsiCuts::sizeCuts() const { return static_cast< int >(sizeRowCuts() + sizeColCuts()); } //---------------------------------------------------------------- // Get i'th cut from the collection //---------------------------------------------------------------- const OsiRowCut *OsiCuts::rowCutPtr(int i) const { return rowCutPtrs_[i]; } const OsiColCut *OsiCuts::colCutPtr(int i) const { return colCutPtrs_[i]; } OsiRowCut *OsiCuts::rowCutPtr(int i) { return rowCutPtrs_[i]; } OsiColCut *OsiCuts::colCutPtr(int i) { return colCutPtrs_[i]; } const OsiRowCut &OsiCuts::rowCut(int i) const { return *rowCutPtr(i); } const OsiColCut &OsiCuts::colCut(int i) const { return *colCutPtr(i); } OsiRowCut &OsiCuts::rowCut(int i) { return *rowCutPtr(i); } OsiColCut &OsiCuts::colCut(int i) { return *colCutPtr(i); } //---------------------------------------------------------------- // Get most effective cut from collection //---------------------------------------------------------------- const OsiCut *OsiCuts::mostEffectiveCutPtr() const { const_iterator b = begin(); const_iterator e = end(); return *(std::min_element(b, e, OsiCutCompare())); } OsiCut *OsiCuts::mostEffectiveCutPtr() { iterator b = begin(); iterator e = end(); //return *(std::min_element(b,e,OsiCutCompare())); OsiCut *retVal = NULL; double maxEff = COIN_DBL_MIN; for (OsiCuts::iterator it = b; it != e; ++it) { if (maxEff < (*it)->effectiveness()) { maxEff = (*it)->effectiveness(); retVal = *it; } } return retVal; } //---------------------------------------------------------------- // Print all cuts //---------------------------------------------------------------- void OsiCuts::printCuts() const { // do all column cuts first int i; int numberColCuts = sizeColCuts(); for (i = 0; i < numberColCuts; i++) { const OsiColCut *cut = colCutPtr(i); cut->print(); } int numberRowCuts = sizeRowCuts(); for (i = 0; i < numberRowCuts; i++) { const OsiRowCut *cut = rowCutPtr(i); cut->print(); } } //---------------------------------------------------------------- // Erase i'th cut from the collection //---------------------------------------------------------------- void OsiCuts::eraseRowCut(int i) { delete rowCutPtrs_[i]; rowCutPtrs_.erase(rowCutPtrs_.begin() + i); } void OsiCuts::eraseColCut(int i) { delete colCutPtrs_[i]; colCutPtrs_.erase(colCutPtrs_.begin() + i); } /// Get pointer to i'th row cut and remove ptr from collection OsiRowCut * OsiCuts::rowCutPtrAndZap(int i) { OsiRowCut *cut = rowCutPtrs_[i]; rowCutPtrs_[i] = NULL; rowCutPtrs_.erase(rowCutPtrs_.begin() + i); return cut; } void OsiCuts::dumpCuts() { rowCutPtrs_.clear(); } void OsiCuts::eraseAndDumpCuts(const std::vector< int > to_erase) { for (unsigned i = 0; i < to_erase.size(); i++) { delete rowCutPtrs_[to_erase[i]]; } rowCutPtrs_.clear(); } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/config_osi_default.h0000644000175000017500000000110713434065666017376 0ustar sudipsudip /***************************************************************************/ /* HERE DEFINE THE PROJECT SPECIFIC PUBLIC MACROS */ /* These are only in effect in a setting that doesn't use configure */ /***************************************************************************/ /* Version number of project */ #define OSI_VERSION "0.108.0" /* Major Version number of project */ #define OSI_VERSION_MAJOR 0 /* Minor Version number of project */ #define OSI_VERSION_MINOR 108 /* Release Version number of project */ #define OSI_VERSION_RELEASE 0 Vol-1.5.4/Osi/src/Osi/OsiChooseVariable.hpp0000644000175000017500000004606713414504051017452 0ustar sudipsudip// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiChooseVariable_H #define OsiChooseVariable_H #include #include #include "CoinWarmStartBasis.hpp" #include "OsiBranchingObject.hpp" class OsiSolverInterface; class OsiHotInfo; /** This class chooses a variable to branch on The base class just chooses the variable and direction without strong branching but it has information which would normally be used by strong branching e.g. to re-enter having fixed a variable but using same candidates for strong branching. The flow is : a) initialize the process. This decides on strong branching list and stores indices of all infeasible objects b) do strong branching on list. If list is empty then just choose one candidate and return without strong branching. If not empty then go through list and return best. However we may find that the node is infeasible or that we can fix a variable. If so we return and it is up to user to call again (after fixing a variable). */ class OsiChooseVariable { public: /// Default Constructor OsiChooseVariable(); /// Constructor from solver (so we can set up arrays etc) OsiChooseVariable(const OsiSolverInterface *solver); /// Copy constructor OsiChooseVariable(const OsiChooseVariable &); /// Assignment operator OsiChooseVariable &operator=(const OsiChooseVariable &rhs); /// Clone virtual OsiChooseVariable *clone() const; /// Destructor virtual ~OsiChooseVariable(); /** Sets up strong list and clears all if initialize is true. Returns number of infeasibilities. If returns -1 then has worked out node is infeasible! */ virtual int setupList(OsiBranchingInformation *info, bool initialize); /** Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from bestObjectIndex() and bestWhichWay() We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() If fixVariables is true then 2,3,4 are all really same as problem changed */ virtual int chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *info, bool fixVariables); /// Returns true if solution looks feasible against given objects virtual bool feasibleSolution(const OsiBranchingInformation *info, const double *solution, int numberObjects, const OsiObject **objects); /// Saves a good solution void saveSolution(const OsiSolverInterface *solver); /// Clears out good solution after use void clearGoodSolution(); /// Given a candidate fill in useful information e.g. estimates virtual void updateInformation(const OsiBranchingInformation *info, int branch, OsiHotInfo *hotInfo); #if 1 /// Given a branch fill in useful information e.g. estimates virtual void updateInformation(int whichObject, int branch, double changeInObjective, double changeInValue, int status); #endif /// Objective value for feasible solution inline double goodObjectiveValue() const { return goodObjectiveValue_; } /// Estimate of up change or change on chosen if n-way inline double upChange() const { return upChange_; } /// Estimate of down change or max change on other possibilities if n-way inline double downChange() const { return downChange_; } /// Good solution - deleted by finalize inline const double *goodSolution() const { return goodSolution_; } /// Index of chosen object inline int bestObjectIndex() const { return bestObjectIndex_; } /// Set index of chosen object inline void setBestObjectIndex(int value) { bestObjectIndex_ = value; } /// Preferred way of chosen object inline int bestWhichWay() const { return bestWhichWay_; } /// Set preferred way of chosen object inline void setBestWhichWay(int value) { bestWhichWay_ = value; } /// Index of forced object inline int firstForcedObjectIndex() const { return firstForcedObjectIndex_; } /// Set index of forced object inline void setFirstForcedObjectIndex(int value) { firstForcedObjectIndex_ = value; } /// Preferred way of forced object inline int firstForcedWhichWay() const { return firstForcedWhichWay_; } /// Set preferred way of forced object inline void setFirstForcedWhichWay(int value) { firstForcedWhichWay_ = value; } /// Get the number of objects unsatisfied at this node - accurate on first pass inline int numberUnsatisfied() const { return numberUnsatisfied_; } /// Number of objects to choose for strong branching inline int numberStrong() const { return numberStrong_; } /// Set number of objects to choose for strong branching inline void setNumberStrong(int value) { numberStrong_ = value; } /// Number left on strong list inline int numberOnList() const { return numberOnList_; } /// Number of strong branches actually done inline int numberStrongDone() const { return numberStrongDone_; } /// Number of strong iterations actually done inline int numberStrongIterations() const { return numberStrongIterations_; } /// Number of strong branches which changed bounds inline int numberStrongFixed() const { return numberStrongFixed_; } /// List of candidates inline const int *candidates() const { return list_; } /// Trust results from strong branching for changing bounds inline bool trustStrongForBound() const { return trustStrongForBound_; } /// Set trust results from strong branching for changing bounds inline void setTrustStrongForBound(bool yesNo) { trustStrongForBound_ = yesNo; } /// Trust results from strong branching for valid solution inline bool trustStrongForSolution() const { return trustStrongForSolution_; } /// Set trust results from strong branching for valid solution inline void setTrustStrongForSolution(bool yesNo) { trustStrongForSolution_ = yesNo; } /// Set solver and redo arrays void setSolver(const OsiSolverInterface *solver); /** Return status - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from bestObjectIndex() and bestWhichWay() We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() */ inline int status() const { return status_; } inline void setStatus(int value) { status_ = value; } protected: // Data /// Objective value for feasible solution double goodObjectiveValue_; /// Estimate of up change or change on chosen if n-way double upChange_; /// Estimate of down change or max change on other possibilities if n-way double downChange_; /// Good solution - deleted by finalize double *goodSolution_; /// List of candidates int *list_; /// Useful array (for sorting etc) double *useful_; /// Pointer to solver const OsiSolverInterface *solver_; /* Status - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates */ int status_; /// Index of chosen object int bestObjectIndex_; /// Preferred way of chosen object int bestWhichWay_; /// Index of forced object int firstForcedObjectIndex_; /// Preferred way of forced object int firstForcedWhichWay_; /// The number of objects unsatisfied at this node. int numberUnsatisfied_; /// Number of objects to choose for strong branching int numberStrong_; /// Number left on strong list int numberOnList_; /// Number of strong branches actually done int numberStrongDone_; /// Number of strong iterations actually done int numberStrongIterations_; /// Number of bound changes due to strong branching int numberStrongFixed_; /// List of unsatisfied objects - first numberOnList_ for strong branching /// Trust results from strong branching for changing bounds bool trustStrongForBound_; /// Trust results from strong branching for valid solution bool trustStrongForSolution_; }; /** This class is the placeholder for the pseudocosts used by OsiChooseStrong. It can also be used by any other pseudocost based strong branching algorithm. */ class OsiPseudoCosts { protected: // Data /// Total of all changes up double *upTotalChange_; /// Total of all changes down double *downTotalChange_; /// Number of times up int *upNumber_; /// Number of times down int *downNumber_; /// Number of objects (could be found from solver) int numberObjects_; /// Number before we trust int numberBeforeTrusted_; private: void gutsOfDelete(); void gutsOfCopy(const OsiPseudoCosts &rhs); public: OsiPseudoCosts(); virtual ~OsiPseudoCosts(); OsiPseudoCosts(const OsiPseudoCosts &rhs); OsiPseudoCosts &operator=(const OsiPseudoCosts &rhs); /// Number of times before trusted inline int numberBeforeTrusted() const { return numberBeforeTrusted_; } /// Set number of times before trusted inline void setNumberBeforeTrusted(int value) { numberBeforeTrusted_ = value; } /// Initialize the pseudocosts with n entries void initialize(int n); /// Give the number of objects for which pseudo costs are stored inline int numberObjects() const { return numberObjects_; } /** @name Accessor methods to pseudo costs data */ //@{ inline double *upTotalChange() { return upTotalChange_; } inline const double *upTotalChange() const { return upTotalChange_; } inline double *downTotalChange() { return downTotalChange_; } inline const double *downTotalChange() const { return downTotalChange_; } inline int *upNumber() { return upNumber_; } inline const int *upNumber() const { return upNumber_; } inline int *downNumber() { return downNumber_; } inline const int *downNumber() const { return downNumber_; } //@} /// Given a candidate fill in useful information e.g. estimates virtual void updateInformation(const OsiBranchingInformation *info, int branch, OsiHotInfo *hotInfo); #if 1 /// Given a branch fill in useful information e.g. estimates virtual void updateInformation(int whichObject, int branch, double changeInObjective, double changeInValue, int status); #endif }; /** This class chooses a variable to branch on This chooses the variable and direction with reliability strong branching. The flow is : a) initialize the process. This decides on strong branching list and stores indices of all infeasible objects b) do strong branching on list. If list is empty then just choose one candidate and return without strong branching. If not empty then go through list and return best. However we may find that the node is infeasible or that we can fix a variable. If so we return and it is up to user to call again (after fixing a variable). */ class OsiChooseStrong : public OsiChooseVariable { public: /// Default Constructor OsiChooseStrong(); /// Constructor from solver (so we can set up arrays etc) OsiChooseStrong(const OsiSolverInterface *solver); /// Copy constructor OsiChooseStrong(const OsiChooseStrong &); /// Assignment operator OsiChooseStrong &operator=(const OsiChooseStrong &rhs); /// Clone virtual OsiChooseVariable *clone() const; /// Destructor virtual ~OsiChooseStrong(); /** Sets up strong list and clears all if initialize is true. Returns number of infeasibilities. If returns -1 then has worked out node is infeasible! */ virtual int setupList(OsiBranchingInformation *info, bool initialize); /** Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from bestObjectIndex() and bestWhichWay() We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() If fixVariables is true then 2,3,4 are all really same as problem changed */ virtual int chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *info, bool fixVariables); /** Pseudo Shadow Price mode 0 - off 1 - use if no strong info 2 - use if strong not trusted 3 - use even if trusted */ inline int shadowPriceMode() const { return shadowPriceMode_; } /// Set Shadow price mode inline void setShadowPriceMode(int value) { shadowPriceMode_ = value; } /** Accessor method to pseudo cost object*/ const OsiPseudoCosts &pseudoCosts() const { return pseudoCosts_; } /** Accessor method to pseudo cost object*/ OsiPseudoCosts &pseudoCosts() { return pseudoCosts_; } /** A feww pass-through methods to access members of pseudoCosts_ as if they were members of OsiChooseStrong object */ inline int numberBeforeTrusted() const { return pseudoCosts_.numberBeforeTrusted(); } inline void setNumberBeforeTrusted(int value) { pseudoCosts_.setNumberBeforeTrusted(value); } inline int numberObjects() const { return pseudoCosts_.numberObjects(); } protected: /** This is a utility function which does strong branching on a list of objects and stores the results in OsiHotInfo.objects. On entry the object sequence is stored in the OsiHotInfo object and maybe more. It returns - -1 - one branch was infeasible both ways 0 - all inspected - nothing can be fixed 1 - all inspected - some can be fixed (returnCriterion==0) 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) 3 - returning because max time */ int doStrongBranching(OsiSolverInterface *solver, OsiBranchingInformation *info, int numberToDo, int returnCriterion); /** Clear out the results array */ void resetResults(int num); protected: /** Pseudo Shadow Price mode 0 - off 1 - use and multiply by strong info 2 - use */ int shadowPriceMode_; /** The pseudo costs for the chooser */ OsiPseudoCosts pseudoCosts_; /** The results of the strong branching done on the candidates where the pseudocosts were not sufficient */ OsiHotInfo *results_; /** The number of OsiHotInfo objetcs that contain information */ int numResults_; }; /** This class contains the result of strong branching on a variable When created it stores enough information for strong branching */ class OsiHotInfo { public: /// Default Constructor OsiHotInfo(); /// Constructor from useful information OsiHotInfo(OsiSolverInterface *solver, const OsiBranchingInformation *info, const OsiObject *const *objects, int whichObject); /// Copy constructor OsiHotInfo(const OsiHotInfo &); /// Assignment operator OsiHotInfo &operator=(const OsiHotInfo &rhs); /// Clone virtual OsiHotInfo *clone() const; /// Destructor virtual ~OsiHotInfo(); /** Fill in useful information after strong branch. Return status */ int updateInformation(const OsiSolverInterface *solver, const OsiBranchingInformation *info, OsiChooseVariable *choose); /// Original objective value inline double originalObjectiveValue() const { return originalObjectiveValue_; } /// Up change - invalid if n-way inline double upChange() const { assert(branchingObject_->numberBranches() == 2); return changes_[1]; } /// Down change - invalid if n-way inline double downChange() const { assert(branchingObject_->numberBranches() == 2); return changes_[0]; } /// Set up change - invalid if n-way inline void setUpChange(double value) { assert(branchingObject_->numberBranches() == 2); changes_[1] = value; } /// Set down change - invalid if n-way inline void setDownChange(double value) { assert(branchingObject_->numberBranches() == 2); changes_[0] = value; } /// Change on way k inline double change(int k) const { return changes_[k]; } /// Up iteration count - invalid if n-way inline int upIterationCount() const { assert(branchingObject_->numberBranches() == 2); return iterationCounts_[1]; } /// Down iteration count - invalid if n-way inline int downIterationCount() const { assert(branchingObject_->numberBranches() == 2); return iterationCounts_[0]; } /// Iteration count on way k inline int iterationCount(int k) const { return iterationCounts_[k]; } /// Up status - invalid if n-way inline int upStatus() const { assert(branchingObject_->numberBranches() == 2); return statuses_[1]; } /// Down status - invalid if n-way inline int downStatus() const { assert(branchingObject_->numberBranches() == 2); return statuses_[0]; } /// Set up status - invalid if n-way inline void setUpStatus(int value) { assert(branchingObject_->numberBranches() == 2); statuses_[1] = value; } /// Set down status - invalid if n-way inline void setDownStatus(int value) { assert(branchingObject_->numberBranches() == 2); statuses_[0] = value; } /// Status on way k inline int status(int k) const { return statuses_[k]; } /// Branching object inline OsiBranchingObject *branchingObject() const { return branchingObject_; } inline int whichObject() const { return whichObject_; } protected: // Data /// Original objective value double originalObjectiveValue_; /// Objective changes double *changes_; /// Iteration counts int *iterationCounts_; /** Status -1 - not done 0 - feasible and finished 1 - infeasible 2 - not finished */ int *statuses_; /// Branching object OsiBranchingObject *branchingObject_; /// Which object on list int whichObject_; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/config_osi.h.in0000644000175000017500000000052211573730114016264 0ustar sudipsudip/* src/Osi/config_osi.h.in. */ #ifndef __CONFIG_OSI_H__ #define __CONFIG_OSI_H__ /* Version number of project */ #undef OSI_VERSION /* Major Version number of project */ #undef OSI_VERSION_MAJOR /* Minor Version number of project */ #undef OSI_VERSION_MINOR /* Release Version number of project */ #undef OSI_VERSION_RELEASE #endif Vol-1.5.4/Osi/src/Osi/config_default.h0000644000175000017500000000240012101340333016472 0ustar sudipsudip /* include the COIN-OR-wide system specific configure header */ #include "configall_system.h" /* include the public project specific macros */ #include "config_osi_default.h" /***************************************************************************/ /* HERE DEFINE THE PROJECT SPECIFIC MACROS */ /* These are only in effect in a setting that doesn't use configure */ /***************************************************************************/ /* Define to the debug sanity check level (0 is no test) */ #define COIN_OSI_CHECKLEVEL 0 /* Define to the debug verbosity level (0 is no output) */ #define COIN_OSI_VERBOSITY 0 /* Define to 1 if the CoinUtils package is used. * Don't undef this unless you really know what you're doing. */ #define COIN_HAS_COINUTILS 1 /* Define to 1 if the Cplex package is used */ /* #define COIN_HAS_CPX 1 */ /* Define to 1 if the Glpk package is used */ /* #define COIN_HAS_GLPK 1 */ /* Define to 1 if the Gurobi package is used */ /* #define COIN_HAS_GRB 1 */ /* Define to 1 if the Mosek package is used */ /* #define COIN_HAS_MSK 1 */ /* Define to 1 if the SoPlex package is used */ /* #define COIN_HAS_SPX 1 */ /* Define to 1 if the Xpress package is used */ /* #define COIN_HAS_XPR 1 */ Vol-1.5.4/Osi/src/Osi/OsiSolverBranch.hpp0000644000175000017500000000773213414504051017150 0ustar sudipsudip// Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiSolverBranch_H #define OsiSolverBranch_H class OsiSolverInterface; #include "CoinWarmStartBasis.hpp" //############################################################################# /** Solver Branch Class This provides information on a branch as a set of tighter bounds on both ways */ class OsiSolverBranch { public: ///@name Add and Get methods //@{ /// Add a simple branch (i.e. first sets ub of floor(value), second lb of ceil(value)) void addBranch(int iColumn, double value); /// Add bounds - way =-1 is first , +1 is second void addBranch(int way, int numberTighterLower, const int *whichLower, const double *newLower, int numberTighterUpper, const int *whichUpper, const double *newUpper); /// Add bounds - way =-1 is first , +1 is second void addBranch(int way, int numberColumns, const double *oldLower, const double *newLower, const double *oldUpper, const double *newUpper); /// Apply bounds void applyBounds(OsiSolverInterface &solver, int way) const; /// Returns true if current solution satsifies one side of branch bool feasibleOneWay(const OsiSolverInterface &solver) const; /// Starts inline const int *starts() const { return start_; } /// Which variables inline const int *which() const { return indices_; } /// Bounds inline const double *bounds() const { return bound_; } //@} ///@name Constructors and destructors //@{ /// Default Constructor OsiSolverBranch(); /// Copy constructor OsiSolverBranch(const OsiSolverBranch &rhs); /// Assignment operator OsiSolverBranch &operator=(const OsiSolverBranch &rhs); /// Destructor ~OsiSolverBranch(); //@} private: ///@name Private member data //@{ /// Start of lower first, upper first, lower second, upper second int start_[5]; /// Column numbers (if >= numberColumns treat as rows) int *indices_; /// New bounds double *bound_; //@} }; //############################################################################# /** Solver Result Class This provides information on a result as a set of tighter bounds on both ways */ class OsiSolverResult { public: ///@name Add and Get methods //@{ /// Create result void createResult(const OsiSolverInterface &solver, const double *lowerBefore, const double *upperBefore); /// Restore result void restoreResult(OsiSolverInterface &solver) const; /// Get basis inline const CoinWarmStartBasis &basis() const { return basis_; } /// Objective value (as minimization) inline double objectiveValue() const { return objectiveValue_; } /// Primal solution inline const double *primalSolution() const { return primalSolution_; } /// Dual solution inline const double *dualSolution() const { return dualSolution_; } /// Extra fixed inline const OsiSolverBranch &fixed() const { return fixed_; } //@} ///@name Constructors and destructors //@{ /// Default Constructor OsiSolverResult(); /// Constructor from solver OsiSolverResult(const OsiSolverInterface &solver, const double *lowerBefore, const double *upperBefore); /// Copy constructor OsiSolverResult(const OsiSolverResult &rhs); /// Assignment operator OsiSolverResult &operator=(const OsiSolverResult &rhs); /// Destructor ~OsiSolverResult(); //@} private: ///@name Private member data //@{ /// Value of objective (if >= OsiSolverInterface::getInfinity() then infeasible) double objectiveValue_; /// Warm start information CoinWarmStartBasis basis_; /// Primal solution (numberColumns) double *primalSolution_; /// Dual solution (numberRows) double *dualSolution_; /// Which extra variables have been fixed (only way==-1 counts) OsiSolverBranch fixed_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/config.h.in0000644000175000017500000000613611573725230015424 0ustar sudipsudip/* src/Osi/config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if the CoinUtils package is available */ #undef COIN_HAS_COINUTILS /* Define to 1 if the Cplex package is available */ #undef COIN_HAS_CPX /* Define to 1 if the Glpk package is available */ #undef COIN_HAS_GLPK /* Define to 1 if the Gurobi package is available */ #undef COIN_HAS_GRB /* Define to 1 if the Mosek package is available */ #undef COIN_HAS_MSK /* Define to 1 if the Netlib package is available */ #undef COIN_HAS_NETLIB /* Define to 1 if the Sample package is available */ #undef COIN_HAS_SAMPLE /* Define to 1 if the SoPlex package is available */ #undef COIN_HAS_SOPLEX /* Define to 1 if the Xpress package is available */ #undef COIN_HAS_XPR /* Define to the debug sanity check level (0 is no test) */ #undef COIN_OSI_CHECKLEVEL /* Define to the debug verbosity level (0 is no output) */ #undef COIN_OSI_VERBOSITY /* Define to 1 if GLPK has the advanced B&B solver lpx_intopt */ #undef GLPK_HAS_INTOPT /* Define to 1 if you have the header file. */ #undef HAVE_CFLOAT /* Define to 1 if you have the header file. */ #undef HAVE_CIEEEFP /* Define to 1 if you have the header file. */ #undef HAVE_CMATH /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* SVN revision number of project */ #undef OSI_SVN_REV /* Version number of project */ #undef OSI_VERSION /* Major Version number of project */ #undef OSI_VERSION_MAJOR /* Minor Version number of project */ #undef OSI_VERSION_MINOR /* Release Version number of project */ #undef OSI_VERSION_RELEASE /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION Vol-1.5.4/Osi/src/Osi/OsiBranchingObject.cpp0000644000175000017500000015774313414504051017605 0ustar sudipsudip// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include #include #include //#define OSI_DEBUG #include "OsiSolverInterface.hpp" #include "OsiBranchingObject.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinSort.hpp" #include "CoinError.hpp" #include "CoinFinite.hpp" // Default Constructor OsiObject::OsiObject() : infeasibility_(0.0) , whichWay_(0) , numberWays_(2) , priority_(1000) { } // Destructor OsiObject::~OsiObject() { } // Copy constructor OsiObject::OsiObject(const OsiObject &rhs) { infeasibility_ = rhs.infeasibility_; whichWay_ = rhs.whichWay_; priority_ = rhs.priority_; numberWays_ = rhs.numberWays_; } // Assignment operator OsiObject & OsiObject::operator=(const OsiObject &rhs) { if (this != &rhs) { infeasibility_ = rhs.infeasibility_; whichWay_ = rhs.whichWay_; priority_ = rhs.priority_; numberWays_ = rhs.numberWays_; } return *this; } // Return "up" estimate (default 1.0e-5) double OsiObject::upEstimate() const { return 1.0e-5; } // Return "down" estimate (default 1.0e-5) double OsiObject::downEstimate() const { return 1.0e-5; } // Column number if single column object -1 otherwise int OsiObject::columnNumber() const { return -1; } // Infeasibility - large is 0.5 double OsiObject::infeasibility(const OsiSolverInterface *solver, int &preferredWay) const { // Can't guarantee has matrix OsiBranchingInformation info(solver, false, false); return infeasibility(&info, preferredWay); } // This does NOT set mutable stuff double OsiObject::checkInfeasibility(const OsiBranchingInformation *info) const { int way; double saveInfeasibility = infeasibility_; short int saveWhichWay = whichWay_; double value = infeasibility(info, way); infeasibility_ = saveInfeasibility; whichWay_ = saveWhichWay; return value; } /* For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. Returns measure of how much it had to move solution to make feasible */ double OsiObject::feasibleRegion(OsiSolverInterface *solver) const { // Can't guarantee has matrix OsiBranchingInformation info(solver, false, false); return feasibleRegion(solver, &info); } // Default Constructor OsiObject2::OsiObject2() : OsiObject() , preferredWay_(-1) , otherInfeasibility_(0.0) { } // Destructor OsiObject2::~OsiObject2() { } // Copy constructor OsiObject2::OsiObject2(const OsiObject2 &rhs) : OsiObject(rhs) , preferredWay_(rhs.preferredWay_) , otherInfeasibility_(rhs.otherInfeasibility_) { } // Assignment operator OsiObject2 & OsiObject2::operator=(const OsiObject2 &rhs) { if (this != &rhs) { OsiObject::operator=(rhs); preferredWay_ = rhs.preferredWay_; otherInfeasibility_ = rhs.otherInfeasibility_; } return *this; } // Default Constructor OsiBranchingObject::OsiBranchingObject() { originalObject_ = NULL; branchIndex_ = 0; value_ = 0.0; numberBranches_ = 2; } // Useful constructor OsiBranchingObject::OsiBranchingObject(OsiSolverInterface *, double value) { originalObject_ = NULL; branchIndex_ = 0; value_ = value; numberBranches_ = 2; } // Copy constructor OsiBranchingObject::OsiBranchingObject(const OsiBranchingObject &rhs) { originalObject_ = rhs.originalObject_; branchIndex_ = rhs.branchIndex_; value_ = rhs.value_; numberBranches_ = rhs.numberBranches_; } // Assignment operator OsiBranchingObject & OsiBranchingObject::operator=(const OsiBranchingObject &rhs) { if (this != &rhs) { originalObject_ = rhs.originalObject_; branchIndex_ = rhs.branchIndex_; value_ = rhs.value_; numberBranches_ = rhs.numberBranches_; } return *this; } // Destructor OsiBranchingObject::~OsiBranchingObject() { } // For debug int OsiBranchingObject::columnNumber() const { if (originalObject_) return originalObject_->columnNumber(); else return -1; } /** Default Constructor */ OsiBranchingInformation::OsiBranchingInformation() : objectiveValue_(COIN_DBL_MAX) , cutoff_(COIN_DBL_MAX) , direction_(COIN_DBL_MAX) , integerTolerance_(1.0e-7) , primalTolerance_(1.0e-7) , timeRemaining_(COIN_DBL_MAX) , defaultDual_(-1.0) , solver_(NULL) , numberColumns_(0) , lower_(NULL) , solution_(NULL) , upper_(NULL) , hotstartSolution_(NULL) , pi_(NULL) , rowActivity_(NULL) , objective_(NULL) , rowLower_(NULL) , rowUpper_(NULL) , elementByColumn_(NULL) , columnStart_(NULL) , columnLength_(NULL) , row_(NULL) , usefulRegion_(NULL) , indexRegion_(NULL) , numberSolutions_(0) , numberBranchingSolutions_(0) , depth_(0) , owningSolution_(false) { } /** Useful constructor */ OsiBranchingInformation::OsiBranchingInformation(const OsiSolverInterface *solver, bool /*normalSolver*/, bool owningSolution) : timeRemaining_(COIN_DBL_MAX) , defaultDual_(-1.0) , solver_(solver) , hotstartSolution_(NULL) , usefulRegion_(NULL) , indexRegion_(NULL) , numberSolutions_(0) , numberBranchingSolutions_(0) , depth_(0) , owningSolution_(owningSolution) { direction_ = solver_->getObjSense(); objectiveValue_ = solver_->getObjValue(); objectiveValue_ *= direction_; solver_->getDblParam(OsiDualObjectiveLimit, cutoff_); cutoff_ *= direction_; integerTolerance_ = solver_->getIntegerTolerance(); solver_->getDblParam(OsiPrimalTolerance, primalTolerance_); numberColumns_ = solver_->getNumCols(); lower_ = solver_->getColLower(); if (owningSolution_) solution_ = CoinCopyOfArray(solver_->getColSolution(), numberColumns_); else solution_ = solver_->getColSolution(); upper_ = solver_->getColUpper(); pi_ = solver_->getRowPrice(); rowActivity_ = solver_->getRowActivity(); objective_ = solver_->getObjCoefficients(); rowLower_ = solver_->getRowLower(); rowUpper_ = solver_->getRowUpper(); const CoinPackedMatrix *matrix = solver_->getMatrixByCol(); if (matrix) { // Column copy of matrix if matrix exists elementByColumn_ = matrix->getElements(); row_ = matrix->getIndices(); columnStart_ = matrix->getVectorStarts(); columnLength_ = matrix->getVectorLengths(); } else { // Matrix does not exist elementByColumn_ = NULL; row_ = NULL; columnStart_ = NULL; columnLength_ = NULL; } } // Copy constructor OsiBranchingInformation::OsiBranchingInformation(const OsiBranchingInformation &rhs) { objectiveValue_ = rhs.objectiveValue_; cutoff_ = rhs.cutoff_; direction_ = rhs.direction_; integerTolerance_ = rhs.integerTolerance_; primalTolerance_ = rhs.primalTolerance_; timeRemaining_ = rhs.timeRemaining_; defaultDual_ = rhs.defaultDual_; solver_ = rhs.solver_; numberColumns_ = rhs.numberColumns_; lower_ = rhs.lower_; owningSolution_ = rhs.owningSolution_; if (owningSolution_) solution_ = CoinCopyOfArray(rhs.solution_, numberColumns_); else solution_ = rhs.solution_; upper_ = rhs.upper_; hotstartSolution_ = rhs.hotstartSolution_; pi_ = rhs.pi_; rowActivity_ = rhs.rowActivity_; objective_ = rhs.objective_; rowLower_ = rhs.rowLower_; rowUpper_ = rhs.rowUpper_; elementByColumn_ = rhs.elementByColumn_; row_ = rhs.row_; columnStart_ = rhs.columnStart_; columnLength_ = rhs.columnLength_; usefulRegion_ = rhs.usefulRegion_; assert(!usefulRegion_); indexRegion_ = rhs.indexRegion_; numberSolutions_ = rhs.numberSolutions_; numberBranchingSolutions_ = rhs.numberBranchingSolutions_; depth_ = rhs.depth_; } // Clone OsiBranchingInformation * OsiBranchingInformation::clone() const { return new OsiBranchingInformation(*this); } // Assignment operator OsiBranchingInformation & OsiBranchingInformation::operator=(const OsiBranchingInformation &rhs) { if (this != &rhs) { objectiveValue_ = rhs.objectiveValue_; cutoff_ = rhs.cutoff_; direction_ = rhs.direction_; integerTolerance_ = rhs.integerTolerance_; primalTolerance_ = rhs.primalTolerance_; timeRemaining_ = rhs.timeRemaining_; defaultDual_ = rhs.defaultDual_; numberColumns_ = rhs.numberColumns_; lower_ = rhs.lower_; owningSolution_ = rhs.owningSolution_; if (owningSolution_) { solution_ = CoinCopyOfArray(rhs.solution_, numberColumns_); delete[] solution_; } else { solution_ = rhs.solution_; } upper_ = rhs.upper_; hotstartSolution_ = rhs.hotstartSolution_; pi_ = rhs.pi_; rowActivity_ = rhs.rowActivity_; objective_ = rhs.objective_; rowLower_ = rhs.rowLower_; rowUpper_ = rhs.rowUpper_; elementByColumn_ = rhs.elementByColumn_; row_ = rhs.row_; columnStart_ = rhs.columnStart_; columnLength_ = rhs.columnLength_; usefulRegion_ = rhs.usefulRegion_; assert(!usefulRegion_); indexRegion_ = rhs.indexRegion_; numberSolutions_ = rhs.numberSolutions_; numberBranchingSolutions_ = rhs.numberBranchingSolutions_; depth_ = rhs.depth_; } return *this; } // Destructor OsiBranchingInformation::~OsiBranchingInformation() { if (owningSolution_) delete[] solution_; } // Default Constructor OsiTwoWayBranchingObject::OsiTwoWayBranchingObject() : OsiBranchingObject() { firstBranch_ = 0; } // Useful constructor OsiTwoWayBranchingObject::OsiTwoWayBranchingObject(OsiSolverInterface *solver, const OsiObject *object, int way, double value) : OsiBranchingObject(solver, value) { originalObject_ = object; firstBranch_ = way; } // Copy constructor OsiTwoWayBranchingObject::OsiTwoWayBranchingObject(const OsiTwoWayBranchingObject &rhs) : OsiBranchingObject(rhs) { firstBranch_ = rhs.firstBranch_; } // Assignment operator OsiTwoWayBranchingObject & OsiTwoWayBranchingObject::operator=(const OsiTwoWayBranchingObject &rhs) { if (this != &rhs) { OsiBranchingObject::operator=(rhs); firstBranch_ = rhs.firstBranch_; } return *this; } // Destructor OsiTwoWayBranchingObject::~OsiTwoWayBranchingObject() { } /********* Simple Integers *******************************/ /** Default Constructor Equivalent to an unspecified binary variable. */ OsiSimpleInteger::OsiSimpleInteger() : OsiObject2() , originalLower_(0.0) , originalUpper_(1.0) , columnNumber_(-1) { } /** Useful constructor Loads actual upper & lower bounds for the specified variable. */ OsiSimpleInteger::OsiSimpleInteger(const OsiSolverInterface *solver, int iColumn) : OsiObject2() { columnNumber_ = iColumn; originalLower_ = solver->getColLower()[columnNumber_]; originalUpper_ = solver->getColUpper()[columnNumber_]; } // Useful constructor - passed solver index and original bounds OsiSimpleInteger::OsiSimpleInteger(int iColumn, double lower, double upper) : OsiObject2() { columnNumber_ = iColumn; originalLower_ = lower; originalUpper_ = upper; } // Copy constructor OsiSimpleInteger::OsiSimpleInteger(const OsiSimpleInteger &rhs) : OsiObject2(rhs) { columnNumber_ = rhs.columnNumber_; originalLower_ = rhs.originalLower_; originalUpper_ = rhs.originalUpper_; } // Clone OsiObject * OsiSimpleInteger::clone() const { return new OsiSimpleInteger(*this); } // Assignment operator OsiSimpleInteger & OsiSimpleInteger::operator=(const OsiSimpleInteger &rhs) { if (this != &rhs) { OsiObject2::operator=(rhs); columnNumber_ = rhs.columnNumber_; originalLower_ = rhs.originalLower_; originalUpper_ = rhs.originalUpper_; } return *this; } // Destructor OsiSimpleInteger::~OsiSimpleInteger() { } /* Reset variable bounds to their original values. Bounds may be tightened, so it may be good to be able to reset them to their original values. */ void OsiSimpleInteger::resetBounds(const OsiSolverInterface *solver) { originalLower_ = solver->getColLower()[columnNumber_]; originalUpper_ = solver->getColUpper()[columnNumber_]; } // Redoes data when sequence numbers change void OsiSimpleInteger::resetSequenceEtc(int numberColumns, const int *originalColumns) { int i; for (i = 0; i < numberColumns; i++) { if (originalColumns[i] == columnNumber_) break; } if (i < numberColumns) columnNumber_ = i; else abort(); // should never happen } // Infeasibility - large is 0.5 double OsiSimpleInteger::infeasibility(const OsiBranchingInformation *info, int &whichWay) const { double value = info->solution_[columnNumber_]; value = CoinMax(value, info->lower_[columnNumber_]); value = CoinMin(value, info->upper_[columnNumber_]); double nearest = floor(value + (1.0 - 0.5)); if (nearest > value) { whichWay = 1; } else { whichWay = 0; } infeasibility_ = fabs(value - nearest); double returnValue = infeasibility_; if (infeasibility_ <= info->integerTolerance_) { otherInfeasibility_ = 1.0; returnValue = 0.0; } else if (info->defaultDual_ < 0.0) { otherInfeasibility_ = 1.0 - infeasibility_; } else { const double *pi = info->pi_; const double *activity = info->rowActivity_; const double *lower = info->rowLower_; const double *upper = info->rowUpper_; const double *element = info->elementByColumn_; const int *row = info->row_; const CoinBigIndex *columnStart = info->columnStart_; const int *columnLength = info->columnLength_; double direction = info->direction_; double downMovement = value - floor(value); double upMovement = 1.0 - downMovement; double valueP = info->objective_[columnNumber_] * direction; CoinBigIndex start = columnStart[columnNumber_]; CoinBigIndex end = start + columnLength[columnNumber_]; double upEstimate = 0.0; double downEstimate = 0.0; if (valueP > 0.0) upEstimate = valueP * upMovement; else downEstimate -= valueP * downMovement; double tolerance = info->primalTolerance_; for (CoinBigIndex j = start; j < end; j++) { int iRow = row[j]; if (lower[iRow] < -1.0e20) assert(pi[iRow] <= 1.0e-4); if (upper[iRow] > 1.0e20) assert(pi[iRow] >= -1.0e-4); valueP = pi[iRow] * direction; double el2 = element[j]; double value2 = valueP * el2; double u = 0.0; double d = 0.0; if (value2 > 0.0) u = value2; else d = -value2; // if up makes infeasible then make at least default double newUp = activity[iRow] + upMovement * el2; if (newUp > upper[iRow] + tolerance || newUp < lower[iRow] - tolerance) u = CoinMax(u, info->defaultDual_); upEstimate += u * upMovement; // if down makes infeasible then make at least default double newDown = activity[iRow] - downMovement * el2; if (newDown > upper[iRow] + tolerance || newDown < lower[iRow] - tolerance) d = CoinMax(d, info->defaultDual_); downEstimate += d * downMovement; } if (downEstimate >= upEstimate) { infeasibility_ = CoinMax(1.0e-12, upEstimate); otherInfeasibility_ = CoinMax(1.0e-12, downEstimate); whichWay = 1; } else { infeasibility_ = CoinMax(1.0e-12, downEstimate); otherInfeasibility_ = CoinMax(1.0e-12, upEstimate); whichWay = 0; } returnValue = infeasibility_; } if (preferredWay_ >= 0 && returnValue) whichWay = preferredWay_; whichWay_ = static_cast< short int >(whichWay); return returnValue; } // This looks at solution and sets bounds to contain solution /** More precisely: it first forces the variable within the existing bounds, and then tightens the bounds to fix the variable at the nearest integer value. */ double OsiSimpleInteger::feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const { double value = info->solution_[columnNumber_]; double newValue = CoinMax(value, info->lower_[columnNumber_]); newValue = CoinMin(newValue, info->upper_[columnNumber_]); newValue = floor(newValue + 0.5); solver->setColLower(columnNumber_, newValue); solver->setColUpper(columnNumber_, newValue); return fabs(value - newValue); } /* Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics */ int OsiSimpleInteger::columnNumber() const { return columnNumber_; } // Creates a branching object OsiBranchingObject * OsiSimpleInteger::createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const { double value = info->solution_[columnNumber_]; value = CoinMax(value, info->lower_[columnNumber_]); value = CoinMin(value, info->upper_[columnNumber_]); assert(info->upper_[columnNumber_] > info->lower_[columnNumber_]); #ifndef NDEBUG double nearest = floor(value + 0.5); assert(fabs(value - nearest) > info->integerTolerance_); #endif OsiBranchingObject *branch = new OsiIntegerBranchingObject(solver, this, way, value); return branch; } // Return "down" estimate double OsiSimpleInteger::downEstimate() const { if (whichWay_) return 1.0 - infeasibility_; else return infeasibility_; } // Return "up" estimate double OsiSimpleInteger::upEstimate() const { if (!whichWay_) return 1.0 - infeasibility_; else return infeasibility_; } // Default Constructor OsiIntegerBranchingObject::OsiIntegerBranchingObject() : OsiTwoWayBranchingObject() { down_[0] = 0.0; down_[1] = 0.0; up_[0] = 0.0; up_[1] = 0.0; } // Useful constructor OsiIntegerBranchingObject::OsiIntegerBranchingObject(OsiSolverInterface *solver, const OsiSimpleInteger *object, int way, double value) : OsiTwoWayBranchingObject(solver, object, way, value) { int iColumn = object->columnNumber(); down_[0] = solver->getColLower()[iColumn]; down_[1] = floor(value_); up_[0] = ceil(value_); up_[1] = solver->getColUpper()[iColumn]; } /* Create a standard floor/ceiling branch object Specifies a simple two-way branch in a more flexible way. One arm of the branch will be lb <= x <= downUpperBound, the other upLowerBound <= x <= ub. Specify way = -1 to set the object state to perform the down arm first, way = 1 for the up arm. */ OsiIntegerBranchingObject::OsiIntegerBranchingObject(OsiSolverInterface *solver, const OsiSimpleInteger *object, int way, double value, double downUpperBound, double upLowerBound) : OsiTwoWayBranchingObject(solver, object, way, value) { int iColumn = object->columnNumber(); down_[0] = solver->getColLower()[iColumn]; down_[1] = downUpperBound; up_[0] = upLowerBound; up_[1] = solver->getColUpper()[iColumn]; } // Copy constructor OsiIntegerBranchingObject::OsiIntegerBranchingObject(const OsiIntegerBranchingObject &rhs) : OsiTwoWayBranchingObject(rhs) { down_[0] = rhs.down_[0]; down_[1] = rhs.down_[1]; up_[0] = rhs.up_[0]; up_[1] = rhs.up_[1]; } // Assignment operator OsiIntegerBranchingObject & OsiIntegerBranchingObject::operator=(const OsiIntegerBranchingObject &rhs) { if (this != &rhs) { OsiTwoWayBranchingObject::operator=(rhs); down_[0] = rhs.down_[0]; down_[1] = rhs.down_[1]; up_[0] = rhs.up_[0]; up_[1] = rhs.up_[1]; } return *this; } OsiBranchingObject * OsiIntegerBranchingObject::clone() const { return (new OsiIntegerBranchingObject(*this)); } // Destructor OsiIntegerBranchingObject::~OsiIntegerBranchingObject() { } /* Perform a branch by adjusting the bounds of the specified variable. Note that each arm of the branch advances the object to the next arm by advancing the value of branchIndex_. Providing new values for the variable's lower and upper bounds for each branching direction gives a little bit of additional flexibility and will be easily extensible to multi-way branching. Returns change in guessed objective on next branch */ double OsiIntegerBranchingObject::branch(OsiSolverInterface *solver) { const OsiSimpleInteger *obj = dynamic_cast< const OsiSimpleInteger * >(originalObject_); assert(obj); int iColumn = obj->columnNumber(); double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); if (0) { printf("branching %s on %d bounds %g %g / %g %g\n", (way == -1) ? "down" : "up", iColumn, down_[0], down_[1], up_[0], up_[1]); const double *lower = solver->getColLower(); const double *upper = solver->getColUpper(); for (int i = 0; i < 8; i++) printf(" [%d (%g,%g)]", i, lower[i], upper[i]); printf("\n"); } if (way < 0) { #ifdef OSI_DEBUG { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching down on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, down_[0], down_[1]); } #endif solver->setColLower(iColumn, down_[0]); solver->setColUpper(iColumn, down_[1]); } else { #ifdef OSI_DEBUG { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching up on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, up_[0], up_[1]); } #endif solver->setColLower(iColumn, up_[0]); solver->setColUpper(iColumn, up_[1]); } double nlb = solver->getColLower()[iColumn]; if (nlb < olb) { #ifndef NDEBUG printf("bad lb change for column %d from %g to %g\n", iColumn, olb, nlb); #endif solver->setColLower(iColumn, olb); } double nub = solver->getColUpper()[iColumn]; if (nub > oub) { #ifndef NDEBUG printf("bad ub change for column %d from %g to %g\n", iColumn, oub, nub); #endif solver->setColUpper(iColumn, oub); } #ifndef NDEBUG if (nlb < olb + 1.0e-8 && nub > oub - 1.0e-8) printf("bad null change for column %d - bounds %g,%g\n", iColumn, olb, oub); #endif branchIndex_++; return 0.0; } // Print what would happen void OsiIntegerBranchingObject::print(const OsiSolverInterface *solver) { const OsiSimpleInteger *obj = dynamic_cast< const OsiSimpleInteger * >(originalObject_); assert(obj); int iColumn = obj->columnNumber(); int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); if (way < 0) { { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("OsiInteger would branch down on var %d : [%g,%g] => [%g,%g]\n", iColumn, olb, oub, down_[0], down_[1]); } } else { { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("OsiInteger would branch up on var %d : [%g,%g] => [%g,%g]\n", iColumn, olb, oub, up_[0], up_[1]); } } } // Default Constructor OsiSOS::OsiSOS() : OsiObject2() , members_(NULL) , weights_(NULL) , numberMembers_(0) , sosType_(-1) , integerValued_(false) { } // Useful constructor (which are indices) OsiSOS::OsiSOS(const OsiSolverInterface *, int numberMembers, const int *which, const double *weights, int type) : OsiObject2() , numberMembers_(numberMembers) , sosType_(type) { integerValued_ = type == 1; // not strictly true - should check problem if (numberMembers_) { members_ = new int[numberMembers_]; weights_ = new double[numberMembers_]; memcpy(members_, which, numberMembers_ * sizeof(int)); if (weights) { memcpy(weights_, weights, numberMembers_ * sizeof(double)); } else { for (int i = 0; i < numberMembers_; i++) weights_[i] = i; } // sort so weights increasing CoinSort_2(weights_, weights_ + numberMembers_, members_); double last = -COIN_DBL_MAX; int i; for (i = 0; i < numberMembers_; i++) { double possible = CoinMax(last + 1.0e-10, weights_[i]); weights_[i] = possible; last = possible; } } else { members_ = NULL; weights_ = NULL; } assert(sosType_ > 0 && sosType_ < 3); } // Copy constructor OsiSOS::OsiSOS(const OsiSOS &rhs) : OsiObject2(rhs) { numberMembers_ = rhs.numberMembers_; sosType_ = rhs.sosType_; integerValued_ = rhs.integerValued_; if (numberMembers_) { members_ = new int[numberMembers_]; weights_ = new double[numberMembers_]; memcpy(members_, rhs.members_, numberMembers_ * sizeof(int)); memcpy(weights_, rhs.weights_, numberMembers_ * sizeof(double)); } else { members_ = NULL; weights_ = NULL; } } // Clone OsiObject * OsiSOS::clone() const { return new OsiSOS(*this); } // Assignment operator OsiSOS & OsiSOS::operator=(const OsiSOS &rhs) { if (this != &rhs) { OsiObject2::operator=(rhs); delete[] members_; delete[] weights_; numberMembers_ = rhs.numberMembers_; sosType_ = rhs.sosType_; integerValued_ = rhs.integerValued_; if (numberMembers_) { members_ = new int[numberMembers_]; weights_ = new double[numberMembers_]; memcpy(members_, rhs.members_, numberMembers_ * sizeof(int)); memcpy(weights_, rhs.weights_, numberMembers_ * sizeof(double)); } else { members_ = NULL; weights_ = NULL; } } return *this; } // Destructor OsiSOS::~OsiSOS() { delete[] members_; delete[] weights_; } // Infeasibility - large is 0.5 double OsiSOS::infeasibility(const OsiBranchingInformation *info, int &whichWay) const { int j; int firstNonZero = -1; int lastNonZero = -1; int firstNonFixed = -1; int lastNonFixed = -1; const double *solution = info->solution_; //const double * lower = info->lower_; const double *upper = info->upper_; //double largestValue=0.0; double integerTolerance = info->integerTolerance_; double primalTolerance = info->primalTolerance_; double weight = 0.0; double sum = 0.0; // check bounds etc double lastWeight = -1.0e100; for (j = 0; j < numberMembers_; j++) { int iColumn = members_[j]; if (lastWeight >= weights_[j] - 1.0e-12) throw CoinError("Weights too close together in SOS", "infeasibility", "OsiSOS"); lastWeight = weights_[j]; if (upper[iColumn]) { double value = CoinMax(0.0, solution[iColumn]); if (value > integerTolerance) { // Possibly due to scaling a fixed variable might slip through #ifdef COIN_DEVELOP if (value > upper[iColumn] + 10.0 * primalTolerance) printf("** Variable %d (%d) has value %g and upper bound of %g\n", iColumn, j, value, upper[iColumn]); #endif if (value > upper[iColumn]) { value = upper[iColumn]; } sum += value; weight += weights_[j] * value; if (firstNonZero < 0) firstNonZero = j; lastNonZero = j; } if (firstNonFixed < 0) firstNonFixed = j; lastNonFixed = j; } } whichWay = 1; whichWay_ = 1; if (lastNonZero - firstNonZero >= sosType_) { // find where to branch assert(sum > 0.0); // probably best to use pseudo duals double value = lastNonZero - firstNonZero + 1; value *= 0.5 / static_cast< double >(numberMembers_); infeasibility_ = value; otherInfeasibility_ = 1.0 - value; if (info->defaultDual_ >= 0.0) { // Using pseudo shadow prices weight /= sum; int iWhere; for (iWhere = firstNonZero; iWhere < lastNonZero; iWhere++) if (weight < weights_[iWhere + 1]) break; assert(iWhere != lastNonZero); /* Complicated - infeasibility is being used for branching so we don't want estimate of satisfying set but of each way on branch. So let us suppose that all on side being fixed to 0 goes to closest */ int lastDown = iWhere; int firstUp = iWhere + 1; if (sosType_ == 2) { // SOS 2 - choose nearest if (weight - weights_[iWhere] >= weights_[iWhere + 1] - weight) lastDown++; // But make sure OK if (lastDown == firstNonFixed) { lastDown++; } else if (lastDown == lastNonFixed) { lastDown--; } firstUp = lastDown; } // Now get current contribution and compute weight for end points double weightDown = 0.0; double weightUp = 0.0; const double *element = info->elementByColumn_; const int *row = info->row_; const CoinBigIndex *columnStart = info->columnStart_; const int *columnLength = info->columnLength_; double direction = info->direction_; const double *objective = info->objective_; // Compute where we would move to double objValue = 0.0; double *useful = info->usefulRegion_; int *index = info->indexRegion_; int n = 0; for (j = firstNonZero; j <= lastNonZero; j++) { int iColumn = members_[j]; double multiplier = solution[iColumn]; if (j >= lastDown) weightDown += multiplier; if (j <= firstUp) weightUp += multiplier; if (multiplier > 0.0) { objValue += objective[iColumn] * multiplier; CoinBigIndex start = columnStart[iColumn]; CoinBigIndex end = start + columnLength[iColumn]; for (CoinBigIndex j = start; j < end; j++) { int iRow = row[j]; double value = element[j] * multiplier; if (useful[iRow]) { value += useful[iRow]; if (!value) value = 1.0e-100; } else { assert(value); index[n++] = iRow; } useful[iRow] = value; } } } if (sosType_ == 2) assert(fabs(weightUp + weightDown - sum - solution[members_[lastDown]]) < 1.0e-4); int startX[2]; int endX[2]; startX[0] = firstNonZero; startX[1] = firstUp; endX[0] = lastDown; endX[1] = lastNonZero; double fakeSolution[2]; int check[2]; fakeSolution[0] = weightDown; check[0] = members_[lastDown]; fakeSolution[1] = weightUp; check[1] = members_[firstUp]; const double *pi = info->pi_; const double *activity = info->rowActivity_; const double *lower = info->rowLower_; const double *upper = info->rowUpper_; int numberRows = info->solver_->getNumRows(); double *useful2 = useful + numberRows; int *index2 = index + numberRows; for (int i = 0; i < 2; i++) { double obj = 0.0; int n2 = 0; for (j = startX[i]; j <= endX[i]; j++) { int iColumn = members_[j]; double multiplier = solution[iColumn]; if (iColumn == check[i]) multiplier = fakeSolution[i]; if (multiplier > 0.0) { obj += objective[iColumn] * multiplier; CoinBigIndex start = columnStart[iColumn]; CoinBigIndex end = start + columnLength[iColumn]; for (CoinBigIndex j = start; j < end; j++) { int iRow = row[j]; double value = element[j] * multiplier; if (useful2[iRow]) { value += useful2[iRow]; if (!value) value = 1.0e-100; } else { assert(value); index2[n2++] = iRow; } useful2[iRow] = value; } } } // movement in objective obj = (obj - objValue) * direction; double estimate = (obj > 0.0) ? obj : 0.0; for (j = 0; j < n; j++) { int iRow = index[j]; // movement double movement = useful2[iRow] - useful[iRow]; useful[iRow] = 0.0; useful2[iRow] = 0.0; double valueP = pi[iRow] * direction; if (lower[iRow] < -1.0e20) assert(valueP <= 1.0e-4); if (upper[iRow] > 1.0e20) assert(valueP >= -1.0e-4); double value2 = valueP * movement; double thisEstimate = (value2 > 0.0) ? value2 : 0; // if makes infeasible then make at least default double newValue = activity[iRow] + movement; if (newValue > upper[iRow] + primalTolerance || newValue < lower[iRow] - primalTolerance) thisEstimate = CoinMax(thisEstimate, info->defaultDual_); estimate += thisEstimate; } for (j = 0; j < n2; j++) { int iRow = index2[j]; // movement double movement = useful2[iRow] - useful[iRow]; useful[iRow] = 0.0; useful2[iRow] = 0.0; if (movement) { double valueP = pi[iRow] * direction; if (lower[iRow] < -1.0e20) assert(valueP <= 1.0e-4); if (upper[iRow] > 1.0e20) assert(valueP >= -1.0e-4); double value2 = valueP * movement; double thisEstimate = (value2 > 0.0) ? value2 : 0; // if makes infeasible then make at least default double newValue = activity[iRow] + movement; if (newValue > upper[iRow] + primalTolerance || newValue < lower[iRow] - primalTolerance) thisEstimate = CoinMax(thisEstimate, info->defaultDual_); estimate += thisEstimate; } } // store in fakeSolution fakeSolution[i] = estimate; } double downEstimate = fakeSolution[0]; double upEstimate = fakeSolution[1]; if (downEstimate >= upEstimate) { infeasibility_ = CoinMax(1.0e-12, upEstimate); otherInfeasibility_ = CoinMax(1.0e-12, downEstimate); whichWay = 1; } else { infeasibility_ = CoinMax(1.0e-12, downEstimate); otherInfeasibility_ = CoinMax(1.0e-12, upEstimate); whichWay = 0; } whichWay_ = static_cast< short >(whichWay); value = infeasibility_; } return value; } else { infeasibility_ = 0.0; otherInfeasibility_ = 1.0; return 0.0; // satisfied } } // This looks at solution and sets bounds to contain solution double OsiSOS::feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const { int j; int firstNonZero = -1; int lastNonZero = -1; const double *solution = info->solution_; //const double * lower = info->lower_; const double *upper = info->upper_; double sum = 0.0; // Find largest one or pair double movement = 0.0; if (sosType_ == 1) { for (j = 0; j < numberMembers_; j++) { int iColumn = members_[j]; double value = CoinMax(0.0, solution[iColumn]); if (value > sum && upper[iColumn]) { firstNonZero = j; sum = value; } } lastNonZero = firstNonZero; } else { // type 2 for (j = 1; j < numberMembers_; j++) { int iColumn = members_[j]; int jColumn = members_[j - 1]; double value1 = CoinMax(0.0, solution[iColumn]); double value0 = CoinMax(0.0, solution[jColumn]); double value = value0 + value1; if (value > sum) { if (upper[iColumn] || upper[jColumn]) { firstNonZero = upper[jColumn] ? j - 1 : j; lastNonZero = upper[iColumn] ? j : j - 1; sum = value; } } } } for (j = 0; j < numberMembers_; j++) { if (j < firstNonZero || j > lastNonZero) { int iColumn = members_[j]; double value = CoinMax(0.0, solution[iColumn]); movement += value; solver->setColUpper(iColumn, 0.0); } } return movement; } // Redoes data when sequence numbers change void OsiSOS::resetSequenceEtc(int numberColumns, const int *originalColumns) { int n2 = 0; for (int j = 0; j < numberMembers_; j++) { int iColumn = members_[j]; int i; for (i = 0; i < numberColumns; i++) { if (originalColumns[i] == iColumn) break; } if (i < numberColumns) { members_[n2] = i; weights_[n2++] = weights_[j]; } } if (n2 < numberMembers_) { printf("** SOS number of members reduced from %d to %d!\n", numberMembers_, n2); numberMembers_ = n2; } } // Return "down" estimate double OsiSOS::downEstimate() const { if (whichWay_) return otherInfeasibility_; else return infeasibility_; } // Return "up" estimate double OsiSOS::upEstimate() const { if (!whichWay_) return otherInfeasibility_; else return infeasibility_; } // Creates a branching object OsiBranchingObject * OsiSOS::createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const { int j; const double *solution = info->solution_; double tolerance = info->primalTolerance_; const double *upper = info->upper_; int firstNonFixed = -1; int lastNonFixed = -1; int firstNonZero = -1; int lastNonZero = -1; double weight = 0.0; double sum = 0.0; for (j = 0; j < numberMembers_; j++) { int iColumn = members_[j]; if (upper[iColumn]) { double value = CoinMax(0.0, solution[iColumn]); sum += value; if (firstNonFixed < 0) firstNonFixed = j; lastNonFixed = j; if (value > tolerance) { weight += weights_[j] * value; if (firstNonZero < 0) firstNonZero = j; lastNonZero = j; } } } assert(lastNonZero - firstNonZero >= sosType_); // find where to branch assert(sum > 0.0); weight /= sum; int iWhere; double separator = 0.0; for (iWhere = firstNonZero; iWhere < lastNonZero; iWhere++) if (weight < weights_[iWhere + 1]) break; if (sosType_ == 1) { // SOS 1 separator = 0.5 * (weights_[iWhere] + weights_[iWhere + 1]); } else { // SOS 2 if (iWhere == lastNonFixed - 1) iWhere = lastNonFixed - 2; separator = weights_[iWhere + 1]; } // create object OsiBranchingObject *branch; branch = new OsiSOSBranchingObject(solver, this, way, separator); return branch; } // Default Constructor OsiSOSBranchingObject::OsiSOSBranchingObject() : OsiTwoWayBranchingObject() { } // Useful constructor OsiSOSBranchingObject::OsiSOSBranchingObject(OsiSolverInterface *solver, const OsiSOS *set, int way, double separator) : OsiTwoWayBranchingObject(solver, set, way, separator) { } // Copy constructor OsiSOSBranchingObject::OsiSOSBranchingObject(const OsiSOSBranchingObject &rhs) : OsiTwoWayBranchingObject(rhs) { } // Assignment operator OsiSOSBranchingObject & OsiSOSBranchingObject::operator=(const OsiSOSBranchingObject &rhs) { if (this != &rhs) { OsiTwoWayBranchingObject::operator=(rhs); } return *this; } OsiBranchingObject * OsiSOSBranchingObject::clone() const { return (new OsiSOSBranchingObject(*this)); } // Destructor OsiSOSBranchingObject::~OsiSOSBranchingObject() { } double OsiSOSBranchingObject::branch(OsiSolverInterface *solver) { const OsiSOS *set = dynamic_cast< const OsiSOS * >(originalObject_); assert(set); int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); branchIndex_++; int numberMembers = set->numberMembers(); const int *which = set->members(); const double *weights = set->weights(); //const double * lower = solver->getColLower(); //const double * upper = solver->getColUpper(); // *** for way - up means fix all those in down section if (way < 0) { int i; for (i = 0; i < numberMembers; i++) { if (weights[i] > value_) break; } assert(i < numberMembers); for (; i < numberMembers; i++) solver->setColUpper(which[i], 0.0); } else { int i; for (i = 0; i < numberMembers; i++) { if (weights[i] >= value_) break; else solver->setColUpper(which[i], 0.0); } assert(i < numberMembers); } return 0.0; } // Print what would happen void OsiSOSBranchingObject::print(const OsiSolverInterface *solver) { const OsiSOS *set = dynamic_cast< const OsiSOS * >(originalObject_); assert(set); int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); int numberMembers = set->numberMembers(); const int *which = set->members(); const double *weights = set->weights(); //const double * lower = solver->getColLower(); const double *upper = solver->getColUpper(); int first = numberMembers; int last = -1; int numberFixed = 0; int numberOther = 0; int i; for (i = 0; i < numberMembers; i++) { double bound = upper[which[i]]; if (bound) { first = CoinMin(first, i); last = CoinMax(last, i); } } // *** for way - up means fix all those in down section if (way < 0) { printf("SOS Down"); for (i = 0; i < numberMembers; i++) { double bound = upper[which[i]]; if (weights[i] > value_) break; else if (bound) numberOther++; } assert(i < numberMembers); for (; i < numberMembers; i++) { double bound = upper[which[i]]; if (bound) numberFixed++; } } else { printf("SOS Up"); for (i = 0; i < numberMembers; i++) { double bound = upper[which[i]]; if (weights[i] >= value_) break; else if (bound) numberFixed++; } assert(i < numberMembers); for (; i < numberMembers; i++) { double bound = upper[which[i]]; if (bound) numberOther++; } } printf(" - at %g, free range %d (%g) => %d (%g), %d would be fixed, %d other way\n", value_, which[first], weights[first], which[last], weights[last], numberFixed, numberOther); } /** Default Constructor */ OsiLotsize::OsiLotsize() : OsiObject2() , columnNumber_(-1) , rangeType_(0) , numberRanges_(0) , largestGap_(0) , bound_(NULL) , range_(0) { } /** Useful constructor Loads actual upper & lower bounds for the specified variable. */ OsiLotsize::OsiLotsize(const OsiSolverInterface *, int iColumn, int numberPoints, const double *points, bool range) : OsiObject2() { assert(numberPoints > 0); columnNumber_ = iColumn; // sort ranges int *sort = new int[numberPoints]; double *weight = new double[numberPoints]; int i; if (range) { rangeType_ = 2; } else { rangeType_ = 1; } for (i = 0; i < numberPoints; i++) { sort[i] = i; weight[i] = points[i * rangeType_]; } CoinSort_2(weight, weight + numberPoints, sort); numberRanges_ = 1; largestGap_ = 0; if (rangeType_ == 1) { bound_ = new double[numberPoints + 1]; bound_[0] = weight[0]; for (i = 1; i < numberPoints; i++) { if (weight[i] != weight[i - 1]) bound_[numberRanges_++] = weight[i]; } // and for safety bound_[numberRanges_] = bound_[numberRanges_ - 1]; for (i = 1; i < numberRanges_; i++) { largestGap_ = CoinMax(largestGap_, bound_[i] - bound_[i - 1]); } } else { bound_ = new double[2 * numberPoints + 2]; bound_[0] = points[sort[0] * 2]; bound_[1] = points[sort[0] * 2 + 1]; double hi = bound_[1]; assert(hi >= bound_[0]); for (i = 1; i < numberPoints; i++) { double thisLo = points[sort[i] * 2]; double thisHi = points[sort[i] * 2 + 1]; assert(thisHi >= thisLo); if (thisLo > hi) { bound_[2 * numberRanges_] = thisLo; bound_[2 * numberRanges_ + 1] = thisHi; numberRanges_++; hi = thisHi; } else { //overlap hi = CoinMax(hi, thisHi); bound_[2 * numberRanges_ - 1] = hi; } } // and for safety bound_[2 * numberRanges_] = bound_[2 * numberRanges_ - 2]; bound_[2 * numberRanges_ + 1] = bound_[2 * numberRanges_ - 1]; for (i = 1; i < numberRanges_; i++) { largestGap_ = CoinMax(largestGap_, bound_[2 * i] - bound_[2 * i - 1]); } } delete[] sort; delete[] weight; range_ = 0; } // Copy constructor OsiLotsize::OsiLotsize(const OsiLotsize &rhs) : OsiObject2(rhs) { columnNumber_ = rhs.columnNumber_; rangeType_ = rhs.rangeType_; numberRanges_ = rhs.numberRanges_; range_ = rhs.range_; largestGap_ = rhs.largestGap_; if (numberRanges_) { assert(rangeType_ > 0 && rangeType_ < 3); bound_ = new double[(numberRanges_ + 1) * rangeType_]; memcpy(bound_, rhs.bound_, (numberRanges_ + 1) * rangeType_ * sizeof(double)); } else { bound_ = NULL; } } // Clone OsiObject * OsiLotsize::clone() const { return new OsiLotsize(*this); } // Assignment operator OsiLotsize & OsiLotsize::operator=(const OsiLotsize &rhs) { if (this != &rhs) { OsiObject2::operator=(rhs); columnNumber_ = rhs.columnNumber_; rangeType_ = rhs.rangeType_; numberRanges_ = rhs.numberRanges_; largestGap_ = rhs.largestGap_; delete[] bound_; range_ = rhs.range_; if (numberRanges_) { assert(rangeType_ > 0 && rangeType_ < 3); bound_ = new double[(numberRanges_ + 1) * rangeType_]; memcpy(bound_, rhs.bound_, (numberRanges_ + 1) * rangeType_ * sizeof(double)); } else { bound_ = NULL; } } return *this; } // Destructor OsiLotsize::~OsiLotsize() { delete[] bound_; } /* Finds range of interest so value is feasible in range range_ or infeasible between hi[range_] and lo[range_+1]. Returns true if feasible. */ bool OsiLotsize::findRange(double value, double integerTolerance) const { assert(range_ >= 0 && range_ < numberRanges_ + 1); int iLo; int iHi; double infeasibility = 0.0; if (rangeType_ == 1) { if (value < bound_[range_] - integerTolerance) { iLo = 0; iHi = range_ - 1; } else if (value < bound_[range_] + integerTolerance) { return true; } else if (value < bound_[range_ + 1] - integerTolerance) { return false; } else { iLo = range_ + 1; iHi = numberRanges_ - 1; } // check lo and hi bool found = false; if (value > bound_[iLo] - integerTolerance && value < bound_[iLo + 1] + integerTolerance) { range_ = iLo; found = true; } else if (value > bound_[iHi] - integerTolerance && value < bound_[iHi + 1] + integerTolerance) { range_ = iHi; found = true; } else { range_ = (iLo + iHi) >> 1; } //points while (!found) { if (value < bound_[range_]) { if (value >= bound_[range_ - 1]) { // found range_--; break; } else { iHi = range_; } } else { if (value < bound_[range_ + 1]) { // found break; } else { iLo = range_; } } range_ = (iLo + iHi) >> 1; } if (value - bound_[range_] <= bound_[range_ + 1] - value) { infeasibility = value - bound_[range_]; } else { infeasibility = bound_[range_ + 1] - value; if (infeasibility < integerTolerance) range_++; } return (infeasibility < integerTolerance); } else { // ranges if (value < bound_[2 * range_] - integerTolerance) { iLo = 0; iHi = range_ - 1; } else if (value < bound_[2 * range_ + 1] + integerTolerance) { return true; } else if (value < bound_[2 * range_ + 2] - integerTolerance) { return false; } else { iLo = range_ + 1; iHi = numberRanges_ - 1; } // check lo and hi bool found = false; if (value > bound_[2 * iLo] - integerTolerance && value < bound_[2 * iLo + 2] - integerTolerance) { range_ = iLo; found = true; } else if (value >= bound_[2 * iHi] - integerTolerance) { range_ = iHi; found = true; } else { range_ = (iLo + iHi) >> 1; } //points while (!found) { if (value < bound_[2 * range_]) { if (value >= bound_[2 * range_ - 2]) { // found range_--; break; } else { iHi = range_; } } else { if (value < bound_[2 * range_ + 2]) { // found break; } else { iLo = range_; } } range_ = (iLo + iHi) >> 1; } if (value >= bound_[2 * range_] - integerTolerance && value <= bound_[2 * range_ + 1] + integerTolerance) infeasibility = 0.0; else if (value - bound_[2 * range_ + 1] < bound_[2 * range_ + 2] - value) { infeasibility = value - bound_[2 * range_ + 1]; } else { infeasibility = bound_[2 * range_ + 2] - value; } return (infeasibility < integerTolerance); } } /* Returns floor and ceiling */ void OsiLotsize::floorCeiling(double &floorLotsize, double &ceilingLotsize, double value, double tolerance) const { bool feasible = findRange(value, tolerance); if (rangeType_ == 1) { floorLotsize = bound_[range_]; ceilingLotsize = bound_[range_ + 1]; // may be able to adjust if (feasible && fabs(value - floorLotsize) > fabs(value - ceilingLotsize)) { floorLotsize = bound_[range_ + 1]; ceilingLotsize = bound_[range_ + 2]; } } else { // ranges assert(value >= bound_[2 * range_ + 1]); floorLotsize = bound_[2 * range_ + 1]; ceilingLotsize = bound_[2 * range_ + 2]; } } // Infeasibility - large is 0.5 double OsiLotsize::infeasibility(const OsiBranchingInformation *info, int &preferredWay) const { const double *solution = info->solution_; const double *lower = info->lower_; const double *upper = info->upper_; double value = solution[columnNumber_]; value = CoinMax(value, lower[columnNumber_]); value = CoinMin(value, upper[columnNumber_]); double integerTolerance = info->integerTolerance_; /*printf("%d %g %g %g %g\n",columnNumber_,value,lower[columnNumber_], solution[columnNumber_],upper[columnNumber_]);*/ assert(value >= bound_[0] - integerTolerance && value <= bound_[rangeType_ * numberRanges_ - 1] + integerTolerance); infeasibility_ = 0.0; bool feasible = findRange(value, integerTolerance); if (!feasible) { if (rangeType_ == 1) { if (value - bound_[range_] < bound_[range_ + 1] - value) { preferredWay = -1; infeasibility_ = value - bound_[range_]; otherInfeasibility_ = bound_[range_ + 1] - value; } else { preferredWay = 1; infeasibility_ = bound_[range_ + 1] - value; otherInfeasibility_ = value - bound_[range_]; } } else { // ranges if (value - bound_[2 * range_ + 1] < bound_[2 * range_ + 2] - value) { preferredWay = -1; infeasibility_ = value - bound_[2 * range_ + 1]; otherInfeasibility_ = bound_[2 * range_ + 2] - value; } else { preferredWay = 1; infeasibility_ = bound_[2 * range_ + 2] - value; otherInfeasibility_ = value - bound_[2 * range_ + 1]; } } } else { // always satisfied preferredWay = -1; otherInfeasibility_ = 1.0; } if (infeasibility_ < integerTolerance) infeasibility_ = 0.0; else infeasibility_ /= largestGap_; return infeasibility_; } /* Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics */ int OsiLotsize::columnNumber() const { return columnNumber_; } /* Set bounds to contain the current solution. More precisely, for the variable associated with this object, take the value given in the current solution, force it within the current bounds if required, then set the bounds to fix the variable at the integer nearest the solution value. Returns amount it had to move variable. */ double OsiLotsize::feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const { const double *lower = solver->getColLower(); const double *upper = solver->getColUpper(); const double *solution = info->solution_; double value = solution[columnNumber_]; value = CoinMax(value, lower[columnNumber_]); value = CoinMin(value, upper[columnNumber_]); findRange(value, info->integerTolerance_); double nearest; if (rangeType_ == 1) { nearest = bound_[range_]; solver->setColLower(columnNumber_, nearest); solver->setColUpper(columnNumber_, nearest); } else { // ranges solver->setColLower(columnNumber_, bound_[2 * range_]); solver->setColUpper(columnNumber_, bound_[2 * range_ + 1]); if (value > bound_[2 * range_ + 1]) nearest = bound_[2 * range_ + 1]; else if (value < bound_[2 * range_]) nearest = bound_[2 * range_]; else nearest = value; } // Scaling may have moved it a bit // Lotsizing variables could be a lot larger #ifndef NDEBUG assert(fabs(value - nearest) <= (100.0 + 10.0 * fabs(nearest)) * info->integerTolerance_); #endif return fabs(value - nearest); } // Creates a branching object // Creates a branching object OsiBranchingObject * OsiLotsize::createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const { const double *solution = info->solution_; const double *lower = solver->getColLower(); const double *upper = solver->getColUpper(); double value = solution[columnNumber_]; value = CoinMax(value, lower[columnNumber_]); value = CoinMin(value, upper[columnNumber_]); assert(!findRange(value, info->integerTolerance_)); return new OsiLotsizeBranchingObject(solver, this, way, value); } /* Bounds may be tightened, so it may be good to be able to refresh the local copy of the original bounds. */ void OsiLotsize::resetBounds(const OsiSolverInterface *) { } // Return "down" estimate double OsiLotsize::downEstimate() const { if (whichWay_) return otherInfeasibility_; else return infeasibility_; } // Return "up" estimate double OsiLotsize::upEstimate() const { if (!whichWay_) return otherInfeasibility_; else return infeasibility_; } // Redoes data when sequence numbers change void OsiLotsize::resetSequenceEtc(int numberColumns, const int *originalColumns) { int i; for (i = 0; i < numberColumns; i++) { if (originalColumns[i] == columnNumber_) break; } if (i < numberColumns) columnNumber_ = i; else abort(); // should never happen } // Default Constructor OsiLotsizeBranchingObject::OsiLotsizeBranchingObject() : OsiTwoWayBranchingObject() { down_[0] = 0.0; down_[1] = 0.0; up_[0] = 0.0; up_[1] = 0.0; } // Useful constructor OsiLotsizeBranchingObject::OsiLotsizeBranchingObject(OsiSolverInterface *solver, const OsiLotsize *originalObject, int way, double value) : OsiTwoWayBranchingObject(solver, originalObject, way, value) { int iColumn = originalObject->columnNumber(); down_[0] = solver->getColLower()[iColumn]; double integerTolerance = solver->getIntegerTolerance(); originalObject->floorCeiling(down_[1], up_[0], value, integerTolerance); up_[1] = solver->getColUpper()[iColumn]; } // Copy constructor OsiLotsizeBranchingObject::OsiLotsizeBranchingObject(const OsiLotsizeBranchingObject &rhs) : OsiTwoWayBranchingObject(rhs) { down_[0] = rhs.down_[0]; down_[1] = rhs.down_[1]; up_[0] = rhs.up_[0]; up_[1] = rhs.up_[1]; } // Assignment operator OsiLotsizeBranchingObject & OsiLotsizeBranchingObject::operator=(const OsiLotsizeBranchingObject &rhs) { if (this != &rhs) { OsiTwoWayBranchingObject::operator=(rhs); down_[0] = rhs.down_[0]; down_[1] = rhs.down_[1]; up_[0] = rhs.up_[0]; up_[1] = rhs.up_[1]; } return *this; } OsiBranchingObject * OsiLotsizeBranchingObject::clone() const { return (new OsiLotsizeBranchingObject(*this)); } // Destructor OsiLotsizeBranchingObject::~OsiLotsizeBranchingObject() { } /* Perform a branch by adjusting the bounds of the specified variable. Note that each arm of the branch advances the object to the next arm by advancing the value of way_. Providing new values for the variable's lower and upper bounds for each branching direction gives a little bit of additional flexibility and will be easily extensible to multi-way branching. */ double OsiLotsizeBranchingObject::branch(OsiSolverInterface *solver) { const OsiLotsize *obj = dynamic_cast< const OsiLotsize * >(originalObject_); assert(obj); int iColumn = obj->columnNumber(); int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); if (way < 0) { #ifdef OSI_DEBUG { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching down on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, down_[0], down_[1]); } #endif solver->setColLower(iColumn, down_[0]); solver->setColUpper(iColumn, down_[1]); } else { #ifdef OSI_DEBUG { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching up on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, up_[0], up_[1]); } #endif solver->setColLower(iColumn, up_[0]); solver->setColUpper(iColumn, up_[1]); } branchIndex_++; return 0.0; } // Print void OsiLotsizeBranchingObject::print(const OsiSolverInterface *solver) { const OsiLotsize *obj = dynamic_cast< const OsiLotsize * >(originalObject_); assert(obj); int iColumn = obj->columnNumber(); int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); if (way < 0) { { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching down on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, down_[0], down_[1]); } } else { { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching up on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, up_[0], up_[1]); } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/Osi/OsiCuts.cpp0000644000175000017500000002360613414504051015467 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include #include "OsiCuts.hpp" //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiCuts::OsiCuts() : rowCutPtrs_() , colCutPtrs_() { // nothing to do here } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiCuts::OsiCuts(const OsiCuts &source) : rowCutPtrs_() , colCutPtrs_() { gutsOfCopy(source); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiCuts::~OsiCuts() { gutsOfDestructor(); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiCuts & OsiCuts::operator=(const OsiCuts &rhs) { if (this != &rhs) { gutsOfDestructor(); gutsOfCopy(rhs); } return *this; } //------------------------------------------------------------------- void OsiCuts::gutsOfCopy(const OsiCuts &source) { assert(sizeRowCuts() == 0); assert(sizeColCuts() == 0); assert(sizeCuts() == 0); int i; int ne = source.sizeRowCuts(); for (i = 0; i < ne; i++) insert(source.rowCut(i)); ne = source.sizeColCuts(); for (i = 0; i < ne; i++) insert(source.colCut(i)); } //------------------------------------------------------------------- void OsiCuts::gutsOfDestructor() { int i; int ne = static_cast< int >(rowCutPtrs_.size()); for (i = 0; i < ne; i++) { if (rowCutPtrs_[i]->globallyValidAsInteger() != 2) delete rowCutPtrs_[i]; } rowCutPtrs_.clear(); ne = static_cast< int >(colCutPtrs_.size()); for (i = 0; i < ne; i++) { if (colCutPtrs_[i]->globallyValidAsInteger() != 2) delete colCutPtrs_[i]; } colCutPtrs_.clear(); assert(sizeRowCuts() == 0); assert(sizeColCuts() == 0); assert(sizeCuts() == 0); } //------------------------------------------------------------ // // Embedded iterator class implementation // //------------------------------------------------------------ OsiCuts::iterator::iterator(OsiCuts &cuts) : cuts_(cuts) , rowCutIndex_(-1) , colCutIndex_(-1) , cutP_(NULL) { this->operator++(); } OsiCuts::iterator::iterator(const OsiCuts::iterator &src) : cuts_(src.cuts_) , rowCutIndex_(src.rowCutIndex_) , colCutIndex_(src.colCutIndex_) , cutP_(src.cutP_) { // nothing to do here } OsiCuts::iterator &OsiCuts::iterator::operator=(const OsiCuts::iterator &rhs) { if (this != &rhs) { cuts_ = rhs.cuts_; rowCutIndex_ = rhs.rowCutIndex_; colCutIndex_ = rhs.colCutIndex_; cutP_ = rhs.cutP_; } return *this; } OsiCuts::iterator::~iterator() { //nothing to do } OsiCuts::iterator OsiCuts::iterator::begin() { rowCutIndex_ = -1; colCutIndex_ = -1; this->operator++(); return *this; } OsiCuts::iterator OsiCuts::iterator::end() { rowCutIndex_ = cuts_.sizeRowCuts(); colCutIndex_ = cuts_.sizeColCuts() - 1; cutP_ = NULL; return *this; } OsiCuts::iterator OsiCuts::iterator::operator++() { cutP_ = NULL; // Are there any more row cuts to consider? if ((rowCutIndex_ + 1) >= cuts_.sizeRowCuts()) { // Only column cuts left. colCutIndex_++; // Only update cutP if there is a column cut. // This is necessary for the iterator to work for // OsiCuts that don't have any cuts. if (cuts_.sizeColCuts() > 0 && colCutIndex_ < cuts_.sizeColCuts()) cutP_ = cuts_.colCutPtr(colCutIndex_); } // Are there any more col cuts to consider? else if ((colCutIndex_ + 1) >= cuts_.sizeColCuts()) { // Only row cuts left rowCutIndex_++; if (rowCutIndex_ < cuts_.sizeRowCuts()) cutP_ = cuts_.rowCutPtr(rowCutIndex_); } // There are still Row & column cuts left to consider else { double nextColCutE = cuts_.colCut(colCutIndex_ + 1).effectiveness(); double nextRowCutE = cuts_.rowCut(rowCutIndex_ + 1).effectiveness(); if (nextColCutE > nextRowCutE) { colCutIndex_++; cutP_ = cuts_.colCutPtr(colCutIndex_); } else { rowCutIndex_++; cutP_ = cuts_.rowCutPtr(rowCutIndex_); } } return *this; } //------------------------------------------------------------ // // Embedded const_iterator class implementation // //------------------------------------------------------------ OsiCuts::const_iterator::const_iterator(const OsiCuts &cuts) : cutsPtr_(&cuts) , rowCutIndex_(-1) , colCutIndex_(-1) , cutP_(NULL) { this->operator++(); } OsiCuts::const_iterator::const_iterator(const OsiCuts::const_iterator &src) : cutsPtr_(src.cutsPtr_) , rowCutIndex_(src.rowCutIndex_) , colCutIndex_(src.colCutIndex_) , cutP_(src.cutP_) { // nothing to do here } OsiCuts::const_iterator & OsiCuts::const_iterator::operator=(const OsiCuts::const_iterator &rhs) { if (this != &rhs) { cutsPtr_ = rhs.cutsPtr_; rowCutIndex_ = rhs.rowCutIndex_; colCutIndex_ = rhs.colCutIndex_; cutP_ = rhs.cutP_; } return *this; } OsiCuts::const_iterator::~const_iterator() { //nothing to do } OsiCuts::const_iterator OsiCuts::const_iterator::begin() { rowCutIndex_ = -1; colCutIndex_ = -1; this->operator++(); return *this; } OsiCuts::const_iterator OsiCuts::const_iterator::end() { rowCutIndex_ = cutsPtr_->sizeRowCuts(); colCutIndex_ = cutsPtr_->sizeColCuts() - 1; cutP_ = NULL; return *this; } OsiCuts::const_iterator OsiCuts::const_iterator::operator++() { cutP_ = NULL; // Are there any more row cuts to consider? if ((rowCutIndex_ + 1) >= cutsPtr_->sizeRowCuts()) { // Only column cuts left. colCutIndex_++; // Only update cutP if there is a column cut. // This is necessary for the iterator to work for // OsiCuts that don't have any cuts. if (cutsPtr_->sizeRowCuts() > 0 && colCutIndex_ < cutsPtr_->sizeColCuts()) cutP_ = cutsPtr_->colCutPtr(colCutIndex_); } // Are there any more col cuts to consider? else if ((colCutIndex_ + 1) >= cutsPtr_->sizeColCuts()) { // Only row cuts left rowCutIndex_++; if (rowCutIndex_ < cutsPtr_->sizeRowCuts()) cutP_ = cutsPtr_->rowCutPtr(rowCutIndex_); } // There are still Row & column cuts left to consider else { double nextColCutE = cutsPtr_->colCut(colCutIndex_ + 1).effectiveness(); double nextRowCutE = cutsPtr_->rowCut(rowCutIndex_ + 1).effectiveness(); if (nextColCutE > nextRowCutE) { colCutIndex_++; cutP_ = cutsPtr_->colCutPtr(colCutIndex_); } else { rowCutIndex_++; cutP_ = cutsPtr_->rowCutPtr(rowCutIndex_); } } return *this; } /* Insert a row cut unless it is a duplicate (CoinAbsFltEq)*/ void OsiCuts::insertIfNotDuplicate(OsiRowCut &rc, CoinAbsFltEq treatAsSame) { double newLb = rc.lb(); double newUb = rc.ub(); CoinPackedVector vector = rc.row(); int numberElements = vector.getNumElements(); int *newIndices = vector.getIndices(); double *newElements = vector.getElements(); CoinSort_2(newIndices, newIndices + numberElements, newElements); bool notDuplicate = true; int numberRowCuts = sizeRowCuts(); for (int i = 0; i < numberRowCuts; i++) { const OsiRowCut *cutPtr = rowCutPtr(i); if (cutPtr->row().getNumElements() != numberElements) continue; if (!treatAsSame(cutPtr->lb(), newLb)) continue; if (!treatAsSame(cutPtr->ub(), newUb)) continue; const CoinPackedVector *thisVector = &(cutPtr->row()); const int *indices = thisVector->getIndices(); const double *elements = thisVector->getElements(); int j; for (j = 0; j < numberElements; j++) { if (indices[j] != newIndices[j]) break; if (!treatAsSame(elements[j], newElements[j])) break; } if (j == numberElements) { notDuplicate = false; break; } } if (notDuplicate) { OsiRowCut *newCutPtr = new OsiRowCut(); newCutPtr->setLb(newLb); newCutPtr->setUb(newUb); newCutPtr->setRow(vector); newCutPtr->setGloballyValid(rc.globallyValid()); newCutPtr->setEffectiveness(rc.effectiveness()); rowCutPtrs_.push_back(newCutPtr); } } /* Insert a row cut unless it is a duplicate (CoinRelFltEq)*/ void OsiCuts::insertIfNotDuplicate(OsiRowCut &rc, CoinRelFltEq treatAsSame) { double newLb = rc.lb(); double newUb = rc.ub(); CoinPackedVector vector = rc.row(); int numberElements = vector.getNumElements(); int *newIndices = vector.getIndices(); double *newElements = vector.getElements(); CoinSort_2(newIndices, newIndices + numberElements, newElements); bool notDuplicate = true; int numberRowCuts = sizeRowCuts(); for (int i = 0; i < numberRowCuts; i++) { const OsiRowCut *cutPtr = rowCutPtr(i); if (cutPtr->row().getNumElements() != numberElements) continue; if (!treatAsSame(cutPtr->lb(), newLb)) continue; if (!treatAsSame(cutPtr->ub(), newUb)) continue; const CoinPackedVector *thisVector = &(cutPtr->row()); const int *indices = thisVector->getIndices(); const double *elements = thisVector->getElements(); int j; for (j = 0; j < numberElements; j++) { if (indices[j] != newIndices[j]) break; if (!treatAsSame(elements[j], newElements[j])) break; } if (j == numberElements) { notDuplicate = false; break; } } if (notDuplicate) { OsiRowCut *newCutPtr = new OsiRowCut(); newCutPtr->setLb(newLb); newCutPtr->setUb(newUb); newCutPtr->setRow(vector); newCutPtr->setGloballyValid(rc.globallyValid()); newCutPtr->setEffectiveness(rc.effectiveness()); rowCutPtrs_.push_back(newCutPtr); } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiMsk/0000755000175000017500000000000013434204224014037 5ustar sudipsudipVol-1.5.4/Osi/src/OsiMsk/OsiMskSolverInterface.hpp0000644000175000017500000007530412055732267021015 0ustar sudipsudip// Osi interface for Mosek ver. 5.0 // Lower versions are not supported //----------------------------------------------------------------------------- // name: OSI Interface for MOSEK // author: Bo Jensen // email: support@MOSEK.com //----------------------------------------------------------------------------- // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiMskSolverInterface_H #define OsiMskSolverInterface_H #include "OsiSolverInterface.hpp" typedef void* MSKtask_t; typedef void* MSKenv_t; /* MOSEK Solver Interface Instantiation of OsiMskSolverInterface for MOSEK */ class OsiMskSolverInterface : virtual public OsiSolverInterface { friend void OsiMskSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string & value); // Get an integer parameter bool getIntParam(OsiIntParam key, int& value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double& value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string& value) const; //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; /// Has there been a license problem? virtual bool isLicenseError() const; /// Get rescode return of last Mosek optimizer call int getRescode() const { return Mskerr; } //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ /*! \brief Get an empty warm start object This routine returns an empty CoinWarmStartBasis object. Its purpose is to provide a way to give a client a warm start basis object of the appropriate type, which can resized and modified as desired. */ CoinWarmStart* getEmptyWarmStart () const; //@{ /// Get warmstarting information virtual CoinWarmStart* getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart* warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double * getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double * getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char * getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double * getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double * getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double * getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double * getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double * getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int columnNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int columnNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int columnNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int columnNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix * getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix * getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double * getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double * getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double * getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double * getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector getDualRays(int maxNumRays, bool fullRay=false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector getPrimalRays(int maxNumRays) const; #if 0 /** Get vector of indices of solution which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff( int elementIndex, double elementValue ); /** Set a a set of objective function coefficients */ virtual void setObjCoeffSet(const int* indexFirst, const int* indexLast, const double* coeffList); /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower( int elementIndex, double elementValue ); /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper( int elementIndex, double elementValue ); /** Set a single column lower and upper bound
The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds( int elementIndex, double lower, double upper ); /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setCollower() and setColupper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower( int elementIndex, double elementValue ); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper( int elementIndex, double elementValue ); /** Set a single row lower and upper bound
The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds( int elementIndex, double lower, double upper ); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() and over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose type changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int* indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int* indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double * colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double * rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ /** */ virtual void addCol(const CoinPackedVectorBase& vec, const double collb, const double colub, const double obj); /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase * const * cols, const double* collb, const double* colub, const double* obj); /** */ virtual void deleteCols(const int num, const int * colIndices); /** */ virtual void addRow(const CoinPackedVectorBase& vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase& vec, const char rowsen, const double rowrhs, const double rowrng); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng); /** */ virtual void deleteRows(const int num, const int * rowIndices); #if 0 // ??? implemented in OsiSolverInterface //----------------------------------------------------------------------- /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, double*& rowlb, double*& rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, char*& rowsen, double*& rowrhs, double*& rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng); /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense=0.0) const; //@} /**@name Message handling */ //@{ /** Pass in a message handler It is the client's responsibility to destroy a message handler installed by this routine; it will not be destroyed when the solver interface is destroyed. */ void passInMessageHandler(CoinMessageHandler * handler); //@} //--------------------------------------------------------------------------- /**@name MOSEK specific public interfaces */ //@{ /** Get pointer to MOSEK model and free all specified cached data entries (combined with logical or-operator '|' ): */ enum keepCachedFlag { /// discard all cached data (default) KEEPCACHED_NONE = 0, /// column information: objective values, lower and upper bounds, variable types KEEPCACHED_COLUMN = 1, /// row information: right hand sides, ranges and senses, lower and upper bounds for row KEEPCACHED_ROW = 2, /// problem matrix: matrix ordered by column and by row KEEPCACHED_MATRIX = 4, /// LP solution: primal and dual solution, reduced costs, row activities KEEPCACHED_RESULTS = 8, /// only discard cached LP solution KEEPCACHED_PROBLEM = KEEPCACHED_COLUMN | KEEPCACHED_ROW | KEEPCACHED_MATRIX, /// keep all cached data (similar to getMutableLpPtr()) KEEPCACHED_ALL = KEEPCACHED_PROBLEM | KEEPCACHED_RESULTS, /// free only cached column and LP solution information FREECACHED_COLUMN = KEEPCACHED_PROBLEM & ~KEEPCACHED_COLUMN, /// free only cached row and LP solution information FREECACHED_ROW = KEEPCACHED_PROBLEM & ~KEEPCACHED_ROW, /// free only cached matrix and LP solution information FREECACHED_MATRIX = KEEPCACHED_PROBLEM & ~KEEPCACHED_MATRIX, /// free only cached LP solution information FREECACHED_RESULTS = KEEPCACHED_ALL & ~KEEPCACHED_RESULTS }; MSKtask_t getLpPtr( int keepCached = KEEPCACHED_NONE ); //@{ /// Method to access MOSEK environment pointer MSKenv_t getEnvironmentPtr(); //@} /// return a vector of variable types (continous, binary, integer) const char* getCtype() const; /**@name Static instance counter methods */ /** MOSEK has a context which must be created prior to all other MOSEK calls. This method:
  • Increments by 1 the number of uses of the MOSEK environment.
  • Creates the MOSEK context when the number of uses is change to 1 from 0.
*/ static void incrementInstanceCounter(); /** MOSEK has a context which should be deleted after MOSEK calls. This method:
  • Decrements by 1 the number of uses of the MOSEK environment.
  • Deletes the MOSEK context when the number of uses is change to 0 from 1.
*/ static void decrementInstanceCounter(); /// Return the number of instances of instantiated objects using MOSEK services. static unsigned int getNumInstances(); //@} //@} /**@name Constructors and destructor */ //@{ /// Default Constructor /// optional argument mskenv can be used to reach in an initialized user environment /// OsiMsk assumes membership of mskenv, so it will be freed when the last instanciation of OsiMsk is deleted OsiMskSolverInterface(MSKenv_t mskenv = NULL); /// Clone virtual OsiSolverInterface * clone(bool copyData = true) const; /// Copy constructor OsiMskSolverInterface( const OsiMskSolverInterface& ); /// Assignment operator OsiMskSolverInterface& operator=( const OsiMskSolverInterface& rhs ); /// Destructor virtual ~OsiMskSolverInterface(); //@} protected: /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut( const OsiRowCut & rc ); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut( const OsiColCut & cc ); //@} private: /**@name Private static class functions */ //@{ /// switches MOSEK to prob type LP void switchToLP(); /// switches MOSEK to prob type MIP void switchToMIP(); /// resizes coltype_ vector to be able to store at least minsize elements void resizeColType( int minsize ); /// frees colsize_ vector void freeColType(); bool definedSolution(int solution) const; int solverUsed() const; //@} /**@name Private static class data */ //@{ /// MOSEK environment pointer static MSKenv_t env_ ; /// Number of live problem instances //static unsigned int numInstances_; //@} static unsigned int numInstances_; /**@name Private methods */ //@{ int Mskerr; int MSKsolverused_; double ObjOffset_; int InitialSolver; /// Get task Pointer for const methods public: MSKtask_t getMutableLpPtr() const; /// The real work of a copy constructor (used by copy and assignment) void gutsOfCopy( const OsiMskSolverInterface & source ); /// The real work of the constructor void gutsOfConstructor(); /// The real work of the destructor void gutsOfDestructor(); /// free cached column rim vectors void freeCachedColRim(); /// free cached row rim vectors void freeCachedRowRim(); /// free cached result vectors void freeCachedResults(); /// free cached matrices void freeCachedMatrix(); /// free all cached data (except specified entries, see getLpPtr()) void freeCachedData( int keepCached = KEEPCACHED_NONE ); /// free all allocated memory void freeAllMemory(); /**@name Private member data */ //@{ /// MOSEK model represented by this class instance mutable MSKtask_t task_; /// Hotstart information int *hotStartCStat_; int hotStartCStatSize_; int *hotStartRStat_; int hotStartRStatSize_; int hotStartMaxIteration_; /**@name Cached information derived from the MOSEK model */ //@{ /// Pointer to objective vector mutable double *obj_; /// Pointer to dense vector of variable lower bounds mutable double *collower_; /// Pointer to dense vector of variable lower bounds mutable double *colupper_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /// Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) mutable double *rowrange_; /// Pointer to dense vector of row lower bounds mutable double *rowlower_; /// Pointer to dense vector of row upper bounds mutable double *rowupper_; /// Pointer to primal solution vector mutable double *colsol_; /// Pointer to dual solution vector mutable double *rowsol_; /// Pointer to reduced cost vector mutable double *redcost_; /// Pointer to row activity (slack) vector mutable double *rowact_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByCol_; //@} /**@name Additional information needed for storing MIP problems */ //@{ /// Pointer to dense vector of variable types (continous, binary, integer) char *coltype_; /// Size of allocated memory for coltype_ int coltypesize_; /// Stores whether MOSEK' prob type is currently set to MIP mutable bool probtypemip_; //@} }; //############################################################################# /** A function that tests the methods in the OsiMskSolverInterface class */ void OsiMskSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); #endif Vol-1.5.4/Osi/src/OsiMsk/Makefile.in0000644000175000017500000005537613200225426016122 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/OsiMsk DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiMsk_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libOsiMsk_la_OBJECTS = OsiMskSolverInterface.lo libOsiMsk_la_OBJECTS = $(am_libOsiMsk_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiMsk_la_SOURCES) DIST_SOURCES = $(libOsiMsk_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiMsk # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiMsk.la # List all source files for this library, including headers libOsiMsk_la_SOURCES = \ OsiMskSolverInterface.cpp OsiMskSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiMsk_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(MSKLIB) # This is for libtool (on Windows) libOsiMsk_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(MSKINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiMskSolverInterface.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiMsk/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiMsk/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiMsk.la: $(libOsiMsk_la_OBJECTS) $(libOsiMsk_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiMsk_la_LDFLAGS) $(libOsiMsk_la_OBJECTS) $(libOsiMsk_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiMskSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Osi/src/OsiMsk/osi-mosek.pc.in0000644000175000017500000000046511510106235016677 0ustar sudipsudipprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiMosek Description: COIN-OR Open Solver Interface for Mosek URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiMsk @MSKLIB@ Cflags: -I${includedir} -I@MSKINCDIR@ Requires: osi Vol-1.5.4/Osi/src/OsiMsk/osi-mosek-uninstalled.pc.in0000644000175000017500000000043611507670402021225 0ustar sudipsudipprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiMsk Name: OsiMosek Description: COIN-OR Open Solver Interface for Mosek URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiMsk.la @MSKLIB@ Cflags: -I@abs_source_dir@/src/OsiMsk -I@MSKINCDIR@ Requires: osi Vol-1.5.4/Osi/src/OsiMsk/Makefile.am0000644000175000017500000000334513200225426016076 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 2111 2017-11-07 03:40:06Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiMsk # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiMsk.la # List all source files for this library, including headers libOsiMsk_la_SOURCES = \ OsiMskSolverInterface.cpp OsiMskSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiMsk_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(MSKLIB) endif # This is for libtool (on Windows) libOsiMsk_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(MSKINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiMskSolverInterface.hpp Vol-1.5.4/Osi/src/OsiMsk/OsiMskSolverInterface.cpp0000644000175000017500000046022413421763114021000 0ustar sudipsudip/* Osi interface for Mosek ver. 7.0 Lower versions are not supported ----------------------------------------------------------------------------- name: OSI Interface for MOSEK ----------------------------------------------------------------------------- This code is licensed under the terms of the Eclipse Public License (EPL). Originally developed by Bo Jensen from MOSEK ApS. No longer a maintainer. */ #include #include #include #include #include "OsiConfig.h" #include "CoinPragma.hpp" #include "CoinError.hpp" #include "CoinFinite.hpp" #include "OsiMskSolverInterface.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" #include "mosek.h" #define MSK_OSI_DEBUG_LEVEL 0 #ifndef NDEBUG #define MSK_OSI_ASSERT_LEVEL 0 #else #define MSK_OSI_ASSERT_LEVEL 4 #endif #define MSK_DO_MOSEK_LOG 0 #define debugMessage printf //Choose algorithm to be default in initial solve #define INITIAL_SOLVE MSK_OPTIMIZER_FREE //Choose algorithm to be default in resolve #define RESOLVE_SOLVE MSK_OPTIMIZER_FREE_SIMPLEX // Unset this flag to disable the warnings from interface. #define MSK_WARNING_ON #if MSK_VERSION_MAJOR >= 9 #define MSKCONST const #endif #undef getc //############################################################################# // A couple of helper functions //############################################################################# // Free memory pointet to by a double pointer inline void freeCacheDouble( double*& ptr ) { if( ptr != NULL ) { delete [] ptr; ptr = NULL; } } // Free memory pointet to by a char pointer inline void freeCacheChar( char*& ptr ) { if( ptr != NULL ) { delete [] ptr; ptr = NULL; } } // Free memory pointet to by a CoinPackedMatrix pointer inline void freeCacheMatrix( CoinPackedMatrix*& ptr ) { if( ptr != NULL ) { delete ptr; ptr = NULL; } } // Function used to connect MOSEK to stream #if MSK_VERSION_MAJOR >= 7 static void MSKAPI printlog(void *ptr, const char* s) #else static void MSKAPI printlog(void *ptr, char* s) #endif { printf("%s",s); } static void MSKAPI OsiMskStreamFuncLog(MSKuserhandle_t handle, MSKCONST char* str) { if (handle) { if (((CoinMessageHandler*)handle)->logLevel() >= 1) ((CoinMessageHandler*)handle)->message(0, "MSK", str, ' ') << CoinMessageEol; } else { printf(str); printf("\n"); } } static void MSKAPI OsiMskStreamFuncWarning(MSKuserhandle_t handle, MSKCONST char* str) { if (handle) { if (((CoinMessageHandler*)handle)->logLevel() >= 0) ((CoinMessageHandler*)handle)->message(0, "MSK", str, ' ') << CoinMessageEol; } else { printf(str); printf("\n"); } } static void MSKAPI OsiMskStreamFuncError(MSKuserhandle_t handle, MSKCONST char* str) { if (handle) { ((CoinMessageHandler*)handle)->message(0, "MSK", str, ' ') << CoinMessageEol; } else { fprintf(stderr, str); fprintf(stderr, "\n"); } } // Prints a error message and throws a exception static inline void checkMSKerror( int err, const char* mskfuncname, const char* osimethod ) { if( err != MSK_RES_OK ) { char s[100]; sprintf( s, "%s returned error %d", mskfuncname, err ); std::cout << "ERROR: " << s << " (" << osimethod << " in OsiMskSolverInterface)" << std::endl; throw CoinError( s, osimethod, "OsiMskSolverInterface" ); } } // Prints a error message and throws a exception static inline void MSKassert(int assertlevel, int test, const char* assertname, const char* osimethod ) { if( assertlevel > MSK_OSI_ASSERT_LEVEL && !test ) { std::cout << "Assert: " << assertname << " (" << osimethod << " in OsiMskSolverInterface)" << std::endl; throw CoinError( assertname, osimethod, "OsiMskSolverInterface" ); } } // Converts Range/Sense/Rhs to MSK bound structure static inline void MskConvertSenseToBound(const char rowsen, const double rowrng, const double rowrhs, double &rlb, double &rub, int &rtag) { switch (rowsen) { case 'E': rlb = rowrhs; rub = rowrhs; rtag = MSK_BK_FX; break; case 'L': rlb = MSK_INFINITY; rub = rowrhs; rtag = MSK_BK_UP; break; case 'G': rlb = rowrhs; rub = MSK_INFINITY; rtag = MSK_BK_LO; break; case 'R': if( rowrng >= 0 ) { rlb = rowrhs - rowrng; rub = rowrhs; } else { rlb = rowrhs; rub = rowrhs + rowrng; } rtag = MSK_BK_RA; break; case 'N': rlb = -MSK_INFINITY; rub = MSK_INFINITY; rtag = MSK_BK_FR; break; default: MSKassert(3,1,"Unknown rowsen","MskConvertSenseToBound"); } } // Converts a set of bounds to MSK boundkeys static inline void MskConvertColBoundToTag(const double collb, const double colub, double &clb, double &cub, int &ctag) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin MskConvertColBoundToTag()\n"); #endif if(collb > -MSK_INFINITY && colub < MSK_INFINITY) { ctag = MSK_BK_RA; clb = collb; cub = colub; } else if(collb <= - MSK_INFINITY && colub < MSK_INFINITY) { ctag = MSK_BK_UP; clb = -MSK_INFINITY; cub = colub; } else if(collb > - MSK_INFINITY && colub >= MSK_INFINITY) { ctag = MSK_BK_LO; clb = collb; cub = MSK_INFINITY; } else if(collb <= -MSK_INFINITY && colub >= MSK_INFINITY) { ctag = MSK_BK_FR; clb = -MSK_INFINITY; cub = MSK_INFINITY; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End MskConvertColBoundToTag()\n"); #endif } // Returns true if "solution" is defined in MOSEK, where solution can be basic, interior or // integer resp. (MSK_SOL_BAS), (MSK_SOL_ITR) or (MSK_SOL_ITG). bool OsiMskSolverInterface::definedSolution(int solution) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::definedSolution() %p\n",(void*)this); #endif int err, res; err = MSK_solutiondef(getMutableLpPtr(), (MSKsoltypee) solution, &res); checkMSKerror(err,"MSK_solutiondef","definedSolution"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::definedSolution()\n"); #endif return ( res != MSK_RES_OK); } // Returns the flag for solver currently switched on in MOSEK resp. (MSK_OPTIMIZER_FREE), // (MSK_OPTIMIZER_INTPNT), (MSK_OPTIMIZER_PRIMAL_SIMPLEX), (MSK_OPTIMIZER_MIXED_INT), or // (MSK_OPTIMIZER_MIXED_INT_CONIC). // MOSEK also has Conic and nonconvex solvers, but these are for obvious reasons not // an option in the Osi interface. int OsiMskSolverInterface::solverUsed() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::solverUsed()\n"); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::solverUsed()\n"); #endif return MSKsolverused_; } // Switch the MOSEK solver to LP uses default solver specified by 'InitialSolver' void OsiMskSolverInterface::switchToLP( void ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::switchToLP()\n"); #endif int err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_MIO_MODE, MSK_MIO_MODE_IGNORED); checkMSKerror(err,"MSK_putintparam","switchToLp"); probtypemip_ = false; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::switchToLP()\n"); #endif } // Switch the MOSEK solver to MIP. void OsiMskSolverInterface::switchToMIP( void ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::switchToMIP()\n"); #endif int err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_MIO_MODE, MSK_MIO_MODE_SATISFIED); checkMSKerror(err,"MSK_putintparam","switchToMIP"); #if MSK_VERSION_MAJOR == 7 err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_MIXED_INT_CONIC); #else err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_MIXED_INT); #endif checkMSKerror(err,"MSK_putintparam","switchToMIP"); probtypemip_ = true; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::switchToMIP()\n"); #endif } // Resize the coltype array. void OsiMskSolverInterface::resizeColType( int minsize ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::resizeColType()\n"); #endif if( minsize > coltypesize_ ) { int newcoltypesize = 2*coltypesize_; if( minsize > newcoltypesize ) newcoltypesize = minsize; char *newcoltype = new char[newcoltypesize]; if( coltype_ != NULL ) { CoinDisjointCopyN( coltype_, coltypesize_, newcoltype ); delete[] coltype_; } coltype_ = newcoltype; coltypesize_ = newcoltypesize; } MSKassert(3,minsize == 0 || coltype_ != NULL,"Unknown rowsen","MskConvertSenseToBound"); MSKassert(3,coltypesize_ >= minsize,"coltypesize_ >= minsize","MskConvertSenseToBound"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::resizeColType()\n"); #endif } // Free coltype array void OsiMskSolverInterface::freeColType() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeColType()\n"); #endif if( coltypesize_ > 0 ) { delete[] coltype_; coltype_ = NULL; coltypesize_ = 0; } MSKassert(3,coltype_ == NULL,"coltype_ == NULL","freeColType"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeColType()\n"); #endif } //############################################################################# // Solve methods //############################################################################# //----------------------------------------------------------------------------- // Free cached results and optimize the LP problem in task void OsiMskSolverInterface::initialSolve() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::initialSolve() %p\n", (void*)this); #endif if( definedSolution( MSK_SOL_BAS ) == true ) { resolve(); } else { int err,solver; err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_SIM_HOTSTART, MSK_SIM_HOTSTART_STATUS_KEYS); checkMSKerror(err,"MSK_putintparam","initialsolve"); err = MSK_getintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, &solver); checkMSKerror(err,"MSK_getintparam","initialsolve"); switchToLP(); err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, INITIAL_SOLVE); checkMSKerror(err,"MSK_putintparam","initialSolve"); err = MSK_getintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, &MSKsolverused_); checkMSKerror(err,"MSK_getintparam","initialsolve"); #if MSK_DO_MOSEK_LOG > 0 err = MSK_putintparam( getMutableLpPtr(),MSK_IPAR_LOG_SIM,MSK_DO_MOSEK_LOG); checkMSKerror(err,"MSK_putintparam","initialsolve"); #endif Mskerr = MSK_optimize(getLpPtr( OsiMskSolverInterface::FREECACHED_RESULTS )); #if MSK_DO_MOSEK_LOG > 0 err = MSK_solutionsummary( getMutableLpPtr(),MSK_STREAM_LOG); checkMSKerror(err,"MSK_solutionsummary","initialsolve"); #endif err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, solver); checkMSKerror(err,"MSK_putintparam","initialsolve"); } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::initialSolve()\n"); #endif } //----------------------------------------------------------------------------- // Resolves an LP problem. void OsiMskSolverInterface::resolve() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::resolve %p\n", (void*)this); #endif if( definedSolution( MSK_SOL_BAS ) == true ) { int err,solver; err = MSK_getintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, &solver); checkMSKerror(err,"MSK_getintparam","resolve"); switchToLP(); err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_SIM_HOTSTART, MSK_SIM_HOTSTART_STATUS_KEYS); checkMSKerror(err,"MSK_putintparam","resolve"); err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, RESOLVE_SOLVE); checkMSKerror(err,"MSK_putintparam","resolve"); #if 0 err = MSK_putintparam( getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, 20000000 ); #endif err = MSK_getintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, &MSKsolverused_); checkMSKerror(err,"MSK_getintparam","resolve"); #if MSK_DO_MOSEK_LOG > 0 err = MSK_putintparam( getMutableLpPtr(),MSK_IPAR_LOG,MSK_DO_MOSEK_LOG); checkMSKerror(err,"MSK_putintparam","resolve"); err = MSK_putintparam( getMutableLpPtr(),MSK_IPAR_LOG_SIM,MSK_DO_MOSEK_LOG); checkMSKerror(err,"MSK_putintparam","resolve"); #endif Mskerr = MSK_optimize(getLpPtr( OsiMskSolverInterface::FREECACHED_RESULTS )); #if MSK_DO_MOSEK_LOG > 0 err = MSK_solutionsummary( getMutableLpPtr(),MSK_STREAM_LOG); printf("Mskerr : %d\n",Mskerr); #endif err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, solver); checkMSKerror(err,"MSK_putintparam","resolve"); } else { initialSolve(); } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::resolve... press any key to continue\n"); getchar(); #endif } //----------------------------------------------------------------------------- // Resolves an MIP problem with MOSEK MIP solver. void OsiMskSolverInterface::branchAndBound() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::branchAndBound()\n"); #endif switchToMIP(); int err = MSK_getintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, &MSKsolverused_); checkMSKerror(err,"MSK_getintparam","branchAndBound"); Mskerr = MSK_optimize(getLpPtr( OsiMskSolverInterface::FREECACHED_RESULTS )); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::branchAndBound()\n"); #endif } //############################################################################# // Parameter related methods //############################################################################# //----------------------------------------------------------------------------- // Sets a int parameter in MOSEK bool OsiMskSolverInterface::setIntParam(OsiIntParam key, int value) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setIntParam(%d, %d)\n", key, value); #endif bool retval = false; switch (key) { case OsiMaxNumIteration: retval = (MSK_putintparam(getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, value ) == MSK_RES_OK); break; case OsiMaxNumIterationHotStart: if (value < 0) { retval = false; } else { hotStartMaxIteration_ = value; retval = true; } break; case OsiNameDiscipline: retval = false; break; case OsiLastIntParam: retval = false; break; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setIntParam(%d, %d)\n", key, value); #endif return retval; } //----------------------------------------------------------------------------- // Sets a double parameter in MOSEK. bool OsiMskSolverInterface::setDblParam(OsiDblParam key, double value) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setDblParam(%d, %g)\n", key, value); #endif bool retval = false; switch (key) { case OsiDualObjectiveLimit: if( getObjSense() == +1 ) // Minimize retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, value ) == MSK_RES_OK ); // min else retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, value ) == MSK_RES_OK ); // max break; case OsiPrimalObjectiveLimit: if( getObjSense() == +1 ) // Minimize retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, value ) == MSK_RES_OK ); // min else retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, value ) == MSK_RES_OK ); // max break; case OsiDualTolerance: retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_BASIS_TOL_S, value ) == MSK_RES_OK ); break; case OsiPrimalTolerance: retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_BASIS_TOL_X, value ) == MSK_RES_OK ); break; case OsiObjOffset: ObjOffset_ = value; retval = true; break; case OsiLastDblParam: retval = false; break; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setDblParam(%d, %g)\n", key, value); #endif return retval; } //----------------------------------------------------------------------------- // Sets a string parameter in MOSEK. bool OsiMskSolverInterface::setStrParam(OsiStrParam key, const std::string & value) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setStrParam(%d, %s)\n", key, value.c_str()); #endif bool retval=false; switch (key) { case OsiProbName: OsiSolverInterface::setStrParam(key,value); return retval = true; case OsiSolverName: return false; case OsiLastStrParam: return false; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setStrParam(%d, %s)\n", key, value.c_str()); #endif return retval; } //----------------------------------------------------------------------------- // Gets a int parameter in MOSEK. bool OsiMskSolverInterface::getIntParam(OsiIntParam key, int& value) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getIntParam(%d)\n", key); #endif bool retval = false; switch (key) { case OsiMaxNumIteration: retval = (MSK_getintparam(getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, &value ) == MSK_RES_OK); break; case OsiMaxNumIterationHotStart: value = hotStartMaxIteration_; retval = true; break; case OsiNameDiscipline: value = 0; retval = false; break; case OsiLastIntParam: retval = false; break; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getIntParam(%d)\n", key); #endif return retval; } //----------------------------------------------------------------------------- // Get a double parameter in MOSEK. bool OsiMskSolverInterface::getDblParam(OsiDblParam key, double& value) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getDblParam(%d)\n", key); #endif bool retval = false; switch (key) { case OsiDualObjectiveLimit: if( getObjSense() == +1 ) retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value ) == MSK_RES_OK ); // max else retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value ) == MSK_RES_OK ); // min break; case OsiPrimalObjectiveLimit: if( getObjSense() == +1 ) retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value ) == MSK_RES_OK ); // min else retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value ) == MSK_RES_OK ); // max break; case OsiDualTolerance: retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_BASIS_TOL_S, &value ) == MSK_RES_OK ); break; case OsiPrimalTolerance: retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_BASIS_TOL_X, &value ) == MSK_RES_OK ); break; case OsiObjOffset: value = ObjOffset_; retval = true; break; case OsiLastDblParam: retval = false; break; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getDblParam(%d)\n", key); #endif return retval; } //----------------------------------------------------------------------------- // Gets a string parameter from MOSEK bool OsiMskSolverInterface::getStrParam(OsiStrParam key, std::string & value) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getStrParam(%d)\n", key); #endif switch (key) { case OsiProbName: OsiSolverInterface::getStrParam(key, value); break; case OsiSolverName: value = "MOSEK"; break; case OsiLastStrParam: return false; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getStrParam(%d)\n", key); #endif return true; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# //----------------------------------------------------------------------------- // Returns true if solver abandoned in last call to solver. // Mosek does not use this functionality bool OsiMskSolverInterface::isAbandoned() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isAbandoned()\n"); debugMessage("isAbandoned() %d\n",(Mskerr != MSK_RES_OK)); debugMessage("End OsiMskSolverInterface::isAbandoned()\n"); #endif return (Mskerr != MSK_RES_OK); } //----------------------------------------------------------------------------- // Returns true if "solution" available is proved to be optimal, where "solution" in LP // could be both interior and basic, checks for both. bool OsiMskSolverInterface::isProvenOptimal() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isProvenOptimal()\n"); #endif int err; MSKsolstae status; MSKsoltypee solution; if( probtypemip_ == false) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else { if( definedSolution( MSK_SOL_ITR ) == true ) solution = MSK_SOL_ITR; else return false; } } else { if( definedSolution( MSK_SOL_ITG ) == true ) solution = MSK_SOL_ITG; else return false; } err = MSK_getsolution(getMutableLpPtr(), solution, NULL, &status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror(err,"MSK_getsolution","isProvenOptimal"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Solution type , %d status %d \n ",(status == MSK_SOL_STA_OPTIMAL), status) ; debugMessage("End OsiMskSolverInterface::isProvenOptimal()\n"); #endif return ( status == MSK_SOL_STA_OPTIMAL || status == MSK_SOL_STA_INTEGER_OPTIMAL); } //----------------------------------------------------------------------------- // Returns true if a certificate of primal inf. exits bool OsiMskSolverInterface::isProvenPrimalInfeasible() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isProvenPrimalInfeasible()\n"); #endif int err; MSKsolstae status; MSKsoltypee solution; if( probtypemip_ == false) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else { if( definedSolution( MSK_SOL_ITR ) == true ) solution = MSK_SOL_ITR; else return false; } } else { if( definedSolution( MSK_SOL_ITG ) == true) solution = MSK_SOL_ITG; else return false; } err = MSK_getsolution(getMutableLpPtr(), solution, NULL, &status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror(err,"MSK_getsolution","isProvenPrimalInfeasible"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("isProvenPrimalInfeasible %d \n",(status == MSK_SOL_STA_PRIM_INFEAS_CER)); debugMessage("End OsiMskSolverInterface::isProvenPrimalInfeasible()\n"); #endif return ( status == MSK_SOL_STA_PRIM_INFEAS_CER ); } //----------------------------------------------------------------------------- // Should return true if a certificate of dual inf. exits // But COIN does not support this feature thus we return false bool OsiMskSolverInterface::isProvenDualInfeasible() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isProvenDualInfeasible()\n"); #endif int err; MSKsolstae status; MSKsoltypee solution; if( probtypemip_ == false ) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else { if( definedSolution( MSK_SOL_ITR ) == true ) solution = MSK_SOL_ITR; else return false; } } else { if( definedSolution( MSK_SOL_ITG ) == true) solution = MSK_SOL_ITG; else return false; } err = MSK_getsolution(getMutableLpPtr(), solution, NULL, &status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); checkMSKerror(err,"MSK_getsolution","isProvenDualInfeasible"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("isProvenDualInfeasible %d \n",(status == MSK_SOL_STA_DUAL_INFEAS_CER)); debugMessage("End OsiMskSolverInterface::isProvenDualInfeasible()\n"); #endif return ( status == MSK_SOL_STA_DUAL_INFEAS_CER ); } //----------------------------------------------------------------------------- // Returns true if primal objective limit is reached. Checks the objective sense // first. bool OsiMskSolverInterface::isPrimalObjectiveLimitReached() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isPrimalObjectiveLimitReached()\n"); #endif if( Mskerr == MSK_RES_TRM_OBJECTIVE_RANGE ) { int err; double obj = getObjValue(),value=MSK_INFINITY; if( getObjSense() == +1 ) { err = MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value); checkMSKerror(err,"MSK_getdouparam","isPrimalObjectiveLimitReached"); } else { err = MSK_getdouparam(getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value ); checkMSKerror(err,"MSK_getdouparam","isPrimalObjectiveLimitReached"); obj = -obj; value = -value; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("primal objective value %-16.10e , lowerbound %-16.10e , reached %d \n",obj,value,(value <= obj)); debugMessage("End OsiMskSolverInterface::isPrimalObjectiveLimitReached()\n"); #endif return ( !( value == MSK_INFINITY || value == -MSK_INFINITY ) && value > obj ); } else { if( Mskerr == MSK_RES_OK ) { if( definedSolution( MSK_SOL_BAS ) == true ) { int err; double obj = getObjValue(),value=MSK_INFINITY; if( getObjSense() == +1 ) { err = MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value); checkMSKerror(err,"MSK_getdouparam","isPrimalObjectiveLimitReached"); return (obj < value); } else { err = MSK_getdouparam(getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value ); checkMSKerror(err,"MSK_getdouparam","isPrimalObjectiveLimitReached"); obj = -obj; value = -value; return (obj < value); } } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::isPrimalObjectiveLimitReached()\n"); #endif return false; } } //----------------------------------------------------------------------------- // Returns true if dual objective limit is reached. Checks the objective sense // first. bool OsiMskSolverInterface::isDualObjectiveLimitReached() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isDualObjectiveLimitReached()\n"); #endif if( Mskerr == MSK_RES_TRM_OBJECTIVE_RANGE ) { int err; double obj = getObjValue(),value=MSK_INFINITY; if( getObjSense() == +1 ) { err = MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value); checkMSKerror(err,"MSK_getdouparam","isDualObjectiveLimitReached"); } else { err = MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value ); checkMSKerror(err,"MSK_getdouparam","isDualObjectiveLimitReached"); obj = -obj; value = -value; } checkMSKerror( err, "MSK_getdouparam", "isPrimalObjectiveLimitReached" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("dual objective value %f , lowerbound %f , reached %i \n",obj,value,(value <= obj)); debugMessage("End OsiMskSolverInterface::isDualObjectiveLimitReached()\n"); #endif return ( !( value == MSK_INFINITY || value == -MSK_INFINITY ) && value <= obj ); } else { if( Mskerr == MSK_RES_OK ) { if( definedSolution( MSK_SOL_BAS ) == true ) { int err; double obj = getObjValue(),value=MSK_INFINITY; if( getObjSense() == +1 ) { err = MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value); checkMSKerror(err,"MSK_getdouparam","isDualObjectiveLimitReached"); return (obj > value); } else { err = MSK_getdouparam(getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value ); checkMSKerror(err,"MSK_getdouparam","isDualObjectiveLimitReached"); obj = -obj; value = -value; return (obj > value); } } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::isDualObjectiveLimitReached()\n"); #endif return false; } } //----------------------------------------------------------------------------- // Returns true if iteration number used in last call to optimize eq. max number for // the solver used. bool OsiMskSolverInterface::isIterationLimitReached() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isIterationLimitReached()\n"); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("iteration limit reached %d \n",Mskerr); debugMessage("End OsiMskSolverInterface::isIterationLimitReached()\n"); #endif return Mskerr == MSK_RES_TRM_MAX_ITERATIONS; } //----------------------------------------------------------------------------- // Returns true if a license problem occured in last call to optimize. bool OsiMskSolverInterface::isLicenseError() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isLicenseError()\n"); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("license error %d \n",Mskerr); debugMessage("End OsiMskSolverInterface::isLicenseError()\n"); #endif return Mskerr >= MSK_RES_ERR_LICENSE && Mskerr <= MSK_RES_ERR_LICENSE_NO_SERVER_SUPPORT; } //############################################################################# // WarmStart related methods //############################################################################# // Get an empty warm start object CoinWarmStart* OsiMskSolverInterface::getEmptyWarmStart () const { return (dynamic_cast(new CoinWarmStartBasis())) ; } //----------------------------------------------------------------------------- // Get warm start, returns NULL pointer if not available CoinWarmStart* OsiMskSolverInterface::getWarmStart() const { CoinWarmStartBasis* ws = NULL; int numbas = 0,numcols = getNumCols(),numrows = getNumRows(),*skx,*skc, err, i,*bkc,*bkx; double *blc,*buc,*blx,*bux,*xc,*xx; bool skip = false; #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::getWarmStart numcols %d numrows %d %p\n",numcols,numrows, (void*)this); #endif skx = new int[numcols]; skc = new int[numrows]; bkc = new int[numrows]; blc = new double[numrows]; buc = new double[numrows]; xc = new double[numrows]; bkx = new int[numcols]; blx = new double[numcols]; bux = new double[numcols]; xx = new double[numcols]; #if MSK_VERSION_MAJOR < 9 err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_CON, 0, numrows, (MSKboundkeye*)bkc, (MSKrealt*)blc, (MSKrealt*)buc); checkMSKerror( err, "MSK_getboundslice", "getWarmStart" ); err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_VAR, 0, numcols, (MSKboundkeye*)bkx, (MSKrealt*)blx, (MSKrealt*)bux); checkMSKerror( err, "MSK_getboundslice", "getWarmStart" ); #else err = MSK_getconboundslice(getMutableLpPtr(), 0, numrows, (MSKboundkeye*)bkc, (MSKrealt*)blc, (MSKrealt*)buc); checkMSKerror( err, "getconboundslice", "getWarmStart" ); err = MSK_getvarboundslice(getMutableLpPtr(), 0, numcols, (MSKboundkeye*)bkx, (MSKrealt*)blx, (MSKrealt*)bux); checkMSKerror( err, "MSK_getvarboundslice", "getWarmStart" ); #endif MSKassert(3,!probtypemip_,"!probtypemip_","getWarmStart"); if( definedSolution( MSK_SOL_BAS ) == true ) { err = MSK_getsolution(getMutableLpPtr(), MSK_SOL_BAS, NULL, NULL, (MSKstakeye*)skc, (MSKstakeye*)skx, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror( err, "MSK_getsolution", "getWarmStart" ); } else { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("No basic solution in OsiMskSolverInterface::getWarmStart()\n"); #endif /* No basic solution stored choose slack basis */ /* Otherwise the unittest can not be passed */ ws = new CoinWarmStartBasis; ws->setSize( numcols, numrows ); for( i = 0; i < numrows; ++i ) ws->setArtifStatus( i, CoinWarmStartBasis::basic ); numbas = numrows; for( i = 0; i < numcols; ++i ) { switch(bkx[i]) { case MSK_BK_RA: case MSK_BK_LO: ws->setStructStatus( i, CoinWarmStartBasis::atLowerBound ); break; case MSK_BK_FX: case MSK_BK_UP: ws->setStructStatus( i, CoinWarmStartBasis::atUpperBound ); break; case MSK_BK_FR: ws->setStructStatus( i, CoinWarmStartBasis::isFree ); break; default: checkMSKerror( 1, "Wrong bound key", "getWarmStart" ); } } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::getWarmStart()\n"); #endif delete[] skc; delete[] skx; delete[] bkc; delete[] blc; delete[] buc; delete[] xc; delete[] bkx; delete[] blx; delete[] bux; delete[] xx; /* Leave function */ return ws; } if( err == MSK_RES_OK ) { /* Status keys should be defined */ ws = new CoinWarmStartBasis; MSKassert(3,ws != NULL,"1) ws != NULL","getWarmStart"); ws->setSize( numcols, numrows ); for( i = 0; i < numrows && ws != NULL; ++i ) { switch( skc[i] ) { case MSK_SK_UNK: case MSK_SK_BAS: /* Warning : Slacks in Osi and Mosek er negated */ ws->setArtifStatus( i, CoinWarmStartBasis::basic ); ++numbas; break; case MSK_SK_LOW: /* Warning : Slacks in Osi and Mosek er negated */ ws->setArtifStatus( i, CoinWarmStartBasis::atUpperBound ); break; case MSK_SK_FIX: case MSK_SK_UPR: /* Warning : Slacks in Osi and Mosek er negated */ ws->setArtifStatus( i, CoinWarmStartBasis::atLowerBound ); break; case MSK_SK_SUPBAS: ws->setArtifStatus( i, CoinWarmStartBasis::isFree ); break; default: // unknown row status delete ws; ws = NULL; skip = true; checkMSKerror( 1, "Wrong slack status key", "getWarmStart" ); break; } } if( skip == false ) { for( i = 0; i < numcols && ws != NULL; ++i ) { switch( skx[i] ) { case MSK_SK_UNK: case MSK_SK_BAS: ++numbas; ws->setStructStatus( i, CoinWarmStartBasis::basic ); break; case MSK_SK_FIX: case MSK_SK_LOW: ws->setStructStatus( i, CoinWarmStartBasis::atLowerBound ); break; case MSK_SK_UPR: ws->setStructStatus( i, CoinWarmStartBasis::atUpperBound ); break; case MSK_SK_SUPBAS: ws->setStructStatus( i, CoinWarmStartBasis::isFree ); break; default: // unknown column status delete ws; ws = NULL; checkMSKerror( 1, "Wrong variable status key", "getWarmStart" ); break; } } } } delete[] skx; delete[] skc; delete[] bkc; delete[] blc; delete[] buc; delete[] xc; delete[] bkx; delete[] blx; delete[] bux; delete[] xx; MSKassert(3,ws!=NULL,"2) ws!=NULL","getWarmStart"); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::getWarmStart() (%p) numcols %d numrows %d numbas %d\n",(void*)(ws),numcols,numrows,numbas); #endif return ws; } //----------------------------------------------------------------------------- // Set warm start bool OsiMskSolverInterface::setWarmStart(const CoinWarmStart* warmstart) { const CoinWarmStartBasis* ws = dynamic_cast(warmstart); int numcols, numrows, i, restat,numbas=0; int *skx, *skc, *bkc, *bkx; bool retval = false, skip = false; if( !ws ) return false; numcols = ws->getNumStructural(); numrows = ws->getNumArtificial(); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::setWarmStart(%p) this = %p numcols %d numrows %d\n", (void *)warmstart,(void*)this,numcols,numrows); #endif if( numcols != getNumCols() || numrows != getNumRows() ) return false; switchToLP(); skx = new int[numcols]; skc = new int[numrows]; bkc = new int[numrows]; #if MSK_VERSION_MAJOR < 9 restat = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_CON, 0, numrows, (MSKboundkeye*) (bkc), NULL, NULL); checkMSKerror( restat, "MSK_getboundslice", "setWarmStart" ); #else restat = MSK_getconboundslice(getMutableLpPtr(), 0, numrows, (MSKboundkeye*) (bkc), NULL, NULL); checkMSKerror( restat, "MSK_getconboundslice", "setWarmStart" ); #endif for( i = 0; i < numrows; ++i ) { switch( ws->getArtifStatus( i ) ) { case CoinWarmStartBasis::basic: skc[i] = MSK_SK_BAS; ++numbas; break; /* Warning : Slacks in Osi and Mosek er negated */ case CoinWarmStartBasis::atUpperBound: switch(bkc[i]) { case MSK_BK_LO: case MSK_BK_RA: skc[i] = MSK_SK_LOW; break; case MSK_BK_FX: skc[i] = MSK_SK_FIX; break; default: skc[i] = MSK_SK_UNK; break; } break; /* Warning : Slacks in Osi and Mosek er negated */ case CoinWarmStartBasis::atLowerBound: switch(bkc[i]) { case MSK_BK_UP: case MSK_BK_RA: skc[i] = MSK_SK_UPR; break; case MSK_BK_FX: skc[i] = MSK_SK_FIX; break; default: skc[i] = MSK_SK_UNK; break; } break; case CoinWarmStartBasis::isFree: skc[i] = MSK_SK_SUPBAS; break; default: // unknown row status retval = false; skip = true; MSKassert(3,1,"Unkown rowstatus","setWarmStart"); break; } } delete[] bkc; if( skip == false ) { bkx = new int[numcols]; #if MSK_VERSION_MAJOR < 9 restat = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_VAR, 0, numcols, (MSKboundkeye*) (bkx), NULL, NULL); checkMSKerror( restat, "MSK_getboundslice", "setWarmStart" ); #else restat = MSK_getvarboundslice(getMutableLpPtr(), 0, numcols, (MSKboundkeye*) (bkx), NULL, NULL); checkMSKerror( restat, "MSK_getvarboundslice", "setWarmStart" ); #endif for( i = 0; i < numcols; ++i ) { switch( ws->getStructStatus( i ) ) { case CoinWarmStartBasis::basic: skx[i] = MSK_SK_BAS; ++numbas; break; case CoinWarmStartBasis::atLowerBound: switch(bkx[i]) { case MSK_BK_LO: case MSK_BK_RA: skx[i] = MSK_SK_LOW; break; case MSK_BK_FX: skx[i] = MSK_SK_FIX; default: skx[i] = MSK_SK_UNK; break; } break; case CoinWarmStartBasis::atUpperBound: switch(bkx[i]) { case MSK_BK_UP: case MSK_BK_RA: skx[i] = MSK_SK_UPR; break; case MSK_BK_FX: skx[i] = MSK_SK_FIX; default: skx[i] = MSK_SK_UNK; break; } break; case CoinWarmStartBasis::isFree: skx[i] = MSK_SK_SUPBAS; break; default: // unknown col status retval = false; skip = true; MSKassert(3,1,"Unkown col status","setWarmStart"); break; } } delete[] bkx; } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("OsiMskSolverInterface::setWarmStart(%p) numcols %d numrows %d numbas %d\n", (void *)warmstart,numcols,numrows,numbas); #endif #if 0 MSKassert(3,numbas == numrows,"Wrong number of basis variables","setWarmStart"); #endif if( skip == false ) { restat = MSK_putsolution( getLpPtr( OsiMskSolverInterface::FREECACHED_RESULTS ), MSK_SOL_BAS, (MSKstakeye*) (skc), (MSKstakeye*) (skx), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); delete[] skx; delete[] skc; } else { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Skipping setting values in OsiMskSolverInterface::setWarmStart()\n"); #endif #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::setWarmStart(%p)\n", (void *)warmstart); #endif delete[] skx; delete[] skc; return false; } retval = (restat == MSK_RES_OK); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::setWarmStart(%p)\n", (void *)warmstart); #endif return retval; } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# //----------------------------------------------------------------------------- // Mark hot start void OsiMskSolverInterface::markHotStart() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::markHotStart()\n"); #endif int err; int numcols, numrows; MSKassert(3,!probtypemip_,"probtypemip_","markHotStart"); numcols = getNumCols(); numrows = getNumRows(); if( numcols > hotStartCStatSize_ ) { delete[] hotStartCStat_; hotStartCStatSize_ = static_cast( 1.0 * static_cast( numcols ) ); // get some extra space for future hot starts hotStartCStat_ = new int[hotStartCStatSize_]; } if( numrows > hotStartRStatSize_ ) { delete[] hotStartRStat_; hotStartRStatSize_ = static_cast( 1.0 * static_cast( numrows ) ); // get some extra space for future hot starts hotStartRStat_ = new int[hotStartRStatSize_]; } err = MSK_getsolution(getMutableLpPtr(), MSK_SOL_BAS, NULL, NULL, (MSKstakeye*) (hotStartRStat_), (MSKstakeye*) (hotStartCStat_), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror( err, "MSK_getsolution", "markHotStart" ); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::markHotStart()\n"); #endif } //----------------------------------------------------------------------------- // Solve from a hot start void OsiMskSolverInterface::solveFromHotStart() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::solveFromHotStart()\n"); #endif int err; int maxiter; switchToLP(); MSKassert(3,getNumCols() <= hotStartCStatSize_,"getNumCols() <= hotStartCStatSize_","solveFromHotStart"); MSKassert(3,getNumRows() <= hotStartRStatSize_,"getNumRows() <= hotStartRStatSize_","solveFromHotStart"); err = MSK_putsolution(getLpPtr( OsiMskSolverInterface::FREECACHED_RESULTS ), MSK_SOL_BAS, (MSKstakeye*) (hotStartRStat_), (MSKstakeye*) (hotStartCStat_), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror( err, "MSK_putsolution", "solveFromHotStart" ); err = MSK_getintparam( getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, &maxiter ); checkMSKerror( err, "MSK_getintparam", "solveFromHotStart" ); err = MSK_putintparam( getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, hotStartMaxIteration_ ); checkMSKerror( err, "MSK_putintparam", "solveFromHotStart" ); resolve(); err = MSK_putintparam( getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, maxiter ); checkMSKerror( err, "MSK_putintparam", "solveFromHotStart" ); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::solveFromHotStart()\n"); #endif } //----------------------------------------------------------------------------- // Unmark a hot start void OsiMskSolverInterface::unmarkHotStart() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::unmarkHotStart()\n"); #endif freeCachedData(); if( hotStartCStat_ != NULL ) delete[] hotStartCStat_; if( hotStartRStat_ != NULL ) delete[] hotStartRStat_; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::unmarkHotStart()\n"); #endif } //############################################################################# // Problem information methods (original data) //############################################################################# //----------------------------------------------------------------------------- // Returns number of columns in MOSEK task int OsiMskSolverInterface::getNumCols() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getNumCols()\n"); #endif int numcol, err; err = MSK_getnumvar(getMutableLpPtr(),&numcol); checkMSKerror( err, "MSK_getnumvar", "getNumCols" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getNumCols()\n"); #endif return numcol; } //----------------------------------------------------------------------------- // Returns number of rows in MOSEK task int OsiMskSolverInterface::getNumRows() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getNumRows()\n"); #endif int numrow, err; err = MSK_getnumcon(getMutableLpPtr(),&numrow); checkMSKerror( err, "MSK_getnumcon", "getNumRows" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getNumRows()\n"); #endif return numrow; } //----------------------------------------------------------------------------- // Returns number of non-zeroes (in matrix) in MOSEK task int OsiMskSolverInterface::getNumElements() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getNumElements()\n"); #endif int numnon, err; err = MSK_getnumanz(getMutableLpPtr(),&numnon); checkMSKerror( err, "MSK_getnumanz", "getNumElements" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getNumElements()\n"); #endif return numnon; } //----------------------------------------------------------------------------- // Returns lower bounds on columns in MOSEK task const double * OsiMskSolverInterface::getColLower() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getColLower()\n"); #endif if(collower_ == NULL ) { int ncols = getNumCols(); MSKassert(3,colupper_ == NULL,"colupper_","getColLower"); if( ncols > 0 ) { if(colupper_ == NULL) colupper_ = new double[ncols]; if(collower_ == NULL) collower_ = new double[ncols]; int *dummy_tags = new int[ncols]; #if MSK_VERSION_MAJOR < 9 int err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_VAR, (MSKidxt)0, (MSKidxt)ncols, (MSKboundkeye*) (dummy_tags), collower_, colupper_); checkMSKerror(err, "MSK_getboundslice","getColUpper"); #else int err = MSK_getvarboundslice(getMutableLpPtr(), 0, ncols, (MSKboundkeye*) (dummy_tags), collower_, colupper_); checkMSKerror(err, "MSK_getvarboundslice","getColUpper"); #endif for( int k = 0; k < ncols; ++k ) { if( dummy_tags[k] == MSK_BK_UP || dummy_tags[k] == MSK_BK_FR ) { /* No lower */ collower_[k] = -getInfinity(); } if( dummy_tags[k] == MSK_BK_LO || dummy_tags[k] == MSK_BK_FR ) { /* No upper */ colupper_[k] = getInfinity(); } } delete[] dummy_tags; } else { if(colupper_ != NULL) delete [] colupper_; if(collower_ != NULL) delete [] collower_; colupper_ = collower_ = NULL; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getColLower()\n"); #endif return collower_; } //----------------------------------------------------------------------------- // Returns upper bounds on columns in MOSEK task const double * OsiMskSolverInterface::getColUpper() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getColUpper()\n"); #endif if( colupper_ == NULL ) { int ncols = getNumCols(); MSKassert(3,collower_ == NULL,"collower_ == NULL","getColUpper"); if( ncols > 0 ) { if(colupper_ == NULL) colupper_ = new double[ncols]; if(collower_ == NULL) collower_ = new double[ncols]; int *dummy_tags = new int[ncols]; #if MSK_VERSION_MAJOR < 9 int err = MSK_getboundslice( getMutableLpPtr(), MSK_ACC_VAR, (MSKidxt)0, (MSKidxt)ncols, (MSKboundkeye*) (dummy_tags), collower_, colupper_); checkMSKerror(err,"MSK_getboundslice","getColUpper"); #else int err = MSK_getvarboundslice( getMutableLpPtr(), 0, ncols, (MSKboundkeye*) (dummy_tags), collower_, colupper_); checkMSKerror(err,"MSK_getvarboundslice","getColUpper"); #endif delete[] dummy_tags; } else { if(colupper_ != NULL) delete [] colupper_; if(collower_ != NULL) delete [] collower_; colupper_ = collower_ = NULL; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getColUpper()\n"); #endif return colupper_; } //----------------------------------------------------------------------------- // Returns rowsense in MOSEK task, call getRightHandSide to produce triplets. const char * OsiMskSolverInterface::getRowSense() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowSense()\n"); #endif if( rowsense_==NULL ) { getRightHandSide(); if( getNumRows() != 0 ) MSKassert(3,rowsense_!=NULL,"rowsense_!=NULL","getRowSense"); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowSense()\n"); #endif return rowsense_; } //----------------------------------------------------------------------------- // Returns the RHS in triplet form. MOSEK uses always boundkeys instead of the // triplet, so we have to convert back to triplet. const double * OsiMskSolverInterface::getRightHandSide() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRightHandSide()\n"); #endif if(rowsense_ == NULL) { int nr = getNumRows(); if ( nr != 0 ) { MSKassert(3,(rhs_ == NULL) && (rowrange_ == NULL),"(rhs_ == NULL) && (rowrange_ == NULL)","getRightHandSide"); rowsense_ = new char[nr]; rhs_ = new double[nr]; rowrange_ = new double[nr]; const double * lb = getRowLower(); const double * ub = getRowUpper(); int i; for ( i=0; i 3 debugMessage("End OsiMskSolverInterface::getRightHandSide()\n"); #endif return rhs_; } //----------------------------------------------------------------------------- // Returns rowrange in MOSEK task, call getRightHandSide to produce triplets. const double * OsiMskSolverInterface::getRowRange() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowRange()\n"); #endif if( rowrange_ == NULL ) { getRightHandSide(); MSKassert(3,rowrange_!=NULL || getNumRows() == 0,"rowrange_!=NULL || getNumRows() == 0","getRowRange"); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowRange()\n"); #endif return rowrange_; } //----------------------------------------------------------------------------- // Returns lower bounds on rows in MOSEK task. const double * OsiMskSolverInterface::getRowLower() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowLower()\n"); #endif if( rowlower_ == NULL ) { MSKassert(3,rowupper_ == NULL,"rowupper_ == NULL","getRowLower"); int nrows = getNumRows(); if( nrows > 0 ) { rowlower_ = new double[nrows]; rowupper_ = new double[nrows]; int *dummy_tags = new int[nrows]; #if MSK_VERSION_MAJOR < 9 int err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_CON, (MSKidxt)0, (MSKidxt)nrows, (MSKboundkeye*) (dummy_tags), rowlower_, rowupper_); checkMSKerror(err,"MSK_getboundslice","getRowLower"); #else int err = MSK_getconboundslice(getMutableLpPtr(), 0, nrows, (MSKboundkeye*) (dummy_tags), rowlower_, rowupper_); checkMSKerror(err,"MSK_getconboundslice","getRowLower"); #endif delete[] dummy_tags; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowLower()\n"); #endif return rowlower_; } //----------------------------------------------------------------------------- // Returns upper bounds on rows in MOSEK task. const double * OsiMskSolverInterface::getRowUpper() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowUpper()\n"); #endif if( rowupper_ == NULL ) { MSKassert(3,rowlower_ == NULL,"probtypemip_","getRowUpper"); int nrows = getNumRows(); if( nrows > 0 ) { rowupper_ = new double[nrows]; rowlower_ = new double[nrows]; int *dummy_tags = new int[nrows]; #if MSK_VERSION_MAJOR < 9 int err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_CON, (MSKidxt)0, (MSKidxt)nrows, (MSKboundkeye*) (dummy_tags), rowlower_, rowupper_); checkMSKerror(err,"MSK_getboundslice","getRowUpper"); #else int err = MSK_getconboundslice(getMutableLpPtr(), 0, nrows, (MSKboundkeye*) (dummy_tags), rowlower_, rowupper_); checkMSKerror(err,"MSK_getconboundslice","getRowUpper"); #endif delete[] dummy_tags; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowUpper()\n"); #endif return rowupper_; } //----------------------------------------------------------------------------- // Returns objective coefficient in MOSEK task. const double * OsiMskSolverInterface::getObjCoefficients() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getObjCoefficients()\n"); #endif if( obj_ == NULL ) { int ncols = getNumCols(); if( ncols > 0 ) { obj_ = new double[ncols]; int err = MSK_getc( getMutableLpPtr(), obj_ ); checkMSKerror( err, "MSK_getc", "getObjCoefficients" ); } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getObjCoefficients()\n"); #endif return obj_; } //----------------------------------------------------------------------------- // Returns the direction of optimization double OsiMskSolverInterface::getObjSense() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getObjSense()\n"); #endif int err; MSKobjsensee objsen; err = MSK_getobjsense(getMutableLpPtr(), &objsen); checkMSKerror(err,"MSK_getintparam","getObjSense"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getObjSense()\n"); #endif if( objsen == MSK_OBJECTIVE_SENSE_MAXIMIZE ) return -1.0; else return +1.0; } //----------------------------------------------------------------------------- // Returns true if variabel is set to continuous bool OsiMskSolverInterface::isContinuous( int colNumber ) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isContinuous(%d)\n", colNumber); debugMessage("End OsiMskSolverInterface::isContinuous(%d)\n", colNumber); #endif return getCtype()[colNumber] == 'C'; } //----------------------------------------------------------------------------- // Returns a Coin matrix by row const CoinPackedMatrix * OsiMskSolverInterface::getMatrixByRow() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getMatrixByRow()\n"); #endif if ( matrixByRow_ == NULL ) { int nc, nr, nz, *sub, *ptrb, *ptre, surp, *len; double *val; nc = getNumCols(); nr = getNumRows(); nz = surp = getNumElements(); ptrb = new int[nr+1]; ptre = new int[nr]; sub = new int[nz]; val = new double[nz]; len = new int[nr]; ptrb[nr] = nz; #if MSK_VERSION_MAJOR < 9 int err = MSK_getaslice(getMutableLpPtr(), MSK_ACC_CON, 0, nr, nz, &surp, ptrb, ptre, sub, val); checkMSKerror(err, "MSK_getaslice", "getMatrixByRow"); #else int err = MSK_getarowslice(getMutableLpPtr(), 0, nr, nz, &surp, ptrb, ptre, sub, val); checkMSKerror(err, "MSK_getarowslice", "getMatrixByRow"); #endif for(int i=0; iassignMatrix(false , nc, nr, nz, val, sub, ptrb, len); MSKassert(3,matrixByRow_->getNumCols()==nc,"matrixByRow_->getNumCols()==nc","getMatrixByRow"); MSKassert(3,matrixByRow_->getNumRows()==nr,"matrixByRow_->getNumRows()==nr","getMatrixByRow"); delete[] ptrb; delete[] ptre; delete[] sub; delete[] val; delete[] len; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getMatrixByRow()\n"); #endif return matrixByRow_; } //----------------------------------------------------------------------------- // Returns a Coin matrix by column const CoinPackedMatrix * OsiMskSolverInterface::getMatrixByCol() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getMatrixByCol()\n"); #endif if ( matrixByCol_ == NULL ) { int nc, nr, nz, *sub, *ptrb, *ptre, surp, *len; double *val; nc = getNumCols(); nr = getNumRows(); nz = surp = getNumElements(); ptrb = new int[nc+1]; ptre = new int[nc]; sub = new int[nz]; val = new double[nz]; len = new int[nc]; ptrb[nc] = nz; #if MSK_VERSION_MAJOR < 9 int err = MSK_getaslice(getMutableLpPtr(), MSK_ACC_VAR, 0, nc, nz, &surp, ptrb, ptre, sub, val); checkMSKerror(err, "MSK_getaslice", "getMatrixByCol"); #else int err = MSK_getacolslice(getMutableLpPtr(), 0, nc, nz, &surp, ptrb, ptre, sub, val); checkMSKerror(err, "MSK_getacolslice", "getMatrixByCol"); #endif for(int i=0; iassignMatrix(true , nr, nc, nz, val, sub, ptrb, len); MSKassert(3,matrixByCol_->getNumCols()==nc,"matrixByCol_->getNumCols()==nc","getMatrixByCol"); MSKassert(3,matrixByCol_->getNumRows()==nr,"matrixByCol_->getNumRows()==nr","getMatrixByCol"); delete[] ptrb; delete[] ptre; delete[] sub; delete[] val; delete[] len; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getMatrixByCol()\n"); #endif return matrixByCol_; } //----------------------------------------------------------------------------- // Returns the infinity level used in MOSEK. double OsiMskSolverInterface::getInfinity() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getInfinity()\n"); debugMessage("End OsiMskSolverInterface::getInfinity()\n"); #endif return MSK_INFINITY; } //############################################################################# // Problem information methods (results) //############################################################################# //----------------------------------------------------------------------------- // Returns the current col solution. const double * OsiMskSolverInterface::getColSolution() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getColSolution() %p\n",(void*)this); #endif if( colsol_ != NULL ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("colsol_ != NULL\n"); #endif return colsol_; } int i; int nc = getNumCols(); if( nc > 0 ) { MSKsoltypee solution = MSK_SOL_END; if(colsol_ == NULL) colsol_ = new double[nc]; if( probtypemip_ == false) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else if( definedSolution( MSK_SOL_ITR) == true ) solution = MSK_SOL_ITR; } else if( definedSolution( MSK_SOL_ITG ) == true ) solution = MSK_SOL_ITG; if ( solution == MSK_SOL_END ) { double const *cl=getColLower(),*cu=getColLower(); /* this is just plain stupid, but needed to pass unit test */ for( i = 0; i < nc; ++i ) { if( cl[i] > -getInfinity() ) { colsol_[i] = cl[i]; } else if( cu[i] < getInfinity() ) { colsol_[i] = cu[i]; } else { colsol_[i] = 0.0; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("colsol_ truncated to zero due to no solution\n"); debugMessage("probtypemip_ %d\n",probtypemip_); #endif return colsol_; } int err = MSK_getsolution(getMutableLpPtr(), solution, NULL, NULL, NULL, NULL, NULL, NULL, colsol_, NULL, NULL, NULL, NULL, NULL, NULL ); checkMSKerror(err,"MSK_getsolution","getColSolution"); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getColSolution()\n"); #endif return colsol_; } //----------------------------------------------------------------------------- // Returns the row price / dual variabels in MOSEK task const double * OsiMskSolverInterface::getRowPrice() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowPrice()\n"); #endif if( rowsol_ == NULL ) { int i; int nr = getNumRows(); if( nr > 0 ) { MSKsoltypee solution = MSK_SOL_END; rowsol_ = new double[nr]; if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else if( definedSolution( MSK_SOL_ITR) == true ) solution = MSK_SOL_ITR; if ( solution == MSK_SOL_END ) { for( i = 0; i < nr; ++i ) rowsol_[i] = 0.0; return rowsol_; } int err = MSK_getsolution(getMutableLpPtr(), solution, NULL, NULL, NULL, NULL, NULL, NULL, NULL, rowsol_, NULL, NULL, NULL, NULL, NULL); checkMSKerror( err, "MSK_getsolution", "getRowPrice" ); } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowPrice()\n"); #endif return rowsol_; } //----------------------------------------------------------------------------- // Returns the reduced cost in MOSEK task. const double * OsiMskSolverInterface::getReducedCost() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getReducedCost()\n"); #endif if( redcost_ == NULL ) { int ncols = getNumCols(); if( ncols > 0 ) { MSKsoltypee solution = MSK_SOL_END; if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else if( definedSolution( MSK_SOL_ITR) == true ) solution = MSK_SOL_ITR; if ( solution == MSK_SOL_END ) return NULL; redcost_ = new double[ncols]; double *slx = new double[ncols]; double *sux = new double[ncols]; int err = MSK_getsolution(getMutableLpPtr(), solution, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, slx, sux, NULL); // Calculate reduced cost for(int i = 0; i < ncols; i++) redcost_[i] = slx[i]-sux[i]; delete[] slx; delete[] sux; checkMSKerror( err, "MSK_getsolution", "getReducedCost" ); } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getReducedCost()\n"); #endif return redcost_; } //----------------------------------------------------------------------------- // Returns the rowactivity in MOSEK task. const double * OsiMskSolverInterface::getRowActivity() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowActivity()\n"); #endif if( rowact_ == NULL ) { int nrows = getNumRows(); if( nrows > 0 ) { rowact_ = new double[nrows]; const double *x = getColSolution() ; const CoinPackedMatrix *mtx = getMatrixByRow() ; mtx->times(x,rowact_) ; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowActivity()\n"); #endif return rowact_; } //----------------------------------------------------------------------------- // Returns the objective for defined solution in MOSEK task. double OsiMskSolverInterface::getObjValue() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getObjValue()\n"); #endif double objval = OsiSolverInterface::getObjValue(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getObjValue()\n"); #endif return objval; } //----------------------------------------------------------------------------- // Returns the iteration used in last call to optimize. Notice that the cross // over phase in interior methods is not returned, when interior point is // used, only the interior point iterations. int OsiMskSolverInterface::getIterationCount() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getIterationCount()\n"); #endif int nr = 0, solver, err; int nrp=0; solver = solverUsed(); if( solver == MSK_OPTIMIZER_PRIMAL_SIMPLEX ) { { err = MSK_getintinf(getMutableLpPtr(), MSK_IINF_SIM_PRIMAL_ITER, &nr); checkMSKerror(err,"MSK_getintinf","getIterationsCount"); } } else if( solver == MSK_OPTIMIZER_DUAL_SIMPLEX ) { { err = MSK_getintinf(getMutableLpPtr(), MSK_IINF_SIM_DUAL_ITER, &nr); checkMSKerror(err,"MSK_getintinf","getIterationsCount"); } } else if( solver == MSK_OPTIMIZER_FREE_SIMPLEX ) { { err = MSK_getintinf(getMutableLpPtr(), MSK_IINF_SIM_DUAL_ITER, &nr); checkMSKerror(err,"MSK_getintinf","getIterationsCount"); err = MSK_getintinf(getMutableLpPtr(), MSK_IINF_SIM_PRIMAL_ITER, &nrp); checkMSKerror(err,"MSK_getintinf","getIterationsCount"); nr = nr+nrp; } } else if( solver == MSK_OPTIMIZER_INTPNT ) { { err = MSK_getintinf(getMutableLpPtr(), MSK_IINF_INTPNT_ITER, &nr); checkMSKerror(err,"MSK_getintinf","getIterationsCount"); } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getIterationCount()\n"); #endif return nr; } //----------------------------------------------------------------------------- // Returns one dual ray std::vector OsiMskSolverInterface::getDualRays(int maxNumRays, bool fullRay) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getDualRays(%d,%s)\n", maxNumRays, fullRay?"true":"false"); #endif if (fullRay == true) { throw CoinError("Full dual rays not yet implemented.","getDualRays", "OsiMskSolverInterface"); } OsiMskSolverInterface solver(*this); int numrows = getNumRows(), r; MSKsolstae status; MSKsoltypee solution; if( probtypemip_ == false ) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else { if( definedSolution( MSK_SOL_ITR ) == true ) solution = MSK_SOL_ITR; else return std::vector(); } } else { if( definedSolution( MSK_SOL_ITG ) == true ) solution = MSK_SOL_ITG; else return std::vector(); } double *farkasray = new double[numrows]; r = MSK_getsolution(getMutableLpPtr(), solution, NULL, &status, NULL, NULL, NULL, NULL, NULL, farkasray, NULL, NULL, NULL, NULL, NULL); checkMSKerror( r, "MSK_getsolution", "getDualRays" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getDualRays(%d)\n", maxNumRays); #endif if( status != MSK_SOL_STA_PRIM_INFEAS_CER ) { delete[] farkasray; return std::vector(); } else return std::vector(1, farkasray); } //----------------------------------------------------------------------------- // Returns one primal ray std::vector OsiMskSolverInterface::getPrimalRays(int maxNumRays) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getPrimalRays(%d)\n", maxNumRays); #endif OsiMskSolverInterface solver(*this); int numcols = getNumCols(), r; MSKsolstae status; MSKsoltypee solution; if( probtypemip_ == false ) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else { if( definedSolution( MSK_SOL_ITR ) == true ) solution = MSK_SOL_ITR; else return std::vector(); } } else { if( definedSolution( MSK_SOL_ITG ) == true ) solution = MSK_SOL_ITG; else return std::vector(); } double *farkasray = new double[numcols]; r = MSK_getsolution(getMutableLpPtr(), solution, NULL, &status, NULL, NULL, NULL, NULL, farkasray, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror( r, "MSK_getsolution", "getPrimalRays" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getPrimalRays(%d)\n", maxNumRays); #endif if( status != MSK_SOL_STA_DUAL_INFEAS_CER ) { delete[] farkasray; return std::vector(); } else return std::vector(1, farkasray); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# //----------------------------------------------------------------------------- // Sets a variabels objective coeff. void OsiMskSolverInterface::setObjCoeff( int elementIndex, double elementValue ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setObjCoeff(%d, %g)\n", elementIndex, elementValue); #endif const double *oldobj; if( redcost_ && !obj_ ) oldobj = getObjCoefficients(); else oldobj = obj_; int err = MSK_putclist(getMutableLpPtr(), 1, &elementIndex, &elementValue); checkMSKerror(err, "MSK_putclist", "setObjCoeff"); if( obj_ ) { if( redcost_ ) { redcost_[elementIndex] += elementValue-oldobj[elementIndex]; obj_[elementIndex] = elementValue; } else { obj_[elementIndex] = elementValue; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setObjCoeff(%d, %g)\n", elementIndex, elementValue); #endif } //----------------------------------------------------------------------------- // Sets a list of objective coeff. void OsiMskSolverInterface::setObjCoeffSet(const int* indexFirst, const int* indexLast, const double* coeffList) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setObjCoeffSet(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)coeffList); #endif const double *oldobj; const long int cnt = indexLast - indexFirst; if( redcost_ && !obj_ ) oldobj = getObjCoefficients(); else oldobj = obj_; int err = MSK_putclist(getMutableLpPtr(), static_cast(cnt), const_cast(indexFirst), const_cast(coeffList)); checkMSKerror(err, "MSK_putclist", "setObjCoeffSet"); if( obj_ ) { if( redcost_ ) { for( int j = 0; j < cnt; ++j) { redcost_[j] += coeffList[indexFirst[j]]-oldobj[j]; obj_[j] = coeffList[indexFirst[j]]; } } else { for( int j = 0; j < cnt; ++j) { obj_[j] = coeffList[indexFirst[j]]; } } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setObjCoeffSet(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)coeffList); #endif } //----------------------------------------------------------------------------- // Sets lower bound on one specific column void OsiMskSolverInterface::setColLower(int elementIndex, double elementValue) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setColLower(%d, %g)\n", elementIndex, elementValue); #endif int finite = 1; if( elementValue <= -getInfinity() ) finite = 0; #if MSK_VERSION_MAJOR < 9 int err = MSK_chgbound(getMutableLpPtr(), MSK_ACC_VAR, elementIndex, 1, /*It is a lower bound*/ finite, /* Is it finite */ elementValue); checkMSKerror( err, "MSK_chgbound", "setColLower" ); #else int err = MSK_chgvarbound(getMutableLpPtr(), elementIndex, 1, /*It is a lower bound*/ finite, /* Is it finite */ elementValue); checkMSKerror( err, "MSK_chgvarbound", "setColLower" ); #endif if( collower_ != NULL ) collower_[elementIndex] = elementValue; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setColLower(%d, %g)\n", elementIndex, elementValue); #endif } //----------------------------------------------------------------------------- // Sets upper bound on one specific column. void OsiMskSolverInterface::setColUpper(int elementIndex, double elementValue) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setColUpper(%d, %g)\n", elementIndex, elementValue); #endif int finite = 1; if( elementValue >= getInfinity() ) finite = 0; #if MSK_VERSION_MAJOR < 9 int err = MSK_chgbound( getMutableLpPtr(), MSK_ACC_VAR, elementIndex, 0, /* It is a upper bound */ finite, /* Is it finite */ elementValue); checkMSKerror( err, "MSK_chgbound", "setColUpper" ); #else int err = MSK_chgvarbound( getMutableLpPtr(), elementIndex, 0, /* It is a upper bound */ finite, /* Is it finite */ elementValue); checkMSKerror( err, "MSK_chgvarbound", "setColUpper" ); #endif if( colupper_ != NULL ) colupper_[elementIndex] = elementValue; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setColUpper(%d, %g)\n", elementIndex, elementValue); #endif } //----------------------------------------------------------------------------- // Sets upper and lower bound on one specific column void OsiMskSolverInterface::setColBounds( int elementIndex, double lower, double upper ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setColBounds(%d, %g, %g)\n", elementIndex, lower, upper); #endif setColLower(elementIndex, lower); setColUpper(elementIndex, upper); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setColBounds(%d, %g, %g)\n", elementIndex, lower, upper); #endif } //----------------------------------------------------------------------------- // Sets upper and lower bounds on a list of columns. Due to the strange storage of // boundlist, it is not possible to change all the bounds in one call to MOSEK, // so the standard method is used. void OsiMskSolverInterface::setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setColSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); #endif OsiSolverInterface::setColSetBounds( indexFirst, indexLast, boundList ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setColSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); #endif } //----------------------------------------------------------------------------- // Sets the lower bound on a row void OsiMskSolverInterface::setRowLower( int i, double elementValue ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowLower(%d, %g)\n", i, elementValue); #endif double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower=-MSK_INFINITY, upper=MSK_INFINITY; convertSenseToBound( sense, rhs, range, lower, upper ); if( lower != elementValue ) { convertBoundToSense( elementValue, upper, sense, rhs, range ); setRowType( i, sense, rhs, range ); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowLower(%d, %g)\n", i, elementValue); #endif } //----------------------------------------------------------------------------- // Sets the upper bound on a row void OsiMskSolverInterface::setRowUpper( int i, double elementValue ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowUpper(%d, %g)\n", i, elementValue); #endif double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower=-MSK_INFINITY, upper=MSK_INFINITY; convertSenseToBound( sense, rhs, range, lower, upper ); if( upper != elementValue ) { convertBoundToSense( lower, elementValue, sense, rhs, range ); setRowType( i, sense, rhs, range ); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowUpper(%d, %g)\n", i, elementValue); #endif } //----------------------------------------------------------------------------- // Sets the upper and lower bound on a row void OsiMskSolverInterface::setRowBounds( int elementIndex, double lower, double upper ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowBounds(%d, %g, %g)\n", elementIndex, lower, upper); #endif double rhs, range; char sense; convertBoundToSense( lower, upper, sense, rhs, range ); setRowType( elementIndex, sense, rhs, range ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowBounds(%d, %g, %g)\n", elementIndex, lower, upper); #endif } //----------------------------------------------------------------------------- // Sets the triplet on a row void OsiMskSolverInterface::setRowType(int i, char sense, double rightHandSide,double range) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowType(%d, %c, %g, %g)\n", i, sense, rightHandSide, range); #endif double rub=MSK_INFINITY,rlb=-MSK_INFINITY; int rtag=MSK_BK_FR; MskConvertSenseToBound(sense, range, rightHandSide, rlb, rub, rtag); #if MSK_VERSION_MAJOR < 9 int err = MSK_putbound(getMutableLpPtr(), MSK_ACC_CON, i, (MSKboundkeye)rtag, rlb, rub); checkMSKerror( err, "MSK_putbound", "setRowType" ); #else int err = MSK_putconbound(getMutableLpPtr(), i, (MSKboundkeye)rtag, rlb, rub); checkMSKerror( err, "MSK_putconbound", "setRowType" ); #endif if( rowsense_ != NULL ) rowsense_[i] = sense; if( rowrange_ != NULL ) rowrange_[i] = range; if( rhs_ != NULL ) rhs_[i] = rightHandSide; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowType(%d, %c, %g, %g)\n", i, sense, rightHandSide, range); #endif } //----------------------------------------------------------------------------- // Set upper og lower bounds for a lisit of rows. Due to the strange storage of // boundlist, it is not possible to change all the bounds in one call to MOSEK, // so the standard method is used. void OsiMskSolverInterface::setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); #endif const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; for (int i = 0; i < cnt; ++i) setRowBounds(indexFirst[i], boundList[2*i], boundList[2*i+1]); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); #endif } //----------------------------------------------------------------------------- // Set triplets for a list of rows void OsiMskSolverInterface::setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowSetTypes(%p, %p, %p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)senseList, (void *)rhsList, (void *)rangeList); #endif const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; for (int i = 0; i < cnt; ++i) setRowType(indexFirst[i], senseList[i], rhsList[i], rangeList[i]); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowSetTypes(%p, %p, %p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)senseList, (void *)rhsList, (void *)rangeList); #endif } //----------------------------------------------------------------------------- // Sets a variabel to continuous void OsiMskSolverInterface::setContinuous(int index) { int numcols = getNumCols(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setContinuous(%d)\n", index); #endif MSKassert(3,coltype_ != NULL,"coltype_ != NULL","setContinuous"); MSKassert(3,coltypesize_ >= getNumCols(),"coltypesize_ >= getNumCols()","setContinuous"); coltype_[index] = 'C'; if( index < numcols ) { int err = MSK_putvartype( getMutableLpPtr(), index, MSK_VAR_TYPE_CONT); checkMSKerror( err, "MSK_putvartype", "setContinuous" ); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setContinuous(%d)\n", index); #endif } //----------------------------------------------------------------------------- // Sets a variabel to integer void OsiMskSolverInterface::setInteger(int index) { int numcols = getNumCols(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setInteger(%d)\n", index); #endif MSKassert(3,coltype_ != NULL,"coltype_ != NULL","setInteger"); MSKassert(3,coltypesize_ >= getNumCols(),"coltypesize_ >= getNumCols()","setInteger"); coltype_[index] = 'I'; if( index < numcols ) { int err = MSK_putvartype( getMutableLpPtr(), index, MSK_VAR_TYPE_INT); checkMSKerror( err, "MSK_putvartype", "setInteger" ); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setInteger(%d)\n", index); #endif } //----------------------------------------------------------------------------- // Sets a list of variables to continuous void OsiMskSolverInterface::setContinuous(const int* indices, int len) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setContinuous(%p, %d)\n", (void *)indices, len); #endif for( int i = 0; i < len; ++i ) setContinuous(indices[i]); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setContinuous(%p, %d)\n", (void *)indices, len); #endif } //----------------------------------------------------------------------------- // Sets a list of variables to integer void OsiMskSolverInterface::setInteger(const int* indices, int len) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setInteger(%p, %d)\n", (void *)indices, len); #endif for( int i = 0; i < len; ++i ) setInteger(indices[i]); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setInteger(%p, %d)\n", (void *)indices, len); #endif } //----------------------------------------------------------------------------- // Sets the direction of optimization void OsiMskSolverInterface::setObjSense(double s) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setObjSense(%g)\n", s); #endif int err; double pre; pre = getObjSense(); if( s == +1.0 ) { err = MSK_putobjsense(getMutableLpPtr(), MSK_OBJECTIVE_SENSE_MINIMIZE); } else { err = MSK_putobjsense(getMutableLpPtr(), MSK_OBJECTIVE_SENSE_MAXIMIZE); } checkMSKerror(err,"MSK_putintparam","setObjSense"); if( pre != s ) { /* A hack to pass unit test, ugly as hell */ /* When objective sense is changed then reset obj cuts */ if( s > 0 ) { setDblParam(OsiPrimalObjectiveLimit,-COIN_DBL_MAX) ; setDblParam(OsiDualObjectiveLimit,COIN_DBL_MAX) ; } else { setDblParam(OsiPrimalObjectiveLimit,COIN_DBL_MAX) ; setDblParam(OsiDualObjectiveLimit,-COIN_DBL_MAX) ; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setObjSense(%g)\n", s); #endif } //----------------------------------------------------------------------------- // Sets the col solution. This is very fuzzy WE LIKE STATUS KEYS not numerical values i.e superbasics or basic !!!. void OsiMskSolverInterface::setColSolution(const double * cs) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::setColSolution %p\n", (void*)this); #endif int err,nc = getNumCols(),nr = getNumRows(), numbas = 0; MSKstakeye *tskc,*tskx; MSKboundkeye *tbkx,*tbkc; MSKrealt *tblx,*tbux,*tblc,*tbuc; double *txc; if( cs == NULL ) { freeCachedResults(); } else if( nc > 0 ) { if( colsol_ != NULL ) delete[] colsol_; colsol_ = new double[nc]; CoinDisjointCopyN( cs, nc, colsol_ ); tbkx = new MSKboundkeye[nc]; tskx = new MSKstakeye[nc]; tblx = new MSKrealt[nc]; tbux = new MSKrealt[nc]; tskc = new MSKstakeye[nr]; txc = new double[nr]; tbkc = new MSKboundkeye[nr]; tblc = new MSKrealt[nr]; tbuc = new MSKrealt[nr]; const CoinPackedMatrix *mtx = getMatrixByCol() ; assert(mtx->getNumCols() == nc); assert(mtx->getNumRows() == nr); mtx->times(cs,txc) ; /* Negate due to different Osi and Mosek slack representation */ for( int i = 0; i < nr; ++i ) { txc[i] = -txc[i]; tskc[i] = MSK_SK_UNK; } #if MSK_VERSION_MAJOR < 9 err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_CON, 0, nr, tbkc, tblc, tbuc); checkMSKerror( err, "MSK_getboundslice", "setColsolution" ); err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_VAR, 0, nc, tbkx, tblx, tbux); checkMSKerror( err, "MSK_getboundslice", "setColsolution" ); #else err = MSK_getconboundslice(getMutableLpPtr(), 0, nr, tbkc, tblc, tbuc); checkMSKerror( err, "MSK_getconboundslice", "setColsolution" ); err = MSK_getvarboundslice(getMutableLpPtr(), 0, nc, tbkx, tblx, tbux); checkMSKerror( err, "MSK_getvarboundslice", "setColsolution" ); #endif if( definedSolution( MSK_SOL_BAS ) == true ) { err = MSK_getsolution(getMutableLpPtr(), MSK_SOL_BAS, NULL, NULL, tskc, tskx, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror(err,"MSK_getsolution","setColSol"); } for( int i = 0; i < nr; ++i ) { if( tbkc[i] == MSK_BK_FX && tblc[i] == txc[i] ) { tskc[i] = MSK_SK_FIX; } else if( ( tbkc[i] == MSK_BK_LO || tbkc[i] == MSK_BK_RA ) && tblc[i] == txc[i] ) { tskc[i] = MSK_SK_LOW; } else if( ( tbkc[i] == MSK_BK_UP || tbkc[i] == MSK_BK_RA ) && tbuc[i] == txc[i] ) { tskc[i] = MSK_SK_UPR; } else if( tbkc[i] == MSK_BK_FR && txc[i] == 0.0 ) { tskc[i] = MSK_SK_SUPBAS; } else { #if 0 printf("Slack : %d bkc : %d blc : %-16.10e buc : %-16.10e xc : %-16.10e\n", i,tbkc[i],tblc[i],tbuc[i],txc[i]); #endif ++numbas; tskc[i] = MSK_SK_BAS; } } for( int j = 0; j < nc; ++j ) { if( tbkx[j] == MSK_BK_FX && tblx[j] == cs[j] ) { tskx[j] = MSK_SK_FIX; } else if( ( tbkx[j] == MSK_BK_LO || tbkx[j] == MSK_BK_RA ) && tblx[j] == cs[j] ) { tskx[j] = MSK_SK_LOW; } else if( ( tbkx[j] == MSK_BK_UP || tbkx[j] == MSK_BK_RA ) && tbux[j] == cs[j] ) { tskx[j] = MSK_SK_UPR; } else if( ( tbkx[j] == MSK_BK_FR && cs[j] == 0.0 ) || numbas >= nr ) { tskx[j] = MSK_SK_SUPBAS; } else { #if 0 printf("Org %d : bkx : %d blx : %-16.10e bux : %-16.10e xx : %-16.10e\n", j,tbkx[j],tblx[j],tbux[j],cs[j]); #endif tskx[j] = MSK_SK_BAS; } } err = MSK_putsolution(getMutableLpPtr(), MSK_SOL_BAS, tskc, tskx, NULL, (MSKrealt*) txc, const_cast(cs), NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror(err,"MSK_putsolution","setColSol"); MSKassert(3,definedSolution( MSK_SOL_BAS ) == true,"definedSolution( MSK_SOL_BAS ) == true","setColSolution"); delete [] tbkx; delete [] tblx; delete [] tbux; delete [] tskx; delete [] tskc; delete [] txc; delete [] tbkc; delete [] tblc; delete [] tbuc; } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::setColSolution(%p)\n", (void *)cs); #endif } //----------------------------------------------------------------------------- // Sets the rowprices. void OsiMskSolverInterface::setRowPrice(const double * rs) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::setRowPrice(%p)\n", (void *)rs); #endif int err,nr = getNumRows(),nc = getNumCols(); MSKstakeye *tskc,*tskx; MSKrealt *tslc,*tsuc,*tslx,*tsux,*txc,*txx; double *redcost; if( rs == NULL ) freeCachedResults(); else if( nr > 0 ) { if ( rowsol_ == NULL ) rowsol_ = new double[nr]; colsol_ = new double[nc]; tskc = new MSKstakeye[nr]; tslc = new MSKrealt[nr]; tsuc = new MSKrealt[nr]; txc = new MSKrealt[nr]; tskx = new MSKstakeye[nc]; tslx = new MSKrealt[nc]; tsux = new MSKrealt[nc]; txx = new MSKrealt[nc]; redcost = new double[nc]; CoinDisjointCopyN( rs, nr, rowsol_ ); /* Calc reduced costs */ const CoinPackedMatrix *mtx = getMatrixByCol() ; mtx->transposeTimes(rs,redcost) ; for( int j = 0; j < nc; ++j ) { redcost[j] = getObjCoefficients()[j]-redcost[j]; tslx[j] = CoinMax(0.0,redcost[j]); tsux[j] = CoinMax(0.0,-redcost[j]); } if( definedSolution( MSK_SOL_BAS ) == true ) { for( int i = 0; i < nr; ++i ) { #if MSK_VERSION_MAJOR < 9 MSKrealt sn; err = MSK_getsolutioni(getMutableLpPtr(), MSK_ACC_CON, i, MSK_SOL_BAS, &tskc[i], &txc[i], &tslc[i], &tsuc[i], &sn); checkMSKerror(err,"MSK_putsolutioni","setRowPrice"); #else err = MSK_getskcslice(getMutableLpPtr(), MSK_SOL_BAS, i, i+1, &tskc[i]); checkMSKerror(err,"MSK_getskcslice","setRowPrice"); err = MSK_getxcslice(getMutableLpPtr(), MSK_SOL_BAS, i, i+1, &txc[i]); checkMSKerror(err,"MSK_getxcslice","setRowPrice"); err = MSK_getslcslice(getMutableLpPtr(), MSK_SOL_BAS, i, i+1, &tslc[i]); checkMSKerror(err,"MSK_getslcslice","setRowPrice"); err = MSK_getsucslice(getMutableLpPtr(), MSK_SOL_BAS, i, i+1, &tsuc[i]); checkMSKerror(err,"MSK_getsucslice","setRowPrice"); #endif tslc[i] = CoinMax(0.0,rowsol_[i]); tsuc[i] = CoinMax(0.0,-rowsol_[i]); } err = MSK_getsolution(getMutableLpPtr(), MSK_SOL_BAS, NULL, NULL, NULL, tskx, NULL, NULL, txx, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror(err,"MSK_getsolution","setRowPrice"); err = MSK_putsolution(getMutableLpPtr(), MSK_SOL_BAS, tskc, tskx, NULL, txc, txx, rowsol_, tslc, tsuc, tslx, tsux, NULL); checkMSKerror(err,"MSK_putsolution","setRowPrice"); } else { for( int i = 0; i < nr; ++i ) { tslc[i] = CoinMax(0.0,rowsol_[i]); tsuc[i] = CoinMax(0.0,-rowsol_[i]); tskc[i] = MSK_SK_UNK; } for( int i = 0; i < nc; ++i ) { tskx[i] = MSK_SK_UNK; txx[i] = 0.0; } err = MSK_putsolution(getMutableLpPtr(), MSK_SOL_BAS, tskc, tskx, NULL, NULL, NULL, rowsol_, tslc, tsuc, tslx, tsux, NULL); checkMSKerror(err,"MSK_putsolution","setRowPrice"); } for( int i = 0; i < nc; ++i ) { colsol_[i] = txx[i]; } delete [] tskc; delete [] tslc; delete [] tsuc; delete [] txc; delete [] tskx; delete [] tslx; delete [] tsux; delete [] txx; delete [] redcost; } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::setRowPrice(%p)\n", (void *)rs); #endif } //############################################################################# // Problem modifying methods (matrix) //############################################################################# //----------------------------------------------------------------------------- // Adds a column to the MOSEK task void OsiMskSolverInterface::addCol(const CoinPackedVectorBase& vec, const double collb, const double colub, const double obj) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addCol(%p, %g, %g, %g)\n", (void *)&vec, collb, colub, obj); #endif int nc = getNumCols(); MSKassert(3,coltypesize_ >= nc,"coltypesize_ >= nc","addCol"); resizeColType(nc + 1); coltype_[nc] = 'C'; int ends = vec.getNumElements(); MSKboundkeye tag; MSKtask_t task=getLpPtr(); double inf = getInfinity(); if(collb > -inf && colub >= inf) tag = MSK_BK_LO; else if(collb <= -inf && colub < inf) tag = MSK_BK_UP; else if(collb > -inf && colub < inf) tag = MSK_BK_RA; else if(collb <= -inf && colub >= inf) tag = MSK_BK_FR; else throw CoinError("Bound error", "addCol", "OsiMSKSolverInterface"); #if MSK_VERSION_MAJOR >= 7 int err; MSKint32t j; err = MSK_getnumvar(task,&j); if ( err==MSK_RES_OK ) err = MSK_appendvars(task,1); if ( err==MSK_RES_OK ) err = MSK_putcj(task,j,obj); if ( err==MSK_RES_OK ) err = MSK_putacol(task,j,ends,const_cast(vec.getIndices()),const_cast(vec.getElements())); if ( err==MSK_RES_OK ) err = MSK_putvarbound(task,j,tag,collb,colub); #else int start = 0; int err = MSK_appendvars(task, 1, const_cast (&obj), &start, &ends, const_cast(vec.getIndices()), const_cast(vec.getElements()), (&tag), const_cast (&collb), const_cast (&colub)); #endif checkMSKerror( err, "MSK_appendvars", "addCol" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addCol(%p, %g, %g, %g)\n", (void *)&vec, collb, colub, obj); #endif } //----------------------------------------------------------------------------- // Adds a list of columns to the MOSEK task void OsiMskSolverInterface::addCols(const int numcols, const CoinPackedVectorBase * const * cols, const double* collb, const double* colub, const double* obj) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addCols(%d, %p, %p, %p, %p)\n", numcols, (void *)cols, (void *)collb, (void *)colub, (void *)obj); #endif int i, nz = 0, err = MSK_RES_OK; // For efficiency we put hints on the total future size err = MSK_getmaxnumanz(getLpPtr(), &nz); checkMSKerror( err, "MSK_getmaxanz", "addCols" ); for( i = 0; i < numcols; ++i) nz += cols[i]->getNumElements(); err = MSK_putmaxnumanz(getLpPtr(), nz); checkMSKerror( err, "MSK_putmaxanz", "addCols" ); err = MSK_putmaxnumvar(getLpPtr(), numcols+getNumCols()); checkMSKerror( err, "MSK_putmaxnumvar", "addCols" ); for( i = 0; i < numcols; ++i ) addCol( *(cols[i]), collb[i], colub[i], obj[i] ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addCols(%d, %p, %p, %p, %p)\n", numcols, (void *)cols, (void *)collb, (void *)colub, (void *)obj); #endif } //----------------------------------------------------------------------------- // Deletes a list of columns from the MOSEK task void OsiMskSolverInterface::deleteCols(const int num, const int * columnIndices) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::deleteCols(%d, %p)\n", num, (void *)columnIndices); #endif #if MSK_VERSION_MAJOR >= 7 int err; err = MSK_removevars(getLpPtr( OsiMskSolverInterface::KEEPCACHED_ROW ), num, const_cast(columnIndices)); checkMSKerror( err, "MSK_removevars", "deleteCols" ); #else int err; err = MSK_remove(getLpPtr( OsiMskSolverInterface::KEEPCACHED_ROW ), MSK_ACC_VAR, num, const_cast(columnIndices)); checkMSKerror( err, "MSK_remove", "deleteCols" ); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::deleteCols(%d, %p)\n", num, (void *)columnIndices); #endif } //----------------------------------------------------------------------------- // Adds a row in bound form to the MOSEK task void OsiMskSolverInterface::addRow(const CoinPackedVectorBase& vec, const double rowlb, const double rowub) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addRow(%p, %g, %g)\n", (void *)&vec, rowlb, rowub); #endif getNumRows(); int ends = vec.getNumElements(); double inf = getInfinity(); MSKboundkeye tag; MSKtask_t task = getLpPtr( OsiMskSolverInterface::KEEPCACHED_COLUMN ); if(rowlb > -inf && rowub >= inf) tag = MSK_BK_LO; else if(rowlb <= -inf && rowub < inf) tag = MSK_BK_UP; else if(rowlb > -inf && rowub < inf) tag = MSK_BK_RA; else if(rowlb <= -inf && rowub >= inf) tag = MSK_BK_FR; else throw CoinError("Bound error", "addRow", "OsiMSKSolverInterface"); #if MSK_VERSION_MAJOR >= 7 int err; MSKint32t i; err = MSK_getnumcon(task,&i); if ( err==MSK_RES_OK ) err = MSK_appendcons(task,1); if ( err==MSK_RES_OK ) err = MSK_putconbound(task,i,tag,rowlb,rowub); if ( err==MSK_RES_OK ) err = MSK_putarow(task,i,ends, const_cast(vec.getIndices()), const_cast(vec.getElements())); #else int start = 0; int err = MSK_appendcons(task, 1, &start, &ends, const_cast(vec.getIndices()), const_cast(vec.getElements()), (&tag), const_cast (&rowlb), const_cast (&rowub)); #endif checkMSKerror( err, "MSK_appendcons", "addRow" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addRow(%p, %g, %g)\n", (void *)&vec, rowlb, rowub); #endif } //----------------------------------------------------------------------------- // Adds a row in triplet form to the MOSEK task void OsiMskSolverInterface::addRow(const CoinPackedVectorBase& vec, const char rowsen, const double rowrhs, const double rowrng) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addRow(%p, %c, %g, %g)\n", (void *)&vec, rowsen, rowrhs, rowrng); #endif int rtag=MSK_BK_FR; double lb=-MSK_INFINITY,ub=MSK_INFINITY; MskConvertSenseToBound( rowsen, rowrng, rowrhs, lb, ub, rtag ); addRow(vec, lb, ub); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addRow(%p, %c, %g, %g)\n", (void *)&vec, rowsen, rowrhs, rowrng); #endif } //----------------------------------------------------------------------------- // Adds a serie of rows in bound form to the MOSEK task void OsiMskSolverInterface::addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addRows(%d, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowlb, (void *)rowub); #endif int i,nz = 0, err = MSK_RES_OK; // For efficiency we put hints on the total future size err = MSK_getmaxnumanz( getLpPtr(), &nz); checkMSKerror( err, "MSK_getmaxanz", "addRows" ); for( i = 0; i < numrows; ++i) nz += rows[i]->getNumElements(); err = MSK_putmaxnumanz(getLpPtr(), nz); checkMSKerror( err, "MSK_putmaxanz", "addRows" ); err = MSK_putmaxnumcon(getLpPtr(), numrows+getNumRows()); checkMSKerror( err, "MSK_putmaxnumcon", "addRows" ); for( i = 0; i < numrows; ++i ) addRow( *(rows[i]), rowlb[i], rowub[i] ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addRows(%d, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowlb, (void *)rowub); #endif } //----------------------------------------------------------------------------- // Adds a list of rows in triplet form to the MOSEK task void OsiMskSolverInterface::addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addRows(%d, %p, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowsen, (void *)rowrhs, (void *)rowrng); #endif int i, err = MSK_RES_OK, nz = 0; // For efficiency we put hints on the total future size for( i = 0; i < numrows; ++i) nz += rows[i]->getNumElements(); err = MSK_putmaxnumanz( getLpPtr(), nz); checkMSKerror( err, "MSK_putmaxanz", "addRows" ); err = MSK_putmaxnumcon( getLpPtr(), numrows); checkMSKerror( err, "MSK_putmaxnumcon", "addRows" ); for( i = 0; i < numrows; ++i ) addRow( *(rows[i]), rowsen[i], rowrhs[i], rowrng[i] ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addRows(%d, %p, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowsen, (void *)rowrhs, (void *)rowrng); #endif } //----------------------------------------------------------------------------- // Deletes a list of rows the MOSEK task void OsiMskSolverInterface::deleteRows(const int num, const int * rowIndices) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::deleteRows(%d, %p)\n", num, (void *)rowIndices); #endif int err; #if MSK_VERSION_MAJOR >= 7 err = MSK_removecons(getLpPtr( OsiMskSolverInterface::KEEPCACHED_COLUMN ), num, const_cast(rowIndices)); checkMSKerror( err, "MSK_removecons", "deleteRows" ); #else err = MSK_remove(getLpPtr( OsiMskSolverInterface::KEEPCACHED_COLUMN ), MSK_ACC_CON, num, const_cast(rowIndices)); checkMSKerror( err, "MSK_remove", "deleteRows" ); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::deleteRows(%d, %p)\n", num, (void *)rowIndices); #endif } //############################################################################# // Methods to input a problem //############################################################################# //----------------------------------------------------------------------------- // Loads a problem. Should have its "own" implementation so we don't have to convert // to triplet, since this is convertet back in the load function called. But // for simplicity, this is not done. void OsiMskSolverInterface::loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub ) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::loadProblem(%p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowlb, (void *)rowub); #endif const double inf = getInfinity(); int nrows = matrix.getNumRows(); char * rowSense; double * rowRhs; double * rowRange; if( nrows ) { rowSense = new char [nrows]; rowRhs = new double[nrows]; rowRange = new double[nrows]; } else { rowSense = NULL; rowRhs = NULL; rowRange = NULL; } int i; if( rowlb == NULL && rowub == NULL) for ( i = nrows - 1; i >= 0; --i ) convertBoundToSense( -inf, inf, rowSense[i], rowRhs[i], rowRange[i] ); else if( rowlb == NULL) for ( i = nrows - 1; i >= 0; --i ) convertBoundToSense( -inf, rowub[i], rowSense[i], rowRhs[i], rowRange[i] ); else if( rowub == NULL) for ( i = nrows - 1; i >= 0; --i ) convertBoundToSense( rowlb[i], inf, rowSense[i], rowRhs[i], rowRange[i] ); else for ( i = nrows - 1; i >= 0; --i ) convertBoundToSense( rowlb[i], rowub[i], rowSense[i], rowRhs[i], rowRange[i] ); loadProblem( matrix, collb, colub, obj, rowSense, rowRhs, rowRange ); if( nrows ) { delete [] rowSense; delete [] rowRhs; delete [] rowRange; } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::loadProblem(%p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowlb, (void *)rowub); #endif } //----------------------------------------------------------------------------- // Loads a problem void OsiMskSolverInterface::assignProblem( CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, double*& rowlb, double*& rowub ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::assignProblem()\n"); #endif loadProblem( *matrix, collb, colub, obj, rowlb, rowub ); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowlb; rowlb = 0; delete[] rowub; rowub = 0; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::assignProblem()\n"); #endif } //----------------------------------------------------------------------------- // Loads a problem void OsiMskSolverInterface::loadProblem( const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng ) { int nc=matrix.getNumCols(); int nr=matrix.getNumRows(); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::loadProblem(%p, %p, %p, %p, %p, %p, %p) numcols : %d numrows : %d\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng,nc,nr); #endif if( nr == 0 && nc == 0 ) gutsOfDestructor(); else { /* Warning input pointers can be NULL */ int i,j; double * ob; int * rtag = NULL; double * rlb = NULL; double * rub = NULL; int * ctag = NULL; int * cends = NULL; const int *len; const int *start; double * clb = NULL; double * cub = NULL; if( obj != NULL ) ob=const_cast(obj); else { ob = new double[nc]; CoinFillN(ob, nc, 0.0); } if( nr ) { rtag = new int[nr]; rlb = new double[nr]; rub = new double[nr]; } if( rowsen && rowrng && rowrhs ) { for( i=0; i < nr; i++ ) MskConvertSenseToBound( rowsen[i], rowrng[i], rowrhs[i], rlb[i], rub[i], rtag[i]); } else { for( i=0; i < nr; i++ ) { rlb[i] = 0.0; rub[i] = MSK_INFINITY; rtag[i] = MSK_BK_LO; } } bool freeMatrixRequired = false; CoinPackedMatrix * m = NULL; if( !matrix.isColOrdered() ) { m = new CoinPackedMatrix(); m->reverseOrderedCopyOf(matrix); freeMatrixRequired = true; } else m = const_cast(&matrix); MSKassert(3,nc == m->getNumCols(),"nc == m->getNumCols()","loadProblem"); MSKassert(3,nr == m->getNumRows(),"nr == m->getNumRows()","loadProblem"); MSKassert(3,m->isColOrdered(),"m->isColOrdered()","loadProblem"); double inf =getInfinity(); if( nc ) { ctag = new int[nc]; cends = new int[nc]; clb = new double[nc]; cub = new double[nc]; } len = (m->getVectorLengths()); start = (m->getVectorStarts()); if( collb == NULL && colub == NULL ) { for(j=0; j < nc; j++) { cends[j] = start[j] + len[j]; MskConvertColBoundToTag(0, inf, clb[j], cub[j], ctag[j]); } } else if( collb == NULL ) { for(j=0; j < nc; j++) { cends[j] = start[j] + len[j]; MskConvertColBoundToTag( 0, colub[j], clb[j], cub[j], ctag[j]); } } else if( colub == NULL ) { for(j=0; j < nc; j++) { cends[j] = start[j] + len[j]; MskConvertColBoundToTag(collb[j], inf, clb[j], cub[j], ctag[j]); } } else { for(j=0; j < nc; j++) { cends[j] = start[j] + len[j]; MskConvertColBoundToTag( collb[j], colub[j], clb[j], cub[j], ctag[j]); } } int err=MSK_inputdata(getLpPtr( OsiMskSolverInterface::KEEPCACHED_NONE ), nr, nc, nr, nc, ob, 0.0, const_cast(m->getVectorStarts()), cends, const_cast(m->getIndices()), const_cast(m->getElements()), (MSKboundkeye*)rtag, rlb, rub, (MSKboundkeye*)ctag, clb, cub); checkMSKerror( err, "MSK_inputdata", "loadProblem" ); if( obj == NULL ) delete[] ob; if( nr ) { delete[] rtag; delete[] rlb; delete[] rub; } if( nc ) { delete[] ctag; delete[] clb; delete[] cub; delete[] cends; } if ( freeMatrixRequired ) delete m; resizeColType(nc); CoinFillN(coltype_, nc, 'C'); } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::loadProblem(%p, %p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); #endif } //----------------------------------------------------------------------------- // Assigns a problem void OsiMskSolverInterface::assignProblem( CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, char*& rowsen, double*& rowrhs, double*& rowrng ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::assignProblem()\n"); #endif loadProblem( *matrix, collb, colub, obj, rowsen, rowrhs, rowrng ); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowsen; rowsen = 0; delete[] rowrhs; rowrhs = 0; delete[] rowrng; rowrng = 0; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::assignProblem()\n"); #endif } //----------------------------------------------------------------------------- // Loads a problem void OsiMskSolverInterface::loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub ) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::loadProblem() numcols : %d numrows : %d\n",numcols,numrows); #endif const double inf = getInfinity(); char * rowSense = new char [numrows]; double * rowRhs = new double[numrows]; double * rowRange = new double[numrows]; for ( int i = numrows - 1; i >= 0; --i ) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense( lower, upper, rowSense[i], rowRhs[i], rowRange[i] ); } loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowSense, rowRhs, rowRange); delete [] rowSense; delete [] rowRhs; delete [] rowRange; #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::loadProblem()\n"); #endif } //----------------------------------------------------------------------------- // Loads a problem void OsiMskSolverInterface::loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng ) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::loadProblem(%d, %d, %p, %p, %p, %p, %p, %p, %p, %p, %p)\n", numcols, numrows, (void *)start, (void *)index, (void *)value, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen,(void *)rowrhs, (void *)rowrng); #endif const int nc = numcols; const int nr = numrows; if( nr == 0 && nc == 0 ) gutsOfDestructor(); else { MSKassert(3,rowsen != NULL,"rowsen != NULL","loadProblem"); MSKassert(3,rowrhs != NULL,"rowrhs != NULL","loadProblem"); int i,j; double * ob; int * rtag =NULL; double * rlb = NULL; double * rub = NULL; int * ctag =NULL; int * cends = NULL; double * clb = NULL; double * cub = NULL; if( obj != NULL ) ob=const_cast(obj); else { ob = new double[nc]; CoinFillN(ob, nc, 0.0); } if( nr ) { rtag = new int[nr]; rlb = new double[nr]; rub = new double[nr]; } for( i=0; i < nr; i++ ) MskConvertSenseToBound( rowsen[i], rowrng != NULL ? rowrng[i] : 0.0, rowrhs[i], rlb[i], rub[i], rtag[i]); double inf = getInfinity(); if( nc ) { ctag = new int[nc]; cends = new int[nc]; clb = new double[nc]; cub = new double[nc]; } if( collb == NULL && colub == NULL ) for(j=0; j < nc; j++) { cends[j] = start[j+1]; MskConvertColBoundToTag(0, inf, clb[j], cub[j], ctag[j]); } else if( collb == NULL ) for(j=0; j < nc; j++) { cends[j] = start[j+1]; MskConvertColBoundToTag( 0, colub[j], clb[j], cub[j], ctag[j]); } else if( colub == NULL ) for(j=0; j < nc; j++) { cends[j] = start[j+1]; MskConvertColBoundToTag(collb[j], inf, clb[j], cub[j], ctag[j]); } else for(j=0; j < nc; j++) { cends[j] = start[j+1]; MskConvertColBoundToTag( collb[j], colub[j], clb[j], cub[j], ctag[j]); } int err=MSK_inputdata(getLpPtr( OsiMskSolverInterface::KEEPCACHED_NONE ), nr, nc, nr, nc, ob, 0.0, const_cast(start), cends, const_cast(index), const_cast(value), (MSKboundkeye*)rtag, rlb, rub, (MSKboundkeye*)ctag, clb, cub); checkMSKerror( err, "MSK_inputdata", "loadProblem3" ); if( obj == NULL ) delete[] ob; if( nr ) { delete[] rtag; delete[] rlb; delete[] rub; } if( nc ) { delete[] ctag; delete[] cends; delete[] clb; delete[] cub; } resizeColType(nc); CoinFillN(coltype_, nc, 'C'); } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::loadProblem(%d, %d, %p, %p, %p, %p, %p, %p, %p, %p, %p)\n", numcols, numrows, (void *)start, (void *)index, (void *)value, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); #endif } //----------------------------------------------------------------------------- // Reads a MPS file with Coin native MPS reader. If marked code is switch on // then MOSEK file reader is used, and .gz files can be read aswell. int OsiMskSolverInterface::readMps(const char * filename, const char * extension ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::readMps(%s, %s) %p\n", filename, extension,(void*)this); debugMessage("End OsiMskSolverInterface::readMps(%s, %s)\n", filename, extension); #endif return OsiSolverInterface::readMps(filename,extension); } //----------------------------------------------------------------------------- // Writes the problem in MPS format, uses MOSEK writer. void OsiMskSolverInterface::writeMps( const char * filename, const char * extension, double objSense ) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::writeMps(%s, %s, %g)\n", filename, extension, objSense); #endif std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; OsiSolverInterface::writeMpsNative(fullname.c_str(),NULL, NULL, 0, 2, objSense); #if 0 int err = MSK_writedata( getMutableLpPtr(), const_cast( fullname.c_str() )); checkMSKerror( err, "MSK_writedatafile", "writeMps" ); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::writeMps(%s, %s, %g)\n", filename, extension, objSense); #endif } void OsiMskSolverInterface::passInMessageHandler(CoinMessageHandler * handler) { OsiSolverInterface::passInMessageHandler(handler); MSK_linkfunctotaskstream(getMutableLpPtr(), MSK_STREAM_LOG, messageHandler(), OsiMskStreamFuncLog); MSK_linkfunctotaskstream(getMutableLpPtr(), MSK_STREAM_ERR, messageHandler(), OsiMskStreamFuncWarning); MSK_linkfunctotaskstream(getMutableLpPtr(), MSK_STREAM_WRN, messageHandler(), OsiMskStreamFuncError); } //############################################################################# // MSK specific public interfaces //############################################################################# //----------------------------------------------------------------------------- // Returns MOSEK task in the interface object MSKenv_t OsiMskSolverInterface::getEnvironmentPtr() { MSKassert(3,env_ != NULL,"probtypemip_","getEnvironmentPtr"); return env_; } //----------------------------------------------------------------------------- // Returns MOSEK task in the interface object MSKtask_t OsiMskSolverInterface::getLpPtr( int keepCached ) { freeCachedData( keepCached ); return getMutableLpPtr(); } //----------------------------------------------------------------------------- // Returns the coltype_ array const char * OsiMskSolverInterface::getCtype() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getCtype()\n"); debugMessage("End OsiMskSolverInterface::getCtype()\n"); #endif return coltype_; } //############################################################################# // Static instance counter methods //############################################################################# //----------------------------------------------------------------------------- // Increment the instance count, so we know when to close and open MOSEK. void OsiMskSolverInterface::incrementInstanceCounter() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::incrementInstanceCounter()\n"); #endif if ( numInstances_ == 0 ) { int err=0; #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("creating new Mosek environment\n"); #endif #if MSK_VERSION_MAJOR >= 7 err = MSK_makeenv(&env_,NULL); #else err = MSK_makeenv(&env_,NULL,NULL,NULL,NULL); #endif checkMSKerror( err, "MSK_makeenv", "incrementInstanceCounter" ); err = MSK_linkfunctoenvstream(env_, MSK_STREAM_LOG, NULL, printlog); checkMSKerror( err, "MSK_linkfunctoenvstream", "incrementInstanceCounter" ); #if MSK_VERSION_MAJOR < 8 err = MSK_initenv(env_); checkMSKerror( err, "MSK_initenv", "incrementInstanceCounter" ); #endif } numInstances_++; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::incrementInstanceCounter()\n"); #endif } //----------------------------------------------------------------------------- // Decrement the instance count, so we know when to close and open MOSEK. void OsiMskSolverInterface::decrementInstanceCounter() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::decrementInstanceCounter()\n"); #endif MSKassert(3,numInstances_ != 0,"numInstances_ != 0","decrementInstanceCounter"); numInstances_--; if ( numInstances_ == 0 ) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("deleting Mosek environment\n"); #endif int err = MSK_deleteenv(&env_); checkMSKerror( err, "MSK_deleteenv", "decrementInstanceCounter" ); env_ = NULL; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::decrementInstanceCounter()\n"); #endif } //----------------------------------------------------------------------------- // Returns the number of OsiMskSolverInterface objects in play unsigned int OsiMskSolverInterface::getNumInstances() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getNumInstances()\n"); debugMessage("End OsiMskSolverInterface::getNumInstances()\n"); #endif return numInstances_; } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# //----------------------------------------------------------------------------- // Constructor OsiMskSolverInterface::OsiMskSolverInterface(MSKenv_t mskenv) : OsiSolverInterface(), Mskerr(MSK_RES_OK), ObjOffset_(0.0), InitialSolver(INITIAL_SOLVE), task_(NULL), hotStartCStat_(NULL), hotStartCStatSize_(0), hotStartRStat_(NULL), hotStartRStatSize_(0), hotStartMaxIteration_(1000000), obj_(NULL), collower_(NULL), colupper_(NULL), rowsense_(NULL), rhs_(NULL), rowrange_(NULL), rowlower_(NULL), rowupper_(NULL), colsol_(NULL), rowsol_(NULL), redcost_(NULL), rowact_(NULL), matrixByRow_(NULL), matrixByCol_(NULL), coltype_(NULL), coltypesize_(0), probtypemip_(false) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::OsiMskSolverinterface()\n"); #endif if (mskenv) { if (env_) { throw CoinError("Already have a global Mosek environment. Cannot use second one.", "OsiMskSolverInterface", "OsiMskSolverInterface"); } env_ = mskenv; ++numInstances_; } else incrementInstanceCounter(); gutsOfConstructor(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::OsiMskSolverinterface()\n"); #endif } //----------------------------------------------------------------------------- // Clone from one to another object OsiSolverInterface * OsiMskSolverInterface::clone(bool copyData) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::clone(%d)\n", copyData); debugMessage("End OsiMskSolverInterface::clone(%d)\n", copyData); #endif return( new OsiMskSolverInterface( *this ) ); } //----------------------------------------------------------------------------- // Copy constructor OsiMskSolverInterface::OsiMskSolverInterface( const OsiMskSolverInterface & source ) : OsiSolverInterface(source), Mskerr(MSK_RES_OK), MSKsolverused_(INITIAL_SOLVE), ObjOffset_(source.ObjOffset_), InitialSolver(INITIAL_SOLVE), task_(NULL), hotStartCStat_(NULL), hotStartCStatSize_(0), hotStartRStat_(NULL), hotStartRStatSize_(0), hotStartMaxIteration_(source.hotStartMaxIteration_), obj_(NULL), collower_(NULL), colupper_(NULL), rowsense_(NULL), rhs_(NULL), rowrange_(NULL), rowlower_(NULL), rowupper_(NULL), colsol_(NULL), rowsol_(NULL), redcost_(NULL), rowact_(NULL), matrixByRow_(NULL), matrixByCol_(NULL), coltype_(NULL), coltypesize_(0), probtypemip_(false) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::OsiMskSolverInterface from (%p) to %p\n", (void *)&source,(void*)this); #endif incrementInstanceCounter(); gutsOfConstructor(); gutsOfCopy( source ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::OsiMskSolverInterface(%p)\n", (void *)&source); #endif } //----------------------------------------------------------------------------- // Destructor OsiMskSolverInterface::~OsiMskSolverInterface() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::~OsiMskSolverInterface()\n"); #endif gutsOfDestructor(); decrementInstanceCounter(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::~OsiMskSolverInterface()\n"); #endif } //----------------------------------------------------------------------------- // Assign operator OsiMskSolverInterface& OsiMskSolverInterface::operator=( const OsiMskSolverInterface& rhs ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::operator=(%p)\n", (void *)&rhs); #endif if (this != &rhs) { OsiSolverInterface::operator=( rhs ); gutsOfDestructor(); gutsOfConstructor(); if ( rhs.task_ !=NULL ) gutsOfCopy( rhs ); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::operator=(%p)\n", (void *)&rhs); #endif return *this; } //############################################################################# // Applying cuts //############################################################################# //----------------------------------------------------------------------------- // Apply col cut void OsiMskSolverInterface::applyColCut( const OsiColCut & cc ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::applyColCut(%p)\n", (void *)&cc); #endif double * MskColLB = new double[getNumCols()]; double * MskColUB = new double[getNumCols()]; const CoinPackedVector & lbs = cc.lbs(); const CoinPackedVector & ubs = cc.ubs(); int i; for( i = 0; i < getNumCols(); ++i ) { MskColLB[i] = getColLower()[i]; MskColUB[i] = getColUpper()[i]; } for( i = 0; i < lbs.getNumElements(); ++i ) if ( lbs.getElements()[i] > MskColLB[lbs.getIndices()[i]] ) setColLower( lbs.getIndices()[i], lbs.getElements()[i] ); for( i = 0; i < ubs.getNumElements(); ++i ) if ( ubs.getElements()[i] < MskColUB[ubs.getIndices()[i]] ) setColUpper( ubs.getIndices()[i], ubs.getElements()[i] ); delete[] MskColLB; delete[] MskColUB; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::applyColCut(%p)\n", (void *)&cc); #endif } //----------------------------------------------------------------------------- // Apply row cut void OsiMskSolverInterface::applyRowCut( const OsiRowCut & rowCut ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::applyRowCut(%p)\n", (void *)&rowCut); #endif const CoinPackedVector & row=rowCut.row(); addRow(row , rowCut.lb(),rowCut.ub()); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::applyRowCut(%p)\n", (void *)&rowCut); #endif } //############################################################################# // Private methods (non-static and static) and static data //############################################################################# unsigned int OsiMskSolverInterface::numInstances_ = 0; MSKenv_t OsiMskSolverInterface::env_=NULL; //----------------------------------------------------------------------------- // Returns MOSEK task in object MSKtask_t OsiMskSolverInterface::getMutableLpPtr() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getMutableLpPtr()\n"); #endif if ( task_ == NULL ) { MSKassert(3,env_ != NULL,"env_ == NULL","getMutableLpPtr"); int err = MSK_makeemptytask(env_,&task_); checkMSKerror(err, "MSK_makeemptytask","getMutableLpPtr"); err = MSK_linkfunctotaskstream(task_, MSK_STREAM_LOG, messageHandler(), OsiMskStreamFuncLog); checkMSKerror( err, "MSK_linkfunctotaskstream", "getMutableLpPtr" ); err = MSK_linkfunctotaskstream(task_, MSK_STREAM_WRN, messageHandler(), OsiMskStreamFuncWarning); checkMSKerror( err, "MSK_linkfunctotaskstream", "getMutableLpPtr" ); err = MSK_linkfunctotaskstream(task_, MSK_STREAM_ERR, messageHandler(), OsiMskStreamFuncError); checkMSKerror( err, "MSK_linkfunctotaskstream", "getMutableLpPtr" ); err = MSK_putintparam(task_, MSK_IPAR_WRITE_GENERIC_NAMES, MSK_ON); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); err = MSK_putintparam(task_, MSK_IPAR_PRESOLVE_USE, MSK_ON); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); #if MSK_VERSION_MAJOR < 9 err = MSK_putintparam(task_, MSK_IPAR_WRITE_DATA_FORMAT, MSK_DATA_FORMAT_MPS); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); #endif err = MSK_putintparam(task_, MSK_IPAR_WRITE_GENERIC_NAMES, MSK_ON); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); #if MSK_DO_MOSEK_LOG > 0 char file[] = "MOSEK.log"; err = MSK_linkfiletotaskstream(task_, MSK_STREAM_LOG, file, 0); checkMSKerror( err, "MSK_linkfiletotaskstream", "getMutableLpPtr" ); err = MSK_putintparam(task_, MSK_IPAR_LOG, 100); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); err = MSK_putintparam(task_, MSK_IPAR_LOG_SIM, 100); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); err = MSK_putintparam(task_, MSK_IPAR_LOG_INTPNT, 100); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); #else err = MSK_putintparam(task_, MSK_IPAR_LOG, 100); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); #endif err = MSK_putintparam(task_,MSK_IPAR_SIM_SOLVE_FORM,MSK_SOLVE_PRIMAL); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); err = MSK_putintparam(task_,MSK_IPAR_SIM_HOTSTART,MSK_SIM_HOTSTART_STATUS_KEYS); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); std::string pn; getStrParam(OsiProbName,pn); MSK_puttaskname( task_, const_cast(pn.c_str()) ); checkMSKerror(err,"MSK_puttaskname","getMutableLpPtr()"); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getMutableLpPtr()\n"); #endif return task_; } //----------------------------------------------------------------------------- // Makes a copy void OsiMskSolverInterface::gutsOfCopy( const OsiMskSolverInterface & source ) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::gutsOfCopy()\n"); #endif int err; InitialSolver = source.InitialSolver; MSKassert(3, task_ == NULL, "task_ == NULL", "gutsOfCopy"); err = MSK_clonetask(source.getMutableLpPtr(),&task_); checkMSKerror( err, "MSK_clonetask", "gutsOfCopy" ); // Set MIP information resizeColType(source.coltypesize_); CoinDisjointCopyN( source.coltype_, source.coltypesize_, coltype_ ); // Updates task MIP information for( int k = 0; k < source.coltypesize_; ++k ) { switch(coltype_[k]) { case 'I': setInteger(k); break; case 'C': setContinuous(k); break; } } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::gutsOfCopy()\n"); #endif } //----------------------------------------------------------------------------- // Empty function void OsiMskSolverInterface::gutsOfConstructor() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::gutsOfConstructor()\n"); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::gutsOfConstructor()\n"); #endif } //----------------------------------------------------------------------------- // Function called from destructor void OsiMskSolverInterface::gutsOfDestructor() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::gutsOfDestructor()\n"); #endif freeCachedData(KEEPCACHED_NONE); if ( task_ != NULL ) { MSK_unlinkfuncfromtaskstream(getMutableLpPtr(), MSK_STREAM_LOG); MSK_unlinkfuncfromtaskstream(getMutableLpPtr(), MSK_STREAM_ERR); MSK_unlinkfuncfromtaskstream(getMutableLpPtr(), MSK_STREAM_WRN); int err = MSK_deletetask(&task_); checkMSKerror( err, "MSK_deletetask", "gutsOfDestructor" ); task_ = NULL; freeAllMemory(); } MSKassert(3,task_==NULL,"task_==NULL","gutsOfDestructor"); MSKassert(3,obj_==NULL,"obj_==NULL","gutsOfDestructor"); MSKassert(3,collower_==NULL,"collower_==NULL","gutsOfDestructor"); MSKassert(3,colupper_==NULL,"colupper_==NULL","gutsOfDestructor"); MSKassert(3,rowsense_==NULL,"rowsense_==NULL","gutsOfDestructor"); MSKassert(3,rhs_==NULL,"rhs_==NULL","gutsOfDestructor"); MSKassert(3,rowrange_==NULL,"rowrange_==NULL","gutsOfDestructor"); MSKassert(3,rowlower_==NULL,"rowlower_==NULL","gutsOfDestructor"); MSKassert(3,rowupper_==NULL,"rowupper_==NULL","gutsOfDestructor"); MSKassert(3,colsol_==NULL,"colsol_==NULL","gutsOfDestructor"); MSKassert(3,rowsol_==NULL,"rowsol_==NULL","gutsOfDestructor"); MSKassert(3,redcost_==NULL,"redcost_==NULL","gutsOfDestructor"); MSKassert(3,rowact_==NULL,"rowact_==NULL","gutsOfDestructor"); MSKassert(3,matrixByRow_==NULL,"probtypemip_","gutsOfDestructor"); MSKassert(3,matrixByCol_==NULL,"matrixByCol_==NULL","gutsOfDestructor"); MSKassert(3,coltype_==NULL,"coltype_==NULL","gutsOfDestructor"); MSKassert(3,coltypesize_==0,"coltypesize_==0","gutsOfDestructor"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::gutsOfDestructor()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeCachedColRim() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedColRim()\n"); #endif freeCacheDouble( obj_ ); freeCacheDouble( collower_ ); freeCacheDouble( colupper_ ); MSKassert(3,obj_==NULL,"obj_==NULL","freeCachedColRim"); MSKassert(3,collower_==NULL,"collower_==NULL","freeCachedColRim"); MSKassert(3,colupper_==NULL,"colupper_==NULL","freeCachedColRim"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedColRim()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeCachedRowRim() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedRowRim()\n"); #endif freeCacheChar( rowsense_ ); freeCacheDouble( rhs_ ); freeCacheDouble( rowrange_ ); freeCacheDouble( rowlower_ ); freeCacheDouble( rowupper_ ); MSKassert(3,rowsense_==NULL,"rowsense_==NULL","freeCachedRowRim"); MSKassert(3,rhs_==NULL,"rhs_==NULL","freeCachedRowRim"); MSKassert(3,rowrange_==NULL,"rowrange_==NULL","freeCachedRowRim"); MSKassert(3,rowlower_==NULL,"rowlower_==NULL","freeCachedRowRim"); MSKassert(3,rowupper_==NULL,"rowupper_==NULL","freeCachedRowRim"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedRowRim()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeCachedMatrix() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedMatrix()\n"); #endif freeCacheMatrix( matrixByRow_ ); freeCacheMatrix( matrixByCol_ ); MSKassert(3,matrixByRow_==NULL,"matrixByRow_==NULL","freeCachedMatrix"); MSKassert(3,matrixByCol_==NULL,"matrixByCol_==NULL","freeCachedMatrix"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedMatrix()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeCachedResults() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedResults()\n"); #endif freeCacheDouble( colsol_ ); freeCacheDouble( rowsol_ ); freeCacheDouble( redcost_ ); freeCacheDouble( rowact_ ); MSKassert(3,colsol_==NULL,"colsol_==NULL","freeCachedResults"); MSKassert(3,rowsol_==NULL,"rowsol_==NULL","freeCachedResults"); MSKassert(3,redcost_==NULL,"redcost_==NULL","freeCachedResults"); MSKassert(3,rowact_==NULL,"rowact_==NULL","freeCachedResults"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedResults()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeCachedData( int keepCached ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedResults()\n"); #endif if( !(keepCached & OsiMskSolverInterface::KEEPCACHED_COLUMN) ) freeCachedColRim(); if( !(keepCached & OsiMskSolverInterface::KEEPCACHED_ROW) ) freeCachedRowRim(); if( !(keepCached & OsiMskSolverInterface::KEEPCACHED_MATRIX) ) freeCachedMatrix(); if( !(keepCached & OsiMskSolverInterface::KEEPCACHED_RESULTS) ) freeCachedResults(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedResults()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeAllMemory() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedResults()\n"); #endif freeCachedData(); if( hotStartCStat_ != NULL ) delete[] hotStartCStat_; if( hotStartRStat_ != NULL ) delete[] hotStartRStat_; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; freeColType(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedResults()\n"); #endif } Vol-1.5.4/Osi/src/OsiGrb/0000755000175000017500000000000013434204224014017 5ustar sudipsudipVol-1.5.4/Osi/src/OsiGrb/OsiGrbSolverInterface.hpp0000644000175000017500000010263713414504222020741 0ustar sudipsudip//----------------------------------------------------------------------------- // name: OSI Interface for Gurobi // template: OSI Cplex Interface written by T. Achterberg // author: Stefan Vigerske // Humboldt University Berlin // date: 09/02/2009 // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2009 Humboldt University Berlin and others. // All Rights Reserved. // $Id: OsiGrbSolverInterface.hpp 2197 2019-01-06 23:00:34Z unxusr $ #ifndef OsiGrbSolverInterface_H #define OsiGrbSolverInterface_H #include #include "OsiSolverInterface.hpp" typedef struct _GRBmodel GRBmodel; typedef struct _GRBenv GRBenv; /** Gurobi Solver Interface Instantiation of OsiGrbSolverInterface for Gurobi */ class OsiGrbSolverInterface : virtual public OsiSolverInterface { friend void OsiGrbSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string &value); // Set a hint parameter bool setHintParam(OsiHintParam key, bool yesNo = true, OsiHintStrength strength = OsiHintTry, void * = NULL); // Get an integer parameter bool getIntParam(OsiIntParam key, int &value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double &value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string &value) const; // Get a hint parameter bool getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength, void *&otherInformation) const; // Get a hint parameter bool getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength) const; // Get a hint parameter bool getHintParam(OsiHintParam key, bool &yesNo) const; // Set mipstart option (pass column solution to CPLEX before MIP start) void setMipStart(bool value) { domipstart = value; } // Get mipstart option value bool getMipStart() const { return domipstart; } //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /*! \brief Get an empty warm start object This routine returns an empty CoinWarmStartBasis object. Its purpose is to provide a way to give a client a warm start basis object of the appropriate type, which can resized and modified as desired. */ CoinWarmStart *getEmptyWarmStart() const; /// Get warmstarting information virtual CoinWarmStart *getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart *warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double *getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double *getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double *getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double *getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double *getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double *getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const; //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue); /** Set a a set of objective function coefficients */ virtual void setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList); using OsiSolverInterface::setColLower; /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower(int elementIndex, double elementValue); using OsiSolverInterface::setColUpper; /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper(int elementIndex, double elementValue); /** Set a single column lower and upper bound
The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds(int elementIndex, double lower, double upper); /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setCollower() and setColupper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue); /** Set a single row lower and upper bound
The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds(int elementIndex, double lower, double upper); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() and over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose type changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int *indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int *indices, int len); //@} //------------------------------------------------------------------------- /**@name Naming methods */ //@{ /*! \brief Set a row name */ virtual void setRowName(int ndx, std::string name); /*! \brief Set a column name */ virtual void setColName(int ndx, std::string name); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ using OsiSolverInterface::addCol; /** */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj); using OsiSolverInterface::addCols; /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj); /** */ virtual void deleteCols(const int num, const int *colIndices); using OsiSolverInterface::addRow; /** */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng); using OsiSolverInterface::addRows; /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng); /** */ virtual void deleteRows(const int num, const int *rowIndices); //@} //@} //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); using OsiSolverInterface::readMps; /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const; //@} //--------------------------------------------------------------------------- /**@name Gurobi specific public interfaces */ //@{ /** Get pointer to Gurobi model and free all specified cached data entries (combined with logical or-operator '|' ): */ enum keepCachedFlag { /// discard all cached data (default) KEEPCACHED_NONE = 0, /// column information: objective values, lower and upper bounds, variable types KEEPCACHED_COLUMN = 1, /// row information: right hand sides, ranges and senses, lower and upper bounds for row KEEPCACHED_ROW = 2, /// problem matrix: matrix ordered by column and by row KEEPCACHED_MATRIX = 4, /// LP solution: primal and dual solution, reduced costs, row activities KEEPCACHED_RESULTS = 8, /// only discard cached LP solution KEEPCACHED_PROBLEM = KEEPCACHED_COLUMN | KEEPCACHED_ROW | KEEPCACHED_MATRIX, /// keep all cached data (similar to getMutableLpPtr()) KEEPCACHED_ALL = KEEPCACHED_PROBLEM | KEEPCACHED_RESULTS, /// free only cached column and LP solution information FREECACHED_COLUMN = KEEPCACHED_PROBLEM & ~KEEPCACHED_COLUMN, /// free only cached row and LP solution information FREECACHED_ROW = KEEPCACHED_PROBLEM & ~KEEPCACHED_ROW, /// free only cached matrix and LP solution information FREECACHED_MATRIX = KEEPCACHED_PROBLEM & ~KEEPCACHED_MATRIX, /// free only cached LP solution information FREECACHED_RESULTS = KEEPCACHED_ALL & ~KEEPCACHED_RESULTS }; GRBmodel *getLpPtr(int keepCached = KEEPCACHED_NONE); //@{ /// Method to access Gurobi environment pointer GRBenv *getEnvironmentPtr() const; /// Return whether the current Gurobi environment runs in demo mode. bool isDemoLicense() const; //@} /// return a vector of variable types (continous, binary, integer) const char *getCtype() const; /**@name Static instance counter methods */ /** Gurobi has a context which must be created prior to all other Gurobi calls. This method:
  • Increments by 1 the number of uses of the Gurobi environment.
  • Creates the Gurobi context when the number of uses is change to 1 from 0.
*/ static void incrementInstanceCounter(); /** Gurobi has a context which should be deleted after Gurobi calls. This method:
  • Decrements by 1 the number of uses of the Gurobi environment.
  • Deletes the Gurobi context when the number of uses is change to 0 from 1.
*/ static void decrementInstanceCounter(); /// sets the global gurobi environment to a user given one static void setEnvironment(GRBenv *globalenv); /// Return the number of instances of instantiated objects using Gurobi services. static unsigned int getNumInstances(); //@} //@} /**@name Constructors and destructor */ //@{ /// Default Constructor OsiGrbSolverInterface(bool use_local_env = false); /// Constructor that takes a gurobi environment and assumes membership OsiGrbSolverInterface(GRBenv *localgrbenv); /// Clone virtual OsiSolverInterface *clone(bool copyData = true) const; /// Copy constructor OsiGrbSolverInterface(const OsiGrbSolverInterface &); /// Assignment operator OsiGrbSolverInterface &operator=(const OsiGrbSolverInterface &rhs); /// Destructor virtual ~OsiGrbSolverInterface(); /// Resets as if default constructor virtual void reset(); //@} /***************************************************************************/ /**@name OsiSimplexInterface methods Gurobi adds a slack with coeff +1 in "<=" and "=" constraints, with coeff -1 in ">=", slack being non negative. We switch in order to get a "Clp tableau" where all the slacks have coefficient +1 in the original tableau. If a slack for ">=" is non basic, invB is not changed; column of the slack in the optimal tableau is flipped. If a slack for ">=" is basic, corresp. row of invB is flipped; whole row of the optimal tableau is flipped; then whole column for the slack in opt tableau is flipped. Ranged rows are not supported. It might work, but no garantee is given. */ //@{ /** Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ virtual int canDoSimplexInterface() const; using OsiSolverInterface::enableSimplexInterface; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void enableSimplexInterface(int doingPrimal) {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void disableSimplexInterface() {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void enableFactorization() const {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void disableFactorization() const {}; ///Returns true if a basis is available virtual bool basisIsAvailable() const; /** Returns a basis status of the structural/artificial variables At present as warm start i.e 0: free, 1: basic, 2: upper, 3: lower */ virtual void getBasisStatus(int *cstat, int *rstat) const; // ///Get a row of the tableau (slack part in slack if not NULL) // virtual void getBInvARow(int row, double* z, double * slack=NULL) const; // // ///Get a row of the basis inverse // virtual void getBInvRow(int row, double* z) const; // // ///Get a column of the tableau // virtual void getBInvACol(int col, double* vec) const; // // ///Get a column of the basis inverse // virtual void getBInvCol(int col, double* vec) const; // // /** Get indices of the pivot variable in each row // (order of indices corresponds to the // order of elements in a vector retured by getBInvACol() and // getBInvCol()). // */ // virtual void getBasics(int* index) const; /// switches Gurobi to prob type LP void switchToLP(); /// switches Gurobi to prob type MIP void switchToMIP(); //@} /***************************************************************************/ /***************************************************************************/ /** Apply a collection of cuts. Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.getNumineffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.getNuminconsistent() -- number of invalid cuts
  • ReturnCode.getNuminconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.getNuminfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.getNumApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == getNumineffective() + getNuminconsistent() + getNuminconsistentWrtIntegerModel() + getNuminfeasible() + getNumApplied()
*/ virtual OsiSolverInterface::ApplyCutsReturnCode applyCuts(const OsiCuts &cs, double effectivenessLb = 0.0); protected: /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut(const OsiRowCut &rc); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut(const OsiColCut &cc); //@} private: /**@name Private static class functions */ //@{ /// resizes coltype_, colmap_O2G, colmap_G2O vectors to be able to store at least minsize elements void resizeColSpace(int minsize); /// frees colsize_ vector void freeColSpace(); /// resizes colmap_G2O vector to be able to store at least minsize (auxiliary) elements void resizeAuxColSpace(int minsize); /// resizes auxcolind vector to current number of rows and inits values to -1 void resizeAuxColIndSpace(); //@} /**@name Private static class data */ //@{ /// Gurobi environment pointer static GRBenv *globalenv_; /// whether OsiGrb has created the global environment (and thus should free it) static bool globalenv_is_ours; /// Number of instances using the global Gurobi environment static unsigned int numInstances_; //@} /**@name Private methods */ //@{ /// Get LP Pointer for const methods GRBmodel *getMutableLpPtr() const; /// The real work of a copy constructor (used by copy and assignment) void gutsOfCopy(const OsiGrbSolverInterface &source); /// The real work of the constructor void gutsOfConstructor(); /// The real work of the destructor void gutsOfDestructor(); /// free cached column rim vectors void freeCachedColRim(); /// free cached row rim vectors void freeCachedRowRim(); /// free cached result vectors void freeCachedResults(); /// free cached matrices void freeCachedMatrix(); /// free all cached data (except specified entries, see getLpPtr()) void freeCachedData(int keepCached = KEEPCACHED_NONE); /// free all allocated memory void freeAllMemory(); /// converts a normal row into a ranged row by adding an auxiliary variable void convertToRangedRow(int rowidx, double rhs, double range); /// converts a ranged row into a normal row by removing its auxiliary variable void convertToNormalRow(int rowidx, char sense, double rhs); //@} /**@name Private member data */ //@{ /// Gurobi environment used only by this class instance mutable GRBenv *localenv_; /// Gurobi model represented by this class instance mutable GRBmodel *lp_; /// Hotstart information int *hotStartCStat_; int hotStartCStatSize_; int *hotStartRStat_; int hotStartRStatSize_; int hotStartMaxIteration_; /// OSI name discipline int nameDisc_; /**@name Cached information derived from the Gurobi model */ //@{ /// Pointer to objective vector mutable double *obj_; /// Pointer to dense vector of variable lower bounds mutable double *collower_; /// Pointer to dense vector of variable lower bounds mutable double *colupper_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /// Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) mutable double *rowrange_; /// Pointer to dense vector of row lower bounds mutable double *rowlower_; /// Pointer to dense vector of row upper bounds mutable double *rowupper_; /// Pointer to primal solution vector mutable double *colsol_; /// Pointer to dual solution vector mutable double *rowsol_; /// Pointer to reduced cost vector mutable double *redcost_; /// Pointer to row activity (slack) vector mutable double *rowact_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByCol_; //@} /**@name Additional information needed for storing MIP problems and handling ranged rows */ //@{ /// Stores whether we currently see the problem as a MIP mutable bool probtypemip_; /// Whether to pass a column solution to CPLEX before starting MIP solve (copymipstart) bool domipstart; /// Size of allocated memory for coltype_, colmap_O2G, and (with offset auxcolspace) colmap_G2O. int colspace_; /// Pointer to dense vector of variable types (continous, binary, integer) char *coltype_; /// Number of auxiliary columns in Gurobi model for handling of ranged rows int nauxcols; /// Size of allocated memory for colmap_G2O that exceeds colspace_ int auxcolspace; /// Maps variable indices from Osi to Gurobi /// Is NULL if there are no ranged rows! (assume identity mapping then) int *colmap_O2G; /// Maps variable indices from Gurobi to Osi /// A negative value indicates that a variable is an auxiliary variable that was added to handle a ranged row /// -colmap_G2O[i]-1 gives the index of the ranged row in this case /// Is NULL if there are no ranged rows! (assume identity mapping then) int *colmap_G2O; /// Current length of auxcolind array. int auxcolindspace; /// Gives for each row the index of the corresponding auxiliary variable, if it is a ranged row. /// Otherwise, gives -1. /// Is NULL if there are no ranged rows! (assume -1 for each row then) int *auxcolind; //@} }; //############################################################################# /** A function that tests the methods in the OsiGrbSolverInterface class. */ void OsiGrbSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiGrb/format-source.sh0000755000175000017500000000100313414504222017135 0ustar sudipsudip# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done Vol-1.5.4/Osi/src/OsiGrb/OsiGrbSolverInterface.cpp0000644000175000017500000035377713414504222020751 0ustar sudipsudip//----------------------------------------------------------------------------- // name: OSI Interface for Gurobi // template: OSI Cplex Interface written by T. Achterberg // author: Stefan Vigerske // Humboldt University Berlin // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and 'TODO' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2009 Humboldt University Berlin and others. // All Rights Reserved. // $Id: OsiGrbSolverInterface.cpp 2197 2019-01-06 23:00:34Z unxusr $ #include #include #include #include #include "CoinPragma.hpp" #include "CoinError.hpp" #include "OsiConfig.h" #include "OsiGrbSolverInterface.hpp" #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" extern "C" { #include "gurobi_c.h" } /* A utility definition which allows for easy suppression of unused variable warnings from GCC. */ #ifndef UNUSED #if defined(__GNUC__) #define UNUSED __attribute__((unused)) #else #define UNUSED #endif #endif //#define DEBUG 1 #ifdef DEBUG #define debugMessage printf("line %4d: ", __LINE__) & printf #else #define debugMessage \ if (false) \ printf #endif #define GUROBI_CALL(m, x) \ do { \ int _retcode; \ if ((_retcode = (x)) != 0) { \ char s[1001]; \ if (OsiGrbSolverInterface::globalenv_) { \ sprintf(s, "Error <%d> from GUROBI function call: ", _retcode); \ strncat(s, GRBgeterrormsg(OsiGrbSolverInterface::globalenv_), 1000); \ } else \ sprintf(s, "Error <%d> from GUROBI function call (no license?).", _retcode); \ debugMessage("%s:%d: %s", __FILE__, __LINE__, s); \ throw CoinError(s, m, "OsiGrbSolverInterface", __FILE__, __LINE__); \ } \ } while (false) template < bool > struct CompileTimeAssert; template <> struct CompileTimeAssert< true > { }; #if GRB_VERSION_MAJOR < 4 #define GRB_METHOD_DUAL GRB_LPMETHOD_DUAL #define GRB_METHOD_PRIMAL GRB_LPMETHOD_PRIMAL #define GRB_INT_PAR_METHOD GRB_INT_PAR_LPMETHOD #endif //############################################################################# // A couple of helper functions //############################################################################# inline void freeCacheDouble(double *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheChar(char *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheMatrix(CoinPackedMatrix *&ptr) { if (ptr != NULL) { delete ptr; ptr = NULL; } } void OsiGrbSolverInterface::switchToLP(void) { debugMessage("OsiGrbSolverInterface::switchToLP()\n"); if (probtypemip_) { GRBmodel *lp = getMutableLpPtr(); int nc = getNumCols(); char *contattr = new char[nc]; CoinFillN(contattr, nc, 'C'); GUROBI_CALL("switchToLP", GRBsetcharattrarray(lp, GRB_CHAR_ATTR_VTYPE, 0, nc, contattr)); delete[] contattr; probtypemip_ = false; } } void OsiGrbSolverInterface::switchToMIP(void) { debugMessage("OsiGrbSolverInterface::switchToMIP()\n"); if (!probtypemip_) { GRBmodel *lp = getMutableLpPtr(); int nc = getNumCols(); assert(coltype_ != NULL); GUROBI_CALL("switchToMIP", GRBsetcharattrarray(lp, GRB_CHAR_ATTR_VTYPE, 0, nc, coltype_)); probtypemip_ = true; } } void OsiGrbSolverInterface::resizeColSpace(int minsize) { debugMessage("OsiGrbSolverInterface::resizeColSpace()\n"); if (minsize > colspace_) { int newcolspace = 2 * colspace_; if (minsize > newcolspace) newcolspace = minsize; char *newcoltype = new char[newcolspace]; if (coltype_ != NULL) { CoinDisjointCopyN(coltype_, colspace_, newcoltype); delete[] coltype_; } coltype_ = newcoltype; if (colmap_O2G != NULL) { int *newcolmap_O2G = new int[newcolspace]; CoinDisjointCopyN(colmap_O2G, colspace_, newcolmap_O2G); delete[] colmap_O2G; colmap_O2G = newcolmap_O2G; } if (colmap_G2O != NULL) { int *newcolmap_G2O = new int[newcolspace + auxcolspace]; CoinDisjointCopyN(colmap_G2O, colspace_ + auxcolspace, newcolmap_G2O); delete[] colmap_G2O; colmap_G2O = newcolmap_G2O; } colspace_ = newcolspace; } assert(minsize == 0 || coltype_ != NULL); assert(colspace_ >= minsize); } void OsiGrbSolverInterface::freeColSpace() { debugMessage("OsiGrbSolverInterface::freeColSpace()\n"); if (colspace_ > 0) { delete[] coltype_; delete[] colmap_O2G; delete[] colmap_G2O; coltype_ = NULL; colmap_O2G = NULL; colmap_G2O = NULL; colspace_ = 0; auxcolspace = 0; } assert(coltype_ == NULL); assert(colmap_O2G == NULL); assert(colmap_G2O == NULL); } void OsiGrbSolverInterface::resizeAuxColSpace(int minsize) { debugMessage("OsiGrbSolverInterface::resizeAuxColSpace()\n"); if (minsize > auxcolspace) { int newauxcolspace = 2 * auxcolspace; if (minsize > newauxcolspace) newauxcolspace = minsize; if (colmap_G2O != NULL) { int *newcolmap_G2O = new int[colspace_ + newauxcolspace]; CoinDisjointCopyN(colmap_G2O, colspace_ + auxcolspace, newcolmap_G2O); delete[] colmap_G2O; colmap_G2O = newcolmap_G2O; } auxcolspace = newauxcolspace; } } /// resizes auxcolind vector to current number of rows and inits values to -1 void OsiGrbSolverInterface::resizeAuxColIndSpace() { debugMessage("OsiGrbSolverInterface::resizeAuxColIndSpace()\n"); int numrows = getNumRows(); if (auxcolindspace < numrows) { int newspace = 2 * auxcolindspace; if (numrows > newspace) newspace = numrows; int *newauxcolind = new int[newspace]; if (auxcolindspace > 0) CoinDisjointCopyN(auxcolind, auxcolindspace, newauxcolind); for (int i = auxcolindspace; i < newspace; ++i) newauxcolind[i] = -1; delete[] auxcolind; auxcolind = newauxcolind; auxcolindspace = newspace; } } //############################################################################# // Solve methods //############################################################################# void OsiGrbSolverInterface::initialSolve() { debugMessage("OsiGrbSolverInterface::initialSolve()\n"); bool takeHint; OsiHintStrength strength; int prevalgorithm = -1; switchToLP(); GRBmodel *lp = getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS); /* set whether dual or primal, if hint has been given */ getHintParam(OsiDoDualInInitial, takeHint, strength); if (strength != OsiHintIgnore) { GUROBI_CALL("initialSolve", GRBgetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, &prevalgorithm)); GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, takeHint ? GRB_METHOD_DUAL : GRB_METHOD_PRIMAL)); } /* set whether presolve or not */ int presolve = GRB_PRESOLVE_AUTO; getHintParam(OsiDoPresolveInInitial, takeHint, strength); if (strength != OsiHintIgnore) presolve = takeHint ? GRB_PRESOLVE_AUTO : GRB_PRESOLVE_OFF; GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, presolve)); /* set whether output or not */ GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_OUTPUTFLAG, (messageHandler()->logLevel() > 0))); /* optimize */ GUROBI_CALL("initialSolve", GRBoptimize(lp)); /* reoptimize without presolve if status unclear */ int stat; GUROBI_CALL("initialSolve", GRBgetintattr(lp, GRB_INT_ATTR_STATUS, &stat)); if (stat == GRB_INF_OR_UNBD && presolve != GRB_PRESOLVE_OFF) { GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, GRB_PRESOLVE_OFF)); GUROBI_CALL("initialSolve", GRBoptimize(lp)); GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, presolve)); } /* reset method parameter, if changed */ if (prevalgorithm != -1) GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, prevalgorithm)); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::resolve() { debugMessage("OsiGrbSolverInterface::resolve()\n"); bool takeHint; OsiHintStrength strength; int prevalgorithm = -1; switchToLP(); GRBmodel *lp = getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS); /* set whether primal or dual */ getHintParam(OsiDoDualInResolve, takeHint, strength); if (strength != OsiHintIgnore) { GUROBI_CALL("resolve", GRBgetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, &prevalgorithm)); GUROBI_CALL("resolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, takeHint ? GRB_METHOD_DUAL : GRB_METHOD_PRIMAL)); } /* set whether presolve or not */ int presolve = GRB_PRESOLVE_OFF; getHintParam(OsiDoPresolveInResolve, takeHint, strength); if (strength != OsiHintIgnore) presolve = takeHint ? GRB_PRESOLVE_AUTO : GRB_PRESOLVE_OFF; GUROBI_CALL("resolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, presolve)); /* set whether output or not */ GUROBI_CALL("resolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_OUTPUTFLAG, (messageHandler()->logLevel() > 0))); /* optimize */ GUROBI_CALL("resolve", GRBoptimize(lp)); /* reoptimize if status unclear */ int stat; GUROBI_CALL("resolve", GRBgetintattr(lp, GRB_INT_ATTR_STATUS, &stat)); if (stat == GRB_INF_OR_UNBD && presolve != GRB_PRESOLVE_OFF) { GUROBI_CALL("resolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, GRB_PRESOLVE_OFF)); GUROBI_CALL("resolve", GRBoptimize(lp)); GUROBI_CALL("resolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, presolve)); } /* reset method parameter, if changed */ if (prevalgorithm != -1) GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, prevalgorithm)); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::branchAndBound() { debugMessage("OsiGrbSolverInterface::branchAndBound()\n"); switchToMIP(); if (colsol_ != NULL && domipstart) { int *discridx = new int[getNumIntegers()]; double *discrval = new double[getNumIntegers()]; int j = 0; for (int i = 0; i < getNumCols() && j < getNumIntegers(); ++i) { if (!isInteger(i) && !isBinary(i)) continue; discridx[j] = i; discrval[j] = colsol_[i]; ++j; } assert(j == getNumIntegers()); GUROBI_CALL("branchAndBound", GRBsetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_START, getNumIntegers(), discridx, discrval)); delete[] discridx; delete[] discrval; } GRBmodel *lp = getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS); GUROBI_CALL("branchAndBound", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_OUTPUTFLAG, (messageHandler()->logLevel() > 0))); GUROBI_CALL("branchAndBound", GRBoptimize(lp)); } //############################################################################# // Parameter related methods //############################################################################# bool OsiGrbSolverInterface::setIntParam(OsiIntParam key, int value) { debugMessage("OsiGrbSolverInterface::setIntParam(%d, %d)\n", key, value); switch (key) { case OsiMaxNumIteration: if (GRBsetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_ITERATIONLIMIT, (double)value) != 0) { *messageHandler() << "Warning: Setting GUROBI iteration limit to" << value << "failed." << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; return false; } return true; case OsiMaxNumIterationHotStart: if (value >= 0) { hotStartMaxIteration_ = value; return true; } return false; case OsiNameDiscipline: if (value < 0 || value > 3) return false; nameDisc_ = value; return true; case OsiLastIntParam: default: return false; } } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::setDblParam(OsiDblParam key, double value) { debugMessage("OsiGrbSolverInterface::setDblParam(%d, %g)\n", key, value); switch (key) { // Gurobi does not have primal or dual objective limits // case OsiDualObjectiveLimit: // break; // case OsiPrimalObjectiveLimit: // break; case OsiDualTolerance: if (GRBsetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_OPTIMALITYTOL, value) != 0) { *messageHandler() << "Warning: Setting GUROBI dual (i.e., optimality) tolerance to" << value << "failed." << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; return false; } return true; case OsiPrimalTolerance: if (GRBsetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_FEASIBILITYTOL, value) != 0) { *messageHandler() << "Warning: Setting GUROBI primal (i.e., feasiblity) tolerance to" << value << "failed." << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; return false; } return true; case OsiObjOffset: return OsiSolverInterface::setDblParam(key, value); case OsiLastDblParam: default: return false; } } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::setStrParam(OsiStrParam key, const std::string &value) { debugMessage("OsiGrbSolverInterface::setStrParam(%d, %s)\n", key, value.c_str()); switch (key) { case OsiProbName: GUROBI_CALL("setStrParam", GRBsetstrattr(getLpPtr(), GRB_STR_ATTR_MODELNAME, const_cast< char * >(value.c_str()))); return true; case OsiSolverName: case OsiLastStrParam: default: return false; } } // Set a hint parameter bool OsiGrbSolverInterface::setHintParam(OsiHintParam key, bool yesNo, OsiHintStrength strength, void *otherInfo) { debugMessage("OsiGrbSolverInterface::setHintParam(%d, %d)\n", key, yesNo); if (key == OsiDoScale) { GUROBI_CALL("setHintParam", GRBsetintparam(GRBgetenv(getMutableLpPtr()), GRB_INT_PAR_SCALEFLAG, yesNo)); OsiSolverInterface::setHintParam(key, yesNo, strength, otherInfo); return true; } return OsiSolverInterface::setHintParam(key, yesNo, strength, otherInfo); } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::getIntParam(OsiIntParam key, int &value) const { debugMessage("OsiGrbSolverInterface::getIntParam(%d)\n", key); switch (key) { case OsiMaxNumIteration: double dblval; GUROBI_CALL("getIntParam", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getIntParam", GRBgetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_ITERATIONLIMIT, &dblval)); value = (int)dblval; return true; case OsiMaxNumIterationHotStart: value = hotStartMaxIteration_; return true; case OsiNameDiscipline: value = nameDisc_; return true; case OsiLastIntParam: default: return false; } } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::getDblParam(OsiDblParam key, double &value) const { debugMessage("OsiGrbSolverInterface::getDblParam(%d)\n", key); GUROBI_CALL("getDblParam", GRBupdatemodel(getMutableLpPtr())); switch (key) { // Gurobi does not have primal or dual objective limits // case OsiDualObjectiveLimit: // break; // case OsiPrimalObjectiveLimit: // break; case OsiDualTolerance: GUROBI_CALL("getDblParam", GRBgetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_OPTIMALITYTOL, &value)); return true; case OsiPrimalTolerance: GUROBI_CALL("getDblParam", GRBgetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_FEASIBILITYTOL, &value)); return true; case OsiObjOffset: return OsiSolverInterface::getDblParam(key, value); case OsiLastDblParam: default: return false; } } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::getStrParam(OsiStrParam key, std::string &value) const { debugMessage("OsiGrbSolverInterface::getStrParam(%d)\n", key); switch (key) { case OsiProbName: { char *name = NULL; GUROBI_CALL("getStrParam", GRBgetstrattr(getMutableLpPtr(), GRB_STR_ATTR_MODELNAME, &name)); assert(name != NULL); value = name; return true; } case OsiSolverName: value = "gurobi"; return true; case OsiLastStrParam: default: return false; } } // Get a hint parameter bool OsiGrbSolverInterface::getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength, void *&otherInformation) const { debugMessage("OsiGrbSolverInterface::getHintParam[1](%d)\n", key); if (key == OsiDoScale) { OsiSolverInterface::getHintParam(key, yesNo, strength, otherInformation); GUROBI_CALL("getHintParam", GRBupdatemodel(getMutableLpPtr())); int value; GUROBI_CALL("getHintParam", GRBgetintparam(GRBgetenv(getMutableLpPtr()), GRB_INT_PAR_SCALEFLAG, &value)); yesNo = value; return true; } return OsiSolverInterface::getHintParam(key, yesNo, strength, otherInformation); } // Get a hint parameter bool OsiGrbSolverInterface::getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength) const { debugMessage("OsiGrbSolverInterface::getHintParam[2](%d)\n", key); if (key == OsiDoScale) { OsiSolverInterface::getHintParam(key, yesNo, strength); GUROBI_CALL("getHintParam", GRBupdatemodel(getMutableLpPtr())); int value; GUROBI_CALL("getHintParam", GRBgetintparam(GRBgetenv(getMutableLpPtr()), GRB_INT_PAR_SCALEFLAG, &value)); yesNo = value; return true; } return OsiSolverInterface::getHintParam(key, yesNo, strength); } // Get a hint parameter bool OsiGrbSolverInterface::getHintParam(OsiHintParam key, bool &yesNo) const { debugMessage("OsiGrbSolverInterface::getHintParam[3](%d)\n", key); if (key == OsiDoScale) { OsiSolverInterface::getHintParam(key, yesNo); GUROBI_CALL("getHintParam", GRBupdatemodel(getMutableLpPtr())); int value; GUROBI_CALL("getHintParam", GRBgetintparam(GRBgetenv(getMutableLpPtr()), GRB_INT_PAR_SCALEFLAG, &value)); yesNo = value; return true; } return OsiSolverInterface::getHintParam(key, yesNo); } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiGrbSolverInterface::isAbandoned() const { debugMessage("OsiGrbSolverInterface::isAbandoned()\n"); GUROBI_CALL("isAbandoned", GRBupdatemodel(getMutableLpPtr())); int stat; GUROBI_CALL("isAbandoned", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &stat)); return ( stat == GRB_LOADED || stat == GRB_NUMERIC || stat == GRB_INTERRUPTED); } bool OsiGrbSolverInterface::isProvenOptimal() const { debugMessage("OsiGrbSolverInterface::isProvenOptimal()\n"); GUROBI_CALL("isProvenOptimal", GRBupdatemodel(getMutableLpPtr())); int stat; GUROBI_CALL("isProvenOptimal", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &stat)); return (stat == GRB_OPTIMAL); } bool OsiGrbSolverInterface::isProvenPrimalInfeasible() const { debugMessage("OsiGrbSolverInterface::isProvenPrimalInfeasible()\n"); GUROBI_CALL("isProvenPrimalInfeasible", GRBupdatemodel(getMutableLpPtr())); int stat; GUROBI_CALL("isProvenPrimalInfeasible", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &stat)); return (stat == GRB_INFEASIBLE); } bool OsiGrbSolverInterface::isProvenDualInfeasible() const { debugMessage("OsiGrbSolverInterface::isProvenDualInfeasible()\n"); GUROBI_CALL("isProvenDualInfeasible", GRBupdatemodel(getMutableLpPtr())); int stat; GUROBI_CALL("isProvenDualInfeasible", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &stat)); return (stat == GRB_UNBOUNDED); } bool OsiGrbSolverInterface::isPrimalObjectiveLimitReached() const { debugMessage("OsiGrbSolverInterface::isPrimalObjectiveLimitReached()\n"); return false; } bool OsiGrbSolverInterface::isDualObjectiveLimitReached() const { debugMessage("OsiGrbSolverInterface::isDualObjectiveLimitReached()\n"); return false; } bool OsiGrbSolverInterface::isIterationLimitReached() const { debugMessage("OsiGrbSolverInterface::isIterationLimitReached()\n"); GUROBI_CALL("isIterationLimitReached", GRBupdatemodel(getMutableLpPtr())); int stat; GUROBI_CALL("isIterationLimitReached", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &stat)); return (stat == GRB_ITERATION_LIMIT); } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart *OsiGrbSolverInterface::getEmptyWarmStart() const { return (dynamic_cast< CoinWarmStart * >(new CoinWarmStartBasis())); } // below we assume that getBasisStatus uses the same values as the warm start enum, i.e. 0: free, 1: basic, 2: upper, 3: lower static CompileTimeAssert< CoinWarmStartBasis::isFree == 0 > UNUSED change_In_Enum_CoinWarmStartBasis_Status_free_breaks_this_function; static CompileTimeAssert< CoinWarmStartBasis::basic == 1 > UNUSED change_In_Enum_CoinWarmStartBasis_Status_basic_breaks_this_function; static CompileTimeAssert< CoinWarmStartBasis::atUpperBound == 2 > UNUSED change_In_Enum_CoinWarmStartBasis_Status_upper_breaks_this_function; static CompileTimeAssert< CoinWarmStartBasis::atLowerBound == 3 > UNUSED change_In_Enum_CoinWarmStartBasis_Status_lower_breaks_this_function; CoinWarmStart *OsiGrbSolverInterface::getWarmStart() const { debugMessage("OsiGrbSolverInterface::getWarmStart()\n"); assert(!probtypemip_); if (!basisIsAvailable()) return NULL; CoinWarmStartBasis *ws = NULL; int numcols = getNumCols(); int numrows = getNumRows(); int *cstat = new int[numcols]; int *rstat = new int[numrows]; int i; #if 1 getBasisStatus(cstat, rstat); ws = new CoinWarmStartBasis; ws->setSize(numcols, numrows); for (i = 0; i < numrows; ++i) ws->setArtifStatus(i, CoinWarmStartBasis::Status(rstat[i])); for (i = 0; i < numcols; ++i) ws->setStructStatus(i, CoinWarmStartBasis::Status(cstat[i])); #else GUROBI_CALL("getWarmStart", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getWarmStart", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, 0, numcols, cstat)); GUROBI_CALL("getWarmStart", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_CBASIS, 0, numrows, rstat)); ws = new CoinWarmStartBasis; ws->setSize(numcols, numrows); char sense; for (i = 0; i < numrows; ++i) { switch (rstat[i]) { case GRB_BASIC: ws->setArtifStatus(i, CoinWarmStartBasis::basic); break; case GRB_NONBASIC_LOWER: case GRB_NONBASIC_UPPER: GUROBI_CALL("getWarmStart", GRBgetcharattrelement(getMutableLpPtr(), GRB_CHAR_ATTR_SENSE, i, &sense)); ws->setArtifStatus(i, (sense == '>' ? CoinWarmStartBasis::atUpperBound : CoinWarmStartBasis::atLowerBound)); break; default: // unknown row status delete ws; delete[] rstat; delete[] cstat; return NULL; } } for (i = 0; i < numcols; ++i) { switch (cstat[i]) { case GRB_BASIC: ws->setStructStatus(i, CoinWarmStartBasis::basic); break; case GRB_NONBASIC_LOWER: ws->setStructStatus(i, CoinWarmStartBasis::atLowerBound); break; case GRB_NONBASIC_UPPER: ws->setStructStatus(i, CoinWarmStartBasis::atUpperBound); break; case GRB_SUPERBASIC: ws->setStructStatus(i, CoinWarmStartBasis::isFree); break; default: // unknown column status delete[] rstat; delete[] cstat; delete ws; return NULL; } } #endif delete[] cstat; delete[] rstat; return ws; } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::setWarmStart(const CoinWarmStart *warmstart) { debugMessage("OsiGrbSolverInterface::setWarmStart(%p)\n", (void *)warmstart); const CoinWarmStartBasis *ws = dynamic_cast< const CoinWarmStartBasis * >(warmstart); int numcols, numrows, i, oi; int *stat; if (!ws) return false; numcols = ws->getNumStructural(); numrows = ws->getNumArtificial(); if (numcols != getNumCols() || numrows != getNumRows()) return false; switchToLP(); stat = new int[numcols + nauxcols > numrows ? numcols + nauxcols : numrows]; for (i = 0; i < numrows; ++i) { switch (ws->getArtifStatus(i)) { case CoinWarmStartBasis::basic: stat[i] = GRB_BASIC; break; case CoinWarmStartBasis::atLowerBound: case CoinWarmStartBasis::atUpperBound: stat[i] = GRB_NONBASIC_LOWER; break; case CoinWarmStartBasis::isFree: stat[i] = GRB_SUPERBASIC; break; default: // unknown row status delete[] stat; return false; } } GUROBI_CALL("setWarmStart", GRBsetintattrarray(getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS), GRB_INT_ATTR_CBASIS, 0, numrows, stat)); for (i = 0; i < numcols + nauxcols; ++i) { oi = colmap_G2O ? colmap_G2O[i] : i; if (oi >= 0) { /* normal variable */ switch (ws->getStructStatus(oi)) { case CoinWarmStartBasis::basic: stat[i] = GRB_BASIC; break; case CoinWarmStartBasis::atLowerBound: stat[i] = GRB_NONBASIC_LOWER; break; case CoinWarmStartBasis::atUpperBound: stat[i] = GRB_NONBASIC_UPPER; break; case CoinWarmStartBasis::isFree: stat[i] = GRB_SUPERBASIC; break; default: // unknown col status delete[] stat; return false; } } else { /* auxiliary variable, derive status from status of corresponding ranged row */ switch (ws->getArtifStatus(-oi - 1)) { case CoinWarmStartBasis::basic: stat[i] = GRB_BASIC; break; case CoinWarmStartBasis::atLowerBound: stat[i] = GRB_NONBASIC_LOWER; break; case CoinWarmStartBasis::atUpperBound: stat[i] = GRB_NONBASIC_UPPER; break; case CoinWarmStartBasis::isFree: stat[i] = GRB_SUPERBASIC; break; default: // unknown col status delete[] stat; return false; } } } GUROBI_CALL("setWarmStart", GRBsetintattrarray(getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS), GRB_INT_ATTR_VBASIS, 0, numcols + nauxcols, stat)); delete[] stat; return true; } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# void OsiGrbSolverInterface::markHotStart() { debugMessage("OsiGrbSolverInterface::markHotStart()\n"); int numcols, numrows; assert(!probtypemip_); numcols = getNumCols() + nauxcols; numrows = getNumRows(); if (numcols > hotStartCStatSize_) { delete[] hotStartCStat_; hotStartCStatSize_ = static_cast< int >(1.2 * static_cast< double >(numcols + nauxcols)); // get some extra space for future hot starts hotStartCStat_ = new int[hotStartCStatSize_]; } if (numrows > hotStartRStatSize_) { delete[] hotStartRStat_; hotStartRStatSize_ = static_cast< int >(1.2 * static_cast< double >(numrows)); // get some extra space for future hot starts hotStartRStat_ = new int[hotStartRStatSize_]; } GUROBI_CALL("markHotStart", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("markHotStart", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, 0, numcols + nauxcols, hotStartCStat_)); GUROBI_CALL("markHotStart", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_CBASIS, 0, numrows, hotStartRStat_)); } void OsiGrbSolverInterface::solveFromHotStart() { debugMessage("OsiGrbSolverInterface::solveFromHotStart()\n"); double maxiter; switchToLP(); assert(getNumCols() <= hotStartCStatSize_); assert(getNumRows() <= hotStartRStatSize_); GUROBI_CALL("solveFromHotStart", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("solveFromHotStart", GRBsetintattrarray(getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS), GRB_INT_ATTR_CBASIS, 0, getNumRows(), hotStartRStat_)); GUROBI_CALL("solveFromHotStart", GRBsetintattrarray(getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS), GRB_INT_ATTR_VBASIS, 0, getNumCols() + nauxcols, hotStartCStat_)); GUROBI_CALL("solveFromHotStart", GRBgetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_ITERATIONLIMIT, &maxiter)); GUROBI_CALL("solveFromHotStart", GRBsetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_ITERATIONLIMIT, (double)hotStartMaxIteration_)); resolve(); GUROBI_CALL("solveFromHotStart", GRBsetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_ITERATIONLIMIT, maxiter)); } void OsiGrbSolverInterface::unmarkHotStart() { debugMessage("OsiGrbSolverInterface::unmarkHotStart()\n"); // ??? be lazy with deallocating memory and do nothing here, deallocate memory in the destructor } //############################################################################# // Problem information methods (original data) //############################################################################# //------------------------------------------------------------------ // Get number of rows, columns, elements, ... //------------------------------------------------------------------ int OsiGrbSolverInterface::getNumCols() const { debugMessage("OsiGrbSolverInterface::getNumCols()\n"); int numcols; GUROBI_CALL("getNumCols", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getNumCols", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_NUMVARS, &numcols)); numcols -= nauxcols; return numcols; } int OsiGrbSolverInterface::getNumRows() const { debugMessage("OsiGrbSolverInterface::getNumRows()\n"); int numrows; GUROBI_CALL("getNumRows", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getNumRows", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_NUMCONSTRS, &numrows)); return numrows; } int OsiGrbSolverInterface::getNumElements() const { debugMessage("OsiGrbSolverInterface::getNumElements()\n"); int numnz; GUROBI_CALL("getNumElements", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getNumElements", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_NUMNZS, &numnz)); /* each auxiliary column contributes one nonzero element to exactly one row */ numnz -= nauxcols; return numnz; } //------------------------------------------------------------------ // Get pointer to rim vectors //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getColLower() const { debugMessage("OsiGrbSolverInterface::getColLower()\n"); if (collower_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { collower_ = new double[ncols]; GUROBI_CALL("getColLower", GRBupdatemodel(getMutableLpPtr())); if (nauxcols) GUROBI_CALL("getColLower", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_LB, ncols, colmap_O2G, collower_)); else GUROBI_CALL("getColLower", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_LB, 0, ncols, collower_)); } } return collower_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getColUpper() const { debugMessage("OsiGrbSolverInterface::getColUpper()\n"); if (colupper_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { colupper_ = new double[ncols]; GUROBI_CALL("getColUpper", GRBupdatemodel(getMutableLpPtr())); if (nauxcols) GUROBI_CALL("getColUpper", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_UB, ncols, colmap_O2G, colupper_)); else GUROBI_CALL("getColUpper", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_UB, 0, ncols, colupper_)); } } return colupper_; } //------------------------------------------------------------------ const char *OsiGrbSolverInterface::getRowSense() const { debugMessage("OsiGrbSolverInterface::getRowSense()\n"); if (rowsense_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowsense_ = new char[nrows]; GUROBI_CALL("getRowSense", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getRowSense", GRBgetcharattrarray(getMutableLpPtr(), GRB_CHAR_ATTR_SENSE, 0, nrows, rowsense_)); for (int i = 0; i < nrows; ++i) { if (auxcolind && auxcolind[i] >= 0) { assert(rowsense_[i] == GRB_EQUAL); rowsense_[i] = 'R'; continue; } switch (rowsense_[i]) { case GRB_LESS_EQUAL: rowsense_[i] = 'L'; break; case GRB_GREATER_EQUAL: rowsense_[i] = 'G'; break; case GRB_EQUAL: rowsense_[i] = 'E'; break; } } } } return rowsense_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRightHandSide() const { debugMessage("OsiGrbSolverInterface::getRightHandSide()\n"); if (rhs_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rhs_ = new double[nrows]; GUROBI_CALL("getRightHandSide", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getRightHandSide", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_RHS, 0, nrows, rhs_)); /* for ranged rows, we give the rhs of the aux. variable used to represent the range of this row as row rhs */ if (nauxcols) for (int i = 0; i < nrows; ++i) if (auxcolind[i] >= 0) GUROBI_CALL("getRightHandSide", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_UB, auxcolind[i], &rhs_[i])); } } return rhs_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRowRange() const { debugMessage("OsiGrbSolverInterface::getRowRange()\n"); if (rowrange_ == NULL) { int nrows = getNumRows(); if (nrows > 0) rowrange_ = CoinCopyOfArrayOrZero((double *)NULL, nrows); if (nauxcols) { double auxlb, auxub; for (int i = 0; i < nrows; ++i) if (auxcolind[i] >= 0) { GUROBI_CALL("getRowRange", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_LB, auxcolind[i], &auxlb)); GUROBI_CALL("getRowRange", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_UB, auxcolind[i], &auxub)); rowrange_[i] = auxub - auxlb; } } } return rowrange_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRowLower() const { debugMessage("OsiGrbSolverInterface::getRowLower()\n"); if (rowlower_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { const char *rowsense = getRowSense(); rowlower_ = new double[nrows]; double rhs; double dum1; for (int i = 0; i < nrows; ++i) { if (auxcolind && auxcolind[i] >= 0) { assert(rowsense[i] == 'R'); GUROBI_CALL("getRowLower", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_LB, auxcolind[i], &rowlower_[i])); } else { GUROBI_CALL("getRowLower", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_RHS, i, &rhs)); convertSenseToBound(rowsense[i], rhs, 0.0, rowlower_[i], dum1); } } } } return rowlower_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRowUpper() const { debugMessage("OsiGrbSolverInterface::getRowUpper()\n"); if (rowupper_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { const char *rowsense = getRowSense(); rowupper_ = new double[nrows]; double rhs; double dum1; for (int i = 0; i < nrows; ++i) { if (auxcolind && auxcolind[i] >= 0) { assert(rowsense[i] == 'R'); GUROBI_CALL("getRowUpper", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_UB, auxcolind[i], &rowupper_[i])); } else { GUROBI_CALL("getRowUpper", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_RHS, i, &rhs)); convertSenseToBound(rowsense[i], rhs, 0.0, dum1, rowupper_[i]); } } } } return rowupper_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getObjCoefficients() const { debugMessage("OsiGrbSolverInterface::getObjCoefficients()\n"); if (obj_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { obj_ = new double[ncols]; GUROBI_CALL("getObjCoefficients", GRBupdatemodel(getMutableLpPtr())); if (nauxcols) GUROBI_CALL("getObjCoefficients", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_OBJ, ncols, colmap_O2G, obj_)); else GUROBI_CALL("getObjCoefficients", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_OBJ, 0, ncols, obj_)); } } return obj_; } //------------------------------------------------------------------ double OsiGrbSolverInterface::getObjSense() const { debugMessage("OsiGrbSolverInterface::getObjSense()\n"); int sense; GUROBI_CALL("getObjSense", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getObjSense", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_MODELSENSE, &sense)); return (double)sense; } //------------------------------------------------------------------ // Return information on integrality //------------------------------------------------------------------ bool OsiGrbSolverInterface::isContinuous(int colNumber) const { debugMessage("OsiGrbSolverInterface::isContinuous(%d)\n", colNumber); return getCtype()[colNumber] == 'C'; } //------------------------------------------------------------------ // Row and column copies of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix *OsiGrbSolverInterface::getMatrixByRow() const { debugMessage("OsiGrbSolverInterface::getMatrixByRow()\n"); if (matrixByRow_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); if (nrows == 0) { matrixByRow_ = new CoinPackedMatrix(); matrixByRow_->setDimensions(0, ncols); return matrixByRow_; } int nelems; int *starts = new int[nrows + 1]; int *len = new int[nrows]; GUROBI_CALL("getMatrixByRow", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getMatrixByRow", GRBgetconstrs(getMutableLpPtr(), &nelems, NULL, NULL, NULL, 0, nrows)); assert(nelems == getNumElements() + nauxcols); int *indices = new int[nelems]; double *elements = new double[nelems]; GUROBI_CALL("getMatrixByRow", GRBgetconstrs(getMutableLpPtr(), &nelems, starts, indices, elements, 0, nrows)); matrixByRow_ = new CoinPackedMatrix(); // Should be able to pass null for length of packed matrix, // assignMatrix does not seem to allow (even though documentation say it is possible to do this). // For now compute the length. starts[nrows] = nelems; for (int i = 0; i < nrows; ++i) len[i] = starts[i + 1] - starts[i]; matrixByRow_->assignMatrix(false /* not column ordered */, ncols + nauxcols, nrows, nelems, elements, indices, starts, len); if (nauxcols) { // delete auxiliary columns from matrix int *auxcols = new int[nauxcols]; int j = 0; for (int i = 0; i < ncols + nauxcols; ++i) if (colmap_G2O[i] < 0) auxcols[j++] = i; assert(j == nauxcols); matrixByRow_->deleteCols(nauxcols, auxcols); delete[] auxcols; assert(matrixByRow_->getNumElements() == getNumElements()); assert(matrixByRow_->getMinorDim() <= ncols); } } return matrixByRow_; } //------------------------------------------------------------------ const CoinPackedMatrix *OsiGrbSolverInterface::getMatrixByCol() const { debugMessage("OsiGrbSolverInterface::getMatrixByCol()\n"); if (matrixByCol_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); matrixByCol_ = new CoinPackedMatrix(); if (ncols > 0) { int nelems; int *starts = new int[ncols + nauxcols + 1]; int *len = new int[ncols + nauxcols]; GUROBI_CALL("getMatrixByCol", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getMatrixByCol", GRBgetvars(getMutableLpPtr(), &nelems, NULL, NULL, NULL, 0, ncols + nauxcols)); int *indices = new int[nelems]; double *elements = new double[nelems]; GUROBI_CALL("getMatrixByCol", GRBgetvars(getMutableLpPtr(), &nelems, starts, indices, elements, 0, ncols + nauxcols)); // Should be able to pass null for length of packed matrix, // assignMatrix does not seem to allow (even though documentation say it is possible to do this). // For now compute the length. starts[ncols + nauxcols] = nelems; for (int i = 0; i < ncols + nauxcols; i++) len[i] = starts[i + 1] - starts[i]; matrixByCol_->assignMatrix(true /* column ordered */, nrows, ncols + nauxcols, nelems, elements, indices, starts, len); assert(matrixByCol_->getNumCols() == ncols + nauxcols); assert(matrixByCol_->getNumRows() == nrows); if (nauxcols) { // delete auxiliary columns from matrix int *auxcols = new int[nauxcols]; int j = 0; for (int i = 0; i < ncols + nauxcols; ++i) if (colmap_G2O[i] < 0) auxcols[j++] = i; assert(j == nauxcols); matrixByCol_->deleteCols(nauxcols, auxcols); delete[] auxcols; assert(matrixByCol_->getNumElements() == getNumElements()); assert(matrixByCol_->getMajorDim() <= ncols); assert(matrixByCol_->getMinorDim() <= nrows); } } else matrixByCol_->setDimensions(nrows, ncols); } return matrixByCol_; } //------------------------------------------------------------------ // Get solver's value for infinity //------------------------------------------------------------------ double OsiGrbSolverInterface::getInfinity() const { debugMessage("OsiGrbSolverInterface::getInfinity()\n"); return GRB_INFINITY; } //############################################################################# // Problem information methods (results) //############################################################################# // *FIXME*: what should be done if a certain vector doesn't exist??? const double *OsiGrbSolverInterface::getColSolution() const { debugMessage("OsiGrbSolverInterface::getColSolution()\n"); if (colsol_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { colsol_ = new double[ncols]; GUROBI_CALL("getColSolution", GRBupdatemodel(getMutableLpPtr())); if (GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_X, 0, colsol_) == 0) { // if a solution is available, get it if (nauxcols) GUROBI_CALL("getColSolution", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_X, ncols, colmap_O2G, colsol_)); else GUROBI_CALL("getColSolution", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_X, 0, ncols, colsol_)); } else { *messageHandler() << "Warning: OsiGrbSolverInterface::getColSolution() called, but no solution available! Returning lower bounds, but they may be at -infinity. Be aware!" << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; if (nauxcols) GUROBI_CALL("getColSolution", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_LB, ncols, colmap_O2G, colsol_)); else GUROBI_CALL("getColSolution", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_LB, 0, ncols, colsol_)); } } } return colsol_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRowPrice() const { debugMessage("OsiGrbSolverInterface::getRowPrice()\n"); if (rowsol_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowsol_ = new double[nrows]; GUROBI_CALL("getRowPrice", GRBupdatemodel(getMutableLpPtr())); if (GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_PI, 0, rowsol_) == 0) { GUROBI_CALL("getRowPrice", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_PI, 0, nrows, rowsol_)); } else { *messageHandler() << "Warning: OsiGrbSolverInterface::getRowPrice() called, but no solution available! Returning 0.0. Be aware!" << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; CoinZeroN(rowsol_, nrows); } //??? what is the dual value for a ranged row? } } return rowsol_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getReducedCost() const { debugMessage("OsiGrbSolverInterface::getReducedCost()\n"); if (redcost_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { redcost_ = new double[ncols]; GUROBI_CALL("getReducedCost", GRBupdatemodel(getMutableLpPtr())); if (GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_RC, 0, redcost_) == 0) { // if reduced costs are available, get them if (nauxcols) GUROBI_CALL("getReducedCost", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_RC, ncols, colmap_O2G, redcost_)); else GUROBI_CALL("getReducedCost", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_RC, 0, ncols, redcost_)); } else { *messageHandler() << "Warning: OsiGrbSolverInterface::getReducedCost() called, but no solution available! Returning 0.0. Be aware!" << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; CoinZeroN(redcost_, ncols); } } } return redcost_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRowActivity() const { debugMessage("OsiGrbSolverInterface::getRowActivity()\n"); if (rowact_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowact_ = new double[nrows]; GUROBI_CALL("getRowActivity", GRBupdatemodel(getMutableLpPtr())); if (GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_SLACK, 0, rowact_) == 0) { GUROBI_CALL("getRowActivity", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_SLACK, 0, nrows, rowact_)); for (int r = 0; r < nrows; ++r) { if (nauxcols && auxcolind[r] >= 0) { GUROBI_CALL("getRowActivity", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_X, auxcolind[r], &rowact_[r])); } else rowact_[r] = getRightHandSide()[r] - rowact_[r]; } } else { *messageHandler() << "Warning: OsiGrbSolverInterface::getRowActivity() called, but no solution available! Returning 0.0. Be aware!" << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; CoinZeroN(rowact_, nrows); } } } return rowact_; } //------------------------------------------------------------------ double OsiGrbSolverInterface::getObjValue() const { debugMessage("OsiGrbSolverInterface::getObjValue()\n"); double objval = 0.0; GUROBI_CALL("getObjValue", GRBupdatemodel(getMutableLpPtr())); if (GRBgetdblattr(getMutableLpPtr(), GRB_DBL_ATTR_OBJVAL, &objval) == 0) { // Adjust objective function value by constant term in objective function double objOffset; getDblParam(OsiObjOffset, objOffset); objval = objval - objOffset; } else { *messageHandler() << "Warning: OsiGrbSolverInterface::getObjValue() called, but probably no solution available! Returning 0.0. Be aware!" << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; } return objval; } //------------------------------------------------------------------ int OsiGrbSolverInterface::getIterationCount() const { debugMessage("OsiGrbSolverInterface::getIterationCount()\n"); double itercnt; GUROBI_CALL("getIterationCount", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getIterationCount", GRBgetdblattr(getMutableLpPtr(), GRB_DBL_ATTR_ITERCOUNT, &itercnt)); return (int)itercnt; } //------------------------------------------------------------------ std::vector< double * > OsiGrbSolverInterface::getDualRays(int maxNumRays, bool fullRay) const { debugMessage("OsiGrbSolverInterface::getDualRays(%d,%s)\n", maxNumRays, fullRay ? "true" : "false"); if (fullRay == true) { throw CoinError("Full dual rays not yet implemented.", "getDualRays", "OsiGrbSolverInterface"); } OsiGrbSolverInterface solver(*this); const int numcols = getNumCols(); const int numrows = getNumRows(); int *index = new int[CoinMax(numcols, numrows)]; int i; for (i = CoinMax(numcols, numrows) - 1; i >= 0; --i) { index[i] = i; } double *obj = new double[CoinMax(numcols, 2 * numrows)]; CoinFillN(obj, numcols, 0.0); solver.setObjCoeffSet(index, index + numcols, obj); double *clb = new double[2 * numrows]; double *cub = new double[2 * numrows]; const double plusone = 1.0; const double minusone = -1.0; const char *sense = getRowSense(); const CoinPackedVectorBase **cols = new const CoinPackedVectorBase *[numrows]; int newcols = 0; for (i = 0; i < numrows; ++i) { switch (sense[i]) { case 'L': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &minusone, false); break; case 'G': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &plusone, false); break; case 'R': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &minusone, false); cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &plusone, false); break; case 'N': case 'E': break; } } CoinFillN(obj, newcols, 1.0); CoinFillN(clb, newcols, 0.0); CoinFillN(cub, newcols, getInfinity()); solver.addCols(newcols, cols, clb, cub, obj); delete[] index; delete[] cols; delete[] clb; delete[] cub; delete[] obj; solver.setObjSense(1.0); // minimize solver.initialSolve(); const double *solverpi = solver.getRowPrice(); double *pi = new double[numrows]; for (i = numrows - 1; i >= 0; --i) { pi[i] = -solverpi[i]; } return std::vector< double * >(1, pi); } //------------------------------------------------------------------ std::vector< double * > OsiGrbSolverInterface::getPrimalRays(int maxNumRays) const { debugMessage("OsiGrbSolverInterface::getPrimalRays(%d)\n", maxNumRays); return std::vector< double * >(); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# void OsiGrbSolverInterface::setObjCoeff(int elementIndex, double elementValue) { debugMessage("OsiGrbSolverInterface::setObjCoeff(%d, %g)\n", elementIndex, elementValue); GUROBI_CALL("setObjCoeff", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_OBJ, nauxcols ? colmap_O2G[elementIndex] : elementIndex, elementValue)); if (obj_ != NULL) obj_[elementIndex] = elementValue; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList) { debugMessage("OsiGrbSolverInterface::setObjCoeffSet(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)coeffList); const int cnt = (int)(indexLast - indexFirst); if (cnt == 0) return; if (cnt == 1) { setObjCoeff(*indexFirst, *coeffList); return; } assert(cnt > 1); if (nauxcols) { int *indices = new int[cnt]; for (int i = 0; i < cnt; ++i) indices[i] = colmap_O2G[indexFirst[i]]; GUROBI_CALL("setObjCoeffSet", GRBsetdblattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_OBJ, cnt, indices, const_cast< double * >(coeffList))); delete[] indices; } else { GUROBI_CALL("setObjCoeffSet", GRBsetdblattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_OBJ, cnt, const_cast< int * >(indexFirst), const_cast< double * >(coeffList))); } if (obj_ != NULL) for (int i = 0; i < cnt; ++i) obj_[indexFirst[i]] = coeffList[i]; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setColLower(int elementIndex, double elementValue) { debugMessage("OsiGrbSolverInterface::setColLower(%d, %g)\n", elementIndex, elementValue); GUROBI_CALL("setColLower", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_LB, nauxcols ? colmap_O2G[elementIndex] : elementIndex, elementValue)); if (collower_ != NULL) collower_[elementIndex] = elementValue; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setColUpper(int elementIndex, double elementValue) { debugMessage("OsiGrbSolverInterface::setColUpper(%d, %g)\n", elementIndex, elementValue); GUROBI_CALL("setColUpper", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_UB, nauxcols ? colmap_O2G[elementIndex] : elementIndex, elementValue)); if (colupper_ != NULL) colupper_[elementIndex] = elementValue; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setColBounds(int elementIndex, double lower, double upper) { debugMessage("OsiGrbSolverInterface::setColBounds(%d, %g, %g)\n", elementIndex, lower, upper); setColLower(elementIndex, lower); setColUpper(elementIndex, upper); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { debugMessage("OsiGrbSolverInterface::setColSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); const int cnt = (int)(indexLast - indexFirst); if (cnt == 0) return; if (cnt == 1) { setColLower(*indexFirst, boundList[0]); setColUpper(*indexFirst, boundList[1]); return; } assert(cnt > 1); double *lbList = new double[cnt]; double *ubList = new double[cnt]; int *indices = nauxcols ? new int[cnt] : NULL; for (int i = 0; i < cnt; ++i) { lbList[i] = boundList[2 * i]; ubList[i] = boundList[2 * i + 1]; if (indices) indices[i] = colmap_O2G[indexFirst[i]]; if (collower_ != NULL) collower_[indexFirst[i]] = boundList[2 * i]; if (colupper_ != NULL) colupper_[indexFirst[i]] = boundList[2 * i + 1]; } GUROBI_CALL("setColSetBounds", GRBsetdblattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_LB, cnt, indices ? indices : const_cast< int * >(indexFirst), lbList)); GUROBI_CALL("setColSetBounds", GRBsetdblattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_UB, cnt, indices ? indices : const_cast< int * >(indexFirst), ubList)); delete[] lbList; delete[] ubList; delete[] indices; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowLower(int i, double elementValue) { debugMessage("OsiGrbSolverInterface::setRowLower(%d, %g)\n", i, elementValue); double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (lower != elementValue) { convertBoundToSense(elementValue, upper, sense, rhs, range); setRowType(i, sense, rhs, range); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowUpper(int i, double elementValue) { debugMessage("OsiGrbSolverInterface::setRowUpper(%d, %g)\n", i, elementValue); double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (upper != elementValue) { convertBoundToSense(lower, elementValue, sense, rhs, range); setRowType(i, sense, rhs, range); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowBounds(int elementIndex, double lower, double upper) { debugMessage("OsiGrbSolverInterface::setRowBounds(%d, %g, %g)\n", elementIndex, lower, upper); double rhs, range; char sense; convertBoundToSense(lower, upper, sense, rhs, range); setRowType(elementIndex, sense, rhs, range); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowType(int i, char sense, double rightHandSide, double range) { debugMessage("OsiGrbSolverInterface::setRowType(%d, %c, %g, %g)\n", i, sense, rightHandSide, range); GUROBI_CALL("setRowType", GRBupdatemodel(getMutableLpPtr())); if (nauxcols && auxcolind[i] >= 0) { // so far, row i is a ranged row switch (sense) { case 'R': // row i was ranged row and remains a ranged row assert(range > 0); GUROBI_CALL("setRowType", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_LB, auxcolind[i], rightHandSide - range)); GUROBI_CALL("setRowType", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_UB, auxcolind[i], rightHandSide)); break; case 'N': case 'L': case 'G': case 'E': convertToNormalRow(i, sense, rightHandSide); break; default: std::cerr << "Unknown row sense: " << sense << std::endl; exit(-1); } } else if (sense == 'R') { convertToRangedRow(i, rightHandSide, range); } else { char grbsense; switch (sense) { case 'N': grbsense = GRB_LESS_EQUAL; rightHandSide = getInfinity(); break; case 'L': grbsense = GRB_LESS_EQUAL; break; case 'G': grbsense = GRB_GREATER_EQUAL; break; case 'E': grbsense = GRB_EQUAL; break; default: std::cerr << "Unknown row sense: " << sense << std::endl; exit(-1); } GUROBI_CALL("setRowType", GRBsetcharattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_CHAR_ATTR_SENSE, i, grbsense)); GUROBI_CALL("setRowType", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_RHS, i, rightHandSide)); } if (rowsense_ != NULL) rowsense_[i] = sense; if (rhs_ != NULL) rhs_[i] = rightHandSide; if (rowlower_ != NULL || rowupper_ != NULL) { double dummy; convertSenseToBound(sense, rightHandSide, range, rowlower_ ? rowlower_[i] : dummy, rowupper_ ? rowupper_[i] : dummy); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { debugMessage("OsiGrbSolverInterface::setRowSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; char *sense = new char[cnt]; double *rhs = new double[cnt]; double *range = new double[cnt]; for (int i = 0; i < cnt; ++i) convertBoundToSense(boundList[2 * i], boundList[2 * i + 1], sense[i], rhs[i], range[i]); setRowSetTypes(indexFirst, indexLast, sense, rhs, range); delete[] range; delete[] rhs; delete[] sense; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList) { debugMessage("OsiGrbSolverInterface::setRowSetTypes(%p, %p, %p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)senseList, (void *)rhsList, (void *)rangeList); const int cnt = (int)(indexLast - indexFirst); if (cnt == 0) return; if (cnt == 1) { setRowType(*indexFirst, *senseList, *rhsList, *rangeList); return; } assert(cnt > 0); GUROBI_CALL("setRowSetTypes", GRBupdatemodel(getMutableLpPtr())); char *grbsense = new char[cnt]; double *rhs = new double[cnt]; for (int i = 0; i < cnt; ++i) { rhs[i] = rhsList[i]; if (nauxcols && auxcolind[indexFirst[i]] >= 0) { // so far, row is a ranged row switch (senseList[i]) { case 'R': // row i was ranged row and remains a ranged row assert(rangeList[i] > 0); GUROBI_CALL("setRowSetTypes", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_LB, auxcolind[indexFirst[i]], rhsList[i] - rangeList[i])); GUROBI_CALL("setRowSetTypes", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_UB, auxcolind[indexFirst[i]], rhsList[i])); grbsense[i] = GRB_EQUAL; rhs[i] = 0.0; break; case 'N': convertToNormalRow(indexFirst[i], senseList[i], rhsList[i]); grbsense[i] = GRB_LESS_EQUAL; rhs[i] = getInfinity(); break; case 'L': convertToNormalRow(indexFirst[i], senseList[i], rhsList[i]); grbsense[i] = GRB_LESS_EQUAL; break; case 'G': convertToNormalRow(indexFirst[i], senseList[i], rhsList[i]); grbsense[i] = GRB_GREATER_EQUAL; break; case 'E': convertToNormalRow(indexFirst[i], senseList[i], rhsList[i]); grbsense[i] = GRB_EQUAL; break; default: std::cerr << "Unknown row sense: " << senseList[i] << std::endl; exit(-1); } } else if (senseList[i] == 'R') { convertToRangedRow(indexFirst[i], rhsList[i], rangeList[i]); grbsense[i] = GRB_EQUAL; rhs[i] = 0.0; } else { switch (senseList[i]) { case 'N': grbsense[i] = GRB_LESS_EQUAL; rhs[i] = getInfinity(); break; case 'L': grbsense[i] = GRB_LESS_EQUAL; break; case 'G': grbsense[i] = GRB_GREATER_EQUAL; break; case 'E': grbsense[i] = GRB_EQUAL; break; default: std::cerr << "Unknown row sense: " << senseList[i] << std::endl; exit(-1); } } if (rowsense_ != NULL) rowsense_[indexFirst[i]] = senseList[i]; if (rhs_ != NULL) rhs_[indexFirst[i]] = senseList[i] == 'N' ? getInfinity() : rhsList[i]; } GUROBI_CALL("setRowSetTypes", GRBsetcharattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), GRB_CHAR_ATTR_SENSE, cnt, const_cast< int * >(indexFirst), grbsense)); GUROBI_CALL("setRowSetTypes", GRBsetdblattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), GRB_DBL_ATTR_RHS, cnt, const_cast< int * >(indexFirst), rhs)); delete[] rhs; delete[] grbsense; } //############################################################################# void OsiGrbSolverInterface::setContinuous(int index) { debugMessage("OsiGrbSolverInterface::setContinuous(%d)\n", index); assert(coltype_ != NULL); assert(colspace_ >= getNumCols()); coltype_[index] = GRB_CONTINUOUS; if (probtypemip_) { GUROBI_CALL("setContinuous", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("setContinuous", GRBsetcharattrelement(getMutableLpPtr(), GRB_CHAR_ATTR_VTYPE, nauxcols ? colmap_O2G[index] : index, GRB_CONTINUOUS)); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setInteger(int index) { debugMessage("OsiGrbSolverInterface::setInteger(%d)\n", index); assert(coltype_ != NULL); assert(colspace_ >= getNumCols()); if (getColLower()[index] == 0.0 && getColUpper()[index] == 1.0) coltype_[index] = GRB_BINARY; else coltype_[index] = GRB_INTEGER; if (probtypemip_) { GUROBI_CALL("setInteger", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("setInteger", GRBsetcharattrelement(getMutableLpPtr(), GRB_CHAR_ATTR_VTYPE, nauxcols ? colmap_O2G[index] : index, coltype_[index])); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setContinuous(const int *indices, int len) { debugMessage("OsiGrbSolverInterface::setContinuous(%p, %d)\n", (void *)indices, len); for (int i = 0; i < len; ++i) setContinuous(indices[i]); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setInteger(const int *indices, int len) { debugMessage("OsiGrbSolverInterface::setInteger(%p, %d)\n", (void *)indices, len); for (int i = 0; i < len; ++i) setInteger(indices[i]); } //############################################################################# void OsiGrbSolverInterface::setRowName(int ndx, std::string name) { debugMessage("OsiGrbSolverInterface::setRowName\n"); if (ndx < 0 || ndx >= getNumRows()) return; int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (nameDiscipline == 0) return; OsiSolverInterface::setRowName(ndx, name); GUROBI_CALL("setRowName", GRBsetstrattrelement(getLpPtr(), GRB_STR_ATTR_CONSTRNAME, ndx, const_cast< char * >(name.c_str()))); } void OsiGrbSolverInterface::setColName(int ndx, std::string name) { debugMessage("OsiGrbSolverInterface::setColName\n"); if (ndx < 0 || ndx >= getNumCols()) return; int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (nameDiscipline == 0) return; OsiSolverInterface::setColName(ndx, name); GUROBI_CALL("setColName", GRBsetstrattrelement(getLpPtr(), GRB_STR_ATTR_VARNAME, nauxcols ? colmap_O2G[ndx] : ndx, const_cast< char * >(name.c_str()))); } //############################################################################# void OsiGrbSolverInterface::setObjSense(double s) { debugMessage("OsiGrbSolverInterface::setObjSense(%g)\n", s); GUROBI_CALL("setObjSense", GRBsetintattr(getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS), GRB_INT_ATTR_MODELSENSE, (int)s)); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setColSolution(const double *cs) { debugMessage("OsiGrbSolverInterface::setColSolution(%p)\n", (void *)cs); int nc = getNumCols(); if (cs == NULL) freeCachedResults(); else if (nc > 0) { // If colsol isn't allocated, then allocate it if (colsol_ == NULL) colsol_ = new double[nc]; // Copy in new col solution. CoinDisjointCopyN(cs, nc, colsol_); //*messageHandler() << "OsiGrb::setColSolution: Gurobi does not allow setting the column solution. Command is ignored." << CoinMessageEol; } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowPrice(const double *rs) { debugMessage("OsiGrbSolverInterface::setRowPrice(%p)\n", (void *)rs); int nr = getNumRows(); if (rs == NULL) freeCachedResults(); else if (nr > 0) { // If rowsol isn't allocated, then allocate it if (rowsol_ == NULL) rowsol_ = new double[nr]; // Copy in new row solution. CoinDisjointCopyN(rs, nr, rowsol_); *messageHandler() << "OsiGrb::setRowPrice: Gurobi does not allow setting the row price. Command is ignored." << CoinMessageEol; } } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiGrbSolverInterface::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) { debugMessage("OsiGrbSolverInterface::addCol(%p, %g, %g, %g)\n", (void *)&vec, collb, colub, obj); int nc = getNumCols(); assert(colspace_ >= nc); resizeColSpace(nc + 1); coltype_[nc] = GRB_CONTINUOUS; GUROBI_CALL("addCol", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("addCol", GRBaddvar(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), vec.getNumElements(), const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()), obj, collb, colub, coltype_[nc], NULL)); if (nauxcols) { colmap_O2G[nc] = nc + nauxcols; colmap_G2O[nc + nauxcols] = nc; } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj) { debugMessage("OsiGrbSolverInterface::addCols(%d, %p, %p, %p, %p)\n", numcols, (void *)cols, (void *)collb, (void *)colub, (void *)obj); int nc = getNumCols(); assert(colspace_ >= nc); resizeColSpace(nc + numcols); CoinFillN(&coltype_[nc], numcols, GRB_CONTINUOUS); int i; int nz = 0; for (i = 0; i < numcols; ++i) nz += cols[i]->getNumElements(); int *index = new int[nz]; double *elem = new double[nz]; int *start = new int[numcols + 1]; nz = 0; start[0] = 0; for (i = 0; i < numcols; ++i) { const CoinPackedVectorBase *col = cols[i]; const int len = col->getNumElements(); CoinDisjointCopyN(col->getIndices(), len, index + nz); CoinDisjointCopyN(col->getElements(), len, elem + nz); nz += len; start[i + 1] = nz; } GUROBI_CALL("addCols", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("addCols", GRBaddvars(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), numcols, nz, start, index, elem, const_cast< double * >(obj), const_cast< double * >(collb), const_cast< double * >(colub), NULL, NULL)); delete[] start; delete[] elem; delete[] index; if (nauxcols) for (i = 0; i < numcols; ++i) { colmap_O2G[nc + i] = nc + i + nauxcols; colmap_G2O[nc + i + nauxcols] = nc + i; } } static int intcompare(const void *p1, const void *p2) { return (*(const int *)p1) - (*(const int *)p2); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::deleteCols(const int num, const int *columnIndices) { debugMessage("OsiGrbSolverInterface::deleteCols(%d, %p)\n", num, (void *)columnIndices); if (num == 0) return; GUROBI_CALL("deleteCols", GRBupdatemodel(getMutableLpPtr())); int *ind = NULL; if (nauxcols) { int nc = getNumCols(); ind = new int[num]; // translate into gurobi indices and sort for (int i = 0; i < num; ++i) ind[i] = colmap_O2G[columnIndices[i]]; qsort((void *)ind, num, sizeof(int), intcompare); // delete indices in gurobi GUROBI_CALL("deleteCols", GRBdelvars(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), num, ind)); nc -= num; // update colmap_G2O and auxcolind int offset = 0; int j = 0; for (int i = ind[0]; i < nc + nauxcols; ++i) { if (j < num && i == ind[j]) { // variable i has been deleted, increase offset by 1 assert(colmap_G2O[i] >= 0); ++offset; while (j < num && i == ind[j]) ++j; } // variable from position i+offset has moved to position i if (colmap_G2O[i + offset] >= 0) { // if variable at (hithero) position i+offset was a regular variable, then it is now stored at position i // substract offset since variable indices also changed in Osi colmap_G2O[i] = colmap_G2O[i + offset] - offset; assert(colmap_G2O[i] >= 0); // update also colmap_O2G colmap_O2G[colmap_G2O[i]] = i; } else { // if variable at (hithero) position i+offset was an auxiliary variable, then the corresponding row index is now stored at position i int rngrowidx = -colmap_G2O[i + offset] - 1; assert(auxcolind[rngrowidx] == i + offset); colmap_G2O[i] = colmap_G2O[i + offset]; // update also auxcolind to point to position i now auxcolind[rngrowidx] = i; } } } else { GUROBI_CALL("deleteCols", GRBdelvars(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), num, const_cast< int * >(columnIndices))); } #ifndef NDEBUG if (nauxcols) { int nc = getNumCols(); int nr = getNumRows(); for (int i = 0; i < nc + nauxcols; ++i) { assert(i >= nc || colmap_G2O[colmap_O2G[i]] == i); assert(colmap_G2O[i] < 0 || colmap_O2G[colmap_G2O[i]] == i); assert(colmap_G2O[i] >= 0 || -colmap_G2O[i] - 1 < nr); assert(colmap_G2O[i] >= 0 || auxcolind[-colmap_G2O[i] - 1] == i); } } #endif if (!getColNames().empty() || coltype_ != NULL) { if (ind == NULL) ind = new int[num]; memcpy(ind, columnIndices, num * sizeof(int)); qsort((void *)ind, num, sizeof(int), intcompare); if (!getColNames().empty()) for (int i = num - 1; i >= 0; --i) deleteColNames(ind[i], 1); if (coltype_ != NULL) { int offset = 0; for (int i = 0; i <= getNumCols(); ++i) { // variable i+offset was deleted if (offset < num && ind[offset] == i + offset) ++offset; // move column type from position i+offset to i coltype_[i] = coltype_[i + offset]; } } } delete[] ind; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) { debugMessage("OsiGrbSolverInterface::addRow(%p, %g, %g)\n", (void *)&vec, rowlb, rowub); char sense; double rhs, range; convertBoundToSense(rowlb, rowub, sense, rhs, range); addRow(vec, sense, rhs, range); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) { debugMessage("OsiGrbSolverInterface::addRow(%p, %c, %g, %g)\n", (void *)&vec, rowsen, rowrhs, rowrng); char grbsense; double rhs = rowrhs; switch (rowsen) { case 'R': /* ranged rows are added as equality rows first, and then an auxiliary variable is added */ assert(rowrng > 0.0); grbsense = GRB_EQUAL; rhs = 0.0; break; case 'N': grbsense = GRB_LESS_EQUAL; rhs = getInfinity(); break; case 'L': grbsense = GRB_LESS_EQUAL; break; case 'G': grbsense = GRB_GREATER_EQUAL; break; case 'E': grbsense = GRB_EQUAL; break; default: std::cerr << "Unknown row sense: " << rowsen << std::endl; exit(-1); } GUROBI_CALL("addRow", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("addRow", GRBaddconstr(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_COLUMN), vec.getNumElements(), const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()), grbsense, rhs, NULL)); if (rowsen == 'R') convertToRangedRow(getNumRows() - 1, rowrhs, rowrng); else if (nauxcols) resizeAuxColIndSpace(); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub) { debugMessage("OsiGrbSolverInterface::addRows(%d, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowlb, (void *)rowub); int i; int nz = 0; for (i = 0; i < numrows; ++i) nz += rows[i]->getNumElements(); int *index = new int[nz]; double *elem = new double[nz]; int *start = new int[numrows + 1]; char *grbsense = new char[numrows]; double *rhs = new double[numrows]; double range; bool haverangedrows = false; nz = 0; start[0] = 0; for (i = 0; i < numrows; ++i) { const CoinPackedVectorBase *row = rows[i]; const int len = row->getNumElements(); CoinDisjointCopyN(row->getIndices(), len, index + nz); CoinDisjointCopyN(row->getElements(), len, elem + nz); nz += len; start[i + 1] = nz; convertBoundToSense(rowlb[i], rowub[i], grbsense[i], rhs[i], range); if (range || grbsense[i] == 'R') { grbsense[i] = 'E'; rhs[i] = 0.0; haverangedrows = true; } switch (grbsense[i]) { case 'N': grbsense[i] = GRB_LESS_EQUAL; rhs[i] = getInfinity(); break; case 'L': grbsense[i] = GRB_LESS_EQUAL; break; case 'G': grbsense[i] = GRB_GREATER_EQUAL; break; case 'E': grbsense[i] = GRB_EQUAL; break; } } GUROBI_CALL("addRows", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("addRows", GRBaddconstrs(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), numrows, nz, start, index, elem, grbsense, rhs, NULL)); delete[] start; delete[] elem; delete[] index; delete[] grbsense; delete[] rhs; if (haverangedrows) { int nr = getNumRows() - numrows; for (i = 0; i < numrows; ++i) if (rowlb[i] > getInfinity() && rowub[i] < getInfinity() && rowub[i] - rowlb[i] > 0.0) convertToRangedRow(nr + i, rowub[i], rowub[i] - rowlb[i]); } else if (nauxcols) resizeAuxColIndSpace(); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiGrbSolverInterface::addRows(%d, %p, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowsen, (void *)rowrhs, (void *)rowrng); int i; int nz = 0; for (i = 0; i < numrows; ++i) nz += rows[i]->getNumElements(); int *index = new int[nz]; double *elem = new double[nz]; int *start = new int[numrows + 1]; char *grbsense = new char[numrows]; double *rhs = new double[numrows]; bool haverangedrows = false; nz = 0; start[0] = 0; for (i = 0; i < numrows; ++i) { const CoinPackedVectorBase *row = rows[i]; const int len = row->getNumElements(); CoinDisjointCopyN(row->getIndices(), len, index + nz); CoinDisjointCopyN(row->getElements(), len, elem + nz); nz += len; start[i + 1] = nz; rhs[i] = rowrhs[i]; switch (rowsen[i]) { case 'R': assert(rowrng[i] > 0.0); grbsense[i] = GRB_EQUAL; rhs[i] = 0.0; haverangedrows = true; break; case 'N': grbsense[i] = GRB_LESS_EQUAL; rhs[i] = getInfinity(); break; case 'L': grbsense[i] = GRB_LESS_EQUAL; break; case 'G': grbsense[i] = GRB_GREATER_EQUAL; break; case 'E': grbsense[i] = GRB_EQUAL; break; } } GUROBI_CALL("addRows", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("addRows", GRBaddconstrs(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), numrows, nz, start, index, elem, grbsense, rhs, NULL)); delete[] start; delete[] elem; delete[] index; delete[] grbsense; delete[] rhs; if (haverangedrows) { int nr = getNumRows() - numrows; for (i = 0; i < numrows; ++i) if (rowsen[i] == 'R') convertToRangedRow(nr + i, rowrhs[i], rowrng[i]); } else if (nauxcols) resizeAuxColIndSpace(); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::deleteRows(const int num, const int *rowIndices) { debugMessage("OsiGrbSolverInterface::deleteRows(%d, %p)\n", num, (void *)rowIndices); if (nauxcols) { // check if a ranged row should be deleted; if so, then convert it into a normal row first for (int i = 0; i < num; ++i) { if (auxcolind[rowIndices[i]] >= 0) convertToNormalRow(rowIndices[i], 'E', 0.0); } } GUROBI_CALL("deleteRows", GRBdelconstrs(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_COLUMN), num, const_cast< int * >(rowIndices))); if (nauxcols == 0 && getRowNames().empty()) return; int *ind = CoinCopyOfArray(rowIndices, num); qsort((void *)ind, num, sizeof(int), intcompare); if (nauxcols) { int nr = getNumRows(); int offset = 0; int j = 0; for (int i = 0; i < nr; ++i) { if (j < num && i == ind[j]) { ++offset; while (j < num && i == ind[j]) ++j; } auxcolind[i] = auxcolind[i + offset]; if (auxcolind[i] >= 0) colmap_G2O[auxcolind[i]] = -i - 1; } } #ifndef NDEBUG if (nauxcols) { int nc = getNumCols(); int nr = getNumRows(); for (int i = 0; i < nc + nauxcols; ++i) { assert(i >= nc || colmap_G2O[colmap_O2G[i]] == i); assert(colmap_G2O[i] < 0 || colmap_O2G[colmap_G2O[i]] == i); assert(colmap_G2O[i] >= 0 || -colmap_G2O[i] - 1 < nr); assert(colmap_G2O[i] >= 0 || auxcolind[-colmap_G2O[i] - 1] == i); } } #endif if (!getRowNames().empty()) for (int i = num - 1; i >= 0; --i) deleteRowNames(ind[i], 1); delete[] ind; } //############################################################################# // Methods to input a problem //############################################################################# void OsiGrbSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { debugMessage("OsiGrbSolverInterface::loadProblem(1)(%p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowlb, (void *)rowub); const double inf = getInfinity(); int nrows = matrix.getNumRows(); char *rowSense = new char[nrows]; double *rowRhs = new double[nrows]; double *rowRange = new double[nrows]; int i; for (i = nrows - 1; i >= 0; --i) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense(lower, upper, rowSense[i], rowRhs[i], rowRange[i]); } loadProblem(matrix, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) { debugMessage("OsiGrbSolverInterface::assignProblem()\n"); loadProblem(*matrix, collb, colub, obj, rowlb, rowub); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowlb; rowlb = 0; delete[] rowub; rowub = 0; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiGrbSolverInterface::loadProblem(2)(%p, %p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); int nc = matrix.getNumCols(); int nr = matrix.getNumRows(); int i; char *myrowsen = new char[nr]; double *myrowrhs = new double[nr]; bool haverangedrows = false; for (i = 0; i < nr; ++i) { if (rowrhs) myrowrhs[i] = rowrhs[i]; else myrowrhs[i] = 0.0; if (rowsen) switch (rowsen[i]) { case 'R': assert(rowrng && rowrng[i] > 0.0); myrowsen[i] = GRB_EQUAL; myrowrhs[i] = 0.0; haverangedrows = true; break; case 'N': myrowsen[i] = GRB_LESS_EQUAL; myrowrhs[i] = getInfinity(); break; case 'L': myrowsen[i] = GRB_LESS_EQUAL; break; case 'G': myrowsen[i] = GRB_GREATER_EQUAL; break; case 'E': myrowsen[i] = GRB_EQUAL; break; } else myrowsen[i] = 'G'; } // Set column values to defaults if NULL pointer passed double *clb; double *cub; double *ob; if (collb != NULL) clb = const_cast< double * >(collb); else { clb = new double[nc]; CoinFillN(clb, nc, 0.0); } if (colub != NULL) cub = const_cast< double * >(colub); else { cub = new double[nc]; CoinFillN(cub, nc, getInfinity()); } if (obj != NULL) ob = const_cast< double * >(obj); else { ob = new double[nc]; CoinFillN(ob, nc, 0.0); } bool freeMatrixRequired = false; CoinPackedMatrix *m = NULL; if (!matrix.isColOrdered()) { m = new CoinPackedMatrix(); m->reverseOrderedCopyOf(matrix); freeMatrixRequired = true; } else m = const_cast< CoinPackedMatrix * >(&matrix); // up to GUROBI 2.0.1, GUROBI may give an "Index is out of range" error if the constraint matrix has uninitalized "gaps" #if (GRB_VERSION_MAJOR < 2) || (GRB_VERSION_MAJOR == 2 && GRB_VERSION_MINOR == 0 && GRB_VERSION_TECHNICAL <= 1) if (m->hasGaps()) { if (freeMatrixRequired) { m->removeGaps(); } else { m = new CoinPackedMatrix(matrix); if (m->hasGaps()) m->removeGaps(); freeMatrixRequired = true; } } #endif assert(nc == m->getNumCols()); assert(nr == m->getNumRows()); assert(m->isColOrdered()); int modelsense; GUROBI_CALL("loadProblem", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("loadProblem", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_MODELSENSE, &modelsense)); std::string pn; getStrParam(OsiProbName, pn); gutsOfDestructor(); // kill old LP, if any GUROBI_CALL("loadProblem", GRBloadmodel(getEnvironmentPtr(), &lp_, const_cast< char * >(pn.c_str()), nc, nr, modelsense, 0.0, ob, const_cast< char * >(myrowsen), myrowrhs, const_cast< int * >(m->getVectorStarts()), const_cast< int * >(m->getVectorLengths()), const_cast< int * >(m->getIndices()), const_cast< double * >(m->getElements()), const_cast< double * >(clb), const_cast< double * >(cub), NULL, NULL, NULL)); // GUROBI up to version 2.0.1 may return a scaled LP after GRBoptimize when requesting it via GRBgetvars #if (GRB_VERSION_MAJOR < 2) || (GRB_VERSION_MAJOR == 2 && GRB_VERSION_MINOR == 0 && GRB_VERSION_TECHNICAL <= 1) setHintParam(OsiDoScale, false); #endif delete[] myrowsen; delete[] myrowrhs; if (collb == NULL) delete[] clb; if (colub == NULL) delete[] cub; if (obj == NULL) delete[] ob; if (freeMatrixRequired) delete m; resizeColSpace(nc); CoinFillN(coltype_, nc, GRB_CONTINUOUS); if (haverangedrows) { assert(rowrhs); assert(rowrng); assert(rowsen); for (i = 0; i < nr; ++i) if (rowsen[i] == 'R') convertToRangedRow(i, rowrhs[i], rowrng[i]); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) { debugMessage("OsiGrbSolverInterface::assignProblem()\n"); loadProblem(*matrix, collb, colub, obj, rowsen, rowrhs, rowrng); delete matrix; matrix = NULL; delete[] collb; collb = NULL; delete[] colub; colub = NULL; delete[] obj; obj = NULL; delete[] rowsen; rowsen = NULL; delete[] rowrhs; rowrhs = NULL; delete[] rowrng; rowrng = NULL; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { debugMessage("OsiGrbSolverInterface::loadProblem(3)()\n"); const double inf = getInfinity(); char *rowSense = new char[numrows]; double *rowRhs = new double[numrows]; double *rowRange = new double[numrows]; for (int i = numrows - 1; i >= 0; --i) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense(lower, upper, rowSense[i], rowRhs[i], rowRange[i]); } loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiGrbSolverInterface::loadProblem(4)(%d, %d, %p, %p, %p, %p, %p, %p, %p, %p, %p)\n", numcols, numrows, (void *)start, (void *)index, (void *)value, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); int nc = numcols; int nr = numrows; int i; char *myrowsen = new char[nr]; double *myrowrhs = new double[nr]; bool haverangedrows = false; for (i = 0; i < nr; i++) { if (rowrhs) myrowrhs[i] = rowrhs[i]; else myrowrhs[i] = 0.0; if (rowsen) switch (rowsen[i]) { case 'R': assert(rowrng && rowrng[i] > 0.0); myrowsen[i] = GRB_EQUAL; myrowrhs[i] = 0.0; haverangedrows = true; break; case 'N': myrowsen[i] = GRB_LESS_EQUAL; myrowrhs[i] = getInfinity(); break; case 'L': myrowsen[i] = GRB_LESS_EQUAL; break; case 'G': myrowsen[i] = GRB_GREATER_EQUAL; break; case 'E': myrowsen[i] = GRB_EQUAL; break; } else myrowsen[i] = 'G'; } // Set column values to defaults if NULL pointer passed double *clb; double *cub; double *ob; if (collb != NULL) clb = const_cast< double * >(collb); else { clb = new double[nc]; CoinFillN(clb, nc, 0.0); } if (colub != NULL) cub = const_cast< double * >(colub); else { cub = new double[nc]; CoinFillN(cub, nc, getInfinity()); } if (obj != NULL) ob = const_cast< double * >(obj); else { ob = new double[nc]; CoinFillN(ob, nc, 0.0); } int *len = new int[nc]; for (i = 0; i < nc; ++i) len[i] = start[i + 1] - start[i]; GUROBI_CALL("loadProblem", GRBupdatemodel(getMutableLpPtr())); int modelsense; GUROBI_CALL("loadProblem", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_MODELSENSE, &modelsense)); std::string pn; getStrParam(OsiProbName, pn); gutsOfDestructor(); // kill old LP, if any GUROBI_CALL("loadProblem", GRBloadmodel(getEnvironmentPtr(), &lp_, const_cast< char * >(pn.c_str()), nc, nr, modelsense, 0.0, ob, myrowsen, myrowrhs, const_cast< int * >(start), len, const_cast< int * >(index), const_cast< double * >(value), const_cast< double * >(clb), const_cast< double * >(cub), NULL, NULL, NULL)); // GUROBI up to version 2.0.1 may return a scaled LP after GRBoptimize when requesting it via GRBgetvars #if (GRB_VERSION_MAJOR < 2) || (GRB_VERSION_MAJOR == 2 && GRB_VERSION_MINOR == 0 && GRB_VERSION_TECHNICAL <= 1) setHintParam(OsiDoScale, false); #endif delete[] myrowsen; delete[] myrowrhs; if (collb == NULL) delete[] clb; if (colub == NULL) delete[] cub; if (obj == NULL) delete[] ob; delete[] len; resizeColSpace(nc); CoinFillN(coltype_, nc, GRB_CONTINUOUS); if (haverangedrows) { assert(rowrhs); assert(rowrng); assert(rowsen); for (i = 0; i < nr; ++i) if (rowsen[i] == 'R') convertToRangedRow(i, rowrhs[i], rowrng[i]); } } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- int OsiGrbSolverInterface::readMps(const char *filename, const char *extension) { debugMessage("OsiGrbSolverInterface::readMps(%s, %s)\n", filename, extension); // just call base class method return OsiSolverInterface::readMps(filename, extension); } //----------------------------------------------------------------------------- // Write mps files //----------------------------------------------------------------------------- void OsiGrbSolverInterface::writeMps(const char *filename, const char *extension, double objSense) const { debugMessage("OsiGrbSolverInterface::writeMps(%s, %s, %g)\n", filename, extension, objSense); std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; //TODO give row and column names? writeMpsNative(fullname.c_str(), NULL, NULL); // do not call Gurobi's MPS writer, because // 1. it only writes mps if the extension is mps // 2. the instance in Gurobi may have extra columns due to reformulated ranged rows, that may be confusing // GUROBI_CALL( "writeMps", GRBwrite(getMutableLpPtr(), const_cast(fullname.c_str())) ); } //############################################################################# // CPX specific public interfaces //############################################################################# GRBenv *OsiGrbSolverInterface::getEnvironmentPtr() const { assert(localenv_ != NULL || globalenv_ != NULL); return localenv_ ? localenv_ : globalenv_; } GRBmodel *OsiGrbSolverInterface::getLpPtr(int keepCached) { freeCachedData(keepCached); return getMutableLpPtr(); } /// Return whether the current Gurobi environment runs in demo mode. bool OsiGrbSolverInterface::isDemoLicense() const { debugMessage("OsiGrbSolverInterface::isDemoLicense()\n"); GRBenv *env = getEnvironmentPtr(); GRBmodel *testlp; // a Gurobi demo license allows to solve only models with up to 500 variables // thus, let's try to create and solve a model with 1000 variables GUROBI_CALL("isDemoLicense", GRBnewmodel(env, &testlp, "licensetest", 1000, NULL, NULL, NULL, NULL, NULL)); // GUROBI_CALL( "resolve", GRBsetintparam(GRBgetenv(testlp), GRB_INT_PAR_PRESOLVE, presolve) ); int rc = GRBoptimize(testlp); if (rc == GRB_ERROR_SIZE_LIMIT_EXCEEDED) return true; GUROBI_CALL("isDemoLicense", rc); GRBfreemodel(testlp); return false; } //----------------------------------------------------------------------------- const char *OsiGrbSolverInterface::getCtype() const { debugMessage("OsiGrbSolverInterface::getCtype()\n"); return coltype_; } //############################################################################# // Static instance counter methods //############################################################################# void OsiGrbSolverInterface::incrementInstanceCounter() { if (numInstances_ == 0 && !globalenv_) { GUROBI_CALL("incrementInstanceCounter", GRBloadenv(&globalenv_, NULL)); assert(globalenv_ != NULL); globalenv_is_ours = true; } numInstances_++; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::decrementInstanceCounter() { assert(numInstances_ != 0); assert(globalenv_ != NULL); numInstances_--; if (numInstances_ == 0 && globalenv_is_ours) { GRBfreeenv(globalenv_); globalenv_ = NULL; } } //----------------------------------------------------------------------------- unsigned int OsiGrbSolverInterface::getNumInstances() { return numInstances_; } void OsiGrbSolverInterface::setEnvironment(GRBenv *globalenv) { if (numInstances_) { assert(globalenv_); throw CoinError("Cannot set global GUROBI environment, since some OsiGrb instance is still using it.", "setEnvironment", "OsiGrbSolverInterface", __FILE__, __LINE__); } assert(!globalenv_ || !globalenv_is_ours); globalenv_ = globalenv; globalenv_is_ours = false; } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiGrbSolverInterface::OsiGrbSolverInterface(bool use_local_env) : OsiSolverInterface() , localenv_(NULL) , lp_(NULL) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(1000000) , // ??? default iteration limit for strong branching is large nameDisc_(0) , obj_(NULL) , collower_(NULL) , colupper_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowlower_(NULL) , rowupper_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , probtypemip_(false) , domipstart(false) , colspace_(0) , coltype_(NULL) , nauxcols(0) , auxcolspace(0) , colmap_O2G(NULL) , colmap_G2O(NULL) , auxcolindspace(0) , auxcolind(NULL) { debugMessage("OsiGrbSolverInterface::OsiGrbSolverInterface()\n"); if (use_local_env) { GUROBI_CALL("OsiGrbSolverInterface", GRBloadenv(&localenv_, NULL)); assert(localenv_ != NULL); } else incrementInstanceCounter(); gutsOfConstructor(); // change Osi default to Gurobi default setHintParam(OsiDoDualInInitial, true, OsiHintTry); } OsiGrbSolverInterface::OsiGrbSolverInterface(GRBenv *localgrbenv) : OsiSolverInterface() , localenv_(localgrbenv) , lp_(NULL) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(1000000) , // ??? default iteration limit for strong branching is large nameDisc_(0) , obj_(NULL) , collower_(NULL) , colupper_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowlower_(NULL) , rowupper_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , probtypemip_(false) , domipstart(false) , colspace_(0) , coltype_(NULL) , nauxcols(0) , auxcolspace(0) , colmap_O2G(NULL) , colmap_G2O(NULL) , auxcolindspace(0) , auxcolind(NULL) { debugMessage("OsiGrbSolverInterface::OsiGrbSolverInterface()\n"); if (localenv_ == NULL) { // if user called this constructor with NULL pointer, we assume that he meant that a local environment should be created GUROBI_CALL("OsiGrbSolverInterface", GRBloadenv(&localenv_, NULL)); assert(localenv_ != NULL); } gutsOfConstructor(); // change Osi default to Gurobi default setHintParam(OsiDoDualInInitial, true, OsiHintTry); } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiSolverInterface *OsiGrbSolverInterface::clone(bool copyData) const { debugMessage("OsiGrbSolverInterface::clone(%d)\n", copyData); return (new OsiGrbSolverInterface(*this)); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiGrbSolverInterface::OsiGrbSolverInterface(const OsiGrbSolverInterface &source) : OsiSolverInterface(source) , localenv_(NULL) , lp_(NULL) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(source.hotStartMaxIteration_) , nameDisc_(source.nameDisc_) , obj_(NULL) , collower_(NULL) , colupper_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowlower_(NULL) , rowupper_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , probtypemip_(false) , domipstart(false) , colspace_(0) , coltype_(NULL) , nauxcols(0) , auxcolspace(0) , colmap_O2G(NULL) , colmap_G2O(NULL) , auxcolindspace(0) , auxcolind(NULL) { debugMessage("OsiGrbSolverInterface::OsiGrbSolverInterface(%p)\n", (void *)&source); if (source.localenv_) { GUROBI_CALL("OsiGrbSolverInterface", GRBloadenv(&localenv_, NULL)); assert(localenv_ != NULL); } else incrementInstanceCounter(); gutsOfConstructor(); gutsOfCopy(source); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiGrbSolverInterface::~OsiGrbSolverInterface() { debugMessage("OsiGrbSolverInterface::~OsiGrbSolverInterface()\n"); gutsOfDestructor(); if (localenv_) { GRBfreeenv(localenv_); } else decrementInstanceCounter(); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiGrbSolverInterface &OsiGrbSolverInterface::operator=(const OsiGrbSolverInterface &rhs) { debugMessage("OsiGrbSolverInterface::operator=(%p)\n", (void *)&rhs); if (this != &rhs) { OsiSolverInterface::operator=(rhs); gutsOfDestructor(); gutsOfConstructor(); if (rhs.lp_ != NULL) gutsOfCopy(rhs); } return *this; } //############################################################################# // Applying cuts //############################################################################# OsiSolverInterface::ApplyCutsReturnCode OsiGrbSolverInterface::applyCuts(const OsiCuts &cs, double effectivenessLb) { debugMessage("OsiGrbSolverInterface::applyCuts(%p)\n", (void *)&cs); OsiSolverInterface::ApplyCutsReturnCode retVal; int i; // Loop once for each column cut for (i = 0; i < cs.sizeColCuts(); i++) { if (cs.colCut(i).effectiveness() < effectivenessLb) { retVal.incrementIneffective(); continue; } if (!cs.colCut(i).consistent()) { retVal.incrementInternallyInconsistent(); continue; } if (!cs.colCut(i).consistent(*this)) { retVal.incrementExternallyInconsistent(); continue; } if (cs.colCut(i).infeasible(*this)) { retVal.incrementInfeasible(); continue; } applyColCut(cs.colCut(i)); retVal.incrementApplied(); } // Loop once for each row cut int nToApply = 0; size_t space = 0; for (i = 0; i < cs.sizeRowCuts(); i++) { if (cs.rowCut(i).effectiveness() < effectivenessLb) { retVal.incrementIneffective(); continue; } if (!cs.rowCut(i).consistent()) { retVal.incrementInternallyInconsistent(); continue; } if (!cs.rowCut(i).consistent(*this)) { retVal.incrementExternallyInconsistent(); continue; } if (cs.rowCut(i).infeasible(*this)) { retVal.incrementInfeasible(); continue; } nToApply++; space += cs.rowCut(i).row().getNumElements(); retVal.incrementApplied(); } int base_row = getNumRows(); int base_col = getNumCols() + nauxcols; //now apply row cuts jointly int *start = new int[nToApply + 1]; int *indices = new int[space]; double *values = new double[space]; double *lower = new double[nToApply]; double *upper = new double[nToApply]; int cur = 0; int r = 0; int nTrulyRanged = nToApply; for (i = 0; i < cs.sizeRowCuts(); i++) { if (cs.rowCut(i).effectiveness() < effectivenessLb) { continue; } if (!cs.rowCut(i).consistent()) { continue; } if (!cs.rowCut(i).consistent(*this)) { continue; } if (cs.rowCut(i).infeasible(*this)) { continue; } start[r] = cur; const OsiRowCut &rowCut = cs.rowCut(i); lower[r] = rowCut.lb(); upper[r] = rowCut.ub(); std::cerr << "range " << lower[r] << " - " << upper[r] << std::endl; if (lower[r] <= -getInfinity()) { lower[r] = -GRB_INFINITY; nTrulyRanged--; } else if (upper[r] >= getInfinity()) { upper[r] = GRB_INFINITY; nTrulyRanged--; } for (int k = 0; k < rowCut.row().getNumElements(); k++) { values[cur + k] = rowCut.row().getElements()[k]; indices[cur + k] = rowCut.row().getIndices()[k]; } r++; cur += rowCut.row().getNumElements(); } start[nToApply] = cur; int nPrevVars = getNumCols(); GUROBI_CALL("applyRowCuts", GRBaddrangeconstrs(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_COLUMN), nToApply, static_cast< int >(space), start, indices, values, lower, upper, NULL)); GUROBI_CALL("applyRowCuts", GRBupdatemodel(getMutableLpPtr())); // store correspondence between ranged rows and new variables added by Gurobi int nNewVars = getNumCols() - nPrevVars; if (nNewVars != nTrulyRanged) { std::cerr << "ERROR in applying cuts for Gurobi: " << __FILE__ << " : " << "line " << __LINE__ << " . Exiting" << std::endl; exit(-1); } if (nTrulyRanged > 0) { if (nauxcols == 0) { // this is the first ranged row assert(colmap_O2G == NULL); assert(colmap_G2O == NULL); assert(colspace_ >= getNumCols()); auxcolspace = nTrulyRanged; colmap_G2O = new int[colspace_ + auxcolspace]; CoinIotaN(colmap_G2O, colspace_ + auxcolspace, 0); colmap_O2G = CoinCopyOfArray(colmap_G2O, colspace_); } else { assert(colmap_O2G != NULL); assert(colmap_G2O != NULL); resizeAuxColSpace(nauxcols + nTrulyRanged); } nauxcols += nTrulyRanged; resizeAuxColIndSpace(); int next = 0; for (int k = 0; k < nToApply; k++) { if (lower[k] > -GRB_INFINITY && upper[k] < GRB_INFINITY) { auxcolind[base_row + next] = base_col + next; colmap_G2O[auxcolind[base_row + next]] = -(base_row + next) - 1; next++; } } } delete[] start; delete[] indices; delete[] values; delete[] lower; delete[] upper; return retVal; } void OsiGrbSolverInterface::applyColCut(const OsiColCut &cc) { debugMessage("OsiGrbSolverInterface::applyColCut(%p)\n", (void *)&cc); const double *gurobiColLB = getColLower(); const double *gurobiColUB = getColUpper(); const CoinPackedVector &lbs = cc.lbs(); const CoinPackedVector &ubs = cc.ubs(); int i; for (i = 0; i < lbs.getNumElements(); ++i) if (lbs.getElements()[i] > gurobiColLB[lbs.getIndices()[i]]) setColLower(lbs.getIndices()[i], lbs.getElements()[i]); for (i = 0; i < ubs.getNumElements(); ++i) if (ubs.getElements()[i] < gurobiColUB[ubs.getIndices()[i]]) setColUpper(ubs.getIndices()[i], ubs.getElements()[i]); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::applyRowCut(const OsiRowCut &rowCut) { debugMessage("OsiGrbSolverInterface::applyRowCut(%p)\n", (void *)&rowCut); double rhs = 0.0; char sns; double lb = rowCut.lb(); double ub = rowCut.ub(); bool isrange = false; if (lb <= -getInfinity() && ub >= getInfinity()) // free constraint { rhs = getInfinity(); sns = GRB_LESS_EQUAL; } else if (lb <= -getInfinity()) // <= constraint { rhs = ub; sns = GRB_LESS_EQUAL; } else if (ub >= getInfinity()) // >= constraint { rhs = lb; sns = GRB_GREATER_EQUAL; } else if (ub == lb) // = constraint { rhs = ub; sns = GRB_EQUAL; } else // range constraint { rhs = 0.0; sns = GRB_EQUAL; isrange = true; } GUROBI_CALL("applyRowCut", GRBaddconstr(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_COLUMN), rowCut.row().getNumElements(), const_cast< int * >(rowCut.row().getIndices()), const_cast< double * >(rowCut.row().getElements()), sns, rhs, NULL)); if (isrange) { convertToRangedRow(getNumRows() - 1, ub, ub - lb); } else if (nauxcols) resizeAuxColIndSpace(); } //############################################################################# // Private methods (non-static and static) and static data //############################################################################# //------------------------------------------------------------------ // Static data //------------------------------------------------------------------ GRBenv *OsiGrbSolverInterface::globalenv_ = NULL; bool OsiGrbSolverInterface::globalenv_is_ours = true; unsigned int OsiGrbSolverInterface::numInstances_ = 0; //------------------------------------------------------------------- // Get pointer to GRBmodel*. // const methods should use getMutableLpPtr(). // non-const methods should use getLpPtr(). //------------------------------------------------------------------- GRBmodel *OsiGrbSolverInterface::getMutableLpPtr() const { if (lp_ == NULL) { assert(getEnvironmentPtr() != NULL); GUROBI_CALL("getMutableLpPtr", GRBnewmodel(getEnvironmentPtr(), &lp_, "OsiGrb_problem", 0, NULL, NULL, NULL, NULL, NULL)); assert(lp_ != NULL); // GUROBI up to version 2.0.1 may return a scaled LP after GRBoptimize when requesting it via GRBgetvars #if (GRB_VERSION_MAJOR < 2) || (GRB_VERSION_MAJOR == 2 && GRB_VERSION_MINOR == 0 && GRB_VERSION_TECHNICAL <= 1) GUROBI_CALL("getMutableLpPtr", GRBsetintparam(GRBgetenv(lp_), GRB_INT_PAR_SCALEFLAG, 0)); #endif } return lp_; } //------------------------------------------------------------------- void OsiGrbSolverInterface::gutsOfCopy(const OsiGrbSolverInterface &source) { // Set Rim and constraints const double *obj = source.getObjCoefficients(); const double *rhs = source.getRightHandSide(); const char *sense = source.getRowSense(); const CoinPackedMatrix *cols = source.getMatrixByCol(); const double *lb = source.getColLower(); const double *ub = source.getColUpper(); loadProblem(*cols, lb, ub, obj, sense, rhs, source.getRowRange()); // Set Objective Sense setObjSense(source.getObjSense()); // Set Objective Constant double dblParam; source.getDblParam(OsiObjOffset, dblParam); setDblParam(OsiObjOffset, dblParam); // Set MIP information resizeColSpace(source.colspace_); CoinDisjointCopyN(source.coltype_, source.colspace_, coltype_); // Set Problem name std::string strParam; source.getStrParam(OsiProbName, strParam); setStrParam(OsiProbName, strParam); // Set Solution - not supported by Gurobi // setColSolution(source.getColSolution()); // setRowPrice(source.getRowPrice()); } //------------------------------------------------------------------- void OsiGrbSolverInterface::gutsOfConstructor() { } //------------------------------------------------------------------- void OsiGrbSolverInterface::gutsOfDestructor() { debugMessage("OsiGrbSolverInterface::gutsOfDestructor()\n"); if (lp_ != NULL) { GUROBI_CALL("gutsOfDestructor", GRBfreemodel(lp_)); lp_ = NULL; freeAllMemory(); } assert(lp_ == NULL); assert(obj_ == NULL); assert(collower_ == NULL); assert(colupper_ == NULL); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(rowlower_ == NULL); assert(rowupper_ == NULL); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(redcost_ == NULL); assert(rowact_ == NULL); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); assert(coltype_ == NULL); assert(colspace_ == 0); assert(auxcolspace == 0); assert(auxcolindspace == 0); } //------------------------------------------------------------------- /// free cached vectors void OsiGrbSolverInterface::freeCachedColRim() { freeCacheDouble(obj_); freeCacheDouble(collower_); freeCacheDouble(colupper_); assert(obj_ == NULL); assert(collower_ == NULL); assert(colupper_ == NULL); } void OsiGrbSolverInterface::freeCachedRowRim() { freeCacheChar(rowsense_); freeCacheDouble(rhs_); freeCacheDouble(rowrange_); freeCacheDouble(rowlower_); freeCacheDouble(rowupper_); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(rowlower_ == NULL); assert(rowupper_ == NULL); } void OsiGrbSolverInterface::freeCachedMatrix() { freeCacheMatrix(matrixByRow_); freeCacheMatrix(matrixByCol_); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); } void OsiGrbSolverInterface::freeCachedResults() { freeCacheDouble(colsol_); freeCacheDouble(rowsol_); freeCacheDouble(redcost_); freeCacheDouble(rowact_); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(redcost_ == NULL); assert(rowact_ == NULL); } void OsiGrbSolverInterface::freeCachedData(int keepCached) { if (!(keepCached & OsiGrbSolverInterface::KEEPCACHED_COLUMN)) freeCachedColRim(); if (!(keepCached & OsiGrbSolverInterface::KEEPCACHED_ROW)) freeCachedRowRim(); if (!(keepCached & OsiGrbSolverInterface::KEEPCACHED_MATRIX)) freeCachedMatrix(); if (!(keepCached & OsiGrbSolverInterface::KEEPCACHED_RESULTS)) freeCachedResults(); } void OsiGrbSolverInterface::freeAllMemory() { freeCachedData(); if (hotStartCStat_ != NULL) delete[] hotStartCStat_; if (hotStartRStat_ != NULL) delete[] hotStartRStat_; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; freeColSpace(); delete[] auxcolind; auxcolind = NULL; auxcolindspace = 0; } /// converts a normal row into a ranged row by adding an auxiliary variable void OsiGrbSolverInterface::convertToRangedRow(int rowidx, double rhs, double range) { debugMessage("OsiGrbSolverInterface::convertToRangedRow()\n"); assert(rowidx >= 0); assert(rowidx < getNumRows()); assert(rhs > -getInfinity()); assert(rhs < getInfinity()); assert(range > 0.0); assert(range < getInfinity()); if (nauxcols == 0) { // row rowidx is the first ranged row assert(colmap_O2G == NULL); assert(colmap_G2O == NULL); assert(colspace_ >= getNumCols()); auxcolspace = 1; colmap_G2O = new int[colspace_ + auxcolspace]; CoinIotaN(colmap_G2O, colspace_ + auxcolspace, 0); colmap_O2G = CoinCopyOfArray(colmap_G2O, colspace_); } else { assert(colmap_O2G != NULL); assert(colmap_G2O != NULL); resizeAuxColSpace(nauxcols + 1); } resizeAuxColIndSpace(); assert(auxcolind[rowidx] == -1); /* not a ranged row yet */ GUROBI_CALL("convertToRangedRow", GRBupdatemodel(getMutableLpPtr())); double minusone = -1.0; GUROBI_CALL("convertToRangedRow", GRBaddvar(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), 1, &rowidx, &minusone, 0.0, rhs - range, rhs, GRB_CONTINUOUS, NULL)); auxcolind[rowidx] = getNumCols() + nauxcols - 1; colmap_G2O[auxcolind[rowidx]] = -rowidx - 1; ++nauxcols; #ifndef NDEBUG if (nauxcols) { int nc = getNumCols(); int nr = getNumRows(); for (int i = 0; i < nc + nauxcols; ++i) { assert(i >= nc || colmap_G2O[colmap_O2G[i]] == i); assert(colmap_G2O[i] < 0 || colmap_O2G[colmap_G2O[i]] == i); assert(colmap_G2O[i] >= 0 || -colmap_G2O[i] - 1 < nr); assert(colmap_G2O[i] >= 0 || auxcolind[-colmap_G2O[i] - 1] == i); } } #endif } /// converts a ranged row into a normal row by removing its auxiliary variable void OsiGrbSolverInterface::convertToNormalRow(int rowidx, char sense, double rhs) { debugMessage("OsiGrbSolverInterface::convertToNormalRow()\n"); assert(rowidx >= 0); assert(rowidx < getNumRows()); int auxvar = auxcolind[rowidx]; assert(nauxcols); assert(auxvar >= 0); assert(colmap_G2O[auxvar] == -rowidx - 1); GUROBI_CALL("convertToNormalRow", GRBupdatemodel(getMutableLpPtr())); /* row rowidx should be an ordinary equality row with rhs == 0 now */ GUROBI_CALL("convertToNormalRow", GRBdelvars(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), 1, &auxcolind[rowidx])); auxcolind[rowidx] = -1; if (nauxcols > 1) { int nc = getNumCols(); for (int i = auxvar; i < nc; ++i) { if (colmap_O2G[i] > auxvar) --colmap_O2G[i]; colmap_G2O[i] = colmap_G2O[i + 1]; } for (int i = nc; i < nc + nauxcols; ++i) colmap_G2O[i] = colmap_G2O[i + 1]; int nr = getNumRows(); for (int i = 0; i < nr; ++i) if (auxcolind[i] > auxvar) --auxcolind[i]; --nauxcols; } else { // no ranged rows left delete[] colmap_O2G; delete[] colmap_G2O; delete[] auxcolind; auxcolspace = 0; auxcolindspace = 0; nauxcols = 0; } setRowType(rowidx, sense, rhs, 0.0); #ifndef NDEBUG if (nauxcols) { int nc = getNumCols(); int nr = getNumRows(); for (int i = 0; i < nc + nauxcols; ++i) { assert(i >= nc || colmap_G2O[colmap_O2G[i]] == i); assert(colmap_G2O[i] < 0 || colmap_O2G[colmap_G2O[i]] == i); assert(colmap_G2O[i] >= 0 || -colmap_G2O[i] - 1 < nr); assert(colmap_G2O[i] >= 0 || auxcolind[-colmap_G2O[i] - 1] == i); } } #endif } //############################################################################# // Resets as if default constructor void OsiGrbSolverInterface::reset() { setInitialData(); // clear base class gutsOfDestructor(); } /**********************************************************************/ /* Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ int OsiGrbSolverInterface::canDoSimplexInterface() const { return 0; } /**********************************************************************/ bool OsiGrbSolverInterface::basisIsAvailable() const { if (getNumCols() == 0) return true; GUROBI_CALL("basisIsAvailable", GRBupdatemodel(getMutableLpPtr())); int status; GUROBI_CALL("basisIsAvailable", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &status)); if (status == GRB_LOADED || status == GRB_INFEASIBLE || status == GRB_INF_OR_UNBD || status == GRB_UNBOUNDED) return false; int dum; return GRBgetintattrelement(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, 0, &dum) == 0; } /* Osi return codes: 0: free 1: basic 2: upper 3: lower */ void OsiGrbSolverInterface::getBasisStatus(int *cstat, int *rstat) const { int numcols = getNumCols(); int numrows = getNumRows(); GUROBI_CALL("getBasisStatus", GRBupdatemodel(getMutableLpPtr())); if (nauxcols) GUROBI_CALL("getBasisStatus", GRBgetintattrlist(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, numcols, colmap_O2G, cstat)); else GUROBI_CALL("getBasisStatus", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, 0, numcols, cstat)); for (int i = 0; i < numcols; ++i) switch (cstat[i]) { case GRB_BASIC: cstat[i] = 1; break; case GRB_NONBASIC_LOWER: cstat[i] = 3; break; case GRB_NONBASIC_UPPER: cstat[i] = 2; break; case GRB_SUPERBASIC: cstat[i] = 0; break; } GUROBI_CALL("getBasisStatus", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_CBASIS, 0, numrows, rstat)); char sense; for (int i = 0; i < numrows; ++i) { if (nauxcols && auxcolind[i] >= 0) { /* if the row is a ranged row, then we take the basis status from the corresponding auxiliary column is this correct??? */ int auxcolstat; GUROBI_CALL("getBasisStatus", GRBgetintattrelement(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, auxcolind[i], &auxcolstat)); switch (auxcolstat) { case GRB_BASIC: rstat[i] = 1; break; case GRB_NONBASIC_LOWER: rstat[i] = 3; break; case GRB_NONBASIC_UPPER: rstat[i] = 2; break; case GRB_SUPERBASIC: rstat[i] = 0; break; } } else { switch (rstat[i]) { case GRB_SUPERBASIC: rstat[i] = 0; break; case GRB_BASIC: rstat[i] = 1; break; case GRB_NONBASIC_LOWER: case GRB_NONBASIC_UPPER: GUROBI_CALL("getBasisStatus", GRBgetcharattrelement(getMutableLpPtr(), GRB_CHAR_ATTR_SENSE, i, &sense)); rstat[i] = (sense == '>' ? 2 : 3); break; } } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiGrb/osi-gurobi.pc.in0000644000175000017500000000046711510106235017032 0ustar sudipsudipprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiGurobi Description: COIN-OR Open Solver Interface for Gurobi URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiGrb @GRBLIB@ Cflags: -I${includedir} -I@GRBINCDIR@ Requires: osi Vol-1.5.4/Osi/src/OsiGrb/Makefile.in0000644000175000017500000005526113200225426016073 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2009 Stefan Vigerske and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/OsiGrb DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiGrb_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libOsiGrb_la_OBJECTS = OsiGrbSolverInterface.lo libOsiGrb_la_OBJECTS = $(am_libOsiGrb_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiGrb_la_SOURCES) DIST_SOURCES = $(libOsiGrb_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiGrb ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiGrb.la # List all source files for this library, including headers libOsiGrb_la_SOURCES = OsiGrbSolverInterface.cpp OsiGrbSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiGrb_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(GRBLIB) # This is for libtool (on Windows) libOsiGrb_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(GRBINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiGrbSolverInterface.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiGrb/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiGrb/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiGrb.la: $(libOsiGrb_la_OBJECTS) $(libOsiGrb_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiGrb_la_LDFLAGS) $(libOsiGrb_la_OBJECTS) $(libOsiGrb_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiGrbSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Osi/src/OsiGrb/osi-gurobi-uninstalled.pc.in0000644000175000017500000000044011507670402021351 0ustar sudipsudipprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiGrb Name: OsiGurobi Description: COIN-OR Open Solver Interface for Gurobi URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiGrb.la @GRBLIB@ Cflags: -I@abs_source_dir@/src/OsiGrb -I@GRBINCDIR@ Requires: osi Vol-1.5.4/Osi/src/OsiGrb/Makefile.am0000644000175000017500000000323113200225426016050 0ustar sudipsudip# Copyright (C) 2009 Stefan Vigerske and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 2111 2017-11-07 03:40:06Z tkr $ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiGrb ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiGrb.la # List all source files for this library, including headers libOsiGrb_la_SOURCES = OsiGrbSolverInterface.cpp OsiGrbSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiGrb_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(GRBLIB) endif # This is for libtool (on Windows) libOsiGrb_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(GRBINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiGrbSolverInterface.hpp Vol-1.5.4/Osi/src/OsiXpr/0000755000175000017500000000000013434204224014056 5ustar sudipsudipVol-1.5.4/Osi/src/OsiXpr/OsiXprSolverInterface.hpp0000644000175000017500000007106413414504254021043 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiXprSolverInterface_H #define OsiXprSolverInterface_H #include #include #include "OsiSolverInterface.hpp" typedef struct xo_prob_struct *XPRSprob; //############################################################################# /** XPRESS-MP Solver Interface Instantiation of OsiSolverInterface for XPRESS-MP */ class OsiXprSolverInterface : virtual public OsiSolverInterface { friend void OsiXprSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); public: /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string &value); // Get an integer parameter bool getIntParam(OsiIntParam key, int &value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double &value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string &value) const; // Set mipstart option (pass column solution to XPRESS before MIP start) void setMipStart(bool value) { domipstart = value; } // Get mipstart option value bool getMipStart() const { return domipstart; } //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /// Get empty warm start object CoinWarmStart *getEmptyWarmStart() const; /// Get warmstarting information virtual CoinWarmStart *getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart *warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double *getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double *getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if variable is continuous virtual bool isContinuous(int colIndex) const; #if 0 /// Return true if variable is binary virtual bool isBinary(int colIndex) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int colIndex) const; /// Return true if variable is general integer virtual bool isIntegerNonBinary(int colIndex) const; /// Return true if variable is binary and not fixed at either bound virtual bool isFreeBinary(int colIndex) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double *getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double *getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double *getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double *getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const; #if 0 /** Get vector of indices of solution which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue); /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower(int elementIndex, double elementValue); /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper(int elementIndex, double elementValue); /** Set a single column lower and upper bound
The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds(int elementIndex, double lower, double upper); /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setColLower() and setColUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the variables whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue); /** Set a single row lower and upper bound
The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds(int elementIndex, double lower, double upper); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose any characteristics changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int *indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int *indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ /** */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj); /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj); /** */ virtual void deleteCols(const int num, const int *colIndices); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng); /** */ virtual void deleteRows(const int num, const int *rowIndices); #if 0 //----------------------------------------------------------------------- /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); //@} //@} #endif //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const; //@} /**@name Message handling */ //@{ /** Pass in a message handler It is the client's responsibility to destroy a message handler installed by this routine; it will not be destroyed when the solver interface is destroyed. */ void passInMessageHandler(CoinMessageHandler *handler); //@} //--------------------------------------------------------------------------- /**@name XPRESS specific public interfaces */ //@{ /**@name Static instance counter methods */ //@{ /** XPRESS has a context that must be created prior to all other XPRESS calls. This method:
  • Increments by 1 the number of uses of the XPRESS environment.
  • Creates the XPRESS context when the number of uses is changed to 1 from 0.
*/ static void incrementInstanceCounter(); /** XPRESS has a context that should be deleted after XPRESS calls. This method:
  • Decrements by 1 the number of uses of the XPRESS environment.
  • Deletes the XPRESS context when the number of uses is change to 0 from 1.
*/ static void decrementInstanceCounter(); /** Return the number of instances of instantiated objects using XPRESS services. */ static unsigned int getNumInstances(); /** Return a pointer to the XPRESS problem */ XPRSprob getLpPtr() { return prob_; } //@} /// Return XPRESS-MP Version number static int version(); /**@name Log File */ //@{ static int iXprCallCount_; /// Get logfile FILE * static FILE *getLogFilePtr(); /**Set logfile name. The logfile is an attempt to capture the calls to Xpress functions for debugging. */ static void setLogFileName(const char *filename); //@} //@} /**@name Constructors and destructors */ //@{ /// Default Constructor OsiXprSolverInterface(int newrows = 50, int newnz = 100); /// Clone virtual OsiSolverInterface *clone(bool copyData = true) const; /// Copy constructor OsiXprSolverInterface(const OsiXprSolverInterface &); /// Assignment operator OsiXprSolverInterface &operator=(const OsiXprSolverInterface &rhs); /// Destructor virtual ~OsiXprSolverInterface(); //@} protected: /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut(const OsiRowCut &rc); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut(const OsiColCut &cc); //@} private: /**@name Private static class data */ //@{ /// Name of the logfile static const char *logFileName_; /// The FILE* to the logfile static FILE *logFilePtr_; /// Number of live problem instances static unsigned int numInstances_; /// Counts calls to incrementInstanceCounter() static unsigned int osiSerial_; //@} /**@name Private methods */ //@{ /// The real work of a copy constructor (used by copy and assignment) void gutsOfCopy(const OsiXprSolverInterface &source); /// The real work of a constructor (used by construct and assignment) void gutsOfConstructor(); /// The real work of a destructor (used by copy and assignment) void gutsOfDestructor(); /// Destroy cached copy of solution data (whenever it changes) void freeSolution(); /** Destroy cached copies of problem and solution data (whenever they change) */ void freeCachedResults(); /// Number of integer variables in the problem int getNumIntVars() const; /**@name Methods to support for XPRESS-MP multiple matrix facility */ //@{ /// Build cached copy of variable types void getVarTypes() const; /** Save the current problem in XPRESS (if necessary) and make this problem current (restore if necessary). */ void activateMe() const; /** Save and restore are necessary if there is data associated with this problem. Also, queries to a problem with no data should respond sensibly; XPRESS query results are undefined. */ bool isDataLoaded() const; //@} //@} /**@name Private member data */ //@{ /**@name Data to support for XPRESS-MP multiple matrix facility */ //@{ mutable XPRSprob prob_; /// XPRESS problem name (should be unique for each saved problem) mutable std::string xprProbname_; //@} /**@name Cached copies of XPRESS-MP problem data */ //@{ /** Pointer to row-wise copy of problem matrix coefficients.
Note that XPRESS keeps the objective row in the problem matrix, so row indices and counts are adjusted accordingly. */ mutable CoinPackedMatrix *matrixByRow_; mutable CoinPackedMatrix *matrixByCol_; /// Pointer to dense vector of structural variable upper bounds mutable double *colupper_; /// Pointer to dense vector of structural variable lower bounds mutable double *collower_; /// Pointer to dense vector of slack variable upper bounds mutable double *rowupper_; /// Pointer to dense vector of slack variable lower bounds mutable double *rowlower_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /** Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) */ mutable double *rowrange_; /// Pointer to dense vector of objective coefficients mutable double *objcoeffs_; /// Sense of objective (1 for min; -1 for max) mutable double objsense_; /// Pointer to dense vector of primal structural variable values mutable double *colsol_; /// Pointer to dense vector of primal slack variable values mutable double *rowsol_; /// Pointer to dense vector of primal slack variable values mutable double *rowact_; /// Pointer to dense vector of dual row variable values mutable double *rowprice_; /// Pointer to dense vector of dual column variable values mutable double *colprice_; /// Pointer to list of indices of XPRESS "global" variables mutable int *ivarind_; /** Pointer to list of global variable types:
  • 'B': binary variable
  • 'I': general integer variable (but might have 0-1 bounds)
  • 'P': partial integer variable (not currently supported)
  • 'S': sem-continuous variable (not currently supported)
*/ mutable char *ivartype_; /** Pointer to dense vector of variable types (as above, or 'C' for continuous) */ mutable char *vartype_; /** Indicates whether the last solve was for a MIP or an LP. */ mutable bool lastsolvewasmip; //@} //@} /// Whether to pass a column solution to XPRESS before starting MIP solve (loadmipsol) bool domipstart; }; //############################################################################# /** A function that tests the methods in the OsiXprSolverInterface class. */ void OsiXprSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiXpr/format-source.sh0000755000175000017500000000100313414504254017201 0ustar sudipsudip# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done Vol-1.5.4/Osi/src/OsiXpr/Makefile.in0000644000175000017500000005553213200225426016133 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/OsiXpr DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiXpr_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libOsiXpr_la_OBJECTS = OsiXprSolverInterface.lo libOsiXpr_la_OBJECTS = $(am_libOsiXpr_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiXpr_la_SOURCES) DIST_SOURCES = $(libOsiXpr_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiXpr # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiXpr.la # List all source files for this library, including headers libOsiXpr_la_SOURCES = \ OsiXprSolverInterface.cpp OsiXprSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiXpr_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(XPRLIB) # This is for libtool (on Windows) libOsiXpr_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. # "top_srcdir" refers to the basic directory for the main package that is # being compiled. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(XPRINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiXprSolverInterface.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiXpr/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiXpr/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiXpr.la: $(libOsiXpr_la_OBJECTS) $(libOsiXpr_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiXpr_la_LDFLAGS) $(libOsiXpr_la_OBJECTS) $(libOsiXpr_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiXprSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Osi/src/OsiXpr/OsiXprSolverInterface.cpp0000644000175000017500000021765613414504254021047 0ustar sudipsudip// copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* OPEN: have a look at the OPEN tags */ /* OPEN: read/set more controls ... */ #include #include #include #include "CoinPragma.hpp" #define __ANSIC_ #include #undef __ANSIC_ #include "OsiXprSolverInterface.hpp" #include "CoinHelperFunctions.hpp" #include "OsiCuts.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" #include "OsiRowCut.hpp" #include "CoinWarmStartBasis.hpp" #include "CoinMessage.hpp" //#define DEBUG static void XPRS_CC OsiXprMessageCallback(XPRSprob prob, void *vUserDat, const char *msg, int msgLen, int msgType) { if (vUserDat) { if (msgType < 0) { ((CoinMessageHandler *)vUserDat)->finish(); } else { /* CoinMessageHandler does not recognize that a "\0" string means that a newline should be printed. * So we let it print a space (followed by a newline). */ if (((CoinMessageHandler *)vUserDat)->logLevel() > 0) ((CoinMessageHandler *)vUserDat)->message(0, "XPRS", *msg ? msg : " ", ' ') << CoinMessageEol; } } else { if (msgType < 0) { fflush(stdout); } else { printf("%.*s\n", msgLen, msg); fflush(stdout); } } } static void reporterror(const char *fname, int iline, int ierr) { fprintf(stdout, "ERROR: %s in line %d error %d occured\n", fname, iline, ierr); } #define XPRS_CHECKED(function, args) \ do { \ int _nReturn; \ if ((_nReturn = function args) != 0) { \ reporterror(#function, __LINE__, _nReturn); \ } \ } while (0) //############################################################################# // Solve methods //############################################################################# void OsiXprSolverInterface::initialSolve() { freeSolution(); #if XPVERSION <= 20 if (objsense_ == 1.0) { XPRS_CHECKED(XPRSminim, (prob_, "l")); } else if (objsense_ == -1.0) { XPRS_CHECKED(XPRSmaxim, (prob_, "l")); } #else XPRS_CHECKED(XPRSlpoptimize, (prob_, "l")); #endif lastsolvewasmip = false; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::resolve() { freeSolution(); #if XPVERSION <= 20 if (objsense_ == 1.0) { XPRS_CHECKED(XPRSminim, (prob_, "dl")); } else if (objsense_ == -1.0) { XPRS_CHECKED(XPRSmaxim, (prob_, "dl")); } #else XPRS_CHECKED(XPRSlpoptimize, (prob_, "dl")); #endif lastsolvewasmip = false; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::branchAndBound() { int status; if (colsol_ != NULL && domipstart) { XPRS_CHECKED(XPRSloadmipsol, (prob_, colsol_, &status)); /* status = 0 .. accepted * = 1 .. infeasible * = 2 .. cutoff * = 3 .. LP reoptimization interrupted */ } freeSolution(); #if XPVERSION <= 20 /* XPRSglobal cannot be called if there is no LP relaxation available yet * -> solve LP relaxation first, if no LP solution available */ XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status != XPRS_LP_OPTIMAL) initialSolve(); XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status != XPRS_LP_OPTIMAL) { messageHandler()->message(0, "XPRS", "XPRESS failed to solve LP relaxation; cannot call XPRSglobal", ' ') << CoinMessageEol; return; } #else XPRS_CHECKED(XPRSmipoptimize, (prob_, "")); #endif lastsolvewasmip = true; } //############################################################################# // Parameter related methods //############################################################################# bool OsiXprSolverInterface::setIntParam(OsiIntParam key, int value) { bool retval = false; switch (key) { case OsiMaxNumIteration: retval = XPRSsetintcontrol(prob_, XPRS_LPITERLIMIT, value) == 0; break; case OsiMaxNumIterationHotStart: retval = false; break; case OsiLastIntParam: retval = false; break; case OsiNameDiscipline: retval = false; break; } return retval; } //----------------------------------------------------------------------------- /* OPEN: more dbl parameters ... */ bool OsiXprSolverInterface::setDblParam(OsiDblParam key, double value) { bool retval = false; switch (key) { case OsiDualObjectiveLimit: retval = XPRSsetdblcontrol(prob_, XPRS_MIPABSCUTOFF, value) == 0; break; case OsiPrimalObjectiveLimit: retval = false; break; case OsiDualTolerance: retval = XPRSsetdblcontrol(prob_, XPRS_FEASTOL, value) == 0; break; case OsiPrimalTolerance: retval = XPRSsetdblcontrol(prob_, XPRS_FEASTOL, value) == 0; break; case OsiObjOffset: return OsiSolverInterface::setDblParam(key, value); case OsiLastDblParam: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiXprSolverInterface::setStrParam(OsiStrParam key, const std::string &value) { bool retval = false; switch (key) { case OsiProbName: /* OPEN: what does this mean */ OsiSolverInterface::setStrParam(key, value); return retval = true; case OsiLastStrParam: return false; case OsiSolverName: return false; } return false; } //----------------------------------------------------------------------------- bool OsiXprSolverInterface::getIntParam(OsiIntParam key, int &value) const { bool retval = false; switch (key) { case OsiMaxNumIteration: /* OPEN: the return value was logically wrong */ retval = XPRSgetintcontrol(prob_, XPRS_LPITERLIMIT, &value) == 0; break; case OsiMaxNumIterationHotStart: retval = false; break; case OsiLastIntParam: retval = false; break; case OsiNameDiscipline: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiXprSolverInterface::getDblParam(OsiDblParam key, double &value) const { bool retval = false; switch (key) { case OsiDualObjectiveLimit: retval = XPRSgetdblcontrol(prob_, XPRS_MIPABSCUTOFF, &value) == 0; break; case OsiPrimalObjectiveLimit: retval = false; break; case OsiDualTolerance: retval = XPRSgetdblcontrol(prob_, XPRS_FEASTOL, &value) == 0; break; case OsiPrimalTolerance: retval = XPRSgetdblcontrol(prob_, XPRS_FEASTOL, &value) == 0; break; case OsiObjOffset: retval = OsiSolverInterface::getDblParam(key, value); break; case OsiLastDblParam: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiXprSolverInterface::getStrParam(OsiStrParam key, std::string &value) const { bool retval = false; switch (key) { case OsiProbName: OsiSolverInterface::getStrParam(key, value); retval = true; break; case OsiSolverName: value = "xpress"; retval = true; break; case OsiLastStrParam: retval = false; } return retval; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiXprSolverInterface::isAbandoned() const { int status, glstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &glstat)); return status == XPRS_LP_UNFINISHED // LP unfinished || glstat == XPRS_MIP_NO_SOL_FOUND // global search incomplete -- no int sol || glstat == XPRS_MIP_SOLUTION; // global search incomplete -- int sol found } bool OsiXprSolverInterface::isProvenOptimal() const { int status, glstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &glstat)); return status == XPRS_LP_OPTIMAL // LP optimal || status == XPRS_LP_CUTOFF // LP obj worse than cutoff || glstat == XPRS_MIP_OPTIMAL; // global search complete -- int found } bool OsiXprSolverInterface::isProvenPrimalInfeasible() const { int status; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); return status == XPRS_LP_INFEAS; // LP infeasible } bool OsiXprSolverInterface::isProvenDualInfeasible() const { int status; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); return status == XPRS_LP_UNBOUNDED; // LP Unbounded } bool OsiXprSolverInterface::isPrimalObjectiveLimitReached() const { /* OPEN: what does that mean */ return false; // N/A in XOSL } bool OsiXprSolverInterface::isDualObjectiveLimitReached() const { int status; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); return status == XPRS_LP_CUTOFF_IN_DUAL; // LP cut off in dual } bool OsiXprSolverInterface::isIterationLimitReached() const { int itrlim, itcnt; XPRS_CHECKED(XPRSgetintcontrol, (prob_, XPRS_LPITERLIMIT, &itrlim)); XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_SIMPLEXITER, &itcnt)); return itcnt >= itrlim; } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart *OsiXprSolverInterface::getEmptyWarmStart() const { return (dynamic_cast< CoinWarmStart * >(new CoinWarmStartBasis())); } CoinWarmStart *OsiXprSolverInterface::getWarmStart() const { int pstat, retstat; /* OPEN: what does this mean */ XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_PRESOLVESTATE, &pstat)); if ((pstat & 128) == 0) return NULL; CoinWarmStartBasis *ws = NULL; int numcols = getNumCols(); int numrows = getNumRows(); const double *lb = getColLower(); double infty = getInfinity(); int *rstatus = new int[numrows]; int *cstatus = new int[numcols]; retstat = XPRSgetbasis(prob_, rstatus, cstatus); if (retstat == 0) { int i; ws = new CoinWarmStartBasis; ws->setSize(numcols, numrows); for (i = 0; i < numrows; i++) { switch (rstatus[i]) { case 0: ws->setArtifStatus(i, CoinWarmStartBasis::atLowerBound); break; case 1: ws->setArtifStatus(i, CoinWarmStartBasis::basic); break; case 2: ws->setArtifStatus(i, CoinWarmStartBasis::atUpperBound); break; case 3: ws->setArtifStatus(i, CoinWarmStartBasis::isFree); break; default: // unknown row status delete ws; ws = NULL; goto TERMINATE; } } for (i = 0; i < numcols; i++) { switch (cstatus[i]) { case 0: if (lb[i] <= -infty) ws->setStructStatus(i, CoinWarmStartBasis::isFree); else ws->setStructStatus(i, CoinWarmStartBasis::atLowerBound); break; case 1: ws->setStructStatus(i, CoinWarmStartBasis::basic); break; case 2: ws->setStructStatus(i, CoinWarmStartBasis::atUpperBound); break; case 3: ws->setStructStatus(i, CoinWarmStartBasis::isFree); break; default: // unknown column status delete ws; ws = NULL; goto TERMINATE; } } } TERMINATE: delete[] cstatus; delete[] rstatus; return ws; } //----------------------------------------------------------------------------- bool OsiXprSolverInterface::setWarmStart(const CoinWarmStart *warmstart) { const CoinWarmStartBasis *ws = dynamic_cast< const CoinWarmStartBasis * >(warmstart); if (!ws) return false; int numcols = ws->getNumStructural(); int numrows = ws->getNumArtificial(); if (numcols != getNumCols() || numrows != getNumRows()) return false; bool retval; int retstat; int *cstatus = new int[numcols]; int *rstatus = new int[numrows]; int i; for (i = 0; i < numrows; i++) { switch (ws->getArtifStatus(i)) { case CoinWarmStartBasis::atLowerBound: rstatus[i] = 0; break; case CoinWarmStartBasis::basic: rstatus[i] = 1; break; case CoinWarmStartBasis::atUpperBound: rstatus[i] = 2; break; default: // unknown row status retval = false; goto TERMINATE; } } for (i = 0; i < numcols; i++) { switch (ws->getStructStatus(i)) { case CoinWarmStartBasis::atLowerBound: case CoinWarmStartBasis::isFree: cstatus[i] = 0; break; case CoinWarmStartBasis::basic: cstatus[i] = 1; break; case CoinWarmStartBasis::atUpperBound: cstatus[i] = 2; break; default: // unknown row status retval = false; goto TERMINATE; } } retstat = XPRSloadbasis(prob_, rstatus, cstatus); retval = (retstat == 0); TERMINATE: delete[] cstatus; delete[] rstatus; return retval; } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# void OsiXprSolverInterface::markHotStart() { // *FIXME* : do better... -LL OsiSolverInterface::markHotStart(); } void OsiXprSolverInterface::solveFromHotStart() { // *FIXME* : do better... -LL OsiSolverInterface::solveFromHotStart(); } void OsiXprSolverInterface::unmarkHotStart() { // *FIXME* : do better... -LL OsiSolverInterface::unmarkHotStart(); } //############################################################################# // Problem information methods (original data) //############################################################################# //------------------------------------------------------------------ // Get number of rows and columns //------------------------------------------------------------------ int OsiXprSolverInterface::getNumCols() const { if (!isDataLoaded()) return 0; int ncols; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_ORIGINALCOLS, &ncols)); return ncols; } //----------------------------------------------------------------------------- int OsiXprSolverInterface::getNumRows() const { if (!isDataLoaded()) return 0; int nrows; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_ORIGINALROWS, &nrows)); return nrows; } //----------------------------------------------------------------------------- int OsiXprSolverInterface::getNumElements() const { if (!isDataLoaded()) return 0; int retVal; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_ELEMS, &retVal)); return retVal; } //------------------------------------------------------------------ // Get pointer to rim vectors //------------------------------------------------------------------ const double * OsiXprSolverInterface::getColLower() const { if (collower_ == NULL) { if (isDataLoaded()) { int ncols = getNumCols(); if (ncols > 0) { collower_ = new double[ncols]; XPRS_CHECKED(XPRSgetlb, (prob_, collower_, 0, ncols - 1)); } } } return collower_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getColUpper() const { if (colupper_ == NULL) { if (isDataLoaded()) { int ncols = getNumCols(); if (ncols > 0) { colupper_ = new double[ncols]; XPRS_CHECKED(XPRSgetub, (prob_, colupper_, 0, ncols - 1)); } } } return colupper_; } //----------------------------------------------------------------------------- const char * OsiXprSolverInterface::getRowSense() const { if (rowsense_ == NULL) { if (isDataLoaded()) { int nrows = getNumRows(); if (nrows > 0) { rowsense_ = new char[nrows]; XPRS_CHECKED(XPRSgetrowtype, (prob_, rowsense_, 0, nrows - 1)); } } } return rowsense_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getRightHandSide() const { if (rhs_ == NULL) { if (isDataLoaded()) { int nrows = getNumRows(); if (nrows > 0) { rhs_ = new double[nrows]; XPRS_CHECKED(XPRSgetrhs, (prob_, rhs_, 0, nrows - 1)); // Make sure free rows have rhs of zero const char *rs = getRowSense(); int nr = getNumRows(); int i; for (i = 0; i < nr; i++) { if (rs[i] == 'N') rhs_[i] = 0.0; } } } } return rhs_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getRowRange() const { if (rowrange_ == NULL) { if (isDataLoaded()) { int nrows = getNumRows(); if (nrows > 0) { rowrange_ = new double[nrows]; XPRS_CHECKED(XPRSgetrhsrange, (prob_, rowrange_, 0, nrows - 1)); // Make sure non-R rows have range of 0.0 // XPRESS seems to set N and L rows to a range of Infinity const char *rs = getRowSense(); int nr = getNumRows(); int i; for (i = 0; i < nr; i++) { if (rs[i] != 'R') rowrange_[i] = 0.0; } } } } return rowrange_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getRowLower() const { if (rowlower_ == NULL) { int nrows = getNumRows(); const char *rowsense = getRowSense(); const double *rhs = getRightHandSide(); const double *rowrange = getRowRange(); if (nrows > 0) { rowlower_ = new double[nrows]; double dum1; for (int i = 0; i < nrows; i++) { convertSenseToBound(rowsense[i], rhs[i], rowrange[i], rowlower_[i], dum1); } } } return rowlower_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getRowUpper() const { if (rowupper_ == NULL) { int nrows = getNumRows(); const char *rowsense = getRowSense(); const double *rhs = getRightHandSide(); const double *rowrange = getRowRange(); if (nrows > 0) { rowupper_ = new double[nrows]; double dum1; for (int i = 0; i < nrows; i++) { convertSenseToBound(rowsense[i], rhs[i], rowrange[i], dum1, rowupper_[i]); } } } return rowupper_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getObjCoefficients() const { if (objcoeffs_ == NULL) { if (isDataLoaded()) { int ncols = getNumCols(); if (ncols > 0) { objcoeffs_ = new double[ncols]; XPRS_CHECKED(XPRSgetobj, (prob_, objcoeffs_, 0, ncols - 1)); } } } return objcoeffs_; } //----------------------------------------------------------------------------- double OsiXprSolverInterface::getObjSense() const { return objsense_; } //----------------------------------------------------------------------------- // Return information on integrality //----------------------------------------------------------------------------- bool OsiXprSolverInterface::isContinuous(int colNumber) const { getVarTypes(); //std::cerr <<"OsiXprSolverInterface::isContinuous " <colupper(); const double *collower = this->collower(); getVarTypes(); return isBinary(colNumber) && colupper[colNumber] != collower[colNumber]; } #endif //------------------------------------------------------------------ // Row and column copies of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix * OsiXprSolverInterface::getMatrixByRow() const { if (matrixByRow_ == NULL) { if (isDataLoaded()) { int nrows = getNumRows(); int ncols = getNumCols(); int nelems; XPRS_CHECKED(XPRSgetrows, (prob_, NULL, NULL, NULL, 0, &nelems, 0, nrows - 1)); int *start = new int[nrows + 1]; int *length = new int[nrows]; int *index = new int[nelems]; double *element = new double[nelems]; XPRS_CHECKED(XPRSgetrows, (prob_, start, index, element, nelems, &nelems, 0, nrows - 1)); std::adjacent_difference(start + 1, start + (nrows + 1), length); matrixByRow_ = new CoinPackedMatrix(true, 0, 0); // (mjs) No gaps! // Gaps =><= presolve. matrixByRow_->assignMatrix(false /* not column ordered */, ncols, nrows, nelems, element, index, start, length); } else { matrixByRow_ = new CoinPackedMatrix(true, 0, 0); // (mjs) No gaps! matrixByRow_->reverseOrdering(); } } return matrixByRow_; } //----------------------------------------------------------------------------- const CoinPackedMatrix * OsiXprSolverInterface::getMatrixByCol() const { if (matrixByCol_ == NULL) { matrixByCol_ = new CoinPackedMatrix(*getMatrixByRow()); matrixByCol_->reverseOrdering(); } return matrixByCol_; } //------------------------------------------------------------------ // Get solver's value for infinity //------------------------------------------------------------------ double OsiXprSolverInterface::getInfinity() const { return XPRS_PLUSINFINITY; } //############################################################################# // Problem information methods (results) //############################################################################# const double * OsiXprSolverInterface::getColSolution() const { if (colsol_ == NULL) { if (isDataLoaded()) { int status; int nc = getNumCols(); if (nc > 0) { colsol_ = new double[nc]; if (lastsolvewasmip) { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &status)); if (status == XPRS_MIP_SOLUTION || status == XPRS_MIP_OPTIMAL) XPRS_CHECKED(XPRSgetmipsol, (prob_, colsol_, NULL)); else XPRS_CHECKED(XPRSgetlb, (prob_, colsol_, 0, nc - 1)); } else { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status == XPRS_LP_OPTIMAL) XPRS_CHECKED(XPRSgetlpsol, (prob_, colsol_, NULL, NULL, NULL)); else XPRS_CHECKED(XPRSgetlb, (prob_, colsol_, 0, nc - 1)); } } } } return colsol_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getRowPrice() const { if (rowprice_ == NULL) { if (isDataLoaded()) { int nr = getNumRows(); if (nr > 0) { int status; rowprice_ = new double[nr]; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status == XPRS_LP_OPTIMAL) XPRS_CHECKED(XPRSgetlpsol, (prob_, NULL, NULL, rowprice_, NULL)); else memset(rowprice_, 0, nr * sizeof(double)); } } } return rowprice_; } //----------------------------------------------------------------------------- const double *OsiXprSolverInterface::getReducedCost() const { if (colprice_ == NULL) { if (isDataLoaded()) { int status; int nc = getNumCols(); colprice_ = new double[nc]; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status == XPRS_LP_OPTIMAL) XPRS_CHECKED(XPRSgetlpsol, (prob_, NULL, NULL, NULL, colprice_)); else memset(colprice_, 0, nc * sizeof(double)); } } return colprice_; } //----------------------------------------------------------------------------- const double *OsiXprSolverInterface::getRowActivity() const { if (rowact_ == NULL) { if (isDataLoaded()) { int nrows = getNumRows(); if (nrows > 0) { int status; int i; const double *rhs = getRightHandSide(); rowact_ = new double[nrows]; if (lastsolvewasmip) { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &status)); if (status == XPRS_MIP_SOLUTION || status == XPRS_MIP_OPTIMAL) { XPRS_CHECKED(XPRSgetmipsol, (prob_, NULL, rowact_)); for (i = 0; i < nrows; i++) rowact_[i] = rhs[i] - rowact_[i]; } else memset(rowact_, 0, nrows * sizeof(double)); } else { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status == XPRS_LP_OPTIMAL) { XPRS_CHECKED(XPRSgetlpsol, (prob_, NULL, rowact_, NULL, NULL)); for (i = 0; i < nrows; i++) rowact_[i] = rhs[i] - rowact_[i]; } else memset(rowact_, 0, nrows * sizeof(double)); } #if 0 /* OPEN: why do we need the presolve state here ??? */ XPRS_CHECKED( XPRSgetintattrib, (prob_,XPRS_PRESOLVESTATE, &status) ); if ( status == 7 ) { int i; XPRS_CHECKED( XPRSgetsol, (prob_,NULL, rowact_, NULL, NULL) ); for ( i = 0; i < nrows; i++ ) rowact_[i] = rhs[i] - rowact_[i]; } else { CoinFillN(rowact_, nrows, 0.0); } #endif } } } return rowact_; } //----------------------------------------------------------------------------- double OsiXprSolverInterface::getObjValue() const { double objvalue = 0; double objconstant = 0; if (isDataLoaded()) { int status; if (lastsolvewasmip) { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &status)); if (status == XPRS_MIP_SOLUTION || status == XPRS_MIP_OPTIMAL) XPRS_CHECKED(XPRSgetdblattrib, (prob_, XPRS_MIPOBJVAL, &objvalue)); else objvalue = CoinPackedVector(getNumCols(), getObjCoefficients()).dotProduct(getColSolution()); } else { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status == XPRS_LP_OPTIMAL) XPRS_CHECKED(XPRSgetdblattrib, (prob_, XPRS_LPOBJVAL, &objvalue)); else objvalue = CoinPackedVector(getNumCols(), getObjCoefficients()).dotProduct(getColSolution()); } OsiSolverInterface::getDblParam(OsiObjOffset, objconstant); // Constant offset is not saved with the xpress representation, // but it has to be returned from here anyway. } return objvalue - objconstant; } //----------------------------------------------------------------------------- int OsiXprSolverInterface::getIterationCount() const { int itcnt; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_SIMPLEXITER, &itcnt)); return itcnt; } //----------------------------------------------------------------------------- std::vector< double * > OsiXprSolverInterface::getDualRays(int maxNumRays, bool fullRay) const { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "getDualRays", "OsiXprSolverInterface"); return std::vector< double * >(); } //----------------------------------------------------------------------------- std::vector< double * > OsiXprSolverInterface::getPrimalRays(int maxNumRays) const { #if 0 // *FIXME* : Still need to expand column into full ncols-length vector const int nrows = getNumRows(); int nrspar; XPRS_CHECKED( XPRSgetintattrib, (prob_,XPRS_SPAREROWS, &nrspar) ); int junb; int retcode; retcode = XPRSgetunbvec(prob_,&junb); if ( retcode != 0 ) return std::vector(0, (double *) NULL);; double *ray = new double[nrows]; if ( junb < nrows ) { // it's a slack int i; for ( i = 0; i < nrows; i++ ) ray[i] = 0.0; ray[junb] = 1.0; XPRS_CHECKED( XPRSftran, (prob_,ray) ); } else if ( junb >= nrows + nrspar && junb < nrows + nrspar + getNumCols() ){ // it's a structural variable int *mstart = new int[nrows]; int *mrowind = new int[nrows]; double *dmatval = new double[nrows]; int nelt; int jcol = junb - nrows - nrspar; XPRS_CHECKED( XPRSgetcols, (prob_,mstart, mrowind, dmatval, nrows, &nelt, jcol, jcol) ); /* Unpack into the zeroed array y */ int i, ielt; for ( i = 0; i < nrows; i++ ) ray[i] = 0.0; for ( ielt = 0; ielt < nelt; ielt++ ) ray[mrowind[ielt]] = dmatval[ielt]; XPRS_CHECKED( XPRSftran, (prob_,ray) ); delete [] mstart; delete [] mrowind; delete [] dmatval; } else { // it's an error retcode = 1; } if ( retcode == 0 ) return std::vector(1, ray); else { delete ray; return std::vector(0, (double *) NULL); } #endif // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "getPrimalRays", "OsiXprSolverInterface"); return std::vector< double * >(); } //----------------------------------------------------------------------------- #if 0 OsiVectorInt OsiXprSolverInterface::getFractionalIndices(const double etol) const { OsiVectorInt retVal; int numInts = numintvars(); const double *sol = colsol(); getVarTypes(); OsiRelFltEq eq(etol); for ( int i = 0; i < numInts; i++ ) { double colSolElem = sol[ivarind_[i]]; double distanceFromInteger = colSolElem - floor(colSolElem + 0.5); if ( !eq( distanceFromInteger, 0.0 ) ) retVal.push_back(ivarind_[i]); } return retVal; } #endif //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# void OsiXprSolverInterface::setObjCoeff(int elementIndex, double elementValue) { if (isDataLoaded()) { XPRS_CHECKED(XPRSchgobj, (prob_, 1, &elementIndex, &elementValue)); freeCachedResults(); } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setColLower(int elementIndex, double elementValue) { if (isDataLoaded()) { char boundType = 'L'; getVarTypes(); if (vartype_ && vartype_[elementIndex] == 'B' && (elementValue != 0.0 && elementValue != 1.0)) { char elementType = 'I'; XPRS_CHECKED(XPRSchgcoltype, (prob_, 1, &elementIndex, &elementType)); } XPRS_CHECKED(XPRSchgbounds, (prob_, 1, &elementIndex, &boundType, &elementValue)); freeCachedResults(); // delete [] collower_; // collower_ = NULL; } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setColUpper(int elementIndex, double elementValue) { if (isDataLoaded()) { char boundType = 'U'; getVarTypes(); XPRS_CHECKED(XPRSchgbounds, (prob_, 1, &elementIndex, &boundType, &elementValue)); if (vartype_ && vartype_[elementIndex] == 'B' && (elementValue != 0.0 && elementValue != 1.0)) { char elementType = 'I'; XPRS_CHECKED(XPRSchgcoltype, (prob_, 1, &elementIndex, &elementType)); } freeCachedResults(); // delete [] colupper_; // colupper_ = NULL; } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setColBounds(const int elementIndex, double lower, double upper) { if (isDataLoaded()) { char qbtype[2] = { 'L', 'U' }; int mindex[2]; double bnd[2]; getVarTypes(); mindex[0] = elementIndex; mindex[1] = elementIndex; bnd[0] = lower; bnd[1] = upper; XPRS_CHECKED(XPRSchgbounds, (prob_, 2, mindex, qbtype, bnd)); if (vartype_ && vartype_[mindex[0]] == 'B' && !((lower == 0.0 && upper == 0.0) || (lower == 1.0 && upper == 1.0) || (lower == 0.0 && upper == 1.0))) { char elementType = 'I'; XPRS_CHECKED(XPRSchgcoltype, (prob_, 1, &mindex[0], &elementType)); } freeCachedResults(); // delete [] colupper_; // colupper_ = NULL; } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { OsiSolverInterface::setColSetBounds(indexFirst, indexLast, boundList); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowLower(int elementIndex, double elementValue) { double rhs = getRightHandSide()[elementIndex]; double range = getRowRange()[elementIndex]; char sense = getRowSense()[elementIndex]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (lower != elementValue) { convertBoundToSense(elementValue, upper, sense, rhs, range); setRowType(elementIndex, sense, rhs, range); // freeCachedResults(); --- invoked in setRowType() } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowUpper(int elementIndex, double elementValue) { double rhs = getRightHandSide()[elementIndex]; double range = getRowRange()[elementIndex]; char sense = getRowSense()[elementIndex]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (upper != elementValue) { convertBoundToSense(lower, elementValue, sense, rhs, range); setRowType(elementIndex, sense, rhs, range); // freeCachedResults(); --- invoked in setRowType() } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowBounds(int elementIndex, double lower, double upper) { double rhs, range; char sense; convertBoundToSense(lower, upper, sense, rhs, range); setRowType(elementIndex, sense, rhs, range); // freeCachedRowRim(); --- invoked in setRowType() } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowType(int index, char sense, double rightHandSide, double range) { if (isDataLoaded()) { int mindex[1] = { index }; char qrtype[1] = { sense }; double rhs[1] = { rightHandSide }; double rng[1] = { range }; XPRS_CHECKED(XPRSchgrowtype, (prob_, 1, mindex, qrtype)); XPRS_CHECKED(XPRSchgrhs, (prob_, 1, mindex, rhs)); // range is properly defined only for range-type rows, so we call XPRSchgrhsrange only for ranged rows if (sense == 'R') XPRS_CHECKED(XPRSchgrhsrange, (prob_, 1, mindex, rng)); freeCachedResults(); } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { OsiSolverInterface::setRowSetBounds(indexFirst, indexLast, boundList); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList) { OsiSolverInterface::setRowSetTypes(indexFirst, indexLast, senseList, rhsList, rangeList); } //############################################################################# void OsiXprSolverInterface::setContinuous(int index) { if (isDataLoaded()) { int pstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_PRESOLVESTATE, &pstat)); if ((pstat & 6) == 0) { // not presolved char qctype = 'C'; XPRS_CHECKED(XPRSchgcoltype, (prob_, 1, &index, &qctype)); freeCachedResults(); } } } void OsiXprSolverInterface::setInteger(int index) { if (isDataLoaded()) { int pstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_PRESOLVESTATE, &pstat)); if ((pstat & 6) == 0) { // not presolved char qctype; if (getColLower()[index] == 0.0 && getColUpper()[index] == 1.0) qctype = 'B'; else qctype = 'I'; XPRS_CHECKED(XPRSchgcoltype, (prob_, 1, &index, &qctype)); freeCachedResults(); } } } void OsiXprSolverInterface::setContinuous(const int *indices, int len) { if (isDataLoaded()) { int pstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_PRESOLVESTATE, &pstat)); if ((pstat & 6) == 0) { // not presolved char *qctype = new char[len]; CoinFillN(qctype, len, 'C'); XPRS_CHECKED(XPRSchgcoltype, (prob_, len, const_cast< int * >(indices), qctype)); freeCachedResults(); delete[] qctype; } } } void OsiXprSolverInterface::setInteger(const int *indices, int len) { if (isDataLoaded()) { int pstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_PRESOLVESTATE, &pstat)); if ((pstat & 6) == 0) { // not presolved char *qctype = new char[len]; const double *clb = getColLower(); const double *cub = getColUpper(); for (int i = 0; i < len; i++) { if (clb[indices[i]] == 0.0 && cub[indices[i]] == 1.0) qctype[i] = 'B'; else qctype[i] = 'I'; } XPRS_CHECKED(XPRSchgcoltype, (prob_, len, const_cast< int * >(indices), qctype)); freeCachedResults(); delete[] qctype; } } } //############################################################################# void OsiXprSolverInterface::setObjSense(double s) { assert(s == 1.0 || s == -1.0); objsense_ = s; XPRS_CHECKED(XPRSchgobjsense, (prob_, (int)s)); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setColSolution(const double *colsol) { freeSolution(); colsol_ = new double[getNumCols()]; for (int i = 0; i < getNumCols(); i++) colsol_[i] = colsol[i]; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowPrice(const double *rowprice) { freeSolution(); rowprice_ = new double[getNumRows()]; for (int i = 0; i < getNumRows(); i++) rowprice_[i] = rowprice[i]; } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiXprSolverInterface::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) { if (isDataLoaded()) { freeCachedResults(); int mstart = 0; XPRS_CHECKED(XPRSaddcols, (prob_, 1, vec.getNumElements(), const_cast< double * >(&obj), &mstart, const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()), const_cast< double * >(&collb), const_cast< double * >(&colub))); } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj) { // freeCachedResults(); for (int i = 0; i < numcols; i++) addCol(*(cols[i]), collb[i], colub[i], obj[i]); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::deleteCols(const int num, const int *columnIndices) { freeCachedResults(); XPRS_CHECKED(XPRSdelcols, (prob_, num, const_cast< int * >(columnIndices))); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) { // freeCachedResults(); -- will be invoked char sense; double rhs, range; convertBoundToSense(rowlb, rowub, sense, rhs, range); addRow(vec, sense, rhs, range); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) { freeCachedResults(); int mstart[2] = { 0, vec.getNumElements() }; XPRS_CHECKED(XPRSaddrows, (prob_, 1, vec.getNumElements(), const_cast< char * >(&rowsen), const_cast< double * >(&rowrhs), const_cast< double * >(&rowrng), mstart, const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()))); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub) { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "addRows", "OsiXprSolverInterface"); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng) { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "addRows", "OsiXprSolverInterface"); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::deleteRows(const int num, const int *rowIndices) { freeCachedResults(); XPRS_CHECKED(XPRSdelrows, (prob_, num, const_cast< int * >(rowIndices))); } //############################################################################# // Methods to input a problem //############################################################################# void OsiXprSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { const double inf = getInfinity(); char *rowSense = new char[matrix.getNumRows()]; double *rowRhs = new double[matrix.getNumRows()]; double *rowRange = new double[matrix.getNumRows()]; int i; for (i = matrix.getNumRows() - 1; i >= 0; --i) { double rlb; if (rowlb != NULL) rlb = rowlb[i]; else rlb = -inf; double rub; if (rowub != NULL) rub = rowub[i]; else rub = inf; convertBoundToSense(rlb, rub, rowSense[i], rowRhs[i], rowRange[i]); #if 0 if ( rlb==rub ) { rowSense[i]='E'; rowRhs[i] =rlb; rowRange[i]=0.0; continue; } if ( rlb<=-inf && rub>=inf ) { rowSense[i]='N'; rowRhs[i] =inf; rowRange[i]=0.0; continue; } if ( rlb<=-inf && !(rub>=inf) ) { rowSense[i]='L'; rowRhs[i] =rub; rowRange[i]=0.0; continue; } if ( !(rlb<=-inf) && rub>=inf ) { rowSense[i]='G'; rowRhs[i] =rlb; rowRange[i]=0.0; continue; } if ( !(rlb<=-inf) && !(rub>=inf) ) { rowSense[i]='R'; rowRhs[i] =rub; rowRange[i]=rub-rlb; continue; } #endif } loadProblem(matrix, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) { loadProblem(*matrix, collb, colub, obj, rowlb, rowub); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowlb; rowlb = 0; delete[] rowub; rowub = 0; } //----------------------------------------------------------------------------- // #define OSIXPR_ADD_OBJ_ROW void OsiXprSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { freeCachedResults(); int i; char *rsen; double *rrhs; // Set column values to defaults if NULL pointer passed int nc = matrix.getNumCols(); int nr = matrix.getNumRows(); double *clb; double *cub; double *ob; if (collb != NULL) { clb = const_cast< double * >(collb); } else { clb = new double[nc]; for (i = 0; i < nc; i++) clb[i] = 0.0; } if (colub != NULL) cub = const_cast< double * >(colub); else { cub = new double[nc]; for (i = 0; i < nc; i++) cub[i] = XPRS_PLUSINFINITY; } if (obj != NULL) ob = const_cast< double * >(obj); else { ob = new double[nc]; for (i = 0; i < nc; i++) ob[i] = 0.0; } if (rowsen != NULL) rsen = const_cast< char * >(rowsen); else { rsen = new char[nr]; for (i = 0; i < nr; ++i) rsen[i] = 'G'; } if (rowrhs != NULL) rrhs = const_cast< double * >(rowrhs); else { rrhs = new double[nr]; for (i = 0; i < nr; ++i) rrhs[i] = 0.0; } bool freeMatrixRequired = false; CoinPackedMatrix *m = NULL; if (!matrix.isColOrdered()) { m = new CoinPackedMatrix(true, 0, 0); // (mjs) No gaps! m->reverseOrderedCopyOf(matrix); freeMatrixRequired = true; } else { m = const_cast< CoinPackedMatrix * >(&matrix); } // Generate a problem name char probName[256]; sprintf(probName, "Prob%i", osiSerial_); nc = m->getNumCols(); nr = m->getNumRows(); if (getLogFilePtr() != NULL) { fprintf(getLogFilePtr(), "{\n"); fprintf(getLogFilePtr(), " char rowsen[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowsen[%d]='%c';\n", i, rsen[i]); fprintf(getLogFilePtr(), " double rowrhs[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowrhs[%d]=%f;\n", i, rrhs[i]); fprintf(getLogFilePtr(), " double rowrng[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowrng[%d]=%f;\n", i, rowrng ? rowrng[i] : 0.0); fprintf(getLogFilePtr(), " double ob[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " ob[%d]=%f;\n", i, ob[i]); fprintf(getLogFilePtr(), " double clb[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " clb[%d]=%f;\n", i, clb[i]); fprintf(getLogFilePtr(), " double cub[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " cub[%d]=%f;\n", i, cub[i]); fprintf(getLogFilePtr(), " int vectorStarts[%d];\n", nc + 1); for (i = 0; i <= nc; i++) fprintf(getLogFilePtr(), " vectorStarts[%d]=%d;\n", i, m->getVectorStarts()[i]); fprintf(getLogFilePtr(), " int vectorLengths[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " vectorLengths[%d]=%d;\n", i, m->getVectorLengths()[i]); fprintf(getLogFilePtr(), " int indices[%d];\n", m->getVectorStarts()[nc]); for (i = 0; i < m->getVectorStarts()[nc]; i++) fprintf(getLogFilePtr(), " indices[%d]=%d;\n", i, m->getIndices()[i]); fprintf(getLogFilePtr(), " double elements[%d];\n", m->getVectorStarts()[nc]); for (i = 0; i < m->getVectorStarts()[nc]; i++) fprintf(getLogFilePtr(), " elements[%d]=%f;\n", i, m->getElements()[i]); fprintf(getLogFilePtr(), "}\n"); } int iret = XPRSloadlp(prob_, probName, nc, nr, const_cast< char * >(rsen), const_cast< double * >(rrhs), const_cast< double * >(rowrng), ob, const_cast< int * >(m->getVectorStarts()), const_cast< int * >(m->getVectorLengths()), const_cast< int * >(m->getIndices()), const_cast< double * >(m->getElements()), clb, cub); setStrParam(OsiProbName, probName); if (iret != 0) XPRSgetintattrib(prob_, XPRS_ERRORCODE, &iret); assert(iret == 0); char pname[256]; // Problem names can be 200 chars in XPRESS 12 XPRS_CHECKED(XPRSgetprobname, (prob_, pname)); xprProbname_ = pname; if (collb == NULL) delete[] clb; if (colub == NULL) delete[] cub; if (obj == NULL) delete[] ob; if (rowsen == NULL) delete[] rsen; if (rowrhs == NULL) delete[] rrhs; if (freeMatrixRequired) { delete m; } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) { loadProblem(*matrix, collb, colub, obj, rowsen, rowrhs, rowrng); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowsen; rowsen = 0; delete[] rowrhs; rowrhs = 0; delete[] rowrng; rowrng = 0; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { const double inf = getInfinity(); char *rowSense = new char[numrows]; double *rowRhs = new double[numrows]; double *rowRange = new double[numrows]; for (int i = numrows - 1; i >= 0; --i) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense(lower, upper, rowSense[i], rowRhs[i], rowRange[i]); } loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { freeCachedResults(); int i; // Set column values to defaults if NULL pointer passed int nc = numcols; int nr = numrows; int *len = new int[nc + 1]; double *clb; double *cub; double *ob; char *rsen; double *rrhs; std::adjacent_difference(start, start + (nc + 1), len); if (collb != NULL) { clb = const_cast< double * >(collb); } else { clb = new double[nc]; for (i = 0; i < nc; i++) clb[i] = 0.0; } if (colub != NULL) cub = const_cast< double * >(colub); else { cub = new double[nc]; for (i = 0; i < nc; i++) cub[i] = XPRS_PLUSINFINITY; } if (obj != NULL) ob = const_cast< double * >(obj); else { ob = new double[nc]; for (i = 0; i < nc; i++) ob[i] = 0.0; } if (rowsen != NULL) rsen = const_cast< char * >(rowsen); else { rsen = new char[nr]; for (i = 0; i < nr; ++i) rsen[i] = 'G'; } if (rowrhs != NULL) rrhs = const_cast< double * >(rowrhs); else { rrhs = new double[nr]; for (i = 0; i < nr; ++i) rrhs[i] = 0.0; } // Generate a problem name char probName[256]; sprintf(probName, "Prob%i", osiSerial_); if (getLogFilePtr() != NULL) { fprintf(getLogFilePtr(), "{\n"); fprintf(getLogFilePtr(), " char rowsen[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowsen[%d]='%c';\n", i, rsen[i]); fprintf(getLogFilePtr(), " double rowrhs[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowrhs[%d]=%f;\n", i, rrhs[i]); fprintf(getLogFilePtr(), " double rowrng[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowrng[%d]=%f;\n", i, rowrng ? rowrng[i] : 0.0); fprintf(getLogFilePtr(), " double ob[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " ob[%d]=%f;\n", i, ob[i]); fprintf(getLogFilePtr(), " double clb[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " clb[%d]=%f;\n", i, clb[i]); fprintf(getLogFilePtr(), " double cub[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " cub[%d]=%f;\n", i, cub[i]); fprintf(getLogFilePtr(), " int vectorStarts[%d];\n", nc + 1); for (i = 0; i <= nc; i++) fprintf(getLogFilePtr(), " vectorStarts[%d]=%d;\n", i, start[i]); fprintf(getLogFilePtr(), " int vectorLengths[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " vectorLengths[%d]=%d;\n", i, len[i + 1]); fprintf(getLogFilePtr(), " int indices[%d];\n", start[nc]); for (i = 0; i < start[nc]; i++) fprintf(getLogFilePtr(), " indices[%d]=%d;\n", i, index[i]); fprintf(getLogFilePtr(), " double elements[%d];\n", start[nc]); for (i = 0; i < start[nc]; i++) fprintf(getLogFilePtr(), " elements[%d]=%f;\n", i, value[i]); fprintf(getLogFilePtr(), "}\n"); } int iret = XPRSloadlp(prob_, probName, nc, nr, const_cast< char * >(rsen), const_cast< double * >(rrhs), const_cast< double * >(rowrng), ob, const_cast< int * >(start), const_cast< int * >(len + 1), const_cast< int * >(index), const_cast< double * >(value), clb, cub); setStrParam(OsiProbName, probName); if (iret != 0) XPRSgetintattrib(prob_, XPRS_ERRORCODE, &iret); assert(iret == 0); char pname[256]; // Problem names can be 200 chars in XPRESS 12 XPRS_CHECKED(XPRSgetprobname, (prob_, pname)); xprProbname_ = pname; if (collb == NULL) delete[] clb; if (colub == NULL) delete[] cub; if (obj == NULL) delete[] ob; if (rowsen == NULL) delete[] rsen; if (rowrhs == NULL) delete[] rrhs; delete[] len; } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- int OsiXprSolverInterface::readMps(const char *filename, const char *extension) { #if 0 if (getLogFilePtr()!=NULL) { fprintf(getLogFilePtr(),"{\n"); fprintf(getLogFilePtr()," XPRSreadprob(prob_,\"%s\");\n",filename); fprintf(getLogFilePtr()," int namlen;\n"); fprintf(getLogFilePtr()," XPRSgetintcontrol(prob_,XPRS_NAMELENGTH,&namlen);\n"); fprintf(getLogFilePtr()," namlen *= 8;\n"); } // Read Mps file. // XPRESS generates its own file extensions, so we ignore any supplied. int iret = XPRSreadprob(prob_,filename); if ( iret != 0 ) XPRSgetintattrib(prob_,XPRS_ERRORCODE, &iret); assert( iret == 0 ); // Get length of Mps names int namlen; XPRSgetintattrib(prob_,XPRS_NAMELENGTH, &namlen); namlen *= 8; if (getLogFilePtr()!=NULL) { fprintf(getLogFilePtr()," char objRowName[%d],rowName[%d];\n",namlen,namlen); fprintf(getLogFilePtr()," XPRSgetstrcontrol(prob_,XPRS_MPSOBJNAME, objRowName);\n"); fprintf(getLogFilePtr()," int nr;\n"); fprintf(getLogFilePtr()," XPRSsetintcontrol(prob_,XPRS_ROWS, &nr);"); } // Allocate space to hold row names. char * objRowName = new char[namlen+1]; char * rowName = new char[namlen+1]; // Get name of objective row. // If "" returned, then first N row is objective row XPRSgetstrcontrol(prob_,XPRS_MPSOBJNAME,objRowName); // Get number of rows int nr; XPRSgetintattrib(prob_,XPRS_ROWS, &nr); if (getLogFilePtr()!=NULL) { fprintf(getLogFilePtr()," char rs[%d];\n",nr); fprintf(getLogFilePtr()," XPRSgetrowtype(prob_,rs, 0, %d);\n",nr-1); } // Get row sense. char * rs = new char[nr]; XPRSgetrowtype(prob_,rs, 0, nr - 1); // Loop once for each row looking for objective row int i; for ( i=0; i 0 && newnz > 0) { XPRS_CHECKED(XPRSsetintcontrol, (prob_, XPRS_EXTRAROWS, newrows)); XPRS_CHECKED(XPRSsetintcontrol, (prob_, XPRS_EXTRAELEMS, newnz)); } } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiSolverInterface * OsiXprSolverInterface::clone(bool copyData) const { return (new OsiXprSolverInterface(*this)); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiXprSolverInterface:: OsiXprSolverInterface(const OsiXprSolverInterface &source) : OsiSolverInterface(source) , prob_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , colupper_(NULL) , collower_(NULL) , rowupper_(NULL) , rowlower_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , objcoeffs_(NULL) , objsense_(source.objsense_) , colsol_(NULL) , rowsol_(NULL) , rowact_(NULL) , rowprice_(NULL) , colprice_(NULL) , ivarind_(NULL) , ivartype_(NULL) , vartype_(NULL) , domipstart(false) { incrementInstanceCounter(); xprProbname_ = ""; gutsOfConstructor(); gutsOfCopy(source); // Other values remain NULL until requested } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiXprSolverInterface::~OsiXprSolverInterface() { gutsOfDestructor(); XPRSdestroyprob(prob_); decrementInstanceCounter(); } //------------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiXprSolverInterface & OsiXprSolverInterface::operator=(const OsiXprSolverInterface &rhs) { if (this != &rhs) { OsiSolverInterface::operator=(rhs); osiSerial_++; // even though numInstances_ doesn't change gutsOfDestructor(); gutsOfCopy(rhs); } return *this; } //############################################################################# // Applying cuts //############################################################################# void OsiXprSolverInterface::applyColCut(const OsiColCut &cc) { const double *collower = getColLower(); const double *colupper = getColUpper(); const CoinPackedVector &lbs = cc.lbs(); const CoinPackedVector &ubs = cc.ubs(); int *index = new int[lbs.getNumElements() + ubs.getNumElements()]; char *btype = new char[lbs.getNumElements() + ubs.getNumElements()]; double *value = new double[lbs.getNumElements() + ubs.getNumElements()]; int i, nbds; for (i = nbds = 0; i < lbs.getNumElements(); i++, nbds++) { index[nbds] = lbs.getIndices()[i]; btype[nbds] = 'L'; value[nbds] = (collower[index[nbds]] > lbs.getElements()[i]) ? collower[index[nbds]] : lbs.getElements()[i]; } for (i = 0; i < ubs.getNumElements(); i++, nbds++) { index[nbds] = ubs.getIndices()[i]; btype[nbds] = 'U'; value[nbds] = (colupper[index[nbds]] < ubs.getElements()[i]) ? colupper[index[nbds]] : ubs.getElements()[i]; } if (getLogFilePtr() != NULL) { fprintf(getLogFilePtr(), "{\n"); fprintf(getLogFilePtr(), " int index[%d];\n", nbds); fprintf(getLogFilePtr(), " char btype[%d];\n", nbds); fprintf(getLogFilePtr(), " double value[%d];\n", nbds); for (i = 0; i < nbds; i++) { fprintf(getLogFilePtr(), " index[%d]=%d;\n", i, index[i]); fprintf(getLogFilePtr(), " btype[%d]='%c';\n", i, btype[i]); fprintf(getLogFilePtr(), " value[%d]=%f;\n", i, value[i]); } fprintf(getLogFilePtr(), "}\n"); } XPRS_CHECKED(XPRSchgbounds, (prob_, nbds, index, btype, value)); delete[] index; delete[] btype; delete[] value; freeCachedResults(); // delete [] colupper_; colupper_ = NULL; // delete [] collower_; collower_ = NULL; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::applyRowCut(const OsiRowCut &rowCut) { const CoinPackedVector &row = rowCut.row(); int start[2] = { 0, row.getNumElements() }; char sense = rowCut.sense(); double rhs = rowCut.rhs(); double r = rowCut.range(); if (getLogFilePtr() != NULL) { int i; fprintf(getLogFilePtr(), "{\n"); fprintf(getLogFilePtr(), " char sense = '%c';\n", sense); fprintf(getLogFilePtr(), " double rhs = '%f';\n", rhs); fprintf(getLogFilePtr(), " double r = '%f';\n", r); fprintf(getLogFilePtr(), " int start[2] = {0,%d};\n", start[1]); fprintf(getLogFilePtr(), " int indices[%d];\n", row.getNumElements()); fprintf(getLogFilePtr(), " double elements[%d];\n", row.getNumElements()); for (i = 0; i < row.getNumElements(); i++) { fprintf(getLogFilePtr(), " indices[%d]=%d;\n", i, row.getIndices()[i]); fprintf(getLogFilePtr(), " elements[%d]=%f;\n", i, row.getElements()[i]); } fprintf(getLogFilePtr(), "\n"); } // In XPRESS XPRSaddrows(prob_) prototype, indices and elements should be const, but // they're not. int rc; rc = XPRSaddrows(prob_, 1, row.getNumElements(), &sense, &rhs, &r, start, const_cast< int * >(row.getIndices()), const_cast< double * >(row.getElements())); assert(rc == 0); freeCachedResults(); } //############################################################################# // Private methods //############################################################################# void OsiXprSolverInterface::gutsOfCopy(const OsiXprSolverInterface &source) { if (source.xprProbname_ != "") { // source has data std::ostringstream pname; pname << xprProbname_ << "#" << osiSerial_ << '\0'; xprProbname_ = pname.str(); // sprintf(xprProbname_, "%s#%d", source.xprProbname_, osiSerial_); // std::cout << "Problem " << xprProbname_ << " copied to matrix "; XPRS_CHECKED(XPRScopyprob, (prob_, source.prob_, xprProbname_.c_str())); XPRS_CHECKED(XPRScopycontrols, (prob_, source.prob_)); /* if the callbacks are used, a XPRScopycallbacks needs to be added */ } } //------------------------------------------------------------------- void OsiXprSolverInterface::gutsOfConstructor() { XPRS_CHECKED(XPRScreateprob, (&prob_)); XPRS_CHECKED(XPRSsetcbmessage, (prob_, OsiXprMessageCallback, messageHandler())); /* always create an empty problem to initialize all data structures * since the user had no chance to pass in his own message handler, we turn off the output for the following operation */ int outputlog; XPRS_CHECKED(XPRSgetintcontrol, (prob_, XPRS_OUTPUTLOG, &outputlog)); XPRS_CHECKED(XPRSsetintcontrol, (prob_, XPRS_OUTPUTLOG, 0)); int istart = 0; XPRS_CHECKED(XPRSloadlp, (prob_, "empty", 0, 0, NULL, NULL, NULL, NULL, &istart, NULL, NULL, NULL, NULL, NULL)); XPRS_CHECKED(XPRSchgobjsense, (prob_, (int)objsense_)); XPRS_CHECKED(XPRSsetintcontrol, (prob_, XPRS_OUTPUTLOG, outputlog)); //OPEN: only switched off for debugging //XPRS_CHECKED( XPRSsetlogfile, (prob_,"xpress.log") ); // **FIXME** (mjs) Integer problems require solution file or callback to save // optimal solution. The quick fix is to leave the default solutionfile setting, // but implementing a callback would be better. // XPRS_CHECKED( XPRSsetintcontrol, (prob_, XPRS_SOLUTIONFILE,0) ); // XPRS_CHECKED( XPRSsetintcontrol, ( prob_, XPRS_PRESOLVE, 0) ); lastsolvewasmip = false; } //------------------------------------------------------------------- void OsiXprSolverInterface::gutsOfDestructor() { freeCachedResults(); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); assert(colupper_ == NULL); assert(collower_ == NULL); assert(rowupper_ == NULL); assert(rowlower_ == NULL); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(objcoeffs_ == NULL); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(rowprice_ == NULL); assert(colprice_ == NULL); assert(rowact_ == NULL); assert(vartype_ == NULL); } //------------------------------------------------------------------- void OsiXprSolverInterface::freeSolution() { delete[] colsol_; colsol_ = NULL; delete[] rowsol_; rowsol_ = NULL; delete[] rowact_; rowact_ = NULL; delete[] rowprice_; rowprice_ = NULL; delete[] colprice_; colprice_ = NULL; } //------------------------------------------------------------------- void OsiXprSolverInterface::freeCachedResults() { delete matrixByRow_; matrixByRow_ = NULL; delete matrixByCol_; matrixByCol_ = NULL; delete[] colupper_; colupper_ = NULL; delete[] collower_; collower_ = NULL; delete[] rowupper_; rowupper_ = NULL; delete[] rowlower_; rowlower_ = NULL; delete[] rowsense_; rowsense_ = NULL; delete[] rhs_; rhs_ = NULL; delete[] rowrange_; rowrange_ = NULL; delete[] objcoeffs_; objcoeffs_ = NULL; freeSolution(); delete[] ivarind_; ivarind_ = NULL; delete[] ivartype_; ivartype_ = NULL; delete[] vartype_; vartype_ = NULL; } //------------------------------------------------------------------- // Set up lists of integer variables //------------------------------------------------------------------- int OsiXprSolverInterface::getNumIntVars() const { int nintvars = 0, nsets = 0; if (isDataLoaded()) { XPRS_CHECKED(XPRSgetglobal, (prob_, &nintvars, &nsets, NULL, NULL, NULL, NULL, NULL, NULL, NULL)); } return nintvars; } void OsiXprSolverInterface::getVarTypes() const { int nintvars = getNumIntVars(); int nsets; int ncols = getNumCols(); if (vartype_ == NULL && nintvars > 0) { if (getLogFilePtr() != NULL) { fprintf(getLogFilePtr(), "{\n"); fprintf(getLogFilePtr(), " int nintvars = %d;\n", nintvars); fprintf(getLogFilePtr(), " int nsets;\n"); fprintf(getLogFilePtr(), " char ivartype[%d];\n", nintvars); fprintf(getLogFilePtr(), " char ivarind[%d];\n", nintvars); fprintf(getLogFilePtr(), "}\n"); } ivartype_ = new char[nintvars]; ivarind_ = new int[nintvars]; XPRS_CHECKED(XPRSgetglobal, (prob_, &nintvars, &nsets, ivartype_, ivarind_, NULL, NULL, NULL, NULL, NULL)); // Currently, only binary and integer vars are supported. vartype_ = new char[ncols]; int i, j; for (i = j = 0; j < ncols; j++) { if (i < nintvars && j == ivarind_[i]) { vartype_[j] = ivartype_[i]; i++; } else vartype_[j] = 'C'; } } } bool OsiXprSolverInterface::isDataLoaded() const { int istatus; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &istatus)); istatus &= XPRS_MIP_NOT_LOADED; return istatus == 0; } //############################################################################# /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiXpr/osi-xpress.pc.in0000644000175000017500000000046711510106235017126 0ustar sudipsudipprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiXpress Description: COIN-OR Open Solver Interface for Xpress URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiXpr @XPRLIB@ Cflags: -I${includedir} -I@XPRINCDIR@ Requires: osi Vol-1.5.4/Osi/src/OsiXpr/osi-xpress-uninstalled.pc.in0000644000175000017500000000044011507670402021445 0ustar sudipsudipprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiXpr Name: OsiXpress Description: COIN-OR Open Solver Interface for Xpress URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiXpr.la @XPRLIB@ Cflags: -I@abs_source_dir@/src/OsiXpr -I@XPRINCDIR@ Requires: osi Vol-1.5.4/Osi/src/OsiXpr/Makefile.am0000644000175000017500000000350113200225426016107 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 2111 2017-11-07 03:40:06Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiXpr # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiXpr.la # List all source files for this library, including headers libOsiXpr_la_SOURCES = \ OsiXprSolverInterface.cpp OsiXprSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiXpr_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(XPRLIB) endif # This is for libtool (on Windows) libOsiXpr_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. # "top_srcdir" refers to the basic directory for the main package that is # being compiled. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(XPRINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiXprSolverInterface.hpp Vol-1.5.4/Osi/src/OsiSpx/0000755000175000017500000000000013434204224014057 5ustar sudipsudipVol-1.5.4/Osi/src/OsiSpx/OsiSpxSolverInterface.hpp0000644000175000017500000006634613414504352021053 0ustar sudipsudip//----------------------------------------------------------------------------- // name: OSI Interface for SoPlex >= 1.4.2c // authors: Tobias Pfender // Ambros Gleixner // Wei Huang // Konrad-Zuse-Zentrum Berlin (Germany) // email: pfender@zib.de // date: 01/16/2002 // license: this file may be freely distributed under the terms of the EPL //----------------------------------------------------------------------------- // Copyright (C) 2002, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. // Last edit: $Id: OsiSpxSolverInterface.hpp 2200 2019-01-06 23:02:02Z unxusr $ #ifndef OsiSpxSolverInterface_H #define OsiSpxSolverInterface_H #include #include "OsiSolverInterface.hpp" #include "CoinWarmStartBasis.hpp" #ifndef _SOPLEX_H_ /* forward declarations so the header can be compiled without having to include soplex.h * however, these declaration work only for SoPlex < 2.0, so we do them only if soplex.h hasn't been included already */ namespace soplex { class DIdxSet; class DVector; class SPxOut; class SoPlex; } #endif /** SoPlex Solver Interface Instantiation of OsiSpxSolverInterface for SoPlex */ class OsiSpxSolverInterface : virtual public OsiSolverInterface { friend void OsiSpxSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Get an integer parameter bool getIntParam(OsiIntParam key, int &value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double &value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string &value) const; // Set timelimit void setTimeLimit(double value); // Get timelimit double getTimeLimit() const; //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; // Is the given primal objective limit reached? - use implementation from OsiSolverInterface /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; /// Time limit reached? virtual bool isTimeLimitReached() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /// Get empty warm start object inline CoinWarmStart *getEmptyWarmStart() const { return (dynamic_cast< CoinWarmStart * >(new CoinWarmStartBasis())); } /// Get warmstarting information virtual CoinWarmStart *getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart *warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double *getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double *getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int columnNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int columnNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int columnNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int columnNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double *getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double *getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double *getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double *getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const; #if 0 /** Get vector of indices of solution which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue); /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower(int elementIndex, double elementValue); /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper(int elementIndex, double elementValue); /** Set a single column lower and upper bound
The default implementation just invokes setColLower and setColUpper */ virtual void setColBounds(int elementIndex, double lower, double upper); #if 0 // we are using the default implementation of OsiSolverInterface /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setCollower and setColupper over and over again. @param [indexfirst,indexLast) contains the indices of the constraints whose either bound changes @param indexList the indices of those variables @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); #endif /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue); /** Set a single row lower and upper bound
The default implementation just invokes setRowUower and setRowUpper */ virtual void setRowBounds(int elementIndex, double lower, double upper); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); #if 0 // we are using the default implementation of OsiSolverInterface /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowlower and setRowupper over and over again. @param [indexfirst,indexLast) contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowtype and over and over again. @param [indexfirst,indexLast) contains the indices of the constraints whose type changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList); #endif //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); #if 0 // we are using the default implementation of OsiSolverInterface /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int* indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int* indices, int len); #endif //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ /** */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj); #if 0 // we are using the default implementation of OsiSolverInterface /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase * const * cols, const double* collb, const double* colub, const double* obj); #endif /** */ virtual void deleteCols(const int num, const int *colIndices); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng); #if 0 // we are using the default implementation of OsiSolverInterface /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng); #endif /** */ virtual void deleteRows(const int num, const int *rowIndices); #if 0 // we are using the default implementation of OsiSolverInterface \ //----------------------------------------------------------------------- /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const; //@} //--------------------------------------------------------------------------- /**@name Constructors and destructor */ //@{ /// Default Constructor OsiSpxSolverInterface(); /// Clone virtual OsiSolverInterface *clone(bool copyData = true) const; /// Copy constructor OsiSpxSolverInterface(const OsiSpxSolverInterface &); /// Assignment operator OsiSpxSolverInterface &operator=(const OsiSpxSolverInterface &rhs); /// Destructor virtual ~OsiSpxSolverInterface(); //@} enum keepCachedFlag { /// discard all cached data (default) KEEPCACHED_NONE = 0, /// column information: objective values, lower and upper bounds, variable types KEEPCACHED_COLUMN = 1, /// row information: right hand sides, ranges and senses, lower and upper bounds for row KEEPCACHED_ROW = 2, /// problem matrix: matrix ordered by column and by row KEEPCACHED_MATRIX = 4, /// LP solution: primal and dual solution, reduced costs, row activities KEEPCACHED_RESULTS = 8, /// only discard cached LP solution KEEPCACHED_PROBLEM = KEEPCACHED_COLUMN | KEEPCACHED_ROW | KEEPCACHED_MATRIX, /// keep all cached data (similar to getMutableLpPtr()) KEEPCACHED_ALL = KEEPCACHED_PROBLEM | KEEPCACHED_RESULTS, /// free only cached column and LP solution information FREECACHED_COLUMN = KEEPCACHED_PROBLEM & ~KEEPCACHED_COLUMN, /// free only cached row and LP solution information FREECACHED_ROW = KEEPCACHED_PROBLEM & ~KEEPCACHED_ROW, /// free only cached matrix and LP solution information FREECACHED_MATRIX = KEEPCACHED_PROBLEM & ~KEEPCACHED_MATRIX, /// free only cached LP solution information FREECACHED_RESULTS = KEEPCACHED_ALL & ~KEEPCACHED_RESULTS }; soplex::SoPlex *getLpPtr(int keepCached = KEEPCACHED_NONE); soplex::SPxOut *getSPxOut() { return spxout_; } protected: /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut(const OsiRowCut &rc); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut(const OsiColCut &cc); //@} /**@name Protected member data */ //@{ /// SoPlex output object soplex::SPxOut *spxout_; /// SoPlex solver object soplex::SoPlex *soplex_; //@} private: /**@name Private methods */ //@{ /// free cached column rim vectors void freeCachedColRim(); /// free cached row rim vectors void freeCachedRowRim(); /// free cached result vectors void freeCachedResults(); /// free cached matrices void freeCachedMatrix(); /// free all cached data (except specified entries, see getLpPtr()) void freeCachedData(int keepCached = KEEPCACHED_NONE); /// free all allocated memory void freeAllMemory(); //@} /**@name Private member data */ //@{ /// indices of integer variables soplex::DIdxSet *spxintvars_; /// Hotstart information void *hotStartCStat_; int hotStartCStatSize_; void *hotStartRStat_; int hotStartRStatSize_; int hotStartMaxIteration_; /**@name Cached information derived from the SoPlex model */ //@{ /// Pointer to objective Vector mutable soplex::DVector *obj_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /// Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) mutable double *rowrange_; /// Pointer to primal solution vector mutable soplex::DVector *colsol_; /// Pointer to dual solution vector mutable soplex::DVector *rowsol_; /// Pointer to reduced cost vector mutable soplex::DVector *redcost_; /// Pointer to row activity (slack) vector mutable soplex::DVector *rowact_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByCol_; //@} //@} }; //############################################################################# /** A function that tests the methods in the OsiSpxSolverInterface class. */ void OsiSpxSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiSpx/OsiSpxSolverInterface.cpp0000644000175000017500000014342113414504352021034 0ustar sudipsudip//----------------------------------------------------------------------------- // name: OSI Interface for SoPlex >= 1.4.2c // authors: Tobias Pfender // Ambros Gleixner // Wei Huang // Konrad-Zuse-Zentrum Berlin (Germany) // date: 01/16/2002 // license: this file may be freely distributed under the terms of EPL //----------------------------------------------------------------------------- // Copyright (C) 2002, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. // Last edit: $Id: OsiSpxSolverInterface.cpp 2200 2019-01-06 23:02:02Z unxusr $ #include "CoinPragma.hpp" #include #include #include #include #include #include "CoinError.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" #ifndef SOPLEX_LEGACY #define SOPLEX_LEGACY #endif #include "soplex.h" // it's important to include this header after soplex.h #include "OsiSpxSolverInterface.hpp" //############################################################################# // A couple of helper functions //############################################################################# inline void freeCacheDouble(double *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheChar(char *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheMatrix(CoinPackedMatrix *&ptr) { if (ptr != NULL) { delete ptr; ptr = NULL; } } inline void throwSPXerror(std::string error, std::string osimethod) { std::cout << "ERROR: " << error << " (" << osimethod << " in OsiSpxSolverInterface)" << std::endl; throw CoinError(error.c_str(), osimethod.c_str(), "OsiSpxSolverInterface"); } //############################################################################# // Solve methods //############################################################################# void OsiSpxSolverInterface::initialSolve() { bool takeHint; OsiHintStrength strength; // by default we use dual simplex // unless we get the hint to use primal simplex bool dual = true; getHintParam(OsiDoDualInInitial, takeHint, strength); if (strength != OsiHintIgnore) dual = takeHint; // always use column representation if (soplex_->rep() != soplex::SPxSolver::COLUMN) soplex_->setRep(soplex::SPxSolver::COLUMN); // set algorithm type if (dual) { if (soplex_->type() != soplex::SPxSolver::LEAVE) soplex_->setType(soplex::SPxSolver::LEAVE); } else { if (soplex_->type() != soplex::SPxSolver::ENTER) soplex_->setType(soplex::SPxSolver::ENTER); } // set dual objective limit double dualobjlimit; OsiSolverInterface::getDblParam(OsiDualObjectiveLimit, dualobjlimit); if (fabs(dualobjlimit) < getInfinity()) { double objoffset; OsiSolverInterface::getDblParam(OsiDualObjectiveLimit, objoffset); dualobjlimit += objoffset; } soplex_->setTerminationValue(dualobjlimit); // solve try { soplex_->solve(); } catch (soplex::SPxException e) { *messageHandler() << "SoPlex initial solve failed with exception " << e.what() << CoinMessageEol; #if (SOPLEX_VERSION >= 160) || (SOPLEX_SUBVERSION >= 7) try { *messageHandler() << "Retry with cleared basis" << CoinMessageEol; soplex_->clearBasis(); soplex_->solve(); } catch (soplex::SPxException e) { *messageHandler() << "SoPlex initial solve with cleared basis failed with exception " << e.what() << CoinMessageEol; } #endif } freeCachedResults(); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::resolve() { bool takeHint; OsiHintStrength strength; // by default we use dual simplex // unless we get the hint to use primal simplex bool dual = true; getHintParam(OsiDoDualInResolve, takeHint, strength); if (strength != OsiHintIgnore) dual = takeHint; // always use column representation if (soplex_->rep() != soplex::SPxSolver::COLUMN) soplex_->setRep(soplex::SPxSolver::COLUMN); // set algorithm type if (dual) { if (soplex_->type() != soplex::SPxSolver::LEAVE) soplex_->setType(soplex::SPxSolver::LEAVE); } else { if (soplex_->type() != soplex::SPxSolver::ENTER) soplex_->setType(soplex::SPxSolver::ENTER); } // set dual objective limit double dualobjlimit; OsiSolverInterface::getDblParam(OsiDualObjectiveLimit, dualobjlimit); if (fabs(dualobjlimit) < getInfinity()) { double objoffset; OsiSolverInterface::getDblParam(OsiDualObjectiveLimit, objoffset); dualobjlimit += objoffset; } soplex_->setTerminationValue(dualobjlimit); // solve try { soplex_->solve(); } catch (soplex::SPxException e) { *messageHandler() << "SoPlex resolve failed with exception " << e.what() << CoinMessageEol; #if (SOPLEX_VERSION >= 160) || (SOPLEX_SUBVERSION >= 7) try { *messageHandler() << "Retry with cleared basis" << CoinMessageEol; soplex_->clearBasis(); soplex_->solve(); } catch (soplex::SPxException e) { *messageHandler() << "SoPlex resolve with cleared basis failed with exception " << e.what() << CoinMessageEol; } #endif } freeCachedResults(); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::branchAndBound() { throwSPXerror("SoPlex does not provide an internal branch and bound procedure", "branchAndBound"); } //############################################################################# // Parameter related methods //############################################################################# bool OsiSpxSolverInterface::setIntParam(OsiIntParam key, int value) { bool retval = false; try { switch (key) { case OsiMaxNumIteration: soplex_->setTerminationIter(value); retval = true; break; case OsiMaxNumIterationHotStart: if (value >= 0) { hotStartMaxIteration_ = value; retval = true; } else retval = false; break; case OsiLastIntParam: retval = false; break; case OsiNameDiscipline: retval = OsiSolverInterface::setIntParam(key, value); break; } } catch (soplex::SPxException e) { *messageHandler() << "OsiSpx::setDblParam failed with exception " << e.what() << CoinMessageEol; retval = false; } return retval; } //----------------------------------------------------------------------------- bool OsiSpxSolverInterface::setDblParam(OsiDblParam key, double value) { bool retval = false; try { switch (key) { case OsiDualObjectiveLimit: retval = OsiSolverInterface::setDblParam(key, value); break; case OsiPrimalObjectiveLimit: retval = OsiSolverInterface::setDblParam(key, value); break; case OsiDualTolerance: // SoPlex doesn't support different deltas for primal and dual soplex_->setDelta(value); retval = true; break; case OsiPrimalTolerance: // SoPlex doesn't support different deltas for primal and dual soplex_->setDelta(value); retval = true; break; case OsiObjOffset: retval = OsiSolverInterface::setDblParam(key, value); break; case OsiLastDblParam: retval = false; break; } } catch (soplex::SPxException e) { *messageHandler() << "OsiSpx::setDblParam failed with exception " << e.what() << CoinMessageEol; retval = false; } return retval; } void OsiSpxSolverInterface::setTimeLimit(double value) { soplex_->setTerminationTime(value); } //----------------------------------------------------------------------------- bool OsiSpxSolverInterface::getIntParam(OsiIntParam key, int &value) const { bool retval = false; switch (key) { case OsiMaxNumIteration: value = soplex_->terminationIter(); retval = true; break; case OsiMaxNumIterationHotStart: value = hotStartMaxIteration_; retval = true; break; case OsiLastIntParam: retval = false; break; case OsiNameDiscipline: retval = OsiSolverInterface::getIntParam(key, value); break; } return retval; } //----------------------------------------------------------------------------- bool OsiSpxSolverInterface::getDblParam(OsiDblParam key, double &value) const { bool retval = false; switch (key) { case OsiDualObjectiveLimit: retval = OsiSolverInterface::getDblParam(key, value); break; case OsiPrimalObjectiveLimit: retval = OsiSolverInterface::getDblParam(key, value); break; case OsiDualTolerance: value = soplex_->delta(); retval = true; break; case OsiPrimalTolerance: value = soplex_->delta(); retval = true; break; case OsiObjOffset: retval = OsiSolverInterface::getDblParam(key, value); break; case OsiLastDblParam: retval = false; break; } return retval; } bool OsiSpxSolverInterface::getStrParam(OsiStrParam key, std::string &value) const { switch (key) { case OsiSolverName: value = "SoPlex"; return true; default:; } return false; } double OsiSpxSolverInterface::getTimeLimit() const { return soplex_->terminationTime(); } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiSpxSolverInterface::isAbandoned() const { int stat = soplex_->status(); return (stat == soplex::SPxSolver::SINGULAR || stat == soplex::SPxSolver::ERROR); } bool OsiSpxSolverInterface::isProvenOptimal() const { int stat = soplex_->status(); return (stat == soplex::SPxSolver::OPTIMAL); } bool OsiSpxSolverInterface::isProvenPrimalInfeasible() const { int stat = soplex_->status(); return (stat == soplex::SPxSolver::INFEASIBLE); } bool OsiSpxSolverInterface::isProvenDualInfeasible() const { int stat = soplex_->status(); return (stat == soplex::SPxSolver::UNBOUNDED); } bool OsiSpxSolverInterface::isDualObjectiveLimitReached() const { if (soplex_->status() == soplex::SPxSolver::ABORT_VALUE) return true; return OsiSolverInterface::isDualObjectiveLimitReached(); } bool OsiSpxSolverInterface::isIterationLimitReached() const { return (soplex_->status() == soplex::SPxSolver::ABORT_ITER); } bool OsiSpxSolverInterface::isTimeLimitReached() const { return (soplex_->status() == soplex::SPxSolver::ABORT_TIME); } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart *OsiSpxSolverInterface::getWarmStart() const { CoinWarmStartBasis *ws = NULL; int numcols = getNumCols(); int numrows = getNumRows(); int i; ws = new CoinWarmStartBasis(); ws->setSize(numcols, numrows); if (soplex_->status() <= soplex::SPxSolver::NO_PROBLEM) return ws; // The OSI standard assumes the artificial slack variables to have positive coefficients. SoPlex uses the convention // Ax - s = 0, lhs <= s <= rhs, so we have to invert the ON_LOWER and ON_UPPER statuses. for (i = 0; i < numrows; ++i) { switch (soplex_->getBasisRowStatus(i)) { case soplex::SPxSolver::BASIC: ws->setArtifStatus(i, CoinWarmStartBasis::basic); break; case soplex::SPxSolver::FIXED: case soplex::SPxSolver::ON_LOWER: ws->setArtifStatus(i, CoinWarmStartBasis::atUpperBound); break; case soplex::SPxSolver::ON_UPPER: ws->setArtifStatus(i, CoinWarmStartBasis::atLowerBound); break; case soplex::SPxSolver::ZERO: ws->setArtifStatus(i, CoinWarmStartBasis::isFree); break; default: throwSPXerror("invalid row status", "getWarmStart"); break; } } for (i = 0; i < numcols; ++i) { switch (soplex_->getBasisColStatus(i)) { case soplex::SPxSolver::BASIC: ws->setStructStatus(i, CoinWarmStartBasis::basic); break; case soplex::SPxSolver::FIXED: case soplex::SPxSolver::ON_LOWER: ws->setStructStatus(i, CoinWarmStartBasis::atLowerBound); break; case soplex::SPxSolver::ON_UPPER: ws->setStructStatus(i, CoinWarmStartBasis::atUpperBound); break; case soplex::SPxSolver::ZERO: ws->setStructStatus(i, CoinWarmStartBasis::isFree); break; default: throwSPXerror("invalid column status", "getWarmStart"); break; } } return ws; } //----------------------------------------------------------------------------- bool OsiSpxSolverInterface::setWarmStart(const CoinWarmStart *warmstart) { const CoinWarmStartBasis *ws = dynamic_cast< const CoinWarmStartBasis * >(warmstart); int numcols, numrows, i; soplex::SPxSolver::VarStatus *cstat, *rstat; bool retval = false; if (!ws) return false; numcols = ws->getNumStructural(); numrows = ws->getNumArtificial(); if (numcols != getNumCols() || numrows != getNumRows()) return false; cstat = new soplex::SPxSolver::VarStatus[numcols]; rstat = new soplex::SPxSolver::VarStatus[numrows]; // The OSI standard assumes the artificial slack variables to have positive coefficients. SoPlex uses the convention // Ax - s = 0, lhs <= s <= rhs, so we have to invert the atLowerBound and atUpperBound statuses. for (i = 0; i < numrows; ++i) { switch (ws->getArtifStatus(i)) { case CoinWarmStartBasis::basic: rstat[i] = soplex::SPxSolver::BASIC; break; case CoinWarmStartBasis::atLowerBound: rstat[i] = soplex::SPxSolver::ON_UPPER; break; case CoinWarmStartBasis::atUpperBound: rstat[i] = soplex::SPxSolver::ON_LOWER; break; case CoinWarmStartBasis::isFree: rstat[i] = soplex::SPxSolver::ZERO; break; default: // unknown row status retval = false; goto TERMINATE; } } for (i = 0; i < numcols; ++i) { switch (ws->getStructStatus(i)) { case CoinWarmStartBasis::basic: cstat[i] = soplex::SPxSolver::BASIC; break; case CoinWarmStartBasis::atLowerBound: cstat[i] = soplex::SPxSolver::ON_LOWER; break; case CoinWarmStartBasis::atUpperBound: cstat[i] = soplex::SPxSolver::ON_UPPER; break; case CoinWarmStartBasis::isFree: cstat[i] = soplex::SPxSolver::ZERO; break; default: // unknown column status retval = false; goto TERMINATE; } } try { soplex_->setBasis(rstat, cstat); } catch (soplex::SPxException e) { std::cerr << "SoPlex setting starting basis failed with exception " << e.what() << std::endl; retval = false; goto TERMINATE; } retval = true; TERMINATE: delete[] cstat; delete[] rstat; return retval; } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# void OsiSpxSolverInterface::markHotStart() { int numcols, numrows; numcols = getNumCols(); numrows = getNumRows(); if (numcols > hotStartCStatSize_) { delete[] reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartCStat_); hotStartCStatSize_ = static_cast< int >(1.2 * static_cast< double >(numcols)); // get some extra space for future hot starts hotStartCStat_ = reinterpret_cast< void * >(new soplex::SPxSolver::VarStatus[hotStartCStatSize_]); } if (numrows > hotStartRStatSize_) { delete[] reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartRStat_); hotStartRStatSize_ = static_cast< int >(1.2 * static_cast< double >(numrows)); // get some extra space for future hot starts hotStartRStat_ = reinterpret_cast< void * >(new soplex::SPxSolver::VarStatus[hotStartRStatSize_]); } soplex_->getBasis(reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartRStat_), reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartCStat_)); } void OsiSpxSolverInterface::solveFromHotStart() { int maxiter; assert(getNumCols() <= hotStartCStatSize_); assert(getNumRows() <= hotStartRStatSize_); // @todo why the hotstart basis is not set here ????? //soplex_->setBasis( reinterpret_cast(hotStartRStat_), reinterpret_cast(hotStartCStat_) ); maxiter = soplex_->terminationIter(); soplex_->setTerminationIter(hotStartMaxIteration_); resolve(); soplex_->setTerminationIter(maxiter); } void OsiSpxSolverInterface::unmarkHotStart() { // be lazy with deallocating memory and do nothing here, deallocate memory in the destructor } //############################################################################# // Problem information methods (original data) //############################################################################# //------------------------------------------------------------------ // Get number of rows, columns, elements, ... //------------------------------------------------------------------ int OsiSpxSolverInterface::getNumCols() const { return soplex_->nCols(); } int OsiSpxSolverInterface::getNumRows() const { return soplex_->nRows(); } int OsiSpxSolverInterface::getNumElements() const { #if 0 return soplex_->nNzos(); #else int retVal = 0; int nrows = getNumRows(); int row; for (row = 0; row < nrows; ++row) { const soplex::SVector &rowvec = soplex_->rowVector(row); retVal += rowvec.size(); } return retVal; #endif } //------------------------------------------------------------------ // Get pointer to rim vectors //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getColLower() const { const double *retVal = NULL; if (getNumCols() != 0) retVal = soplex_->lower().get_const_ptr(); return retVal; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getColUpper() const { const double *retVal = NULL; if (getNumCols() != 0) retVal = soplex_->upper().get_const_ptr(); return retVal; } //------------------------------------------------------------------ const char *OsiSpxSolverInterface::getRowSense() const { if (rowsense_ == NULL) { // rowsense is determined with rhs, so invoke rhs getRightHandSide(); assert(rowsense_ != NULL || getNumRows() == 0); } return rowsense_; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRightHandSide() const { if (rhs_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { int row; assert(rowrange_ == NULL); assert(rowsense_ == NULL); rhs_ = new double[nrows]; rowrange_ = new double[nrows]; rowsense_ = new char[nrows]; for (row = 0; row < nrows; ++row) convertBoundToSense(soplex_->lhs(row), soplex_->rhs(row), rowsense_[row], rhs_[row], rowrange_[row]); } } return rhs_; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRowRange() const { if (rowrange_ == NULL) { // rowrange is determined with rhs, so invoke rhs getRightHandSide(); assert(rowrange_ != NULL || getNumRows() == 0); } return rowrange_; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRowLower() const { const double *retVal = NULL; if (getNumRows() != 0) retVal = soplex_->lhs().get_const_ptr(); return retVal; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRowUpper() const { const double *retVal = NULL; if (getNumRows() != 0) retVal = soplex_->rhs().get_const_ptr(); return retVal; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getObjCoefficients() const { const double *retVal = NULL; if (obj_ == NULL) { if (getNumCols() != 0) { obj_ = new soplex::DVector(getNumCols()); soplex_->getObj(*obj_); retVal = obj_->get_const_ptr(); } } else { retVal = obj_->get_const_ptr(); } return retVal; } //------------------------------------------------------------------ double OsiSpxSolverInterface::getObjSense() const { switch (soplex_->spxSense()) { case soplex::SPxLP::MINIMIZE: return +1.0; case soplex::SPxLP::MAXIMIZE: return -1.0; default: throwSPXerror("invalid optimization sense", "getObjSense"); return 0.0; } } //------------------------------------------------------------------ // Return information on integrality //------------------------------------------------------------------ bool OsiSpxSolverInterface::isContinuous(int colNumber) const { #if SOPLEX_VERSION >= 300 return (spxintvars_->pos(colNumber) < 0); #else return (spxintvars_->number(colNumber) < 0); #endif } //------------------------------------------------------------------ // Row and column copies of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix *OsiSpxSolverInterface::getMatrixByRow() const { if (matrixByRow_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); int nelems = getNumElements(); double *elements = new double[nelems]; int *indices = new int[nelems]; int *starts = new int[nrows + 1]; int *len = new int[nrows]; int row, i, elem; elem = 0; for (row = 0; row < nrows; ++row) { const soplex::SVector &rowvec = soplex_->rowVector(row); starts[row] = elem; len[row] = rowvec.size(); for (i = 0; i < len[row]; ++i, ++elem) { assert(elem < nelems); elements[elem] = rowvec.value(i); indices[elem] = rowvec.index(i); } } starts[nrows] = elem; assert(elem == nelems); matrixByRow_ = new CoinPackedMatrix(); matrixByRow_->assignMatrix(false /* not column ordered */, ncols, nrows, nelems, elements, indices, starts, len); } return matrixByRow_; } //------------------------------------------------------------------ const CoinPackedMatrix *OsiSpxSolverInterface::getMatrixByCol() const { if (matrixByCol_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); int nelems = getNumElements(); double *elements = new double[nelems]; int *indices = new int[nelems]; int *starts = new int[ncols + 1]; int *len = new int[ncols]; int col, i, elem; elem = 0; for (col = 0; col < ncols; ++col) { const soplex::SVector &colvec = soplex_->colVector(col); starts[col] = elem; len[col] = colvec.size(); for (i = 0; i < len[col]; ++i, ++elem) { assert(elem < nelems); elements[elem] = colvec.value(i); indices[elem] = colvec.index(i); } } starts[ncols] = elem; assert(elem == nelems); matrixByCol_ = new CoinPackedMatrix(); matrixByCol_->assignMatrix(true /* column ordered */, nrows, ncols, nelems, elements, indices, starts, len); } return matrixByCol_; } //------------------------------------------------------------------ // Get solver's value for infinity //------------------------------------------------------------------ double OsiSpxSolverInterface::getInfinity() const { return soplex::infinity; } //############################################################################# // Problem information methods (results) //############################################################################# // *FIXME*: what should be done if a certain vector doesn't exist??? const double *OsiSpxSolverInterface::getColSolution() const { if (colsol_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { colsol_ = new soplex::DVector(ncols); if (isProvenOptimal()) soplex_->getPrimal(*colsol_); else *colsol_ = soplex_->lower(); } else return NULL; } return colsol_->get_const_ptr(); } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRowPrice() const { if (rowsol_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowsol_ = new soplex::DVector(nrows); if (isProvenOptimal()) soplex_->getDual(*rowsol_); else rowsol_->clear(); } else return NULL; } return rowsol_->get_const_ptr(); } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getReducedCost() const { if (redcost_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { redcost_ = new soplex::DVector(ncols); if (isProvenOptimal()) soplex_->getRedCost(*redcost_); else redcost_->clear(); } else return NULL; } return redcost_->get_const_ptr(); } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRowActivity() const { if (rowact_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowact_ = new soplex::DVector(nrows); if (isProvenOptimal()) soplex_->getSlacks(*rowact_); else rowact_->clear(); } else return NULL; } return rowact_->get_const_ptr(); } //------------------------------------------------------------------ double OsiSpxSolverInterface::getObjValue() const { double objval; switch (soplex_->status()) { case soplex::SPxSolver::OPTIMAL: case soplex::SPxSolver::UNBOUNDED: case soplex::SPxSolver::INFEASIBLE: objval = soplex_->objValue(); break; default: { const double *colsol = getColSolution(); const double *objcoef = getObjCoefficients(); int ncols = getNumCols(); objval = 0.0; for (int i = 0; i < ncols; ++i) objval += colsol[i] * objcoef[i]; break; } } // Adjust objective function value by constant term in objective function double objOffset; getDblParam(OsiObjOffset, objOffset); objval = objval - objOffset; return objval; } //------------------------------------------------------------------ int OsiSpxSolverInterface::getIterationCount() const { return soplex_->iteration(); } //------------------------------------------------------------------ std::vector< double * > OsiSpxSolverInterface::getDualRays(int maxNumRays, bool fullRay) const { if (fullRay == true) { throw CoinError("Full dual rays not yet implemented.", "getDualRays", "OsiSpxSolverInterface"); } std::vector< double * > ret = std::vector< double * >(); if (soplex_->status() == soplex::SPxSolver::INFEASIBLE && maxNumRays > 0) { ret.push_back(new double[getNumRows()]); soplex::Vector proof(getNumRows(), ret[0]); soplex_->getDualfarkas(proof); for (int i = 0; i < getNumRows(); ++i) ret[0][i] *= -1.0; } return ret; } //------------------------------------------------------------------ std::vector< double * > OsiSpxSolverInterface::getPrimalRays(int maxNumRays) const { // *FIXME* : must write the method throw CoinError("method is not yet written", "getPrimalRays", "OsiSpxSolverInterface"); return std::vector< double * >(); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# void OsiSpxSolverInterface::setObjCoeff(int elementIndex, double elementValue) { soplex_->changeObj(elementIndex, elementValue); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } void OsiSpxSolverInterface::setColLower(int elementIndex, double elementValue) { soplex_->changeLower(elementIndex, elementValue); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setColUpper(int elementIndex, double elementValue) { soplex_->changeUpper(elementIndex, elementValue); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setColBounds(int elementIndex, double lower, double upper) { soplex_->changeBounds(elementIndex, lower, upper); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowLower(int i, double elementValue) { soplex_->changeLhs(i, elementValue); freeCachedData(OsiSpxSolverInterface::FREECACHED_ROW); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowUpper(int i, double elementValue) { soplex_->changeRhs(i, elementValue); freeCachedData(OsiSpxSolverInterface::FREECACHED_ROW); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowBounds(int elementIndex, double lower, double upper) { soplex_->changeRange(elementIndex, lower, upper); freeCachedData(OsiSpxSolverInterface::FREECACHED_ROW); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowType(int i, char sense, double rightHandSide, double range) { double lower = 0.0; double upper = 0.0; convertSenseToBound(sense, rightHandSide, range, lower, upper); setRowBounds(i, lower, upper); } //############################################################################# void OsiSpxSolverInterface::setContinuous(int index) { #if SOPLEX_VERSION >= 300 int pos = spxintvars_->pos(index); #else int pos = spxintvars_->number(index); #endif if (pos >= 0) { spxintvars_->remove(pos); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setInteger(int index) { #if SOPLEX_VERSION >= 300 int pos = spxintvars_->pos(index); #else int pos = spxintvars_->number(index); #endif if (pos < 0) { spxintvars_->addIdx(index); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } } //############################################################################# void OsiSpxSolverInterface::setObjSense(double s) { if (s != getObjSense()) { if (s == +1.0) soplex_->changeSense(soplex::SPxLP::MINIMIZE); else soplex_->changeSense(soplex::SPxLP::MAXIMIZE); freeCachedData(OsiSpxSolverInterface::FREECACHED_RESULTS); } } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setColSolution(const double *cs) { int col; int ncols = getNumCols(); if (colsol_ != NULL) delete colsol_; if (ncols > 0 && cs != NULL) { colsol_ = new soplex::DVector(ncols); for (col = 0; col < ncols; ++col) (*colsol_)[col] = cs[col]; } else colsol_ = NULL; } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowPrice(const double *rs) { int row; int nrows = getNumRows(); if (rowsol_ != NULL) delete rowsol_; if (nrows > 0 && rs != NULL) { rowsol_ = new soplex::DVector(nrows); for (row = 0; row < nrows; ++row) (*rowsol_)[row] = rs[row]; } else rowsol_ = NULL; } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiSpxSolverInterface::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) { soplex::DSVector colvec; colvec.add(vec.getNumElements(), vec.getIndices(), vec.getElements()); soplex_->addCol(soplex::LPCol(obj, colvec, colub, collb)); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_ROW); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::deleteCols(const int num, const int *columnIndices) { soplex_->removeCols(const_cast< int * >(columnIndices), num); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_ROW); // took from OsiClp for updating names int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (num && nameDiscipline) { // Very clumsy (and inefficient) - need to sort and then go backwards in ? chunks int *indices = CoinCopyOfArray(columnIndices, num); std::sort(indices, indices + num); int num2 = num; while (num2) { int next = indices[num2 - 1]; int firstDelete = num2 - 1; int i; for (i = num2 - 2; i >= 0; --i) { if (indices[i] + 1 == next) { --next; firstDelete = i; } else { break; } } OsiSolverInterface::deleteColNames(indices[firstDelete], num2 - firstDelete); num2 = firstDelete; assert(num2 >= 0); } delete[] indices; } } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) { soplex::DSVector rowvec; rowvec.add(vec.getNumElements(), vec.getIndices(), vec.getElements()); soplex_->addRow(soplex::LPRow(rowlb, rowvec, rowub)); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_COLUMN); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) { double rowlb = 0.0; double rowub = 0.0; convertSenseToBound(rowsen, rowrhs, rowrng, rowlb, rowub); addRow(vec, rowlb, rowub); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::deleteRows(const int num, const int *rowIndices) { soplex_->removeRows(const_cast< int * >(rowIndices), num); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_COLUMN); // took from OsiClp for updating names int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (num && nameDiscipline) { // Very clumsy (and inefficient) - need to sort and then go backwards in ? chunks int *indices = CoinCopyOfArray(rowIndices, num); std::sort(indices, indices + num); int num2 = num; while (num2) { int next = indices[num2 - 1]; int firstDelete = num2 - 1; int i; for (i = num2 - 2; i >= 0; --i) { if (indices[i] + 1 == next) { --next; firstDelete = i; } else { break; } } OsiSolverInterface::deleteRowNames(indices[firstDelete], num2 - firstDelete); num2 = firstDelete; assert(num2 >= 0); } delete[] indices; } } //############################################################################# // Methods to input a problem //############################################################################# void OsiSpxSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { int ncols = matrix.getNumCols(); int nrows = matrix.getNumRows(); const int *length = matrix.getVectorLengths(); const int *start = matrix.getVectorStarts(); const double *elem = matrix.getElements(); const int *index = matrix.getIndices(); double *thecollb, *thecolub, *theobj, *therowlb, *therowub; // create defaults if parameter is NULL if (collb == NULL) { thecollb = new double[ncols]; CoinFillN(thecollb, ncols, 0.0); } else thecollb = const_cast< double * >(collb); if (colub == NULL) { thecolub = new double[ncols]; CoinFillN(thecolub, ncols, getInfinity()); } else thecolub = const_cast< double * >(colub); if (obj == NULL) { theobj = new double[ncols]; CoinFillN(theobj, ncols, 0.0); } else theobj = const_cast< double * >(obj); if (rowlb == NULL) { therowlb = new double[nrows]; CoinFillN(therowlb, nrows, -getInfinity()); } else therowlb = const_cast< double * >(rowlb); if (rowub == NULL) { therowub = new double[nrows]; CoinFillN(therowub, nrows, +getInfinity()); } else therowub = const_cast< double * >(rowub); // copy problem into soplex_ soplex_->clear(); spxintvars_->clear(); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_NONE); if (matrix.isColOrdered()) { int row, col, pos; soplex::LPRowSet rowset(nrows, 0); soplex::DSVector rowvec; soplex::LPColSet colset(ncols, matrix.getNumElements()); soplex::DSVector colvec; /* insert empty rows */ rowvec.clear(); for (row = 0; row < nrows; ++row) rowset.add(therowlb[row], rowvec, therowub[row]); soplex_->addRows(rowset); /* create columns */ for (col = 0; col < ncols; ++col) { pos = start[col]; colvec.clear(); colvec.add(length[col], &(index[pos]), &(elem[pos])); colset.add(theobj[col], thecollb[col], colvec, thecolub[col]); } soplex_->addCols(colset); // soplex_->changeRange( soplex::Vector( nrows, therowlb ), soplex::Vector( nrows, therowub ) ); } else { int row, col, pos; soplex::LPRowSet rowset(nrows, matrix.getNumElements()); soplex::DSVector rowvec; soplex::LPColSet colset(ncols, 0); soplex::DSVector colvec; /* insert empty columns */ colvec.clear(); for (col = 0; col < ncols; ++col) colset.add(theobj[col], thecollb[col], colvec, thecolub[col]); soplex_->addCols(colset); /* create rows */ for (row = 0; row < nrows; ++row) { pos = start[row]; rowvec.clear(); rowvec.add(length[row], &(index[pos]), &(elem[pos])); rowset.add(therowlb[row], rowvec, therowub[row]); } soplex_->addRows(rowset); // soplex_->changeObj( soplex::Vector( ncols, theobj ) ); // soplex_->changeBounds( soplex::Vector( ncols, thecollb ), soplex::Vector( ncols, thecolub ) ); } // switch sense to minimization problem soplex_->changeSense(soplex::SPxSolver::MINIMIZE); // delete default arrays if neccessary if (collb == NULL) delete[] thecollb; if (colub == NULL) delete[] thecolub; if (obj == NULL) delete[] theobj; if (rowlb == NULL) delete[] therowlb; if (rowub == NULL) delete[] therowub; } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) { loadProblem(*matrix, collb, colub, obj, rowlb, rowub); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowlb; rowlb = 0; delete[] rowub; rowub = 0; } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { int nrows = matrix.getNumRows(); double *rowlb = new double[nrows]; double *rowub = new double[nrows]; int row; char *therowsen; double *therowrhs, *therowrng; if (rowsen == NULL) { therowsen = new char[nrows]; CoinFillN(therowsen, nrows, 'G'); } else therowsen = const_cast< char * >(rowsen); if (rowrhs == NULL) { therowrhs = new double[nrows]; CoinFillN(therowrhs, nrows, 0.0); } else therowrhs = const_cast< double * >(rowrhs); if (rowrng == NULL) { therowrng = new double[nrows]; CoinFillN(therowrng, nrows, 0.0); } else therowrng = const_cast< double * >(rowrng); for (row = 0; row < nrows; ++row) convertSenseToBound(therowsen[row], therowrhs[row], therowrng[row], rowlb[row], rowub[row]); loadProblem(matrix, collb, colub, obj, rowlb, rowub); if (rowsen == NULL) delete[] therowsen; if (rowrhs == NULL) delete[] therowrhs; if (rowrng == NULL) delete[] therowrng; delete[] rowlb; delete[] rowub; } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) { loadProblem(*matrix, collb, colub, obj, rowsen, rowrhs, rowrng); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowsen; rowsen = 0; delete[] rowrhs; rowrhs = 0; delete[] rowrng; rowrng = 0; } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { int col, pos; soplex::LPColSet colset(numcols, start[numcols]); soplex::DSVector colvec; soplex_->clear(); spxintvars_->clear(); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_NONE); for (col = 0; col < numcols; ++col) { pos = start[col]; colvec.clear(); colvec.add(start[col + 1] - pos, &(index[pos]), &(value[pos])); colset.add(obj[col], collb[col], colvec, colub[col]); } soplex_->addCols(colset); soplex_->changeRange(soplex::Vector(numrows, const_cast< double * >(rowlb)), soplex::Vector(numrows, const_cast< double * >(rowub))); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { double *rowlb = new double[numrows]; double *rowub = new double[numrows]; int row; for (row = 0; row < numrows; ++row) convertSenseToBound(rowsen != NULL ? rowsen[row] : 'G', rowrhs != NULL ? rowrhs[row] : 0.0, rowrng != NULL ? rowrng[row] : 0.0, rowlb[row], rowub[row]); loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowlb, rowub); delete[] rowlb; delete[] rowub; } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- int OsiSpxSolverInterface::readMps(const char *filename, const char *extension) { #if 0 std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; std::ifstream file(fullname.c_str()); if (!file.good()) { std::cerr << "Error opening file " << fullname << " for reading!" << std::endl; return 1; } soplex_->clear(); if( !soplex_->readMPS(file, NULL, NULL, NULL) ) throwSPXerror( "error reading file <" + fullname + ">", "readMps" ); #endif // we preserve the objective sense independent of the problem which is read soplex::SPxLP::SPxSense objsen = soplex_->spxSense(); int retval = OsiSolverInterface::readMps(filename, extension); soplex_->changeSense(objsen); return retval; } //----------------------------------------------------------------------------- // Write mps files //----------------------------------------------------------------------------- void OsiSpxSolverInterface::writeMps(const char *filename, const char *extension, double objSense) const { std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; std::ofstream file(fullname.c_str()); if (!file.good()) { std::cerr << "Error opening file " << fullname << " for writing!" << std::endl; return; } soplex::DIdxSet integers(getNumIntegers()); for (int i = 0; i < getNumCols(); ++i) if (isInteger(i)) integers.addIdx(i); soplex_->writeMPS(file, NULL, NULL, &integers); } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiSpxSolverInterface::OsiSpxSolverInterface() : OsiSolverInterface() , #if SOPLEX_VERSION >= 220 spxout_(new soplex::SPxOut) , soplex_(new soplex::SoPlex(*spxout_, soplex::SPxSolver::ENTER, soplex::SPxSolver::COLUMN)) , // default is primal simplex algorithm #else spxout_(NULL) , soplex_(new soplex::SoPlex(soplex::SPxSolver::ENTER, soplex::SPxSolver::COLUMN)) , // default is primal simplex algorithm #endif spxintvars_(new soplex::DIdxSet()) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(1000000) , // ??? default iteration limit for strong branching is large obj_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) { #if SOPLEX_VERSION >= 220 #ifndef NDEBUG spxout_->setVerbosity(soplex::SPxOut::INFO1); #else spxout_->setVerbosity(soplex::SPxOut::DEBUG); #endif #else #ifndef NDEBUG soplex::Param::setVerbose(3); #else soplex::Param::setVerbose(2); #endif #endif // SoPlex default objective sense is maximization, thus we explicitly set it to minimization soplex_->changeSense(soplex::SPxLP::MINIMIZE); } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiSolverInterface *OsiSpxSolverInterface::clone(bool copyData) const { return (new OsiSpxSolverInterface(*this)); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiSpxSolverInterface::OsiSpxSolverInterface(const OsiSpxSolverInterface &source) : OsiSolverInterface(source) , soplex_(new soplex::SoPlex(*source.soplex_)) , spxintvars_(new soplex::DIdxSet(*source.spxintvars_)) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(source.hotStartMaxIteration_) , obj_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) { if (source.colsol_ != NULL) setColSolution(source.getColSolution()); if (source.rowsol_ != NULL) setRowPrice(source.getRowPrice()); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiSpxSolverInterface::~OsiSpxSolverInterface() { freeAllMemory(); } //------------------------------------------------------------------- // SPX specific public interfaces //------------------------------------------------------------------- soplex::SoPlex *OsiSpxSolverInterface::getLpPtr(int keepCached) { freeCachedData(keepCached); return soplex_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiSpxSolverInterface &OsiSpxSolverInterface::operator=(const OsiSpxSolverInterface &source) { if (this != &source) { freeAllMemory(); OsiSolverInterface::operator=(source); spxintvars_ = new soplex::DIdxSet(*source.spxintvars_); soplex_ = new soplex::SoPlex(*source.soplex_); if (source.colsol_ != NULL) setColSolution(source.getColSolution()); if (source.rowsol_ != NULL) setRowPrice(source.getRowPrice()); hotStartMaxIteration_ = source.hotStartMaxIteration_; } return *this; } //############################################################################# // Applying cuts //############################################################################# void OsiSpxSolverInterface::applyColCut(const OsiColCut &cc) { const double *soplexColLB = getColLower(); const double *soplexColUB = getColUpper(); const CoinPackedVector &lbs = cc.lbs(); const CoinPackedVector &ubs = cc.ubs(); int i; for (i = 0; i < lbs.getNumElements(); ++i) if (lbs.getElements()[i] > soplexColLB[lbs.getIndices()[i]]) setColLower(lbs.getIndices()[i], lbs.getElements()[i]); for (i = 0; i < ubs.getNumElements(); ++i) if (ubs.getElements()[i] < soplexColUB[ubs.getIndices()[i]]) setColUpper(ubs.getIndices()[i], ubs.getElements()[i]); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::applyRowCut(const OsiRowCut &rowCut) { addRow(rowCut.row(), rowCut.lb(), rowCut.ub()); } //############################################################################# // Private methods (non-static and static) //############################################################################# //------------------------------------------------------------------- /// free cached vectors void OsiSpxSolverInterface::freeCachedColRim() { delete obj_; obj_ = NULL; } void OsiSpxSolverInterface::freeCachedRowRim() { freeCacheChar(rowsense_); freeCacheDouble(rhs_); freeCacheDouble(rowrange_); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); } void OsiSpxSolverInterface::freeCachedMatrix() { freeCacheMatrix(matrixByRow_); freeCacheMatrix(matrixByCol_); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); } void OsiSpxSolverInterface::freeCachedResults() { delete colsol_; delete rowsol_; delete redcost_; delete rowact_; colsol_ = NULL; rowsol_ = NULL; redcost_ = NULL; rowact_ = NULL; } void OsiSpxSolverInterface::freeCachedData(int keepCached) { if (!(keepCached & OsiSpxSolverInterface::KEEPCACHED_COLUMN)) freeCachedColRim(); if (!(keepCached & OsiSpxSolverInterface::KEEPCACHED_ROW)) freeCachedRowRim(); if (!(keepCached & OsiSpxSolverInterface::KEEPCACHED_MATRIX)) freeCachedMatrix(); if (!(keepCached & OsiSpxSolverInterface::KEEPCACHED_RESULTS)) freeCachedResults(); } void OsiSpxSolverInterface::freeAllMemory() { freeCachedData(); delete[] reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartCStat_); delete[] reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartRStat_); hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; delete soplex_; #if SOPLEX_VERSION >= 220 delete spxout_; #endif delete spxintvars_; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ Vol-1.5.4/Osi/src/OsiSpx/Makefile.in0000644000175000017500000005514113200225426016130 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/OsiSpx DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiSpx_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la am_libOsiSpx_la_OBJECTS = OsiSpxSolverInterface.lo libOsiSpx_la_OBJECTS = $(am_libOsiSpx_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiSpx_la_SOURCES) DIST_SOURCES = $(libOsiSpx_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiSpx # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiSpx.la # List all source files for this library, including headers libOsiSpx_la_SOURCES = OsiSpxSolverInterface.cpp OsiSpxSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiSpx_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la # This is for libtool libOsiSpx_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) $(SOPLEX_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiSpxSolverInterface.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiSpx/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiSpx/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiSpx.la: $(libOsiSpx_la_OBJECTS) $(libOsiSpx_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiSpx_la_LDFLAGS) $(libOsiSpx_la_OBJECTS) $(libOsiSpx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSpxSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Osi/src/OsiSpx/osi-soplex.pc.in0000644000175000017500000000051211564020404017106 0ustar sudipsudipprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiSoplex Description: COIN-OR Open Solver Interface for SoPlex URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiSpx @OSISPXLIB_PCLIBS@ Cflags: -I${includedir} Requires: osi @OSISPXLIB_PCREQUIRES@ Vol-1.5.4/Osi/src/OsiSpx/Makefile.am0000644000175000017500000000317413200225426016116 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 2111 2017-11-07 03:40:06Z tkr $ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiSpx # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiSpx.la # List all source files for this library, including headers libOsiSpx_la_SOURCES = OsiSpxSolverInterface.cpp OsiSpxSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiSpx_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la endif # This is for libtool libOsiSpx_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) $(SOPLEX_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiSpxSolverInterface.hpp Vol-1.5.4/Osi/src/OsiSpx/osi-soplex-uninstalled.pc.in0000644000175000017500000000046311573154674021454 0ustar sudipsudipprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiSpx Name: OsiSoplex Description: COIN-OR Open Solver Interface for SoPlex URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiSpx.la @OSISPXLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src/OsiSpx Requires: osi @OSISPXLIB_PCREQUIRES@ Vol-1.5.4/Osi/Makefile.in0000644000175000017500000011454112504703233014117 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @COIN_HAS_CPX_TRUE@am__append_1 = src/OsiCpx @COIN_HAS_CPX_TRUE@am__append_2 = osi-cplex.pc @COIN_HAS_GLPK_TRUE@am__append_3 = src/OsiGlpk @COIN_HAS_GLPK_TRUE@am__append_4 = osi-glpk.pc @COIN_HAS_MSK_TRUE@am__append_5 = src/OsiMsk @COIN_HAS_MSK_TRUE@am__append_6 = osi-mosek.pc @COIN_HAS_XPR_TRUE@am__append_7 = src/OsiXpr @COIN_HAS_XPR_TRUE@am__append_8 = osi-xpress.pc @COIN_HAS_GRB_TRUE@am__append_9 = src/OsiGrb @COIN_HAS_GRB_TRUE@am__append_10 = osi-gurobi.pc @COIN_HAS_SOPLEX_TRUE@am__append_11 = src/OsiSpx @COIN_HAS_SOPLEX_TRUE@am__append_12 = osi-soplex.pc # We don't want to compile the test subdirectory, unless the test target is # specified. But we need to list it as subdirectory to make sure that it is # included in the tarball @ALWAYS_FALSE@am__append_13 = test DIST_COMMON = README $(am__configure_deps) \ $(srcdir)/BuildTools/Makemain.inc $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/osi-uninstalled.pc.in \ $(srcdir)/osi-unittests-uninstalled.pc.in \ $(srcdir)/osi-unittests.pc.in $(srcdir)/osi.pc.in \ $(top_srcdir)/configure $(top_srcdir)/doxydoc/doxygen.conf.in \ $(top_srcdir)/examples/Makefile.in \ $(top_srcdir)/src/OsiCpx/osi-cplex-uninstalled.pc.in \ $(top_srcdir)/src/OsiCpx/osi-cplex.pc.in \ $(top_srcdir)/src/OsiGlpk/osi-glpk-uninstalled.pc.in \ $(top_srcdir)/src/OsiGlpk/osi-glpk.pc.in \ $(top_srcdir)/src/OsiGrb/osi-gurobi-uninstalled.pc.in \ $(top_srcdir)/src/OsiGrb/osi-gurobi.pc.in \ $(top_srcdir)/src/OsiMsk/osi-mosek-uninstalled.pc.in \ $(top_srcdir)/src/OsiMsk/osi-mosek.pc.in \ $(top_srcdir)/src/OsiSpx/osi-soplex-uninstalled.pc.in \ $(top_srcdir)/src/OsiSpx/osi-soplex.pc.in \ $(top_srcdir)/src/OsiXpr/osi-xpress-uninstalled.pc.in \ $(top_srcdir)/src/OsiXpr/osi-xpress.pc.in AUTHORS config.guess \ config.sub depcomp install-sh ltmain.sh missing @HAVE_EXTERNALS_TRUE@am__append_14 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_15 = .Dependencies-stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = examples/Makefile osi.pc osi-uninstalled.pc \ osi-unittests.pc osi-unittests-uninstalled.pc osi-cplex.pc \ osi-cplex-uninstalled.pc osi-glpk.pc osi-glpk-uninstalled.pc \ osi-gurobi.pc osi-gurobi-uninstalled.pc osi-mosek.pc \ osi-mosek-uninstalled.pc osi-xpress.pc \ osi-xpress-uninstalled.pc osi-soplex.pc \ osi-soplex-uninstalled.pc doxydoc/doxygen.conf SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(pkgconfiglibdir)" pkgconfiglibDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfiglib_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = src/Osi src/OsiCommonTest src/OsiCpx src/OsiGlpk \ src/OsiMsk src/OsiXpr src/OsiGrb src/OsiSpx test DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories and installation of .pc files # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = osi.pc osi-unittests.pc $(am__append_2) \ $(am__append_4) $(am__append_6) $(am__append_8) \ $(am__append_10) $(am__append_12) SUBDIRS = src/Osi src/OsiCommonTest $(am__append_1) $(am__append_3) \ $(am__append_5) $(am__append_7) $(am__append_9) \ $(am__append_11) $(am__append_13) ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = examples/basic2.cpp examples/basic.cpp examples/build.cpp \ examples/Makefile.in examples/parameters.cpp \ examples/query.cpp examples/README examples/specific.cpp \ $(am__append_14) ######################################################################## # Installation of the addlibs file # ######################################################################## addlibsdir = $(DESTDIR)$(datadir)/coin/doc/Osi ######################################################################## # Maintainer Stuff # ######################################################################## CLEANFILES = # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = $(am__append_15) $(VPATH_DISTCLEANFILES) DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/BuildTools/Makemain.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) examples/Makefile: $(top_builddir)/config.status $(top_srcdir)/examples/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi.pc: $(top_builddir)/config.status $(srcdir)/osi.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/osi-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-unittests.pc: $(top_builddir)/config.status $(srcdir)/osi-unittests.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-unittests-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/osi-unittests-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-cplex.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiCpx/osi-cplex.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-cplex-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiCpx/osi-cplex-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-glpk.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiGlpk/osi-glpk.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-glpk-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiGlpk/osi-glpk-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-gurobi.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiGrb/osi-gurobi.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-gurobi-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiGrb/osi-gurobi-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-mosek.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiMsk/osi-mosek.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-mosek-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiMsk/osi-mosek-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-xpress.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiXpr/osi-xpress.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-xpress-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiXpr/osi-xpress-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-soplex.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiSpx/osi-soplex.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-soplex-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiSpx/osi-soplex-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ doxydoc/doxygen.conf: $(top_builddir)/config.status $(top_srcdir)/doxydoc/doxygen.conf.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-pkgconfiglibDATA: $(pkgconfiglib_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfiglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfiglibdir)" @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkgconfiglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ $(pkgconfiglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done uninstall-pkgconfiglibDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/. $(distdir)/BuildTools $(distdir)/doxydoc $(distdir)/examples $(distdir)/src/OsiCpx $(distdir)/src/OsiGlpk $(distdir)/src/OsiGrb $(distdir)/src/OsiMsk $(distdir)/src/OsiSpx $(distdir)/src/OsiXpr @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfiglibdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-pkgconfiglibDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-exec-am: install-exec-local install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-local \ uninstall-pkgconfiglibDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-libtool clean-local \ clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-libtool distclean-local \ distclean-recursive distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-exec install-exec-am \ install-exec-local install-info install-info-am install-man \ install-pkgconfiglibDATA install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-generic mostlyclean-libtool \ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-hook uninstall-info-am \ uninstall-local uninstall-pkgconfiglibDATA ######################################################################## # Extra Targets # ######################################################################## test: all cd test; $(MAKE) test unitTest: test # Doxygen documentation doxydoc: doxygen doxydoc/doxygen.conf clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) clean-local: clean-doxydoc if test -r test/Makefile; then cd test; $(MAKE) clean; fi distclean-local: if test -r test/Makefile; then cd test; $(MAKE) distclean; fi install-exec-local: install-doc uninstall-local: uninstall-doc .PHONY: test unitTest doxydoc install-data-hook: @$(mkdir_p) "$(addlibsdir)" @COIN_HAS_PKGCONFIG_TRUE@ PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \ @COIN_HAS_PKGCONFIG_TRUE@ $(PKG_CONFIG) --libs osi > $(addlibsdir)/osi_addlibs.txt @COIN_CXX_IS_CL_TRUE@@COIN_HAS_PKGCONFIG_FALSE@ echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libOsi.lib @OSILIB_LIBS_INSTALLED@" > $(addlibsdir)/osi_addlibs.txt @COIN_CXX_IS_CL_FALSE@@COIN_HAS_PKGCONFIG_FALSE@ echo -L@abs_lib_dir@ -lOsi @OSILIB_LIBS_INSTALLED@ > $(addlibsdir)/osi_addlibs.txt uninstall-hook: rm -f $(addlibsdir)/osi_addlibs.txt doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## # Make sure acinclude is using most recent coin.m4 @MAINTAINER_MODE_TRUE@$(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 @MAINTAINER_MODE_TRUE@ cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date @MAINTAINER_MODE_TRUE@$(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh @MAINTAINER_MODE_TRUE@ cp $< $@ # Take care of updating externals (if Dependencies file exists) @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@$(top_builddir)/Makefile: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@.Dependencies-stamp: $(srcdir)/Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); BuildTools/set_externals Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ touch .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@update-externals: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); svn update .PHONY: install-doc uninstall-doc update-externals # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Osi/configure.ac0000644000175000017500000002056113434065666014354 0ustar sudipsudip# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 2213 2019-02-22 21:37:58Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([Osi],[0.108.0],[osi@list.coin-or.org]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License.]) # List one file in the package so that the configure script can test # whether the package is actually there AC_CONFIG_SRCDIR(src/Osi/OsiAuxInfo.cpp) # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) ############################################################################# # Standard build tool stuff # ############################################################################# # Get the system type AC_CANONICAL_BUILD # A bit of initial setup AC_COIN_PROJECTDIR_INIT(Osi,14:0:13) # Check if user wants to produce debugging code AC_COIN_DEBUG_COMPILE(Osi) # Get the name of the C++ compiler and appropriate compiler options AC_COIN_PROG_CXX # Initialize automake and libtool AC_COIN_INIT_AUTO_TOOLS ############################################################################# # COIN-OR components # ############################################################################# AC_COIN_CHECK_PACKAGE(CoinUtils, [coinutils], [OsiLib]) if test $coin_has_coinutils != yes ; then AC_MSG_ERROR([Required package CoinUtils not available.]) fi AC_COIN_CHECK_PACKAGE(Glpk, [coinglpk], [OsiGlpkLib]) AC_COIN_CHECK_PACKAGE(SoPlex, [coinsoplex < 1.7],[OsiSpxLib]) AC_COIN_CHECK_PACKAGE(Sample, [coindatasample]) AC_COIN_CHECK_PACKAGE(Netlib, [coindatanetlib]) ############################################################################# # Third party solvers # ############################################################################# # Check which third party solvers are available. Cplex detection has been # tested on a semi-regular basis, and Mosek detection most likely works. For # the rest, it's anyone's guess. -- lh, 080529 -- # fixed detection of Mosek and Xpress -- stefan, 091003 (linux32, gcc) -- AC_COIN_CHECK_USER_LIBRARY([Cplex], [CPX],[cplex.h], [CPXgetstat]) AC_COIN_CHECK_USER_LIBRARY([Mosek], [MSK],[mosek.h], [MSK_makeenv]) AC_COIN_CHECK_USER_LIBRARY([Xpress],[XPR],[xprs.h], [XPRSinit]) AC_COIN_CHECK_USER_LIBRARY([Gurobi],[GRB],[gurobi_c.h],[GRBloadenv]) ############################################################################# # Examples solver # ############################################################################# # choose a solver interface that can be used in the examples if test $coin_has_glpk = yes ; then OSI_EXAMPLES_SOLVER_NAME=OsiGlpkSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="$GLPK_CFLAGS" OSI_EXAMPLES_SOLVER_LIBS="-lOsiGlpk $GLPK_LIBS_INSTALLED" OSI_EXAMPLES_SOLVER_PCNAME=osi-glpk elif test $coin_has_cpx = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiCpxSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$CPXINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiCpx $CPXLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-cplex elif test $coin_has_grb = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiGrbSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$GRBINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiGrb $GRBLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-gurobi elif test $coin_has_msk = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiMskSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$MSKINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiMsk $MSKLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-mosek elif test $coin_has_xpr = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiXprSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$XPRINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiXpr $XPRLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-xpress elif test $coin_has_soplex = yes ; then OSI_EXAMPLES_SOLVER_NAME=OsiSpxSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="$SOPLEX_CFLAGS" OSI_EXAMPLES_SOLVER_LIBS="-lOsiSpx $SOPLEX_LIBS_INSTALLED" OSI_EXAMPLES_SOLVER_PCNAME=osi-soplex else AC_MSG_WARN([No solver available, examples will not work.]) fi # adjust linker flags for (i)cl compiler if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then [OSI_EXAMPLES_SOLVER_LIBS=`echo " $OSI_EXAMPLES_SOLVER_LIBS" | sed -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'`] fi AC_SUBST(OSI_EXAMPLES_SOLVER_NAME) AC_SUBST(OSI_EXAMPLES_SOLVER_CFLAGS) AC_SUBST(OSI_EXAMPLES_SOLVER_LIBS) AC_SUBST(OSI_EXAMPLES_SOLVER_PCNAME) ############################################################################# # Configuration options for individual OSIs # ############################################################################# # If any of the tests performed in this section actually require the presence # of the solver (file presence, link checks, etc.) be sure to guard the call. # We assume that GLPK is not too old AC_DEFINE(GLPK_HAS_INTOPT, [1], [Define to 1 if GLPK has the advanced B&B solver lpx_intopt]) ############################################################################# # Check for doxygen # ############################################################################# AC_COIN_DOXYGEN(CoinUtils) ############################################################################# # System header # ############################################################################# AC_COIN_CHECK_CXX_CHEADER(math) AC_COIN_CHECK_CXX_CHEADER(float) AC_COIN_CHECK_CXX_CHEADER(ieeefp) ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) AC_CONFIG_FILES([Makefile examples/Makefile src/Osi/Makefile src/OsiCpx/Makefile src/OsiGlpk/Makefile src/OsiMsk/Makefile src/OsiXpr/Makefile src/OsiGrb/Makefile src/OsiSpx/Makefile src/OsiCommonTest/Makefile test/Makefile osi.pc osi-uninstalled.pc osi-unittests.pc osi-unittests-uninstalled.pc]) if test $coin_has_cpx = true ; then AC_CONFIG_FILES([osi-cplex.pc:src/OsiCpx/osi-cplex.pc.in osi-cplex-uninstalled.pc:src/OsiCpx/osi-cplex-uninstalled.pc.in]) fi if test $coin_has_glpk = yes ; then AC_CONFIG_FILES([osi-glpk.pc:src/OsiGlpk/osi-glpk.pc.in osi-glpk-uninstalled.pc:src/OsiGlpk/osi-glpk-uninstalled.pc.in]) fi if test $coin_has_grb = true ; then AC_CONFIG_FILES([osi-gurobi.pc:src/OsiGrb/osi-gurobi.pc.in osi-gurobi-uninstalled.pc:src/OsiGrb/osi-gurobi-uninstalled.pc.in]) fi if test $coin_has_msk = true ; then AC_CONFIG_FILES([osi-mosek.pc:src/OsiMsk/osi-mosek.pc.in osi-mosek-uninstalled.pc:src/OsiMsk/osi-mosek-uninstalled.pc.in]) fi if test $coin_has_xpr = true ; then AC_CONFIG_FILES([osi-xpress.pc:src/OsiXpr/osi-xpress.pc.in osi-xpress-uninstalled.pc:src/OsiXpr/osi-xpress-uninstalled.pc.in]) fi if test $coin_has_soplex = yes ; then AC_CONFIG_FILES([osi-soplex.pc:src/OsiSpx/osi-soplex.pc.in osi-soplex-uninstalled.pc:src/OsiSpx/osi-soplex-uninstalled.pc.in]) fi AC_CONFIG_FILES([doxydoc/doxygen.conf]) # Here put the location and name of the configuration header file AC_CONFIG_HEADER([src/Osi/config.h src/Osi/config_osi.h]) # Finally, we let configure write all the output... AC_COIN_FINALIZE Vol-1.5.4/Osi/osi.pc.in0000644000175000017500000000045411510106235013565 0ustar sudipsudipprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: Osi Description: COIN-OR Open Solver Interface URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsi @OSILIB_PCLIBS@ Cflags: -I${includedir} Requires: @OSILIB_PCREQUIRES@ Vol-1.5.4/Osi/LICENSE0000644000175000017500000002622711507173764013076 0ustar sudipsudipEclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. Vol-1.5.4/Osi/config.sub0000755000175000017500000007772611405216166014055 0ustar sudipsudip#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Vol-1.5.4/Osi/MSVisualStudio/0000755000175000017500000000000013434204224014736 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v10/0000755000175000017500000000000013434204224015344 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v10/libOsi/0000755000175000017500000000000013434204224016565 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v10/libOsi/libOsi.vcxproj0000644000175000017500000002571212130312011021414 0ustar sudipsudip Debug Win32 Debug x64 Release Win32 Release x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149} StaticLibrary StaticLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks _DEBUG;%(PreprocessorDefinitions) 0x0409 true X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks Level3 true ProgramDatabase _DEBUG;%(PreprocessorDefinitions) 0x0409 true ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true true NDEBUG;%(PreprocessorDefinitions) 0x0409 true X64 Default ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true NDEBUG;%(PreprocessorDefinitions) 0x0409 true Vol-1.5.4/Osi/MSVisualStudio/v10/OsiExamplesBasic/0000755000175000017500000000000013434204224020537 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v10/OsiExamplesBasic/OsiExamplesBasic.vcxproj0000644000175000017500000001474312101652430025354 0ustar sudipsudip Debug Win32 Release Win32 {B874A948-B5F4-4501-9735-BD9586C5216D} OsiExamplesBasic Win32Proj Application MultiByte Application MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset Disabled ..\..\..\src\OsiClp;..\..\..\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)OsiExamplesBasic.exe true $(OutDir)OsiExamplesBasic.pdb Console false MachineX86 ..\..\..\src\OsiClp;..\..\..\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase $(OutDir)OsiExamplesBasic.exe true Console true true false MachineX86 {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false Vol-1.5.4/Osi/MSVisualStudio/v10/Osi.sln0000644000175000017500000001435512130536345016630 0ustar sudipsudipMicrosoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsi", "libOsi\libOsi.vcxproj", "{7D98E2CB-876E-4F75-9F71-77D3FE87E149}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "..\..\..\CoinUtils\MSVisualStudio\v10\libCoinUtils\libCoinUtils.vcxproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesBasic", "OsiExamplesBasic\OsiExamplesBasic.vcxproj", "{B874A948-B5F4-4501-9735-BD9586C5216D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesBuild", "OsiExamplesBuild\OsiExamplesBuild.vcxproj", "{1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesParameters", "OsiExamplesParameters\OsiExamplesParameters.vcxproj", "{C0F44D7F-B535-44DC-9125-515E813A1753}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesQuery", "OsiExamplesQuery\OsiExamplesQuery.vcxproj", "{E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesSpecific", "OsiExamplesSpecific\OsiExamplesSpecific.vcxproj", "{B5A702D5-C5F7-40EE-99E0-A500AE91528A}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiCommonTest", "libOsiCommonTest\libOsiCommonTest.vcxproj", "{109D6E6F-6D91-460F-86AE-DF27400E09A9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiUnitTest", "OsiUnitTest\OsiUnitTest.vcxproj", "{0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.ActiveCfg = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.Build.0 = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.ActiveCfg = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.Build.0 = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.ActiveCfg = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.Build.0 = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.ActiveCfg = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.Build.0 = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64 {B349E853-2E2B-468E-8853-184ACD948678}.Debug|Win32.ActiveCfg = Debug|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Debug|x64.ActiveCfg = Debug|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Release|Win32.ActiveCfg = Release|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Release|x64.ActiveCfg = Release|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Debug|Win32.ActiveCfg = Debug|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Debug|x64.ActiveCfg = Debug|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Release|Win32.ActiveCfg = Release|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Release|x64.ActiveCfg = Release|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Debug|Win32.ActiveCfg = Debug|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Debug|x64.ActiveCfg = Debug|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Release|Win32.ActiveCfg = Release|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Release|x64.ActiveCfg = Release|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Debug|Win32.ActiveCfg = Debug|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Debug|x64.ActiveCfg = Debug|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Release|Win32.ActiveCfg = Release|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Release|x64.ActiveCfg = Release|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Debug|Win32.ActiveCfg = Debug|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Debug|x64.ActiveCfg = Debug|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Release|Win32.ActiveCfg = Release|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Release|x64.ActiveCfg = Release|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Debug|Win32.ActiveCfg = Debug|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Debug|x64.ActiveCfg = Debug|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Release|Win32.ActiveCfg = Release|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Release|x64.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.ActiveCfg = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.Build.0 = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.ActiveCfg = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.Build.0 = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.Build.0 = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.ActiveCfg = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.Build.0 = Release|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|Win32.ActiveCfg = Debug|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|Win32.Build.0 = Debug|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|x64.ActiveCfg = Debug|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|x64.Build.0 = Debug|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|Win32.ActiveCfg = Release|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|Win32.Build.0 = Release|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|x64.ActiveCfg = Release|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal Vol-1.5.4/Osi/MSVisualStudio/v10/OsiExamplesBuild/0000755000175000017500000000000013434204224020555 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v10/OsiExamplesBuild/OsiExamplesBuild.vcxproj0000644000175000017500000001471312101652430025405 0ustar sudipsudip Debug Win32 Release Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4} Win32Proj Application MultiByte Application MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)OsiExamplesBuild.exe true $(OutDir)OsiExamplesBuild.pdb Console false MachineX86 ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase $(OutDir)OsiExamplesBuild.exe true Console true true false MachineX86 {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false Vol-1.5.4/Osi/MSVisualStudio/v10/OsiExamplesSpecific/0000755000175000017500000000000013434204224021243 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v10/OsiExamplesSpecific/OsiExamplesSpecific.vcxproj0000644000175000017500000001472712101652430026566 0ustar sudipsudip Debug Win32 Release Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A} Win32Proj Application MultiByte Application MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)OsiExamplesSpecific.exe true $(OutDir)OsiExamplesSpecific.pdb Console false MachineX86 ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase $(OutDir)OsiExamplesSpecific.exe true Console true true false MachineX86 {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false Vol-1.5.4/Osi/MSVisualStudio/v10/OsiExamplesQuery/0000755000175000017500000000000013434204224020623 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v10/OsiExamplesQuery/OsiExamplesQuery.vcxproj0000644000175000017500000001476112101652430025524 0ustar sudipsudip Debug Win32 Release Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C} OsiExamplesQuery Win32Proj Application MultiByte Application MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset Disabled ..\..\..\src\OsiClp;..\..\..\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)OsiExamplesQuery.exe true $(OutDir)OsiExamplesQuery.pdb Console false MachineX86 ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase $(OutDir)OsiExamplesQuery.exe true Console true true false MachineX86 {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false Vol-1.5.4/Osi/MSVisualStudio/v10/OsiExamplesParameters/0000755000175000017500000000000013434204224021621 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v10/OsiExamplesParameters/OsiExamplesParameters.vcxproj0000644000175000017500000001473712101652430027523 0ustar sudipsudip Debug Win32 Release Win32 {C0F44D7F-B535-44DC-9125-515E813A1753} Win32Proj Application MultiByte Application MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)OsiExamplesParameters.exe true $(OutDir)OsiExamplesParameters.pdb Console false MachineX86 ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase $(OutDir)OsiExamplesParameters.exe true Console true true false MachineX86 {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false Vol-1.5.4/Osi/MSVisualStudio/v10/OsiUnitTest/0000755000175000017500000000000013434204224017576 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v10/OsiUnitTest/OsiUnitTest.vcxproj0000644000175000017500000003027112101652430023444 0ustar sudipsudip Debug Win32 Debug x64 Release Win32 Release x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C} OsiUnitTest Application Unicode false false Application Unicode false Application Unicode false false Application Unicode false <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true true MachineX86 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false X64 Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true true MachineX64 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true MachineX86 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true MachineX64 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {109d6e6f-6d91-460f-86ae-df27400e09a9} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false Vol-1.5.4/Osi/MSVisualStudio/v10/libOsiCommonTest/0000755000175000017500000000000013434204224020576 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v10/libOsiCommonTest/libOsiCommonTest.vcxproj0000644000175000017500000002364412130312011025440 0ustar sudipsudip Debug Win32 Debug x64 Release Win32 Release x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9} libOsiCommonTest StaticLibrary false StaticLibrary StaticLibrary false StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false Vol-1.5.4/Osi/MSVisualStudio/v14/0000755000175000017500000000000013434204224015350 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v14/libOsi/0000755000175000017500000000000013434204224016571 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v14/libOsi/libOsi.vcxproj0000644000175000017500000002631613377773061021457 0ustar sudipsudip Debug Win32 Debug x64 Release Win32 Release x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149} 10.0.17763.0 StaticLibrary v141 StaticLibrary v141 StaticLibrary v141 StaticLibrary v141 <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks _DEBUG;%(PreprocessorDefinitions) 0x0409 true X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks Level3 true ProgramDatabase _DEBUG;%(PreprocessorDefinitions) 0x0409 true ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true true NDEBUG;%(PreprocessorDefinitions) 0x0409 true X64 Default ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true NDEBUG;%(PreprocessorDefinitions) 0x0409 true Vol-1.5.4/Osi/MSVisualStudio/v14/OsiUnitTest/0000755000175000017500000000000013434204224017602 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v14/OsiUnitTest/OsiUnitTest.vcxproj0000644000175000017500000003120513401025325023447 0ustar sudipsudip Debug Win32 Debug x64 Release Win32 Release x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C} OsiUnitTest 10.0.17763.0 Application Unicode false false v141 Application Unicode false v141 Application Unicode false false v141 Application Unicode false v141 <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true true MachineX86 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false X64 Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true true MachineX64 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true MachineX86 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true MachineX64 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {109d6e6f-6d91-460f-86ae-df27400e09a9} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false Vol-1.5.4/Osi/MSVisualStudio/v14/libOsiCommonTest/0000755000175000017500000000000013434204224020602 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v14/libOsiCommonTest/libOsiCommonTest.vcxproj0000644000175000017500000002425013401023472025452 0ustar sudipsudip Debug Win32 Debug x64 Release Win32 Release x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9} libOsiCommonTest 10.0.17763.0 StaticLibrary false v141 StaticLibrary v141 StaticLibrary false v141 StaticLibrary v141 <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false Vol-1.5.4/Osi/MSVisualStudio/v9/0000755000175000017500000000000013434204224015274 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v9/libOsi/0000755000175000017500000000000013434204224016515 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v9/libOsi/libOsi.vcproj0000644000175000017500000002331511562355715021203 0ustar sudipsudip Vol-1.5.4/Osi/MSVisualStudio/v9/OsiExamplesBasic/0000755000175000017500000000000013434204224020467 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v9/OsiExamplesBasic/OsiExamplesBasic.vcproj0000644000175000017500000001045311122615267025117 0ustar sudipsudip Vol-1.5.4/Osi/MSVisualStudio/v9/Osi.sln0000644000175000017500000002106312130536345016552 0ustar sudipsudipMicrosoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsi", "libOsi\libOsi.vcproj", "{7D98E2CB-876E-4F75-9F71-77D3FE87E149}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "..\..\..\CoinUtils\MSVisualStudio\v9\libCoinUtils\libCoinUtils.vcproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesBasic", "OsiExamplesBasic\OsiExamplesBasic.vcproj", "{B874A948-B5F4-4501-9735-BD9586C5216D}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesBuild", "OsiExamplesBuild\OsiExamplesBuild.vcproj", "{1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesParameters", "OsiExamplesParameters\OsiExamplesParameters.vcproj", "{C0F44D7F-B535-44DC-9125-515E813A1753}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesQuery", "OsiExamplesQuery\OsiExamplesQuery.vcproj", "{E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesSpecific", "OsiExamplesSpecific\OsiExamplesSpecific.vcproj", "{B5A702D5-C5F7-40EE-99E0-A500AE91528A}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiCommonTest", "libOsiCommonTest\libOsiCommonTest.vcproj", "{109D6E6F-6D91-460F-86AE-DF27400E09A9}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiUnitTest", "OsiUnitTest\OsiUnitTest.vcproj", "{0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {109D6E6F-6D91-460F-86AE-DF27400E09A9} = {109D6E6F-6D91-460F-86AE-DF27400E09A9} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.ActiveCfg = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.Build.0 = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.ActiveCfg = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.Build.0 = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.ActiveCfg = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.Build.0 = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.ActiveCfg = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.Build.0 = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64 {B349E853-2E2B-468E-8853-184ACD948678}.Debug|Win32.ActiveCfg = Debug|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Debug|x64.ActiveCfg = Debug|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Release|Win32.ActiveCfg = Release|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Release|Win32.Build.0 = Release|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Release|x64.ActiveCfg = Release|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Debug|Win32.ActiveCfg = Debug|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Debug|x64.ActiveCfg = Debug|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Release|Win32.ActiveCfg = Release|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Release|Win32.Build.0 = Release|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Release|x64.ActiveCfg = Release|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Debug|Win32.ActiveCfg = Debug|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Debug|x64.ActiveCfg = Debug|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Release|Win32.ActiveCfg = Release|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Release|Win32.Build.0 = Release|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Release|x64.ActiveCfg = Release|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Debug|Win32.ActiveCfg = Debug|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Debug|x64.ActiveCfg = Debug|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Release|Win32.ActiveCfg = Release|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Release|Win32.Build.0 = Release|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Release|x64.ActiveCfg = Release|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Debug|Win32.ActiveCfg = Debug|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Debug|x64.ActiveCfg = Debug|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Release|Win32.ActiveCfg = Release|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Release|Win32.Build.0 = Release|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Release|x64.ActiveCfg = Release|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Debug|Win32.ActiveCfg = Debug|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Debug|x64.ActiveCfg = Debug|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Release|Win32.ActiveCfg = Release|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Release|Win32.Build.0 = Release|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Release|x64.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.ActiveCfg = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.Build.0 = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.ActiveCfg = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.Build.0 = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.Build.0 = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.ActiveCfg = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.Build.0 = Release|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|Win32.ActiveCfg = Debug|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|Win32.Build.0 = Debug|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|x64.ActiveCfg = Debug|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|x64.Build.0 = Debug|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|Win32.ActiveCfg = Release|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|Win32.Build.0 = Release|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|x64.ActiveCfg = Release|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal Vol-1.5.4/Osi/MSVisualStudio/v9/OsiExamplesBuild/0000755000175000017500000000000013434204224020505 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v9/OsiExamplesBuild/OsiExamplesBuild.vcproj0000644000175000017500000001044411122615267025153 0ustar sudipsudip Vol-1.5.4/Osi/MSVisualStudio/v9/OsiExamplesSpecific/0000755000175000017500000000000013434204224021173 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v9/OsiExamplesSpecific/OsiExamplesSpecific.vcproj0000644000175000017500000001046311122615267026330 0ustar sudipsudip Vol-1.5.4/Osi/MSVisualStudio/v9/OsiExamplesQuery/0000755000175000017500000000000013434204224020553 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v9/OsiExamplesQuery/OsiExamplesQuery.vcproj0000644000175000017500000001047111122615267025267 0ustar sudipsudip Vol-1.5.4/Osi/MSVisualStudio/v9/OsiExamplesParameters/0000755000175000017500000000000013434204224021551 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v9/OsiExamplesParameters/OsiExamplesParameters.vcproj0000644000175000017500000001047511122615267027267 0ustar sudipsudip Vol-1.5.4/Osi/MSVisualStudio/v9/OsiUnitTest/0000755000175000017500000000000013434204224017526 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v9/OsiUnitTest/OsiUnitTest.vcproj0000644000175000017500000001732111475606620023222 0ustar sudipsudip Vol-1.5.4/Osi/MSVisualStudio/v9/libOsiCommonTest/0000755000175000017500000000000013434204224020526 5ustar sudipsudipVol-1.5.4/Osi/MSVisualStudio/v9/libOsiCommonTest/libOsiCommonTest.vcproj0000644000175000017500000001635211475326621025225 0ustar sudipsudip Vol-1.5.4/Osi/Makefile.am0000644000175000017500000000703512462104002014075 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1993 2015-01-28 06:56:02Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories and installation of .pc files # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = osi.pc osi-unittests.pc SUBDIRS = src/Osi src/OsiCommonTest if COIN_HAS_CPX SUBDIRS += src/OsiCpx pkgconfiglib_DATA += osi-cplex.pc endif if COIN_HAS_GLPK SUBDIRS += src/OsiGlpk pkgconfiglib_DATA += osi-glpk.pc endif if COIN_HAS_MSK SUBDIRS += src/OsiMsk pkgconfiglib_DATA += osi-mosek.pc endif if COIN_HAS_XPR SUBDIRS += src/OsiXpr pkgconfiglib_DATA += osi-xpress.pc endif if COIN_HAS_GRB SUBDIRS += src/OsiGrb pkgconfiglib_DATA += osi-gurobi.pc endif if COIN_HAS_SOPLEX SUBDIRS += src/OsiSpx pkgconfiglib_DATA += osi-soplex.pc endif # We don't want to compile the test subdirectory, unless the test target is # specified. But we need to list it as subdirectory to make sure that it is # included in the tarball if ALWAYS_FALSE SUBDIRS += test endif ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = \ examples/basic2.cpp \ examples/basic.cpp \ examples/build.cpp \ examples/Makefile.in \ examples/parameters.cpp \ examples/query.cpp \ examples/README \ examples/specific.cpp ######################################################################## # Extra Targets # ######################################################################## test: all cd test; $(MAKE) test unitTest: test # Doxygen documentation doxydoc: doxygen doxydoc/doxygen.conf clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) clean-local: clean-doxydoc if test -r test/Makefile; then cd test; $(MAKE) clean; fi distclean-local: if test -r test/Makefile; then cd test; $(MAKE) distclean; fi install-exec-local: install-doc uninstall-local: uninstall-doc .PHONY: test unitTest doxydoc ######################################################################## # Installation of the addlibs file # ######################################################################## addlibsdir = $(DESTDIR)$(datadir)/coin/doc/Osi install-data-hook: @$(mkdir_p) "$(addlibsdir)" if COIN_HAS_PKGCONFIG PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \ $(PKG_CONFIG) --libs osi > $(addlibsdir)/osi_addlibs.txt else if COIN_CXX_IS_CL echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libOsi.lib @OSILIB_LIBS_INSTALLED@" > $(addlibsdir)/osi_addlibs.txt else echo -L@abs_lib_dir@ -lOsi @OSILIB_LIBS_INSTALLED@ > $(addlibsdir)/osi_addlibs.txt endif endif uninstall-hook: rm -f $(addlibsdir)/osi_addlibs.txt ######################################################################## # Maintainer Stuff # ######################################################################## CLEANFILES = # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = include BuildTools/Makemain.inc Vol-1.5.4/Osi/osi-unittests.pc.in0000644000175000017500000000046211510106235015624 0ustar sudipsudipprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiUnitTests Description: COIN-OR Open Solver Interface Common Unit Tests URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiCommonTests Cflags: -I${includedir} Requires: osi Vol-1.5.4/Osi/osi-unittests-uninstalled.pc.in0000644000175000017500000000045111507670402020152 0ustar sudipsudipprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiCommonTest Name: OsiUnitTests Description: COIN-OR Open Solver Interface Common Unit Tests URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiCommonTests.la Cflags: -I@abs_source_dir@/src/OsiCommonTest Requires: osi Vol-1.5.4/Osi/AUTHORS0000644000175000017500000000027710625200560013117 0ustar sudipsudipFasano, J.P. Forrest, John J. Hafer, Lou Ladanyi, Laszlo Lannez, Sebastien (OsiCuts insert method) Margot, Francois Saltzman, Matt Ralphs, Ted Walton, Philip (trait specification of OsiCuts) Vol-1.5.4/Osi/README0000644000175000017500000000571211507173764012745 0ustar sudipsudipOPEN SOLVER INTERFACE LIBRARY README ============================= In this README, 1. 'coin-Osi' is the full path to the directory in which you have dowloaded Osi. 2. 'build' is the full path to the directory used for the installation of Osi. It might be coin-Osi or some other directory of your choosing. OVERVIEW ======== Welcome to the COIN-OR Open Solver Interface Library (Osi). Osi is distributed under the Eclipse Public License Version 1.0 and is freely redistributable. All source code and documentation is copyright by International Business Machines Corporation and (many) others. This README file may be distributed freely. The COIN-OR Open Solver Interface Library is a collection of solver interfaces (SIs) that provide a common interface --- the OSI API --- for all the supported solvers. Each SI is in a separate directory. The authors of each SI are listed in the AUTHORS file in the subdirectory. The names of maintainers and contributors to the base OsiSolverInterface code are listed in the AUTHORS file in this (Osi) directory. For more information, see the Osi Trac page (see below). OSI TRAC PAGE ============= https://projects.coin-or.org/Osi INSTALLATION ============ If you have downloaded the Osi package in the local directory coin-Osi, please see the INSTALL file in coin-Osi (the parent directory of this directory, unless you've changed the default Coin package directory structure) for instructions on how to install the entire package. If you have obtained Osi by downloading some other package, Osi will be installed as part of the installation of that package. See the INSTALL file in the main directory of the package (again, the parent directory of this directory). SUPPORT ======= 1. Authors See the AUTHORS file. 2. Project Managers The main project managers are Lou Hafer, lou@cs.sfu.ca Matt Saltzmann, mjs@clemson.edu Lots of others help out. 3. Mailing List Casual discussion of Osi can usually be found in the coin-discuss mailing list. Serious discussion occurs in the coin-osi-devel mailing list. To subscribe to either, go to http://list.coin-or.org/mailman/listinfo and follow the links. 4. Bug Reports Bug reports should be reported by creating a ticket at https://projects.coin-or.org/Osi/newticket You will need to create a login id. We apologise for the hassle, but it's the only way to avoid spammers. The more you can tell us about the bug (version of Osi, compiler version, operating system, etc.) the better the chance that we can duplicate your bug and fix it. It's helpful if you leave a valid email address, in case we need to contact you for more information. You can also report bugs on the mailing lists, but you're at the mercy of the memory of the developers. Once that email gets filed, well, out of sight, out of mind. 5. Requests for Enhancements As for bugs, please create a ticket. Or, join the coin-osi-devel list and lobby directly. Vol-1.5.4/Osi/config.guess0000755000175000017500000012706311405216166014400 0ustar sudipsudip#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Vol-1.5.4/Osi/test/0000755000175000017500000000000013434204224013022 5ustar sudipsudipVol-1.5.4/Osi/test/OsiTestSolver.cpp0000644000175000017500000004334112101340333016310 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). #include #include #include #include #include #include "OsiTestSolver.hpp" //############################################################################# /// Usage: v=w; where w is a VOL_dvector VOL_dvector& VOL_dvector::operator=(const VOL_dvector& w) { if (this == &w) return *this; delete[] v; const int wsz = w.size(); if (wsz == 0) { v = 0; sz = 0; } else { v = new double[sz = wsz]; for (int i = sz - 1; i >= 0; --i) v[i] = w[i]; } return *this; } /// Usage v=w; where w is a double. It copies w in every entry of v VOL_dvector& VOL_dvector::operator=(const double w) { for (int i = sz - 1; i >= 0; --i) v[i] = w; return *this; } //############################################################################# /// Usage: v=w; where w is a VOL_ivector VOL_ivector& VOL_ivector::operator=(const VOL_ivector& w) { if (this == &w) return *this; delete[] v; const int wsz = w.size(); if (wsz == 0) { v = 0; sz = 0; } else { v = new int[sz = wsz]; for (int i = sz - 1; i >= 0; --i) v[i] = w[i]; } return *this; } /// Usage v=w; where w is an int. It copies w in every entry of v VOL_ivector& VOL_ivector::operator=(const int w) { for (int i = sz - 1; i >= 0; --i) v[i] = w; return *this; } //############################################################################ /// find maximum absolute value of the primal violations void VOL_primal::find_max_viol(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub) { const int nc = v.size(); viol = 0; for ( int i = 0; i < nc; ++i ) { if ( (v[i] > 0.0 && dual_ub[i] != 0.0) || (v[i] < 0.0 && dual_lb[i] != 0.0) ) viol = VolMax(viol, VolAbs(v[i])); } } //############################################################################ /// Dual step. It takes a step in the direction v // lcost is a member of VOL_dual void VOL_dual::step(const double target, const double lambda, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v) { const int nc = u.size(); int i; double viol = 0.0; for (i = 0; i < nc; ++i) { if (( v[i] > 0.0 && u[i] < dual_ub[i] ) || ( v[i] < 0.0 && u[i] > dual_lb[i] )) { viol += v[i] * v[i]; } } const double stp = viol == 0.0 ? 0.0 : (target - lcost) / viol * lambda; for (i = 0; i < nc; ++i) { if (( v[i] > 0.0 && u[i] < dual_ub[i] ) || ( v[i] < 0.0 && u[i] > dual_lb[i] )) { u[i] += stp * v[i]; if (u[i] < dual_lb[i]) u[i] = dual_lb[i]; else if (u[i] > dual_ub[i]) u[i] = dual_ub[i]; } } } /// ascent = inner product(v, u - last_u) double VOL_dual::ascent(const VOL_dvector& v, const VOL_dvector& last_u) const { const int nc = u.size(); int i; double asc = 0.0; for (i = 0; i < nc; ++i) asc += v[i] * (u[i] - last_u[i]); return asc; } /** compute xrc. This is (c - u A) * ( xstar - x ). This is just miscellaneous information, it is not used in the algorithm. */ void VOL_dual::compute_xrc(const VOL_dvector& xstar, const VOL_dvector& x, const VOL_dvector& rc) { const int nc = x.size(); xrc = 0; for (int i = 0; i < nc; ++i) { xrc += rc[i] * (xstar[i] - x[i]); } } //############################################################################ /** Computing inner products. It computes v * ( alpha v + (1-alpha) h), v * h, v * v, h * h. Here v is the subgradient direction, and h is the conjugate direction. */ VOL_vh::VOL_vh(const double alpha, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v, const VOL_dvector& vstar, const VOL_dvector& u) : hh(0), norm(0), vh(0), asc(0) { int i; const int nc = vstar.size(); double vv; for (i = 0; i < nc; ++i) { const double vi = v[i]; const double vsi = vstar[i]; vv = alpha * vi + (1.0 - alpha) * vsi; if (u[i] == 0.0 && dual_lb[i] == 0.0 && vv <= 0.0) continue; if (u[i] == 0.0 && dual_ub[i] == 0.0 && vv >= 0.0) continue; asc += vi * vv; vh += vi * vsi; norm += vi * vi; hh += vsi * vsi; } } //############################################################################ /** Computes indicators for printing. They are v2=vstar * vstar, asc= v*v, vu= vstar * u, vabs = sum( abs(vstar[i]))/m, v2= sum( vstar[i]^2) / m. */ VOL_indc::VOL_indc(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) { v2 = vu = vabs = asc = 0.0; const VOL_dvector v = primal.v; const VOL_dvector vstar = pstar.v; const VOL_dvector u = dual.u; int i; const int nc = vstar.size(); for (i = 0; i < nc; ++i) { if (u[i] == 0.0 && dual_lb[i] == 0.0 && vstar[i] <= 0.0) continue; if (u[i] == 0.0 && dual_ub[i] == 0.0 && vstar[i] >= 0.0) continue; v2 += vstar[i] * vstar[i]; asc += v[i] * v[i]; vu -= vstar[i] * u[i]; vabs += VolAbs(vstar[i]); } v2 = sqrt(v2) / nc; vabs /= nc; } //############################################################################ // reading parameters that control the algorithm void VOL_problem::read_params(const char* filename) { char s[100]; FILE* infile = fopen(filename, "r"); if (!infile) { printf("Failure to open file: %s\n", filename); abort(); } while (fgets(s, 100, infile)) { const size_t len = strlen(s) - 1; if (s[len] == '\n') s[len] = 0; std::string ss(s); if (ss.find("temp_dualfile") == 0) { size_t i = ss.find("="); size_t i1 = ss.length()-i-1; std::string sss = ss.substr(i+1,i1); parm.temp_dualfile = new char[sss.length() + 1]; memcpy(parm.temp_dualfile, sss.c_str(), sss.length()); parm.temp_dualfile[sss.length()] = 0; } else if (ss.find("ubinit") == 0) { size_t i = ss.find("="); parm.ubinit = atof(&s[i+1]); } else if (ss.find("printflag") == 0) { size_t i = ss.find("="); parm.printflag = atoi(&s[i+1]); } else if (ss.find("printinvl") == 0) { size_t i = ss.find("="); parm.printinvl = atoi(&s[i+1]); } else if (ss.find("maxsgriters") == 0) { size_t i = ss.find("="); parm.maxsgriters = atoi(&s[i+1]); } else if (ss.find("heurinvl") == 0) { size_t i = ss.find("="); parm.heurinvl = atoi(&s[i+1]); } else if (ss.find("greentestinvl") == 0) { size_t i = ss.find("="); parm.greentestinvl = atoi(&s[i+1]); } else if (ss.find("yellowtestinvl") == 0) { size_t i = ss.find("="); parm.yellowtestinvl = atoi(&s[i+1]); } else if (ss.find("redtestinvl") == 0) { size_t i = ss.find("="); parm.redtestinvl = atoi(&s[i+1]); } else if (ss.find("lambdainit") == 0) { size_t i = ss.find("="); parm.lambdainit = atof(&s[i+1]); } else if (ss.find("alphainit") == 0) { size_t i = ss.find("="); parm.alphainit = atof(&s[i+1]); } else if (ss.find("alphamin") == 0) { size_t i = ss.find("="); parm.alphamin = atof(&s[i+1]); } else if (ss.find("alphafactor") == 0) { size_t i = ss.find("="); parm.alphafactor = atof(&s[i+1]); } else if (ss.find("alphaint") == 0) { size_t i = ss.find("="); parm.alphaint = atoi(&s[i+1]); } else if (ss.find("primal_abs_precision") == 0) { size_t i = ss.find("="); parm.primal_abs_precision = atof(&s[i+1]); // } else if (ss.find("primal_rel_precision") == 0) { // size_t i = ss.find("="); // parm.primal_rel_precision = atof(&s[i+1]); } else if (ss.find("gap_abs_precision") == 0) { size_t i = ss.find("="); parm.gap_abs_precision = atof(&s[i+1]); } else if (ss.find("gap_rel_precision") == 0) { size_t i = ss.find("="); parm.gap_rel_precision = atof(&s[i+1]); } else if (ss.find("ascent_check_invl") == 0) { size_t i = ss.find("="); parm.ascent_check_invl = atoi(&s[i+1]); } else if (ss.find("minimum_rel_ascent") == 0) { size_t i = ss.find("="); parm.minimum_rel_ascent = atoi(&s[i+1]); } else if (ss.find("granularity") == 0) { size_t i = ss.find("="); parm.granularity = atof(&s[i+1]); } } fclose(infile); } //############################################################################# void VOL_problem::set_default_parm() { parm.lambdainit = 0.1; parm.alphainit = 0.01; parm.alphamin = 0.001; parm.alphafactor = 0.5; parm.ubinit = COIN_DBL_MAX; parm.primal_abs_precision = 0.02; // parm.primal_rel_precision = 0.01; parm.gap_abs_precision = 0.0; parm.gap_rel_precision = 0.001; parm.granularity = 0.0; parm.minimum_rel_ascent = 0.0001; parm.ascent_first_check = 500; parm.ascent_check_invl = 100; parm.maxsgriters = 2000; parm.printflag = 3; parm.printinvl = 50; parm.heurinvl = 100000000; parm.greentestinvl = 1; parm.yellowtestinvl = 2; parm.redtestinvl = 10; parm.alphaint = 80; parm.temp_dualfile = 0; } //############################################################################# VOL_problem::VOL_problem() : alpha_(-1), lambda_(-1), iter_(0), value(-1), psize(-1), dsize(-1) { set_default_parm(); } // VOL_problem::VOL_problem(const char *filename) : alpha_(-1), lambda_(-1), iter_(0), value(-1), psize(-1), dsize(-1) { set_default_parm(); read_params(filename); } //###################################################################### VOL_problem::~VOL_problem() { delete[] parm.temp_dualfile; } //###################################################################### /// print information about the current iteration void VOL_problem::print_info(const int iter, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) { VOL_indc indc(dual_lb, dual_ub, primal, pstar, dual); printf("%i. L=%f P=%f vu=%f infeas=%f\n asc=%f vmax=%f P-vu=%f xrc =%f\n", iter, dual.lcost, pstar.value, indc.vu, indc.v2, indc.asc, pstar.viol, pstar.value - indc.vu, dual.xrc); } //###################################################################### /// this is the Volume Algorithm int VOL_problem::solve(VOL_user_hooks& hooks, const bool use_preset_dual) { if (initialize(use_preset_dual) < 0) // initialize several parameters return -1; double best_ub = parm.ubinit; // upper bound int retval = 0; VOL_dvector rc(psize); // reduced costs VOL_dual dual(dsize); // dual vector dual.u = dsol; VOL_primal primal(psize, dsize); // primal vector retval = hooks.compute_rc(dual.u, rc); // compute reduced costs if (retval < 0) return -1; // solve relaxed problem retval = hooks.solve_subproblem(dual.u, rc, dual.lcost, primal.x, primal.v, primal.value); if (retval < 0) return -1; // set target for the lagrangian value double target = readjust_target(-COIN_DBL_MAX/2, dual.lcost); // find primal violation primal.find_max_viol(dual_lb, dual_ub); // this may be left out for speed VOL_primal pstar(primal); // set pstar=primal pstar.find_max_viol(dual_lb, dual_ub); // set violation of pstar dual.compute_xrc(pstar.x, primal.x, rc); // compute xrc // VOL_dual dstar(dual); // dstar is the best dual solution so far VOL_dual dlast(dual); // set dlast=dual iter_ = 0; if (parm.printflag) print_info(iter_, primal, pstar, dual); VOL_swing swing; VOL_alpha_factor alpha_factor; double * lcost_sequence = new double[parm.ascent_check_invl]; const int ascent_first_check = VolMax(parm.ascent_first_check, parm.ascent_check_invl); for (iter_ = 1; iter_ <= parm.maxsgriters; ++iter_) { // main iteration dlast = dual; // take a dual step dual.step(target, lambda_, dual_lb, dual_ub, pstar.v); // compute reduced costs retval = hooks.compute_rc(dual.u, rc); if (retval < 0) break; // solve relaxed problem retval = hooks.solve_subproblem(dual.u, rc, dual.lcost, primal.x, primal.v, primal.value); if (retval < 0) break; // set the violation of primal primal.find_max_viol(dual_lb, dual_ub); // this may be left out for speed dual.compute_xrc(pstar.x, primal.x, rc); // compute xrc if (dual.lcost > dstar.lcost) { dstar = dual; // update dstar } // check if target should be updated target = readjust_target(target, dstar.lcost); // compute inner product between the new subgradient and the // last direction. This to decide among green, yellow, red const double ascent = dual.ascent(primal.v, dlast.u); // green, yellow, red swing.cond(dlast, dual.lcost, ascent, iter_); // change lambda if needed lambda_ *= swing.lfactor(parm, lambda_, iter_); if (iter_ % parm.alphaint == 0) { // change alpha if needed const double fact = alpha_factor.factor(parm, dstar.lcost, alpha_); if (fact != 1.0 && (parm.printflag & 2)) { printf(" ------------decreasing alpha to %f\n", alpha_*fact); } alpha_ *= fact; } // convex combination with new primal vector pstar.cc(power_heur(primal, pstar, dual), primal); pstar.find_max_viol(dual_lb, dual_ub); // find maximum violation of pstar if (swing.rd) dual = dstar; // if there is no improvement reset dual=dstar if ((iter_ % parm.printinvl == 0) && parm.printflag) { // printing iteration information print_info(iter_, primal, pstar, dual); swing.print(); } if (iter_ % parm.heurinvl == 0) { // run primal heuristic double ub = COIN_DBL_MAX; retval = hooks.heuristics(*this, pstar.x, ub); if (retval < 0) break; if (ub < best_ub) best_ub = ub; } // save dual solution every 500 iterations if (iter_ % 500 == 0 && parm.temp_dualfile != 0) { FILE* outfile = fopen(parm.temp_dualfile, "w"); const VOL_dvector& u = dstar.u; const int m = u.size(); for (int i = 0; i < m; ++i) { fprintf(outfile, "%i %f\n", i+1, u[i]); } fclose(outfile); } // test terminating criteria const bool primal_feas = (pstar.viol < parm.primal_abs_precision); //const double gap = VolAbs(pstar.value - dstar.lcost); const double gap = pstar.value - dstar.lcost; const bool small_gap = VolAbs(dstar.lcost) < 0.0001 ? (gap < parm.gap_abs_precision) : ( (gap < parm.gap_abs_precision) || (gap/VolAbs(dstar.lcost) < parm.gap_rel_precision) ); // test optimality if (primal_feas && small_gap){ if (parm.printflag) printf(" small lp gap \n"); break; } // test proving integer optimality if (best_ub - dstar.lcost < parm.granularity){ if (parm.printflag) printf(" small ip gap \n"); break; } // test for non-improvement const int k = iter_ % parm.ascent_check_invl; if (iter_ > ascent_first_check) { if (dstar.lcost - lcost_sequence[k] < VolAbs(lcost_sequence[k]) * parm.minimum_rel_ascent){ if (parm.printflag) printf(" small improvement \n"); break; } } lcost_sequence[k] = dstar.lcost; } delete[] lcost_sequence; if (parm.printflag) print_info(iter_, primal, pstar, dual); // set solution to return value = dstar.lcost; psol = pstar.x; dsol = dstar.u; viol = pstar.v; return retval; } /// A function to initialize a few variables int VOL_problem::initialize(const bool use_preset_dual) { // setting bounds for dual variables if (dual_lb.size() > 0) { if (dual_lb.size() != dsize) { printf("size inconsistent (dual_lb)\n"); return -1; } } else { // fill it with -infinity dual_lb.allocate(dsize); dual_lb = - COIN_DBL_MAX; } if (dual_ub.size() > 0) { if (dual_ub.size() != dsize) { printf("size inconsistent (dual_ub)\n"); return -1; } } else { // fill it with infinity dual_ub.allocate(dsize); dual_ub = COIN_DBL_MAX; } // setting initial values for parameters alpha_ = parm.alphainit; lambda_ = parm.lambdainit; // check if there is an initial dual solution if (use_preset_dual) { if (dsol.size() != dsize) { printf("size inconsistent (dsol)\n"); return -1; } } else { dsol.clear(); dsol.allocate(dsize); dsol = 0.0; } return 0; } /// Here we increase the target once we get within 5% of it double VOL_problem::readjust_target(const double oldtarget, const double lcost) const { double target = oldtarget; if (lcost >= target - VolAbs(target) * 0.05) { if (VolAbs(lcost) < 10.0) { target = 10.0; } else { target += 0.025 * VolAbs(target); target = VolMax(target, lcost + 0.05 * VolAbs(lcost)); } if (target != oldtarget && (parm.printflag & 2)) { printf(" **** readjusting target!!! new target = %f *****\n", target); } } return target; } /** Here we decide the value of alpha_fb to be used in the convex combination. More details of this are in doc.ps IN: alpha, primal, pstar, dual OUT: pstar = alpha_fb * pstar + (1 - alpha_fb) * primal */ double VOL_problem::power_heur(const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) const { const double alpha = alpha_; VOL_vh prod(alpha, dual_lb, dual_ub, primal.v, pstar.v, dual.u); double a_asc = (alpha * prod.norm - prod.vh) / (prod.norm - prod.vh); double alpha_fb; if (prod.norm + prod.hh - 2.0 * prod.vh > 0.0) alpha_fb = (prod.hh - prod.vh) / (prod.norm + prod.hh - 2.0 * prod.vh); else alpha_fb = alpha; if (alpha_fb > alpha) alpha_fb = alpha; if (alpha_fb < a_asc) alpha_fb = a_asc; if (alpha_fb > 1.0) alpha_fb = alpha; if (alpha_fb < 0.0) alpha_fb = alpha / 10.0; return alpha_fb; } Vol-1.5.4/Osi/test/OsiXprSolverInterfaceTest.cpp0000644000175000017500000006431211612354477020650 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). #include "CoinPragma.hpp" #include "OsiConfig.h" //#include #include "OsiUnitTests.hpp" #include "OsiXprSolverInterface.hpp" #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" // Added so build windows build with dsp files works, // when not building with xpress. #ifdef COIN_HAS_XPR #define __ANSIC_ #include #undef __ANSIC_ //----------------------------------------------------------------------- // Test XPRESS-MP solution methods. void OsiXprSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir) { unsigned int numInstancesStart = OsiXprSolverInterface::getNumInstances(); // Test default constructor { OsiXprSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.xprProbname_ == "", {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.vartype_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowprice_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.ivarind_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.ivartype_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 0, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(OsiXprSolverInterface::getNumInstances() == numInstancesStart+1, {}, "xpress", "number of instances during first test"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "xpress", "default constructor"); } OSIUNITTEST_ASSERT_ERROR(OsiXprSolverInterface::getNumInstances() == numInstancesStart, {}, "xpress", "number of instances after first test"); { CoinRelFltEq eq; OsiXprSolverInterface m; OSIUNITTEST_ASSERT_ERROR(OsiXprSolverInterface::getNumInstances() == numInstancesStart+1, {}, "xpress", "number of instances"); std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str()); // This assert fails on windows because fn is mixed case and xprProbname_is uppercase. //OSIUNITTEST_ASSERT_ERROR( m.xprProbname_ == fn, {}, "xpress", "exmip1 problem name" ); // Test copy constructor and assignment operator { OsiXprSolverInterface lhs; { OsiXprSolverInterface im(m); OsiXprSolverInterface imC1(im); OSIUNITTEST_ASSERT_ERROR(imC1.getNumCols() == im.getNumCols(), {}, "xpress", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumRows() == im.getNumRows(), {}, "xpress", "copy constructor"); OsiXprSolverInterface imC2(im); OSIUNITTEST_ASSERT_ERROR(imC2.getNumCols() == im.getNumCols(), {}, "xpress", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumRows() == im.getNumRows(), {}, "xpress", "copy constructor"); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "xpress", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "xpress", "copy constructor"); } // Test clone { OsiXprSolverInterface xpressSi(m); OsiSolverInterface * siPtr = &xpressSi; OsiSolverInterface * siClone = siPtr->clone(); OsiXprSolverInterface * xpressClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(xpressClone != NULL, {}, "xpress", "clone"); OSIUNITTEST_ASSERT_ERROR(xpressClone->getNumRows() == xpressSi.getNumRows(), {}, "xpress", "clone"); OSIUNITTEST_ASSERT_ERROR(xpressClone->getNumCols() == m.getNumCols(), {}, "xpress", "clone"); delete siClone; } // Test infinity { OsiXprSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == XPRS_PLUSINFINITY, {}, "xpress", "value for infinity"); } { OsiXprSolverInterface xpressSi(m); int nc = xpressSi.getNumCols(); int nr = xpressSi.getNumRows(); const double * cl = xpressSi.getColLower(); const double * cu = xpressSi.getColUpper(); const double * rl = xpressSi.getRowLower(); const double * ru = xpressSi.getRowUpper(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[0],2.5), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1],0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1],4.1), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2],1.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[0],2.5), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4],3.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1],2.1), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4],15.), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(!eq(cl[3],1.2345), {}, "xpress", "set col lower"); xpressSi.setColLower( 3, 1.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cl[3],1.2345), {}, "xpress", "set col lower"); OSIUNITTEST_ASSERT_ERROR(!eq(cu[4],10.2345), {}, "xpress", "set col upper"); xpressSi.setColUpper( 4, 10.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cu[4],10.2345), {}, "xpress", "set col upper"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[0], 1.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[1], 0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[2], 0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[3], 0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[4], 2.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[5], 0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[6], 0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[7],-1.0), {}, "xpress", "read and copy exmip1"); } // Test getMatrixByRow method { const OsiXprSolverInterface si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(smP->getMajorDim() == 5, return, "xpress", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "xpress", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[0], 3.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[1], 1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[2], -2.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[3], -1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[4], -1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[5], 2.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[6], 1.1), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[7], 1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[8], 1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[9], 2.8), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], -1.2), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "xpress", "getMatrixByRow: elements"); const int * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "xpress", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "xpress", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "xpress", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "xpress", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "xpress", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "xpress", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "xpress", "getMatrixByRow: indices"); } //-------------- // Test rowsense, rhs, rowrange, getMatrixByRow { OsiXprSolverInterface lhs; { OsiXprSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "xpress", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "xpress", "right hand side"); assert( m.rowrange_==NULL ); assert( m.rowsense_==NULL ); assert( m.rhs_==NULL ); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "xpress", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "xpress", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "xpress", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "xpress", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "xpress", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "xpress", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "xpress", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "xpress", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "xpress", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "xpress", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "xpress", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "xpress", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "xpress", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "xpress", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "xpress", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "xpress", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "xpress", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "xpress", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "xpress", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "xpress", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "xpress", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "xpress", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "xpress", "row range"); // Change XPRESS Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "xpress", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "xpress", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "xpress", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "xpress", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "xpress", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "xpress", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "xpress", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "xpress", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "xpress", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "xpress", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "xpress", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "xpress", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "xpress", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "xpress", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "xpress", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "xpress", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "xpress", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "xpress", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "xpress", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "xpress", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "xpress", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "xpress", "row range after adding row"); lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "xpress", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "xpress", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "xpress", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "xpress", "freed origin after assignment"); const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "xpress", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "xpress", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "xpress", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "xpress", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "xpress", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "xpress", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "xpress", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "xpress", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "xpress", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "xpress", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "xpress", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "xpress", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "xpress", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "xpress", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "xpress", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "xpress", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "xpress", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "xpress", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, {}, "xpress", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "xpress", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "xpress", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "xpress", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "xpress", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "xpress", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "xpress", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "xpress", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "xpress", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "xpress", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "xpress", "matrix by row after assignment: indices"); } OSIUNITTEST_ASSERT_ERROR(OsiXprSolverInterface::getNumInstances() == numInstancesStart+1, {}, "xpress", "number of instances"); } OSIUNITTEST_ASSERT_ERROR(OsiXprSolverInterface::getNumInstances() == numInstancesStart, {}, "xpress", "number of instances at finish"); // Do common solverInterface testing by calling the // base class testing method. { OsiXprSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir, netlibDir); } } #endif Vol-1.5.4/Osi/test/Makefile.in0000644000175000017500000006203212502175645015103 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = unitTest$(EXEEXT) # Depending of what solvers are available, we add the corresponding files, # libraries and include dirs @COIN_HAS_CPX_TRUE@am__append_1 = OsiCpxSolverInterfaceTest.cpp @COIN_HAS_CPX_TRUE@am__append_2 = -I`$(CYGPATH_W) $(CPXINCDIR)` \ @COIN_HAS_CPX_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiCpx` @COIN_HAS_CPX_TRUE@am__append_3 = ../src/OsiCpx/libOsiCpx.la @COIN_HAS_CPX_TRUE@am__append_4 = ../src/OsiCpx/libOsiCpx.la @COIN_HAS_CPX_TRUE@am__append_5 = $(CPXLIB) @COIN_HAS_GLPK_TRUE@am__append_6 = OsiGlpkSolverInterfaceTest.cpp @COIN_HAS_GLPK_TRUE@am__append_7 = $(GLPK_CFLAGS) \ @COIN_HAS_GLPK_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiGlpk` @COIN_HAS_GLPK_TRUE@am__append_8 = ../src/OsiGlpk/libOsiGlpk.la @COIN_HAS_GLPK_TRUE@am__append_9 = ../src/OsiGlpk/libOsiGlpk.la @COIN_HAS_GLPK_TRUE@am__append_10 = $(GLPK_LIBS) @COIN_HAS_MSK_TRUE@am__append_11 = OsiMskSolverInterfaceTest.cpp @COIN_HAS_MSK_TRUE@am__append_12 = -I`$(CYGPATH_W) $(MSKINCDIR)` \ @COIN_HAS_MSK_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiMsk` @COIN_HAS_MSK_TRUE@am__append_13 = ../src/OsiMsk/libOsiMsk.la @COIN_HAS_MSK_TRUE@am__append_14 = ../src/OsiMsk/libOsiMsk.la @COIN_HAS_MSK_TRUE@am__append_15 = $(MSKLIB) @COIN_HAS_XPR_TRUE@am__append_16 = OsiXprSolverInterfaceTest.cpp @COIN_HAS_XPR_TRUE@am__append_17 = -I`$(CYGPATH_W) $(XPRINCDIR)` \ @COIN_HAS_XPR_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiXpr` @COIN_HAS_XPR_TRUE@am__append_18 = ../src/OsiXpr/libOsiXpr.la @COIN_HAS_XPR_TRUE@am__append_19 = ../src/OsiXpr/libOsiXpr.la @COIN_HAS_XPR_TRUE@am__append_20 = $(XPRLIB) @COIN_HAS_GRB_TRUE@am__append_21 = OsiGrbSolverInterfaceTest.cpp @COIN_HAS_GRB_TRUE@am__append_22 = -I`$(CYGPATH_W) $(GRBINCDIR)` \ @COIN_HAS_GRB_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiGrb` @COIN_HAS_GRB_TRUE@am__append_23 = ../src/OsiGrb/libOsiGrb.la @COIN_HAS_GRB_TRUE@am__append_24 = ../src/OsiGrb/libOsiGrb.la @COIN_HAS_GRB_TRUE@am__append_25 = $(GRBLIB) @COIN_HAS_SOPLEX_TRUE@am__append_26 = OsiSpxSolverInterfaceTest.cpp @COIN_HAS_SOPLEX_TRUE@am__append_27 = $(SOPLEX_CFLAGS) \ @COIN_HAS_SOPLEX_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiSpx` @COIN_HAS_SOPLEX_TRUE@am__append_28 = ../src/OsiSpx/libOsiSpx.la @COIN_HAS_SOPLEX_TRUE@am__append_29 = ../src/OsiSpx/libOsiSpx.la @COIN_HAS_SOPLEX_TRUE@am__append_30 = $(SOPLEX_LIBS) @COIN_HAS_SAMPLE_TRUE@am__append_31 = -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` @COIN_HAS_NETLIB_TRUE@am__append_32 = -netlibDir=`$(CYGPATH_W) $(NETLIB_DATA)` -testOsiSolverInterface subdir = test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = PROGRAMS = $(noinst_PROGRAMS) am__unitTest_SOURCES_DIST = unitTest.cpp OsiTestSolver.cpp \ OsiTestSolverInterface.cpp OsiTestSolverInterfaceIO.cpp \ OsiTestSolverInterfaceTest.cpp OsiCpxSolverInterfaceTest.cpp \ OsiGlpkSolverInterfaceTest.cpp OsiMskSolverInterfaceTest.cpp \ OsiXprSolverInterfaceTest.cpp OsiGrbSolverInterfaceTest.cpp \ OsiSpxSolverInterfaceTest.cpp @COIN_HAS_CPX_TRUE@am__objects_1 = \ @COIN_HAS_CPX_TRUE@ OsiCpxSolverInterfaceTest.$(OBJEXT) @COIN_HAS_GLPK_TRUE@am__objects_2 = \ @COIN_HAS_GLPK_TRUE@ OsiGlpkSolverInterfaceTest.$(OBJEXT) @COIN_HAS_MSK_TRUE@am__objects_3 = \ @COIN_HAS_MSK_TRUE@ OsiMskSolverInterfaceTest.$(OBJEXT) @COIN_HAS_XPR_TRUE@am__objects_4 = \ @COIN_HAS_XPR_TRUE@ OsiXprSolverInterfaceTest.$(OBJEXT) @COIN_HAS_GRB_TRUE@am__objects_5 = \ @COIN_HAS_GRB_TRUE@ OsiGrbSolverInterfaceTest.$(OBJEXT) @COIN_HAS_SOPLEX_TRUE@am__objects_6 = \ @COIN_HAS_SOPLEX_TRUE@ OsiSpxSolverInterfaceTest.$(OBJEXT) am_unitTest_OBJECTS = unitTest.$(OBJEXT) OsiTestSolver.$(OBJEXT) \ OsiTestSolverInterface.$(OBJEXT) \ OsiTestSolverInterfaceIO.$(OBJEXT) \ OsiTestSolverInterfaceTest.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) unitTest_OBJECTS = $(am_unitTest_OBJECTS) @COIN_HAS_CPX_TRUE@am__DEPENDENCIES_1 = ../src/OsiCpx/libOsiCpx.la @COIN_HAS_GLPK_TRUE@am__DEPENDENCIES_2 = ../src/OsiGlpk/libOsiGlpk.la @COIN_HAS_MSK_TRUE@am__DEPENDENCIES_3 = ../src/OsiMsk/libOsiMsk.la @COIN_HAS_XPR_TRUE@am__DEPENDENCIES_4 = ../src/OsiXpr/libOsiXpr.la @COIN_HAS_GRB_TRUE@am__DEPENDENCIES_5 = ../src/OsiGrb/libOsiGrb.la @COIN_HAS_SOPLEX_TRUE@am__DEPENDENCIES_6 = ../src/OsiSpx/libOsiSpx.la am__DEPENDENCIES_7 = depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(unitTest_SOURCES) DIST_SOURCES = $(am__unitTest_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ $(am__append_5) $(am__append_10) $(am__append_15) \ $(am__append_20) $(am__append_25) $(am__append_30) LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign unitTest_SOURCES = unitTest.cpp OsiTestSolver.cpp \ OsiTestSolverInterface.cpp OsiTestSolverInterfaceIO.cpp \ OsiTestSolverInterfaceTest.cpp $(am__append_1) $(am__append_6) \ $(am__append_11) $(am__append_16) $(am__append_21) \ $(am__append_26) # List libraries of COIN projects unitTest_LDADD = ../src/OsiCommonTest/libOsiCommonTests.la \ $(am__append_3) $(am__append_8) $(am__append_13) \ $(am__append_18) $(am__append_23) $(am__append_28) \ ../src/Osi/libOsi.la $(OSILIB_LIBS) unitTest_DEPENDENCIES = ../src/OsiCommonTest/libOsiCommonTests.la \ $(am__append_4) $(am__append_9) $(am__append_14) \ $(am__append_19) $(am__append_24) $(am__append_29) \ ../src/Osi/libOsi.la $(OSILIB_DEPENDENCIES) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../src/Osi` -I`$(CYGPATH_W) \ $(srcdir)/../src/OsiCommonTest` $(COINUTILS_CFLAGS) \ $(am__append_2) $(am__append_7) $(am__append_12) \ $(am__append_17) $(am__append_22) $(am__append_27) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi unittestflags = $(am__append_31) $(am__append_32) ######################################################################## # Cleaning stuff # ######################################################################## # Here we list everything that is not generated by the compiler, e.g., # output files of a program DISTCLEANFILES = *.mps *.mps.gz *.lp test2out *.out.gz *.out all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done unitTest$(EXEEXT): $(unitTest_OBJECTS) $(unitTest_DEPENDENCIES) @rm -f unitTest$(EXEEXT) $(CXXLINK) $(unitTest_LDFLAGS) $(unitTest_OBJECTS) $(unitTest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiCpxSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiGlpkSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiGrbSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiMskSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSpxSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiTestSolver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiTestSolverInterface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiTestSolverInterfaceIO.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiTestSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiXprSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unitTest.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-info-am test: unitTest$(EXEEXT) ./unitTest$(EXEEXT) $(unittestflags) .PHONY: test # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Osi/test/OsiTestSolverInterface.cpp0000644000175000017500000011402711510425067020144 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). // this is a copy of OsiVolSolverInterface (trunk rev. 1466) renamed to OsiTestSolverInterface #include "CoinPragma.hpp" #include #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinWarmStartDual.hpp" #include "OsiTestSolverInterface.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" //####################################################################### // Private helper methods //####################################################################### void OsiTestSolverInterface::updateRowMatrix_() const { if (! rowMatrixCurrent_) { rowMatrix_.reverseOrderedCopyOf(colMatrix_); rowMatrixCurrent_ = true; } } void OsiTestSolverInterface::updateColMatrix_() const { if (! colMatrixCurrent_) { colMatrix_.reverseOrderedCopyOf(rowMatrix_); colMatrixCurrent_ = true; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::checkData_() const { int i; for (i = getNumRows() - 1; i >= 0; --i) { if (rowlower_[i] > -1.0e20 && rowupper_[i] < 1.0e20 && rowlower_[i] != rowupper_[i]) throw CoinError("Volume algorithm is unable to handle ranged rows", "checkData_", "OsiTestSolverInterface"); } for (i = getNumCols() - 1; i >= 0; --i) { if (collower_[i] < -1.0e20 || colupper_[i] > 1.0e20) throw CoinError("Volume algorithm is unable to handle infinite bounds", "checkData_", "OsiTestSolverInterface"); } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::compute_rc_(const double* u, double* rc) const { if (isZeroOneMinusOne_) { rowMatrixOneMinusOne_->timesMajor(u, rc); } else { rowMatrix_.transposeTimes(u, rc); } const int psize = getNumCols(); std::transform(rc, rc+psize, objcoeffs_, rc, std::minus()); std::transform(rc, rc+psize, rc, std::negate()); } //############################################################################# bool OsiTestSolverInterface::test_zero_one_minusone_(const CoinPackedMatrix& m) const { const int vecnum = m.getMajorDim(); const double* elem = m.getElements(); const int* start = m.getVectorStarts(); const int* length = m.getVectorLengths(); int i, j; for (i = 0; i < vecnum; ++i) { for (j = start[i] + length[i] - 1; j >= start[i]; --j) { const double val = elem[j]; if (val != 1.0 && val != 0.0 && val != -1.0) { return false; } } } return true; } //----------------------------------------------------------------------------- OsiTestSolverInterface::OsiVolMatrixOneMinusOne_:: OsiVolMatrixOneMinusOne_(const CoinPackedMatrix& m) { const int major = m.getMajorDim(); const double* elem = m.getElements(); const int* ind = m.getIndices(); const int* start = m.getVectorStarts(); const int* length = m.getVectorLengths(); majorDim_ = major; minorDim_ = m.getMinorDim(); plusSize_ = 0; minusSize_ = 0; int i, j; for (i = 0; i < major; ++i) { for (j = start[i] + length[i] - 1; j >= start[i]; --j) { const double val = elem[j]; if (val == 1.0) { ++plusSize_; } else if (val == -1.0) { ++minusSize_; } } } if (plusSize_ > 0) { plusInd_ = new int[plusSize_]; } if (minusSize_ > 0) { minusInd_ = new int[minusSize_]; } plusStart_ = new int[major]; plusLength_ = new int[major]; minusStart_ = new int[major]; minusLength_ = new int[major]; plusSize_ = 0; minusSize_ = 0; for (i = 0; i < major; ++i) { plusStart_[i] = plusSize_; minusStart_[i] = minusSize_; const int last = start[i] + length[i]; for (j = start[i]; j < last; ++j) { const double val = elem[j]; if (val == 1.0) { plusInd_[plusSize_++] = ind[j]; } else if (val == -1.0) { minusInd_[minusSize_++] = ind[j]; } } plusLength_[i] = plusSize_ - plusStart_[i]; minusLength_[i] = minusSize_ - minusStart_[i]; } if (plusSize_ == 0) { delete[] plusStart_; plusStart_ = NULL; delete[] plusLength_; plusLength_ = NULL; } if (minusSize_ == 0) { delete[] minusStart_; minusStart_ = NULL; delete[] minusLength_; minusLength_ = NULL; } } //----------------------------------------------------------------------------- OsiTestSolverInterface::OsiVolMatrixOneMinusOne_:: ~OsiVolMatrixOneMinusOne_() { if (plusSize_ > 0) { delete[] plusInd_; plusInd_ = NULL; delete[] plusStart_; plusStart_ = NULL; delete[] plusLength_; plusLength_ = NULL; } if (minusSize_ > 0) { delete[] minusInd_; minusInd_ = NULL; delete[] minusStart_; minusStart_ = NULL; delete[] minusLength_; minusLength_ = NULL; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::OsiVolMatrixOneMinusOne_:: timesMajor(const double* x, double* y) const { memset(y, 0, minorDim_ * sizeof(double)); int i; if (plusSize_ > 0 && minusSize_ > 0) { for (i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const int* vecInd = plusInd_ + plusStart_[i]; int j; for ( j = plusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] += x_i; vecInd = minusInd_ + minusStart_[i]; for ( j = minusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] -= x_i; } } return; } if (plusSize_ > 0) { for (i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const int* vecInd = plusInd_ + plusStart_[i]; for (int j = plusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] += x_i; } } return; } if (minusSize_ > 0) { for (i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const int* vecInd = minusInd_ + minusStart_[i]; for (int j = minusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] -= x_i; } } return; } } //############################################################################# void OsiTestSolverInterface::gutsOfDestructor_() { rowMatrix_.clear(); colMatrix_.clear(); rowMatrixCurrent_ = true; colMatrixCurrent_ = true; delete[] colupper_; colupper_ = 0; delete[] collower_; collower_ = 0; delete[] continuous_; continuous_ = 0; delete[] rowupper_; rowupper_ = 0; delete[] rowlower_; rowlower_ = 0; delete[] rowsense_; rowsense_ = 0; delete[] rhs_; rhs_ = 0; delete[] rowrange_; rowrange_ = 0; delete[] objcoeffs_; objcoeffs_ = 0; delete[] colsol_; colsol_ = 0; delete[] rowprice_; rowprice_ = 0; delete[] rowpriceHotStart_; rowpriceHotStart_ = 0; delete[] rc_; rc_ = 0; delete[] lhs_; lhs_ = 0; lagrangeanCost_ = 0.0; maxNumrows_ = 0; maxNumcols_ = 0; } //############################################################################# void OsiTestSolverInterface::rowRimAllocator_() { rowupper_ = new double[maxNumrows_]; rowlower_ = new double[maxNumrows_]; rowsense_ = new char[maxNumrows_]; rhs_ = new double[maxNumrows_]; rowrange_ = new double[maxNumrows_]; rowprice_ = new double[maxNumrows_]; lhs_ = new double[maxNumrows_]; } //----------------------------------------------------------------------------- void OsiTestSolverInterface::colRimAllocator_() { colupper_ = new double[maxNumcols_]; collower_ = new double[maxNumcols_]; continuous_ = new bool[maxNumcols_]; objcoeffs_ = new double[maxNumcols_]; colsol_ = new double[maxNumcols_]; rc_ = new double[maxNumcols_]; } //----------------------------------------------------------------------------- void OsiTestSolverInterface::rowRimResize_(const int newSize) { if (newSize > maxNumrows_) { double* rub = rowupper_; double* rlb = rowlower_; char* sense = rowsense_; double* right = rhs_; double* range = rowrange_; double* dual = rowprice_; double* left = lhs_; maxNumrows_ = CoinMax(1000, (newSize * 5) / 4); rowRimAllocator_(); const int rownum = getNumRows(); CoinDisjointCopyN(rub , rownum, rowupper_); CoinDisjointCopyN(rlb , rownum, rowlower_); CoinDisjointCopyN(sense, rownum, rowsense_); CoinDisjointCopyN(right, rownum, rhs_); CoinDisjointCopyN(range, rownum, rowrange_); CoinDisjointCopyN(dual , rownum, rowprice_); CoinDisjointCopyN(left , rownum, lhs_); delete[] rub; delete[] rlb; delete[] sense; delete[] right; delete[] range; delete[] dual; delete[] left; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::colRimResize_(const int newSize) { if (newSize > maxNumcols_) { double* cub = colupper_; double* clb = collower_; bool* cont = continuous_; double* obj = objcoeffs_; double* sol = colsol_; double* rc = rc_; maxNumcols_ = CoinMax(1000, (newSize * 5) / 4); colRimAllocator_(); const int colnum = getNumCols(); CoinDisjointCopyN(cub , colnum, colupper_); CoinDisjointCopyN(clb , colnum, collower_); CoinDisjointCopyN(cont, colnum, continuous_); CoinDisjointCopyN(obj , colnum, objcoeffs_); CoinDisjointCopyN(sol , colnum, colsol_); CoinDisjointCopyN(rc , colnum, rc_); delete[] cub; delete[] clb; delete[] cont; delete[] obj; delete[] sol; delete[] rc; } } //############################################################################# void OsiTestSolverInterface::convertBoundsToSenses_() { for (int i = getNumRows() - 1; i >= 0; --i ) { convertBoundToSense(rowlower_[i], rowupper_[i], rowsense_[i], rhs_[i], rowrange_[i]); } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::convertSensesToBounds_() { for (int i = getNumRows() - 1; i >= 0; --i) { convertSenseToBound(rowsense_[i], rhs_[i], rowrange_[i], rowlower_[i], rowupper_[i]); } } //############################################################################# // Here are the routines implementing the virtual methods inherited from // VOL_user_hooks. //############################################################################# int OsiTestSolverInterface::compute_rc(const VOL_dvector& u, VOL_dvector& rc) { compute_rc_(u.v, rc.v); return 0; } //----------------------------------------------------------------------- int OsiTestSolverInterface::solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost) { int i; const int psize = x.size(); for (i = 0; i < psize; ++i) { x[i] = (rc[i] >= 0.0) ? collower_[i] : colupper_[i]; } const int dsize = v.size(); lcost = (std::inner_product(rhs_, rhs_ + dsize, dual.v, 0.0) + std::inner_product(x.v, x.v + psize, rc.v, 0.0) ); if (isZeroOneMinusOne_) { colMatrixOneMinusOne_->timesMajor(x.v, v.v); } else { colMatrix_.times(x.v, v.v); } std::transform(v.v, v.v+dsize, rhs_, v.v, std::minus()); std::transform(v.v, v.v+dsize, v.v, std::negate()); pcost = std::inner_product(x.v, x.v + psize, objcoeffs_, 0.0); return 0; } //############################################################################# // Solve methods //############################################################################# void OsiTestSolverInterface::initialSolve() { // set every entry to 0.0 in the dual solution CoinFillN(rowprice_, getNumRows(), 0.0); resolve(); } //----------------------------------------------------------------------------- void OsiTestSolverInterface::resolve() { int i; checkData_(); // Only one of these can do any work updateRowMatrix_(); updateColMatrix_(); const int dsize = getNumRows(); const int psize = getNumCols(); // Negate the objective coefficients if necessary if (objsense_ < 0) { std::transform(objcoeffs_, objcoeffs_+psize, objcoeffs_, std::negate()); } // Set the lb/ub on the duals volprob_.dual_lb.allocate(dsize); volprob_.dual_ub.allocate(dsize); double * dlb = volprob_.dual_lb.v; double * dub = volprob_.dual_ub.v; for (i = 0; i < dsize; ++i) { dlb[i] = rowupper_[i] < getInfinity() ? -1.0e31 : 0.0; dub[i] = rowlower_[i] > -getInfinity() ? 1.0e31 : 0.0; } volprob_.dsize = dsize; volprob_.psize = psize; // Set the dual starting point VOL_dvector& dsol = volprob_.dsol; dsol.allocate(dsize); std::transform(rowprice_, rowprice_+dsize, dsol.v, std::bind2nd(std::multiplies(), objsense_)); // adjust the dual vector (if necessary) to be sure it's feasible double * dv = dsol.v; for (i = 0; i < dsize; ++i) { if (dv[i] < dlb[i]) { dv[i] = dlb[i]; } else if (dv[i] > dub[i]) { dv[i] = dub[i]; } } // If requested, check whether the matrix contains anything but 0/1/-1 #if 0 isZeroOneMinusOne_ = false; #else isZeroOneMinusOne_ = test_zero_one_minusone_(colMatrix_); if (isZeroOneMinusOne_) { colMatrixOneMinusOne_ = new OsiVolMatrixOneMinusOne_(colMatrix_); rowMatrixOneMinusOne_ = new OsiVolMatrixOneMinusOne_(rowMatrix_); } #endif volprob_.solve(*this, true); // extract the solution // the lower bound on the objective value lagrangeanCost_ = objsense_ * volprob_.value; // the primal solution CoinDisjointCopyN(volprob_.psol.v, psize, colsol_); // Reset the objective coefficients if necessary if (objsense_ < 0) { std::transform(objcoeffs_, objcoeffs_ + psize, objcoeffs_, std::negate()); // also, multiply the dual solution by -1 std::transform(volprob_.dsol.v, volprob_.dsol.v+dsize, rowprice_, std::negate()); } else { // now we just have to copy the dual CoinDisjointCopyN(volprob_.dsol.v, dsize, rowprice_); } // Compute the reduced costs compute_rc_(rowprice_, rc_); // Compute the left hand side (row activity levels) if (isZeroOneMinusOne_) { colMatrixOneMinusOne_->timesMajor(colsol_, lhs_); } else { colMatrix_.times(colsol_, lhs_); } if (isZeroOneMinusOne_) { delete colMatrixOneMinusOne_; colMatrixOneMinusOne_ = NULL; delete rowMatrixOneMinusOne_; rowMatrixOneMinusOne_ = NULL; } } //############################################################################# // Parameter related methods //############################################################################# bool OsiTestSolverInterface::setIntParam(OsiIntParam key, int value) { switch (key) { case OsiMaxNumIteration: if (value < 0) return false; volprob_.parm.maxsgriters = value; break; case OsiMaxNumIterationHotStart: if (value < 0) return false; OsiSolverInterface::setIntParam(key, value); break; case OsiLastIntParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::setDblParam(OsiDblParam key, double value) { switch (key) { case OsiDualObjectiveLimit: volprob_.parm.ubinit = value; break; case OsiPrimalObjectiveLimit: // not applicable return false; case OsiDualTolerance: // only ~0 is applicable, so accept only 1e-50 ... return (value == 1e-50); case OsiPrimalTolerance: if (value < 1e-04 || value > 1e-1) return false; volprob_.parm.primal_abs_precision = value; break; case OsiObjOffset: return OsiSolverInterface::setDblParam(key, value); case OsiLastDblParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::setStrParam(OsiStrParam key, const std::string & value) { bool retval=false; switch (key) { case OsiSolverName: return false; case OsiProbName: OsiSolverInterface::setStrParam(key,value); return retval = true; case OsiLastStrParam: return false; default: return false; } return false; } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::getIntParam(OsiIntParam key, int& value) const { switch (key) { case OsiMaxNumIteration: value = volprob_.parm.maxsgriters; break; case OsiMaxNumIterationHotStart: OsiSolverInterface::getIntParam(key, value); break; case OsiLastIntParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::getDblParam(OsiDblParam key, double& value) const { switch (key) { case OsiDualObjectiveLimit: value = volprob_.parm.ubinit; break; case OsiPrimalObjectiveLimit: // not applicable return false; case OsiDualTolerance: // not applicable, but must return almost 0 value = 1e-50; break; case OsiPrimalTolerance: value = volprob_.parm.primal_abs_precision; break; case OsiObjOffset: OsiSolverInterface::getDblParam(key, value); break; case OsiLastDblParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::getStrParam(OsiStrParam key, std::string & value) const { switch (key) { case OsiProbName: OsiSolverInterface::getStrParam(key, value); return true; case OsiSolverName: value = "vol"; return true; case OsiLastStrParam: return false; default: return false; } return false; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiTestSolverInterface::isAbandoned() const { // *THINK*: see the *THINK* in isProvenOptimal() return false; } bool OsiTestSolverInterface::isProvenOptimal() const { // if exited before reaching the iteration limit it is declared optimal // *THINK*: Granted, it can exit because the dual value is not improving. // *THINK*: Should that be "abandoned"? But then it'll be abandoned way too // *THINK*: frequently... return (! isDualObjectiveLimitReached() && volprob_.iter() < volprob_.parm.maxsgriters); } bool OsiTestSolverInterface::isProvenPrimalInfeasible() const { // LL: *FIXME* : at the moment the volume can't detect primal infeasibility. // LL: *FIXME* : The dual will go to infinity. return false; } bool OsiTestSolverInterface::isProvenDualInfeasible() const { // LL: *FIXME* : at the moment the volume assumes dual feasibility... return false; } bool OsiTestSolverInterface::isPrimalObjectiveLimitReached() const { // The volume algorithm doesn't know anything about the primal; only the // dual is monotone return false; } bool OsiTestSolverInterface::isDualObjectiveLimitReached() const { return volprob_.parm.ubinit - volprob_.value < volprob_.parm.granularity; } bool OsiTestSolverInterface::isIterationLimitReached() const { return volprob_.iter() >= volprob_.parm.maxsgriters; } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart* OsiTestSolverInterface::getEmptyWarmStart () const { return (dynamic_cast(new CoinWarmStartDual())) ; } CoinWarmStart* OsiTestSolverInterface::getWarmStart() const { return new CoinWarmStartDual(getNumRows(), rowprice_); } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::setWarmStart(const CoinWarmStart* warmstart) { const CoinWarmStartDual* ws = dynamic_cast(warmstart); if (! ws) return false; const int ws_size = ws->size(); if (ws_size != getNumRows() && ws_size != 0) { throw CoinError("wrong dual warmstart size", "setWarmStart", "OsiTestSolverInterface"); } CoinDisjointCopyN(ws->dual(), ws_size, rowprice_); return true; } //############################################################################# // HotStart related methods //############################################################################# void OsiTestSolverInterface::markHotStart() { delete[] rowpriceHotStart_; rowpriceHotStart_ = new double[getNumRows()]; CoinDisjointCopyN(rowprice_, getNumRows(), rowpriceHotStart_); } void OsiTestSolverInterface::solveFromHotStart() { int itlimOrig = volprob_.parm.maxsgriters; getIntParam(OsiMaxNumIterationHotStart, volprob_.parm.maxsgriters); CoinDisjointCopyN(rowpriceHotStart_, getNumRows(), rowprice_); resolve(); volprob_.parm.maxsgriters = itlimOrig; } void OsiTestSolverInterface::unmarkHotStart() { delete[] rowpriceHotStart_; rowpriceHotStart_ = NULL; } //############################################################################# // Problem information methods (original data) //############################################################################# bool OsiTestSolverInterface::isContinuous(int colNumber) const { assert( continuous_!=NULL ); if ( continuous_[colNumber] ) return true; return false; } //----------------------------------------------------------------------------- const CoinPackedMatrix * OsiTestSolverInterface::getMatrixByRow() const { updateRowMatrix_(); return &rowMatrix_; } //----------------------------------------------------------------------- const CoinPackedMatrix * OsiTestSolverInterface::getMatrixByCol() const { updateColMatrix_(); return &colMatrix_; } //############################################################################# // Problem information methods (results) //############################################################################# std::vector OsiTestSolverInterface::getDualRays(int /*maxNumRays*/, bool /*fullRay*/) const { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "getDualRays", "OsiTestSolverInterface"); return std::vector(); } //------------------------------------------------------------------ std::vector OsiTestSolverInterface::getPrimalRays(int /*maxNumRays*/) const { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "getPrimalRays", "OsiTestSolverInterface"); return std::vector(); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# //----------------------------------------------------------------------------- void OsiTestSolverInterface::setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList) { while (indexFirst < indexLast) { const int ind = *indexFirst; collower_[ind] = boundList[0]; colupper_[ind] = boundList[1]; ++indexFirst; boundList += 2; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList) { if (indexLast - indexFirst < getNumRows() / 3) { while (indexFirst < indexLast) { setRowBounds(*indexFirst, boundList[0], boundList[1]); ++indexFirst; boundList += 2; } } else { // it's better to convert everything at once while (indexFirst < indexLast) { const int ind = *indexFirst; rowlower_[ind] = boundList[0]; rowupper_[ind] = boundList[1]; ++indexFirst; boundList += 2; } convertBoundsToSenses_(); } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList) { if (indexLast - indexFirst < getNumRows() / 3) { while (indexFirst < indexLast) { setRowType(*indexFirst++, *senseList++, *rhsList++, *rangeList++); } } else { // it's better to convert everything at once while (indexFirst < indexLast) { const int ind = *indexFirst++; rowsense_[ind] = *senseList++; rhs_[ind] = *rhsList++; rowrange_[ind] = *rangeList++; } convertSensesToBounds_(); } } //############################################################################# void OsiTestSolverInterface::setContinuous(int index) { assert(continuous_ != NULL); if (index < 0 || index > getNumCols()) { throw CoinError("Index out of bound.", "setContinuous", "OsiTestSolverInterface"); } continuous_[index] = true; } //----------------------------------------------------------------------- void OsiTestSolverInterface::setInteger(int index) { assert(continuous_ != NULL); if (index < 0 || index > getNumCols()) { throw CoinError("Index out of bound.", "setContinuous", "OsiTestSolverInterface"); } continuous_[index] = false; } //----------------------------------------------------------------------- void OsiTestSolverInterface::setContinuous(const int* indices, int len) { assert(continuous_ != NULL); const int colnum = getNumCols(); int i; for (i = len - 1; i >= 0; --i) { if (indices[i] < 0 || indices[i] > colnum) { throw CoinError("Index out of bound.", "setContinuous", "OsiTestSolverInterface"); } } for (i = len - 1; i >= 0; --i) { continuous_[indices[i]] = true; } } //----------------------------------------------------------------------- void OsiTestSolverInterface::setInteger(const int* indices, int len) { assert(continuous_ != NULL); const int colnum = getNumCols(); int i; for (i = len - 1; i >= 0; --i) { if (indices[i] < 0 || indices[i] > colnum) { throw CoinError("Index out of bound.", "setContinuous", "OsiTestSolverInterface"); } } for (i = len - 1; i >= 0; --i) { continuous_[indices[i]] = false; } } //############################################################################# void OsiTestSolverInterface::setColSolution(const double *colsol) { CoinDisjointCopyN(colsol, getNumCols(), colsol_); // Compute the left hand side (row activity levels) if (isZeroOneMinusOne_) { colMatrixOneMinusOne_->timesMajor(colsol_, lhs_); } else { colMatrix_.times(colsol_, lhs_); } } //----------------------------------------------------------------------- void OsiTestSolverInterface::setRowPrice(const double *rowprice) { CoinDisjointCopyN(rowprice, getNumRows(), rowprice_); compute_rc_(rowprice_, rc_); } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiTestSolverInterface::addCol(const CoinPackedVectorBase& vec, const double collb, const double colub, const double obj) { const int colnum = getNumCols(); colRimResize_(colnum + 1); collower_[colnum] = collb; colupper_[colnum] = colub; objcoeffs_[colnum] = obj; continuous_[colnum] = true; colsol_[colnum] = fabs(collb) 0) { const int colnum = getNumCols(); colRimResize_(colnum + numcols); CoinDisjointCopyN(collb, numcols, collower_ + colnum); CoinDisjointCopyN(colub, numcols, colupper_ + colnum); CoinDisjointCopyN(obj, numcols, objcoeffs_ + colnum); CoinFillN(continuous_ + colnum, numcols, true); int c; for ( c=0; c 0) { int * delPos = new int[num]; CoinDisjointCopyN(columnIndices, num, delPos); std::sort(delPos, delPos + num); const int delNum = static_cast(std::unique(delPos, delPos + num) - delPos); const int colnum = getNumCols(); CoinDeleteEntriesFromArray(collower_, collower_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(colupper_, colupper_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(objcoeffs_, objcoeffs_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(continuous_, continuous_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(colsol_, colsol_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rc_, rc_ + colnum, delPos, delPos + delNum); updateColMatrix_(); colMatrix_.deleteCols(delNum, delPos); rowMatrixCurrent_ = false; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::addRow(const CoinPackedVectorBase& vec, const double rowlb, const double rowub) { const int rownum = getNumRows(); rowRimResize_(rownum + 1); rowlower_[rownum] = rowlb; rowupper_[rownum] = rowub; convertBoundToSense(rowlb, rowub, rowsense_[rownum], rhs_[rownum], rowrange_[rownum]); rowprice_[rownum] = 0.0; lhs_[rownum] = 0.0; updateRowMatrix_(); rowMatrix_.appendRow(vec); colMatrixCurrent_ = false; } //----------------------------------------------------------------------------- void OsiTestSolverInterface::addRow(const CoinPackedVectorBase& vec, const char rowsen, const double rowrhs, const double rowrng) { const int rownum = getNumRows(); rowRimResize_(rownum + 1); rowsense_[rownum] = rowsen; rhs_[rownum] = rowrhs; rowrange_[rownum] = rowrng; convertSenseToBound(rowsen, rowrhs, rowrng, rowlower_[rownum], rowupper_[rownum]); rowprice_[rownum] = 0.0; lhs_[rownum] = 0.0; updateRowMatrix_(); rowMatrix_.appendRow(vec); colMatrixCurrent_ = false; } //----------------------------------------------------------------------------- void OsiTestSolverInterface::addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub) { if (numrows > 0) { const int rownum = getNumRows(); rowRimResize_(rownum + numrows); CoinDisjointCopyN(rowlb, numrows, rowlower_ + rownum); CoinDisjointCopyN(rowub, numrows, rowupper_ + rownum); for (int i = rownum + numrows - 1; i >= rownum; --i) { convertBoundToSense(rowlower_[i], rowupper_[i], rowsense_[i], rhs_[i], rowrange_[i]); } CoinFillN(rowprice_ + rownum, numrows, 0.0); CoinFillN(lhs_ + rownum, numrows, 0.0); updateRowMatrix_(); rowMatrix_.appendRows(numrows, rows); colMatrixCurrent_ = false; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng) { if (numrows > 0) { const int rownum = getNumRows(); rowRimResize_(rownum + numrows); CoinDisjointCopyN(rowsen, numrows, rowsense_ + rownum); CoinDisjointCopyN(rowrhs, numrows, rhs_ + rownum); CoinDisjointCopyN(rowrng, numrows, rowrange_ + rownum); for (int i = rownum + numrows - 1; i >= rownum; --i) { convertSenseToBound(rowsense_[i], rhs_[i], rowrange_[i], rowlower_[i], rowupper_[i]); } CoinFillN(rowprice_ + rownum, numrows, 0.0); CoinFillN(lhs_ + rownum, numrows, 0.0); updateRowMatrix_(); rowMatrix_.appendRows(numrows, rows); colMatrixCurrent_ = false; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::deleteRows(const int num, const int * rowIndices) { if (num > 0) { int * delPos = new int[num]; CoinDisjointCopyN(rowIndices, num, delPos); std::sort(delPos, delPos + num); const int delNum = static_cast(std::unique(delPos, delPos + num) - delPos); const int rownum = getNumRows(); CoinDeleteEntriesFromArray(rowlower_, rowlower_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowupper_, rowupper_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowsense_, rowsense_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowrange_, rowrange_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rhs_, rhs_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowprice_, rowprice_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(lhs_, lhs_ + rownum, delPos, delPos + delNum); updateRowMatrix_(); rowMatrix_.deleteRows(delNum, delPos); colMatrixCurrent_ = false; delete[] delPos; } } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# OsiTestSolverInterface::OsiTestSolverInterface () : rowMatrixCurrent_(true), rowMatrix_(), colMatrixCurrent_(true), colMatrix_(), isZeroOneMinusOne_(false), colupper_(0), collower_(0), continuous_(0), rowupper_(0), rowlower_(0), rowsense_(0), rhs_(0), rowrange_(0), objcoeffs_(0), objsense_(1.0), colsol_(0), rowprice_(0), rc_(0), lhs_(0), lagrangeanCost_(0.0), rowpriceHotStart_(0), maxNumrows_(0), maxNumcols_(0), volprob_() { volprob_.parm.granularity = 0.0; } //----------------------------------------------------------------------- OsiSolverInterface * OsiTestSolverInterface::clone(bool copyData) const { return copyData ? new OsiTestSolverInterface(*this) : new OsiTestSolverInterface(); } //----------------------------------------------------------------------- OsiTestSolverInterface::OsiTestSolverInterface(const OsiTestSolverInterface& x) : OsiSolverInterface(x), rowMatrixCurrent_(true), rowMatrix_(), colMatrixCurrent_(true), colMatrix_(), isZeroOneMinusOne_(false), colupper_(0), collower_(0), continuous_(0), rowupper_(0), rowlower_(0), rowsense_(0), rhs_(0), rowrange_(0), objcoeffs_(0), objsense_(1.0), colsol_(0), rowprice_(0), rc_(0), lhs_(0), lagrangeanCost_(0.0), rowpriceHotStart_(0), maxNumrows_(0), maxNumcols_(0), volprob_() { operator=(x); volprob_.parm.granularity = 0.0; } //----------------------------------------------------------------------- OsiTestSolverInterface& OsiTestSolverInterface::operator=(const OsiTestSolverInterface& rhs) { if (&rhs == this) return *this; OsiSolverInterface::operator=(rhs); gutsOfDestructor_(); rowMatrixCurrent_ = rhs.rowMatrixCurrent_; if (rowMatrixCurrent_) rowMatrix_ = rhs.rowMatrix_; colMatrixCurrent_ = rhs.colMatrixCurrent_; if (colMatrixCurrent_) colMatrix_ = rhs.colMatrix_; if (rhs.maxNumrows_) { maxNumrows_ = rhs.maxNumrows_; rowRimAllocator_(); const int rownum = getNumRows(); CoinDisjointCopyN(rhs.rowupper_, rownum, rowupper_); CoinDisjointCopyN(rhs.rowlower_, rownum, rowlower_); CoinDisjointCopyN(rhs.rowsense_, rownum, rowsense_); CoinDisjointCopyN(rhs.rhs_, rownum, rhs_); CoinDisjointCopyN(rhs.rowrange_, rownum, rowrange_); CoinDisjointCopyN(rhs.rowprice_, rownum, rowprice_); CoinDisjointCopyN(rhs.lhs_, rownum, lhs_); } if (rhs.maxNumcols_) { maxNumcols_ = rhs.maxNumcols_; colRimAllocator_(); const int colnum = getNumCols(); CoinDisjointCopyN(rhs.colupper_, colnum, colupper_); CoinDisjointCopyN(rhs.collower_, colnum, collower_); CoinDisjointCopyN(rhs.continuous_, colnum, continuous_); CoinDisjointCopyN(rhs.objcoeffs_, colnum, objcoeffs_); CoinDisjointCopyN(rhs.colsol_, colnum, colsol_); CoinDisjointCopyN(rhs.rc_, colnum, rc_); } volprob_.parm.granularity = 0.0; return *this; } //----------------------------------------------------------------------- OsiTestSolverInterface::~OsiTestSolverInterface () { gutsOfDestructor_(); } //############################################################################# // Applying cuts //############################################################################# void OsiTestSolverInterface::applyRowCut(const OsiRowCut& rc) { const int rownum = getNumRows(); const double lb = rc.lb(); const double ub = rc.ub(); rowRimResize_(rownum + 1); rowprice_[rownum] = 0.0; rowlower_[rownum] = lb; rowupper_[rownum] = ub; convertBoundToSense(lb, ub, rowsense_[rownum], rhs_[rownum], rowrange_[rownum]); updateRowMatrix_(); rowMatrix_.appendRow(rc.row()); colMatrixCurrent_ = false; } //----------------------------------------------------------------------- void OsiTestSolverInterface::applyColCut(const OsiColCut& cc) { int i; const double* lb_elem = cc.lbs().getElements(); const int* lb_ind = cc.lbs().getIndices(); for (i = cc.lbs().getNumElements() - 1; i >= 0; --i) { collower_[lb_ind[i]] = CoinMax(collower_[lb_ind[i]], lb_elem[i]); } const double* ub_elem = cc.ubs().getElements(); const int* ub_ind = cc.ubs().getIndices(); for (i = cc.ubs().getNumElements() - 1; i >= 0; --i) { colupper_[ub_ind[i]] = CoinMin(colupper_[ub_ind[i]], ub_elem[i]); } } //############################################################################# Vol-1.5.4/Osi/test/unitTest.cpp0000644000175000017500000003042312104023262015341 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // Test individual classes or groups of classes // This file is licensed under the terms of Eclipse Public License (EPL). // $Id: unitTest.cpp 1891 2013-02-04 21:22:58Z stefan $ #include "CoinPragma.hpp" #include "OsiConfig.h" #include #include "OsiUnitTests.hpp" #include "OsiSolverInterface.hpp" #include "OsiTestSolverInterface.hpp" using namespace OsiUnitTest; /* Currently the Osi unit test is configured to exercise only the external solvers. The Osi interfaces for Coin solvers have been moved out to the project's repository and each has its own private Osi unit test. This unit test will include as many external solvers as are available. If none of them are available, the OsiTestSolver (currently a clone of Vol) will be used. If any other solver is available, its presence will disable use of the test solver. You can disable it manually by undefining USETESTSOLVER. You may want to use the Osi unit test to compare two or more Coin solvers. In particular, OsiSolverInterfaceMpsUnitTest, which runs the Netlib problem set, is set up for exactly this sort of comparison. To take advantage of it, you'll need to edit this file and Makefile in order to get it to work. */ #define USETESTSOLVER /* Some convenient undef's, to make it easy to isolate a particular solver. Uncomment to disable a solver that's included in the build. Leave them commented if you're happy with running the unitTest for all solvers in the build. */ // #undef COIN_HAS_XPR // #undef COIN_HAS_CPX // #undef COIN_HAS_GLPK // #undef COIN_HAS_MSK // #undef COIN_HAS_GRB // #undef COIN_HAS_SOPLEX #ifdef COIN_HAS_XPR #include "OsiXprSolverInterface.hpp" #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef COIN_HAS_CPX #include "OsiCpxSolverInterface.hpp" #undef USETESTSOLVER #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef COIN_HAS_GLPK #include "OsiGlpkSolverInterface.hpp" #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef COIN_HAS_MSK #include "OsiMskSolverInterface.hpp" #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef COIN_HAS_GRB #include "OsiGrbSolverInterface.hpp" #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef COIN_HAS_SOPLEX #include "OsiSpxSolverInterface.hpp" #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef USETESTSOLVER #include "OsiTestSolverInterface.hpp" #endif //---------------------------------------------------------------- // to see parameter list, call unitTest -usage //---------------------------------------------------------------- int main (int argc, const char *argv[]) { /* Start off with various bits of initialisation that don't really belong anywhere else. First off, synchronise C++ stream i/o with C stdio. This makes debugging output a bit more comprehensible. It still suffers from interleave of cout (stdout) and cerr (stderr), but -nobuf deals with that. */ std::ios::sync_with_stdio() ; /* Suppress an popup window that Windows shows in response to a crash. See note at head of file. */ WindowsErrorPopupBlocker(); /* Might as well make use of this convenient Xpress feature. */ #ifdef COIN_HAS_XPR OsiXprSolverInterface::setLogFileName("xprCallTrace.txt"); #endif /* Process command line parameters. */ std::map parms ; if (processParameters(argc,argv,parms) == false) return 1; std::string mpsDir = parms["-mpsDir"] ; std::string netlibDir = parms["-netlibDir"] ; /* Test Osi{Row,Col}Cut routines. */ #ifdef COIN_HAS_XPR { OsiXprSolverInterface xprSi; testingMessage( "Testing OsiRowCut with OsiXprSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&xprSi,mpsDir), {}, xprSi, "rowcut unittest"); } { OsiXprSolverInterface xprSi; testingMessage( "Testing OsiColCut with OsiXprSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&xprSi,mpsDir), {}, xprSi, "colcut unittest"); } { OsiXprSolverInterface xprSi; testingMessage( "Testing OsiRowCutDebugger with OsiXprSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&xprSi,mpsDir), {}, xprSi, "rowcut debugger unittest"); } #endif #ifdef COIN_HAS_CPX { OsiCpxSolverInterface cpxSi; testingMessage( "Testing OsiRowCut with OsiCpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&cpxSi,mpsDir), {}, cpxSi, "rowcut unittest"); } { OsiCpxSolverInterface cpxSi; testingMessage( "Testing OsiColCut with OsiCpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&cpxSi,mpsDir), {}, cpxSi, "colcut unittest"); } { OsiCpxSolverInterface cpxSi; testingMessage( "Testing OsiRowCutDebugger with OsiCpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&cpxSi,mpsDir), {}, cpxSi, "rowcut debugger unittest"); } #endif #ifdef USETESTSOLVER { OsiTestSolverInterface testSi; testingMessage( "Testing OsiRowCut with OsiTestSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&testSi,mpsDir), {}, testSi, "rowcut unittest"); } { OsiTestSolverInterface testSi; testingMessage( "Testing OsiColCut with OsiTestSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&testSi,mpsDir), {}, testSi, "colcut unittest"); } #endif #ifdef COIN_HAS_GLPK { OsiGlpkSolverInterface glpkSi; testingMessage( "Testing OsiRowCut with OsiGlpkSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&glpkSi,mpsDir), {}, glpkSi, "rowcut unittest"); } { OsiGlpkSolverInterface glpkSi; testingMessage( "Testing OsiColCut with OsiGlpkSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&glpkSi,mpsDir), {}, glpkSi, "colcut unittest"); } { OsiGlpkSolverInterface glpkSi; testingMessage( "Testing OsiRowCutDebugger with OsiGlpkSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&glpkSi,mpsDir), {}, glpkSi, "rowcut debugger unittest"); } #endif #ifdef COIN_HAS_MSK { OsiMskSolverInterface MskSi; testingMessage( "Testing OsiRowCut with OsiMskSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&MskSi,mpsDir), {}, MskSi, "rowcut unittest"); } { OsiMskSolverInterface MskSi; testingMessage( "Testing OsiColCut with OsiMskSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&MskSi,mpsDir), {}, MskSi, "colcut unittest"); } { OsiMskSolverInterface MskSi; testingMessage( "Testing OsiRowCutDebugger with OsiMskSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&MskSi,mpsDir), {}, MskSi, "rowcut debugger unittest"); } #endif #ifdef COIN_HAS_GRB { OsiGrbSolverInterface grbSi; testingMessage( "Testing OsiRowCut with OsiGrbSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&grbSi,mpsDir), {}, grbSi, "rowcut unittest"); } { OsiGrbSolverInterface grbSi; testingMessage( "Testing OsiColCut with OsiGrbSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&grbSi,mpsDir), {}, grbSi, "colcut unittest"); } { OsiGrbSolverInterface grbSi; testingMessage( "Testing OsiRowCutDebugger with OsiGrbSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&grbSi,mpsDir), {}, grbSi, "rowcut debugger unittest"); } #endif #ifdef COIN_HAS_SOPLEX { OsiSpxSolverInterface spxSi; testingMessage( "Testing OsiRowCut with OsiSpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&spxSi,mpsDir), {}, spxSi, "rowcut unittest"); } { OsiSpxSolverInterface spxSi; testingMessage( "Testing OsiColCut with OsiSpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&spxSi,mpsDir), {}, spxSi, "colcut unittest"); } { OsiSpxSolverInterface spxSi; testingMessage( "Testing OsiRowCutDebugger with OsiSpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&spxSi,mpsDir), {}, spxSi, "rowcut debugger unittest"); } #endif testingMessage( "Testing OsiCuts\n" ); OSIUNITTEST_CATCH_ERROR(OsiCutsUnitTest(), {}, "osi", "osicuts unittest"); /* Testing OsiCuts only? A useful option when doing memory access and leak checks. Keeps the run time to something reasonable. */ if (parms.find("-cutsOnly") != parms.end()) { testingMessage( "Stopping after OsiCuts tests.\n" ); return 0; } /* Run the OsiXXX class test for each solver. It's up to the solver implementor to decide whether or not to run OsiSolverInterfaceCommonUnitTest. Arguably this should be required. */ #ifdef COIN_HAS_XPR testingMessage( "Testing OsiXprSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiXprSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "xpress", "osixpr unittest"); #endif #ifdef COIN_HAS_CPX testingMessage( "Testing OsiCpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiCpxSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "cplex", "osicpx unittest"); #endif #ifdef USETESTSOLVER testingMessage( "Testing OsiTestSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiTestSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "vol", "ositestsolver unittest"); #endif #ifdef COIN_HAS_GLPK testingMessage( "Testing OsiGlpkSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiGlpkSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "glpk", "osiglpk unittest"); #endif #ifdef COIN_HAS_MSK testingMessage( "Testing OsiMskSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiMskSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "mosek", "osimsk unittest"); #endif #ifdef COIN_HAS_GRB testingMessage( "Testing OsiGrbSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiGrbSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "gurobi", "osigrb unittest"); #endif #ifdef COIN_HAS_SOPLEX testingMessage( "Testing OsiSpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiSpxSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "soplex", "osispx unittest"); #endif /* Each solver has run its specialised unit test. Check now to see if we need to run through the Netlib problems. */ if (parms.find("-testOsiSolverInterface") != parms.end()) { // Create vector of solver interfaces std::vector vecSi; # if COIN_HAS_XPR OsiSolverInterface * xprSi = new OsiXprSolverInterface; vecSi.push_back(xprSi); # endif # if COIN_HAS_CPX OsiSolverInterface * cpxSi = new OsiCpxSolverInterface; vecSi.push_back(cpxSi); # endif # if COIN_HAS_GLPK OsiSolverInterface * glpkSi = new OsiGlpkSolverInterface; glpkSi->setHintParam(OsiDoPresolveInInitial,true,OsiHintTry) ; glpkSi->setHintParam(OsiDoReducePrint,true,OsiHintDo) ; vecSi.push_back(glpkSi); # endif # if COIN_HAS_MSK OsiSolverInterface * MskSi = new OsiMskSolverInterface; vecSi.push_back(MskSi); # endif # if COIN_HAS_GRB OsiSolverInterface * grbSi = new OsiGrbSolverInterface; vecSi.push_back(grbSi); # endif # if COIN_HAS_SOPLEX OsiSolverInterface * spxSi = new OsiSpxSolverInterface; vecSi.push_back(spxSi); # endif # ifdef USETESTSOLVER /* The test solver is normally Vol, which can't do any of the netlib problems. So let's not try. */ { std::string solverName ; OsiSolverInterface * testSi = new OsiTestSolverInterface; testSi->getStrParam(OsiSolverName,solverName) ; if (solverName != "vol") { vecSi.push_back(testSi); } else { testingMessage("Test solver vol cannot do Netlib. Skipping.\n") ; } } # endif if (vecSi.size() > 0) { testingMessage( "Testing OsiSolverInterface on Netlib problems.\n" ); OSIUNITTEST_CATCH_ERROR(OsiSolverInterfaceMpsUnitTest(vecSi,netlibDir), {}, "osi", "netlib unittest"); } unsigned int i; for (i=0; i nerrors_expected) std::cerr << "Tests completed with " << nerrors - nerrors_expected << " unexpected errors." << std::endl ; else std::cerr << "All tests completed successfully\n"; return nerrors - nerrors_expected; } Vol-1.5.4/Osi/test/OsiGlpkSolverInterfaceTest.cpp0000644000175000017500000012162011612344643020762 0ustar sudipsudip// Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // Copyright (C) 2004 University of Pittsburgh // University of Pittsburgh coding done by Brady Hunsaker // This file is licensed under the terms of Eclipse Public License (EPL). // OsiGlpkSolverInterfaceTest.cpp adapted from OsiClpSolverInterfaceTest.cpp // on 2004/10/16 // Check for ??? to see tests that aren't working correctly. // Also note that OsiPresolve doesn't appear to work with OsiGlpk. This // needs to be examined. #include "CoinPragma.hpp" #include "OsiConfig.h" //#include //#include //#include //#include #include "OsiUnitTests.hpp" #include "OsiGlpkSolverInterface.hpp" #include "OsiRowCut.hpp" #include "OsiCuts.hpp" #include "CoinFloatEqual.hpp" // Added so windows build with dsp files works, // when not building with glpk. #ifdef COIN_HAS_GLPK void OsiGlpkSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir) { // Test default constructor { OsiGlpkSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.obj_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.ctype_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "glpk", "default constructor"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "glpk", "default constructor"); } { CoinRelFltEq eq; OsiGlpkSolverInterface m; std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str(),"mps"); { OsiGlpkSolverInterface im; OSIUNITTEST_ASSERT_ERROR(im.getNumCols() == 0, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(im.getModelPtr() != NULL, {}, "glpk", "default constructor"); // Test reset im.reset(); OSIUNITTEST_ASSERT_ERROR(m.obj_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.ctype_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "glpk", "reset"); } // Test copy constructor and assignment operator { OsiGlpkSolverInterface lhs; { OsiGlpkSolverInterface im(m); OsiGlpkSolverInterface imC1(im); OSIUNITTEST_ASSERT_ERROR(imC1.getModelPtr() != im.getModelPtr(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumCols() == im.getNumCols(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumRows() == im.getNumRows(), {}, "glpk", "copy constructor"); OsiGlpkSolverInterface imC2(im); OSIUNITTEST_ASSERT_ERROR(imC2.getModelPtr() != im.getModelPtr(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumCols() == im.getNumCols(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumRows() == im.getNumRows(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getModelPtr() != imC2.getModelPtr(), {}, "glpk", "copy constructor"); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.getModelPtr() != m.getModelPtr(), {}, "glpk", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "glpk", "copy constructor"); } // Test clone { OsiGlpkSolverInterface glpkSi(m); OsiSolverInterface * siPtr = &glpkSi; OsiSolverInterface * siClone = siPtr->clone(); OsiGlpkSolverInterface * glpkClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(glpkClone != NULL, {}, "glpk", "clone"); OSIUNITTEST_ASSERT_ERROR(glpkClone->getModelPtr() != glpkSi.getModelPtr(), {}, "glpk", "clone"); OSIUNITTEST_ASSERT_ERROR(glpkClone->getNumRows() == glpkSi.getNumRows(), {}, "glpk", "clone"); OSIUNITTEST_ASSERT_ERROR(glpkClone->getNumCols() == glpkSi.getNumCols(), {}, "glpk", "clone"); delete siClone; } // test infinity { OsiGlpkSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == COIN_DBL_MAX, {}, "glpk", "infinity"); } #if 0 // ??? These index error 'throw's aren't in OsiGlpk // Test some catches { OsiGlpkSolverInterface solver; try { solver.setObjCoeff(0,0.0); } catch (CoinError e) { std::cout<<"Correct throw"<getMajorDim() == 5, return, "glpk", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "glpk", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); // GLPK returns each row in reverse order. This is consistent with // the sparse matrix format but is not what most solvers do. That's // why this section is different. OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4], 3.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3], 1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1],-1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0],-1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 2.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 1.1), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], 2.8), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9],-1.2), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 5.6), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 1.9), {}, "glpk", "getMatrixByRow: elements"); const CoinBigIndex * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "glpk", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "glpk", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "glpk", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "glpk", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "glpk", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "glpk", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 0, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 1, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 4, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 7, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 1, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 2, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 2, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 5, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 3, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 6, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 0, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 7, {}, "glpk", "getMatrixByRow: indices"); } // Test adding several cuts { OsiGlpkSolverInterface fim; std::string fn = mpsDir+"exmip1"; fim.readMps(fn.c_str(),"mps"); // exmip1.mps has 2 integer variables with index 2 & 3 fim.initialSolve(); OsiRowCut cuts[3]; // Generate one ineffective cut plus two trivial cuts int c; int nc = fim.getNumCols(); int *inx = new int[nc]; for (c=0;cgetMajorDim() == 8, return, "glpk", "getMatrixByCol: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getMinorDim() == 5, return, "glpk", "getMatrixByCol: minor dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "glpk", "getMatrixByCol: number of elements"); OSIUNITTEST_ASSERT_ERROR(smP->getSizeVectorStarts() == 9, return, "glpk", "getMatrixByCol: vector starts size"); CoinRelFltEq eq; const double * ev = smP->getElements(); // Unlike row-ordered matrices, GLPK does column-ordered the "normal" way OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 5.6), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2], 1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3], 2.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4], 1.1), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6],-2.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 2.8), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8],-1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], 1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11],-1.2), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12],-1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "glpk", "getMatrixByCol: elements"); const CoinBigIndex * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 2, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 4, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 6, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 8, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 10, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[6] == 11, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[7] == 12, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[8] == 14, {}, "glpk", "getMatrixByCol: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 4, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 0, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 1, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 1, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 2, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 0, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 3, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 0, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 4, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 2, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 3, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 0, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 4, {}, "glpk", "getMatrixByCol: indices"); } //-------------- // Test rowsense, rhs, rowrange, matrixByRow { OsiGlpkSolverInterface lhs; { #if 0 // FIXME ??? these won't work because the copy constructor changes the values in m OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "glpk", "???"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "glpk", "???"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "glpk", "???"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "glpk", "???"); #endif OsiGlpkSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "glpk", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1.matrixByRow_ == NULL, {}, "glpk", "matrix by row"); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "glpk", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "glpk", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "glpk", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "glpk", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "glpk", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "glpk", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "glpk", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "glpk", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "glpk", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "glpk", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4], 3.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3], 1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1],-1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0],-1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 2.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 1.1), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], 2.8), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9],-1.2), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 5.6), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 1.9), {}, "glpk", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "glpk", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "glpk", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "glpk", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "glpk", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "glpk", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "glpk", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 0, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 1, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 4, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 7, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 1, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 2, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 2, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 5, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 3, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 6, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 0, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 7, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "glpk", "row range"); // Change glpk Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "glpk", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "glpk", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "glpk", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "glpk", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "glpk", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "glpk", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "glpk", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "glpk", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "glpk", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "glpk", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "glpk", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "glpk", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "glpk", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "glpk", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "glpk", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "glpk", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "glpk", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "glpk", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "glpk", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "glpk", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "glpk", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "glpk", "row range after adding row"); lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "glpk", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "glpk", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "glpk", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "glpk", "freed origin after assignment"); const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "glpk", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "glpk", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "glpk", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "glpk", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "glpk", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "glpk", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "glpk", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "glpk", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "glpk", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "glpk", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "glpk", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "glpk", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "glpk", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "glpk", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "glpk", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "glpk", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "glpk", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "glpk", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, return, "glpk", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "glpk", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "glpk", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4], 3.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3], 1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1],-1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0],-1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 2.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 1.1), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], 2.8), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9],-1.2), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 5.6), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 1.9), {}, "glpk", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "glpk", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "glpk", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "glpk", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "glpk", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "glpk", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "glpk", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 0, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 1, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 4, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 7, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 1, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 2, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 2, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 5, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 3, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 6, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 0, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 7, {}, "glpk", "matrix by row after assignment: indices"); } } // Test add/delete columns { OsiGlpkSolverInterface m; std::string fn = mpsDir+"p0033"; m.readMps(fn.c_str(),"mps"); double inf = m.getInfinity(); CoinPackedVector c0; c0.insert(0, 4); c0.insert(1, 1); m.addCol(c0, 0, inf, 3); m.initialSolve(); double objValue = m.getObjValue(); CoinRelFltEq eq(1.0e-2); OSIUNITTEST_ASSERT_ERROR(eq(objValue,2520.57), {}, "glpk", "add/delete columns: first optimal value"); // Try deleting first column that's nonbasic at lower bound (0). int * d = new int[1]; CoinWarmStartBasis *cwsb = dynamic_cast(m.getWarmStart()) ; OSIUNITTEST_ASSERT_ERROR(cwsb != NULL, {}, "glpk", "add/delete columns: have warm start basis"); CoinWarmStartBasis::Status stati ; int iCol ; for (iCol = 0 ; iCol < cwsb->getNumStructural() ; iCol++) { stati = cwsb->getStructStatus(iCol) ; if (stati == CoinWarmStartBasis::atLowerBound) break ; } d[0]=iCol; m.deleteCols(1,d); delete [] d; delete cwsb; d=NULL; m.resolve(); objValue = m.getObjValue(); OSIUNITTEST_ASSERT_ERROR(eq(objValue,2520.57), {}, "glpk", "add/delete columns: optimal value after deleting nonbasic column"); // Try deleting column we added. If basic, go to initialSolve as deleting // basic variable trashes basis required for warm start. iCol = m.getNumCols()-1; cwsb = dynamic_cast(m.getWarmStart()) ; stati = cwsb->getStructStatus(iCol) ; delete cwsb; m.deleteCols(1,&iCol); if (stati == CoinWarmStartBasis::basic) { m.initialSolve() ; } else { m.resolve(); } objValue = m.getObjValue(); OSIUNITTEST_ASSERT_ERROR(eq(objValue,2520.57), {}, "glpk", "add/delete columns: optimal value after deleting added column"); } #if 0 // ??? Simplex routines not adapted to OsiGlpk yet // Solve an lp by hand { OsiGlpkSolverInterface m; std::string fn = mpsDir+"p0033"; m.readMps(fn.c_str(),"mps"); m.setObjSense(-1.0); m.getModelPtr()->messageHandler()->setLogLevel(4); m.initialSolve(); m.getModelPtr()->factorization()->maximumPivots(5); m.setObjSense(1.0); // enable special mode m.enableSimplexInterface(true); // we happen to know that variables are 0-1 and rows are L int numberIterations=0; int numberColumns = m.getNumCols(); int numberRows = m.getNumRows(); double * fakeCost = new double[numberColumns]; double * duals = new double [numberRows]; double * djs = new double [numberColumns]; const double * solution = m.getColSolution(); memcpy(fakeCost,m.getObjCoefficients(),numberColumns*sizeof(double)); while (1) { const double * dj; const double * dual; if ((numberIterations&1)==0) { // use given ones dj = m.getReducedCost(); dual = m.getRowPrice(); } else { // create dj = djs; dual = duals; m.getReducedGradient(djs,duals,fakeCost); } int i; int colIn=9999; int direction=1; double best=1.0e-6; // find most negative reduced cost // Should check basic - but should be okay on this problem for (i=0;ibest) { direction=-1; best=value; colIn=-i-1; } } for (i=0;ibest&&solution[i]>1.0-1.0e-6) { direction=-1; best=value; colIn=i; } } if (colIn==9999) break; // should be optimal int colOut; int outStatus; double theta; OSIUNITTEST_ASSERT_ERROR(m.primalPivotResult(colIn,direction,colOut,outStatus,theta,NULL) == 0, {}, "glpk", "simplex routines"); printf("out %d, direction %d theta %g\n", colOut,outStatus,theta); numberIterations++; } delete [] fakeCost; delete [] duals; delete [] djs; // exit special mode m.disableSimplexInterface(); m.getModelPtr()->messageHandler()->setLogLevel(4); m.resolve(); OSIUNITTEST_ASSERT_ERROR(m.getIterationCount() == 0, {}, "glpk", "simplex routines"); m.setObjSense(-1.0); m.initialSolve(); } // Solve an lp when interface is on { OsiGlpkSolverInterface m; std::string fn = mpsDir+"p0033"; m.readMps(fn.c_str(),"mps"); // enable special mode m.setHintParam(OsiDoScale,false,OsiHintDo); m.setHintParam(OsiDoPresolveInInitial,false,OsiHintDo); m.setHintParam(OsiDoDualInInitial,false,OsiHintDo); m.setHintParam(OsiDoPresolveInResolve,false,OsiHintDo); m.setHintParam(OsiDoDualInResolve,false,OsiHintDo); m.enableSimplexInterface(true); m.initialSolve(); } // Check tableau stuff when simplex interface is on { OsiGlpkSolverInterface m; /* Wolsey : Page 130 max 4x1 - x2 7x1 - 2x2 <= 14 x2 <= 3 2x1 - 2x2 <= 3 x1 in Z+, x2 >= 0 */ double inf_ = m.getInfinity(); int n_cols = 2; int n_rows = 3; double obj[2] = {-4.0, 1.0}; double collb[2] = {0.0, 0.0}; double colub[2] = {inf_, inf_}; double rowlb[3] = {-inf_, -inf_, -inf_}; double rowub[3] = {14.0, 3.0, 3.0}; int rowIndices[5] = {0, 2, 0, 1, 2}; int colIndices[5] = {0, 0, 1, 1, 1}; double elements[5] = {7.0, 2.0, -2.0, 1.0, -2.0}; CoinPackedMatrix M(true, rowIndices, colIndices, elements, 5); m.loadProblem(M, collb, colub, obj, rowlb, rowub); m.enableSimplexInterface(true); m.initialSolve(); //check that the tableau matches wolsey (B-1 A) // slacks in second part of binvA double * binvA = (double*) malloc((n_cols+n_rows) * sizeof(double)); printf("B-1 A"); for(int i = 0; i < n_rows; i++){ m.getBInvARow(i, binvA,binvA+n_cols); printf("\nrow: %d -> ",i); for(int j=0; j < n_cols+n_rows; j++){ printf("%g, ", binvA[j]); } } printf("\n"); m.disableSimplexInterface(); free(binvA); } #endif /* Read in exmip1 and solve it with verbose output setting. */ { OsiGlpkSolverInterface osi ; std::cout << "Boosting verbosity.\n" ; osi.setHintParam(OsiDoReducePrint,false,OsiForceDo) ; std::string exmpsfile = mpsDir+"exmip1" ; std::string probname ; std::cout << "Reading mps file \"" << exmpsfile << "\"\n" ; osi.readMps(exmpsfile.c_str(), "mps") ; OSIUNITTEST_ASSERT_ERROR(osi.getStrParam(OsiProbName,probname), {}, "glpk", "get problem name"); std::cout << "Solving " << probname << " ... \n" ; osi.initialSolve() ; double val = osi.getObjValue() ; std::cout << "And the answer is " << val << ".\n" ; OSIUNITTEST_ASSERT_ERROR(fabs(val - 3.23) < 0.01, {}, "glpk", "solve exmip1"); } // Do common solverInterface testing { OsiGlpkSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir,netlibDir); } } #endif Vol-1.5.4/Osi/test/OsiTestSolverInterfaceIO.cpp0000644000175000017500000003067011536304054020375 0ustar sudipsudip// Copyright (C) 2001, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). // this is a copy of OsiVolSolverInterface (trunk rev. 1466) renamed to OsiTestSolverInterface #include "CoinPragma.hpp" #include #include #include "CoinHelperFunctions.hpp" #include "CoinMpsIO.hpp" #include "OsiTestSolverInterface.hpp" //############################################################################# void OsiTestSolverInterface::initFromRlbRub(const int rownum, const double* rowlb, const double* rowub) { if (maxNumrows_ > 0) { rowRimAllocator_(); if (rowub) { CoinDisjointCopyN(rowub, rownum, rowupper_); } else { CoinFillN(rowupper_, rownum, getInfinity()); } if (rowlb) { CoinDisjointCopyN(rowlb, rownum, rowlower_); } else { CoinFillN(rowlower_, rownum, -getInfinity()); } // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertBoundsToSenses_(); } } //############################################################################# void OsiTestSolverInterface::initFromRhsSenseRange(const int rownum, const char* rowsen, const double* rowrhs, const double* rowrng) { if (maxNumrows_ > 0) { rowRimAllocator_(); if (rowsen) { CoinDisjointCopyN(rowsen, rownum, rowsense_); } else { CoinFillN(rowsense_, rownum, 'G'); } if (rowrhs) { CoinDisjointCopyN(rowrhs, rownum, rhs_); } else { CoinFillN(rhs_, rownum, 0.0); } if (rowrng) { CoinDisjointCopyN(rowrng, rownum, rowrange_); } else { CoinFillN(rowrange_, rownum, 0.0); } // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertSensesToBounds_(); } } //############################################################################# void OsiTestSolverInterface::initFromClbCubObj(const int colnum, const double* collb, const double* colub, const double* obj) { if (maxNumcols_ > 0) { colRimAllocator_(); if (colub) { CoinDisjointCopyN(colub, colnum, colupper_); } else { CoinFillN(colupper_, colnum, getInfinity()); } if (collb) { CoinDisjointCopyN(collb, colnum, collower_); } else { CoinFillN(collower_, colnum, 0.0); } CoinFillN(continuous_,colnum,true); if (obj) { CoinDisjointCopyN(obj, colnum, objcoeffs_); } else { CoinFillN(objcoeffs_, colnum, 0.0); } int c; for ( c=0; c((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); } else { rowMatrix_.setExtraGap(matrix.getExtraGap()); rowMatrix_.setExtraMajor(matrix.getExtraMajor()); rowMatrix_ = matrix; rowMatrixCurrent_ = true; colMatrixCurrent_ = false; maxNumcols_ = static_cast((1+rowMatrix_.getExtraGap()) * rowMatrix_.getMinorDim()); maxNumrows_ = rowMatrix_.getMaxMajorDim(); } initFromRlbRub(rownum, rowlb, rowub); initFromClbCubObj(colnum, collb, colub, obj); } //----------------------------------------------------------------------- void OsiTestSolverInterface::assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, double*& rowlb, double*& rowub) { gutsOfDestructor_(); const int rownum = matrix->getNumRows(); const int colnum = matrix->getNumCols(); maxNumcols_ = colnum; maxNumrows_ = rownum; if (matrix->isColOrdered()) { colMatrix_.swap(*matrix); colMatrixCurrent_ = true; rowMatrixCurrent_ = false; } else { rowMatrix_.swap(*matrix); rowMatrixCurrent_ = true; colMatrixCurrent_ = false; } delete matrix; matrix = 0; rowupper_ = rowub; rowub = 0; rowlower_ = rowlb; rowlb = 0; colupper_ = colub; colub = 0; collower_ = collb; collb = 0; objcoeffs_ = obj; obj = 0; if (maxNumrows_ > 0) { if (!rowupper_) { rowupper_ = new double[maxNumrows_]; CoinFillN(rowupper_, rownum, getInfinity()); } if (!rowlower_) { rowlower_ = new double[maxNumrows_]; CoinFillN(rowlower_, rownum, -getInfinity()); } rowsense_ = new char[maxNumrows_]; rhs_ = new double[maxNumrows_]; rowrange_ = new double[maxNumrows_]; rowprice_ = new double[maxNumrows_]; lhs_ = new double[maxNumrows_]; // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertBoundsToSenses_(); } if (maxNumcols_ > 0) { if (!colupper_) { colupper_ = new double[maxNumcols_]; CoinFillN(colupper_, colnum, getInfinity()); } if (!collower_) { collower_ = new double[maxNumcols_]; CoinFillN(collower_, colnum, -getInfinity()); } if (!objcoeffs_) { objcoeffs_ = new double[maxNumcols_]; CoinFillN(objcoeffs_, colnum, -getInfinity()); } colsol_ = new double[maxNumcols_]; int c; for ( c=0; c((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); } else { rowMatrix_ = matrix; rowMatrixCurrent_ = true; colMatrixCurrent_ = false; maxNumcols_ = static_cast((1+rowMatrix_.getExtraGap()) * rowMatrix_.getMinorDim()); maxNumrows_ = rowMatrix_.getMaxMajorDim(); } initFromRhsSenseRange(rownum, rowsen, rowrhs, rowrng); initFromClbCubObj(colnum, collb, colub, obj); } //----------------------------------------------------------------------- void OsiTestSolverInterface::assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, char*& rowsen, double*& rowrhs, double*& rowrng) { gutsOfDestructor_(); const int rownum = matrix->getNumRows(); const int colnum = matrix->getNumCols(); maxNumcols_ = colnum; maxNumrows_ = rownum; if (matrix->isColOrdered()) { colMatrix_.swap(*matrix); colMatrixCurrent_ = true; rowMatrixCurrent_ = false; } else { rowMatrix_.swap(*matrix); rowMatrixCurrent_ = true; colMatrixCurrent_ = false; } delete matrix; matrix = 0; rowsense_ = rowsen; rowsen = 0; rhs_ = rowrhs; rowrhs = 0; rowrange_ = rowrng; rowrng = 0; colupper_ = colub; colub = 0; collower_ = collb; collb = 0; objcoeffs_ = obj; obj = 0; if (maxNumrows_ > 0) { if (!rowsense_) { rowsense_ = new char[maxNumrows_]; CoinFillN(rowsense_, rownum, 'G'); } if (!rhs_) { rhs_ = new double[maxNumrows_]; CoinFillN(rhs_, rownum, 0.0); } if (!rowrange_) { rowrange_ = new double[maxNumrows_]; CoinFillN(rowrange_, rownum, 0.0); } rowlower_ = new double[maxNumrows_]; rowupper_ = new double[maxNumrows_]; rowprice_ = new double[maxNumrows_]; lhs_ = new double[maxNumrows_]; // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertSensesToBounds_(); } if (maxNumcols_ > 0) { if (!colupper_) { colupper_ = new double[maxNumcols_]; CoinFillN(colupper_, colnum, getInfinity()); } if (!collower_) { collower_ = new double[maxNumcols_]; CoinFillN(collower_, colnum, -getInfinity()); } if (!objcoeffs_) { objcoeffs_ = new double[maxNumcols_]; CoinFillN(objcoeffs_, colnum, -getInfinity()); } colsol_ = new double[maxNumcols_]; int c; for ( c=0; c((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); initFromRlbRub(numrows, rowlb, rowub); initFromClbCubObj(numcols, collb, colub, obj); } //----------------------------------------------------------------------- void OsiTestSolverInterface::loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng) { gutsOfDestructor_(); colMatrix_.copyOf(true, numrows, numcols, start[numcols], value, index, start, 0); colMatrixCurrent_ = true; rowMatrixCurrent_ = false; maxNumcols_ = colMatrix_.getMaxMajorDim(); maxNumrows_ = static_cast((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); initFromRhsSenseRange(numrows, rowsen, rowrhs, rowrng); initFromClbCubObj(numcols, collb, colub, obj); } //----------------------------------------------------------------------- int OsiTestSolverInterface::readMps(const char *filename, const char *extension) { CoinMpsIO reader; reader.setInfinity(getInfinity()); int retVal = reader.readMps(filename, extension); if (retVal == 0) { loadProblem(*reader.getMatrixByCol(), reader.getColLower(),reader.getColUpper(), reader.getObjCoefficients(), reader.getRowLower(),reader.getRowUpper()); int nc = getNumCols(); assert (continuous_); CoinFillN(continuous_, nc, true); } return retVal; } //----------------------------------------------------------------------- void OsiTestSolverInterface::writeMps(const char *filename, const char *extension, double /*objSense*/) const { CoinMpsIO writer; writer.setMpsData(*getMatrixByCol(), getInfinity(), getColLower(), getColUpper(), getObjCoefficients(), reinterpret_cast (NULL) /*integrality*/, getRowLower(), getRowUpper(), reinterpret_cast (NULL) /*colnam*/, reinterpret_cast (NULL) /*rownam*/); std::string fname = filename; if (extension) { if (extension[0] != '\0' && extension[0] != '.') fname += "." ; } fname += extension; writer.writeMps(fname.c_str()); } Vol-1.5.4/Osi/test/OsiTestSolverInterface.hpp0000644000175000017500000010172111575423733020157 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). // this is a copy of OsiVolSolverInterface (trunk rev. 1466) renamed to OsiTestSolverInterface #ifndef OsiTestSolverInterface_H #define OsiTestSolverInterface_H #include #include "OsiTestSolver.hpp" #include "CoinPackedMatrix.hpp" #include "OsiSolverInterface.hpp" static const double OsiTestInfinity = 1.0e31; //############################################################################# /** Vol(ume) Solver Interface Instantiation of OsiTestSolverInterface for the Volume Algorithm */ class OsiTestSolverInterface : virtual public OsiSolverInterface, public VOL_user_hooks { friend void OsiTestSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); private: class OsiVolMatrixOneMinusOne_ { int majorDim_; int minorDim_; int plusSize_; int * plusInd_; int * plusStart_; int * plusLength_; int minusSize_; int * minusInd_; int * minusStart_; int * minusLength_; public: OsiVolMatrixOneMinusOne_(const CoinPackedMatrix& m); ~OsiVolMatrixOneMinusOne_(); void timesMajor(const double* x, double* y) const; }; public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound() { throw CoinError("Sorry, the Volume Algorithm doesn't implement B&B", "branchAndBound", "OsiTestSolverInterface"); } //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string & value); // Get an integer parameter bool getIntParam(OsiIntParam key, int& value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double& value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string& value) const; //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /*! \brief Get an empty warm start object This routine returns an empty warm start object. Its purpose is to provide a way to give a client a warm start object of the appropriate type, which can resized and modified as desired. */ virtual CoinWarmStart *getEmptyWarmStart () const ; /// Get warmstarting information virtual CoinWarmStart* getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart* warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const { return rowMatrixCurrent_? rowMatrix_.getNumCols() : colMatrix_.getNumCols(); } /// Get number of rows virtual int getNumRows() const { return rowMatrixCurrent_? rowMatrix_.getNumRows() : colMatrix_.getNumRows(); } /// Get number of nonzero elements virtual int getNumElements() const { return rowMatrixCurrent_? rowMatrix_.getNumElements() : colMatrix_.getNumElements(); } /// Get pointer to array[getNumCols()] of column lower bounds virtual const double * getColLower() const { return collower_; } /// Get pointer to array[getNumCols()] of column upper bounds virtual const double * getColUpper() const { return colupper_; } /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L' <= constraint
  • 'E' = constraint
  • 'G' >= constraint
  • 'R' ranged constraint
  • 'N' free constraint
*/ virtual const char * getRowSense() const { return rowsense_; } /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double * getRightHandSide() const { return rhs_; } /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is undefined
*/ virtual const double * getRowRange() const { return rowrange_; } /// Get pointer to array[getNumRows()] of row lower bounds virtual const double * getRowLower() const { return rowlower_; } /// Get pointer to array[getNumRows()] of row upper bounds virtual const double * getRowUpper() const { return rowupper_; } /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double * getObjCoefficients() const { return objcoeffs_; } /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const { return objsense_; } /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int colNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int colNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int colNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int colNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix * getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix * getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const { return OsiTestInfinity; } //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double * getColSolution() const { return colsol_; } /// Get pointer to array[getNumRows()] of dual prices virtual const double * getRowPrice() const { return rowprice_; } /// Get a pointer to array[getNumCols()] of reduced costs virtual const double * getReducedCost() const { return rc_; } /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double * getRowActivity() const { return lhs_; } /// Get objective function value virtual double getObjValue() const { #if 1 // This does not pass unitTest if getObjValue is called before solve return lagrangeanCost_; #else return OsiSolverInterface::getObjValue(); #endif } /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const { return volprob_.iter(); } /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector getPrimalRays(int maxNumRays) const; #if 0 /** Get indices of solution vector which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff( int elementIndex, double elementValue ) { objcoeffs_[elementIndex] = elementValue; } using OsiSolverInterface::setColLower ; /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower( int elementIndex, double elementValue ) { collower_[elementIndex] = elementValue; } using OsiSolverInterface::setColUpper ; /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper( int elementIndex, double elementValue ) { colupper_[elementIndex] = elementValue; } /** Set a single column lower and upper bound */ virtual void setColBounds( int elementIndex, double lower, double upper ) { collower_[elementIndex] = lower; colupper_[elementIndex] = upper; } /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setColLower() and setColUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the variables whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower( int elementIndex, double elementValue ) { rowlower_[elementIndex] = elementValue; convertBoundToSense(elementValue, rowupper_[elementIndex], rowsense_[elementIndex], rhs_[elementIndex], rowrange_[elementIndex]); } /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper( int elementIndex, double elementValue ) { rowupper_[elementIndex] = elementValue; convertBoundToSense(rowlower_[elementIndex], elementValue, rowsense_[elementIndex], rhs_[elementIndex], rowrange_[elementIndex]); } /** Set a single row lower and upper bound */ virtual void setRowBounds( int elementIndex, double lower, double upper ) { rowlower_[elementIndex] = lower; rowupper_[elementIndex] = upper; convertBoundToSense(lower, upper, rowsense_[elementIndex], rhs_[elementIndex], rowrange_[elementIndex]); } /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range) { rowsense_[index] = sense; rhs_[index] = rightHandSide; rowrange_[index] = range; convertSenseToBound(sense, rightHandSide, range, rowlower_[index], rowupper_[index]); } /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose any characteristics changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int* indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int* indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s ) { objsense_ = s < 0 ? -1.0 : 1.0; } /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double * colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double * rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ using OsiSolverInterface::addCol ; /** */ virtual void addCol(const CoinPackedVectorBase& vec, const double collb, const double colub, const double obj); using OsiSolverInterface::addCols ; /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase * const * cols, const double* collb, const double* colub, const double* obj); #if 0 /** */ virtual void addCols(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj); #endif /** */ virtual void deleteCols(const int num, const int * colIndices); using OsiSolverInterface::addRow ; /** */ virtual void addRow(const CoinPackedVectorBase& vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase& vec, const char rowsen, const double rowrhs, const double rowrng); using OsiSolverInterface::addRows ; /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng); #if 0 /** */ virtual void addRows(const CoinPackedMatrix& matrix, const double* rowlb, const double* rowub); /** */ virtual void addRows(const CoinPackedMatrix& matrix, const char* rowsen, const double* rowrhs, const double* rowrng); #endif /** */ virtual void deleteRows(const int num, const int * rowIndices); //----------------------------------------------------------------------- #if 0 /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- protected: /**@name Helper methods for problem input */ void initFromRlbRub(const int rownum, const double* rowlb, const double* rowub); void initFromRhsSenseRange(const int rownum, const char* rowsen, const double* rowrhs, const double* rowrng); void initFromClbCubObj(const int colnum, const double* collb, const double* colub, const double* obj); public: /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, double*& rowlb, double*& rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, char*& rowsen, double*& rowrhs, double*& rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng); using OsiSolverInterface::readMps ; /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense=0.0) const; //@} //--------------------------------------------------------------------------- /**@name OSL specific public interfaces */ //@{ /// Get pointer to Vol model VOL_problem* volprob() { return &volprob_; } //@} //--------------------------------------------------------------------------- /**@name Constructors and destructors */ //@{ /// Default Constructor OsiTestSolverInterface (); /// Clone virtual OsiSolverInterface * clone(bool copyData = true) const; /// Copy constructor OsiTestSolverInterface (const OsiTestSolverInterface &); /// Assignment operator OsiTestSolverInterface & operator=(const OsiTestSolverInterface& rhs); /// Destructor virtual ~OsiTestSolverInterface (); //@} //--------------------------------------------------------------------------- protected: ///@name Protected methods //@{ /** Apply a row cut (append to constraint matrix). */ virtual void applyRowCut(const OsiRowCut& rc); /** Apply a column cut (adjust one or more bounds). */ virtual void applyColCut(const OsiColCut& cc); //@} //--------------------------------------------------------------------------- private: /**@name Methods of VOL_user_hooks */ //@{ /// compute reduced costs virtual int compute_rc(const VOL_dvector& u, VOL_dvector& rc); /// Solve the subproblem for the subgradient step. virtual int solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost); /** Starting from the primal vector x, run a heuristic to produce an integer solution. This is not done in LP solving. */ virtual int heuristics(const VOL_problem& /*p*/, const VOL_dvector& /*x*/, double& heur_val) { heur_val = COIN_DBL_MAX; return 0; } //@} //--------------------------------------------------------------------------- private: /**@name Private helper methods */ //@{ /** Update the row ordered matrix from the column ordered one */ void updateRowMatrix_() const; /** Update the column ordered matrix from the row ordered one */ void updateColMatrix_() const; /** Test whether the Volume Algorithm can be applied to the given problem. */ void checkData_() const; /** Compute the reduced costs (rc) with respect to the dual values given in u. */ void compute_rc_(const double* u, double* rc) const; /** A method deleting every member data */ void gutsOfDestructor_(); /** A method allocating sufficient space for the rim vectors corresponding to the rows. */ void rowRimAllocator_(); /** A method allocating sufficient space for the rim vectors corresponding to the columns. */ void colRimAllocator_(); /** Reallocate the rim arrays corresponding to the rows. */ void rowRimResize_(const int newSize); /** Reallocate the rim arrays corresponding to the columns. */ void colRimResize_(const int newSize); /** For each row convert LB/UB style row constraints to sense/rhs style. */ void convertBoundsToSenses_(); /** For each row convert sense/rhs style row constraints to LB/UB style. */ void convertSensesToBounds_(); /** test whether the given matrix is 0/1/-1 entries only. */ bool test_zero_one_minusone_(const CoinPackedMatrix& m) const; //@} //--------------------------------------------------------------------------- private: //--------------------------------------------------------------------------- /**@name The problem matrix in row and column ordered forms
Note that at least one of the matrices is always current. */ //@{ /// A flag indicating whether the row ordered matrix is up-to-date mutable bool rowMatrixCurrent_; /// The problem matrix in a row ordered form mutable CoinPackedMatrix rowMatrix_; /// A flag indicating whether the column ordered matrix is up-to-date mutable bool colMatrixCurrent_; /// The problem matrix in a column ordered form mutable CoinPackedMatrix colMatrix_; //@} //--------------------------------------------------------------------------- /**@name Data members used when 0/1/-1 matrix is detected */ //@{ /// An indicator whether the matrix is 0/1/-1 bool isZeroOneMinusOne_; /// The row ordered matrix without the elements OsiVolMatrixOneMinusOne_* rowMatrixOneMinusOne_; /// The column ordered matrix without the elements OsiVolMatrixOneMinusOne_* colMatrixOneMinusOne_; //@} //--------------------------------------------------------------------------- /**@name The rim vectors */ //@{ /// Pointer to dense vector of structural variable upper bounds double *colupper_; /// Pointer to dense vector of structural variable lower bounds double *collower_; /// Pointer to dense vector of bool to indicate if column is continuous bool *continuous_; /// Pointer to dense vector of slack variable upper bounds double *rowupper_; /// Pointer to dense vector of slack variable lower bounds double *rowlower_; /// Pointer to dense vector of row sense indicators char *rowsense_; /// Pointer to dense vector of row right-hand side values double *rhs_; /** Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows). */ double *rowrange_; /// Pointer to dense vector of objective coefficients double *objcoeffs_; //@} //--------------------------------------------------------------------------- /// Sense of objective (1 for min; -1 for max) double objsense_; //--------------------------------------------------------------------------- /**@name The solution */ //@{ /// Pointer to dense vector of primal structural variable values double *colsol_; /// Pointer to dense vector of dual row variable values double *rowprice_; /// Pointer to dense vector of reduced costs double *rc_; /// Pointer to dense vector of left hand sides (row activity levels) double *lhs_; /// The Lagrangean cost, a lower bound on the objective value double lagrangeanCost_; //@} //--------------------------------------------------------------------------- /** An array to store the hotstart information between solveHotStart() calls */ double *rowpriceHotStart_; /// allocated size of the row related rim vectors int maxNumrows_; /// allocated size of the column related rim vectors int maxNumcols_; /// The volume solver VOL_problem volprob_; }; /** A function that tests the methods in the OsiTestSolverInterface class. */ void OsiTestSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); #endif Vol-1.5.4/Osi/test/Makefile.am0000644000175000017500000000745211621722556015077 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1800 2011-08-14 10:37:34Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # unitTest for Coin # ######################################################################## noinst_PROGRAMS = unitTest unitTest_SOURCES = unitTest.cpp \ OsiTestSolver.cpp \ OsiTestSolverInterface.cpp \ OsiTestSolverInterfaceIO.cpp \ OsiTestSolverInterfaceTest.cpp # List libraries of COIN projects unitTest_LDADD = ../src/OsiCommonTest/libOsiCommonTests.la unitTest_DEPENDENCIES = ../src/OsiCommonTest/libOsiCommonTests.la # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../src/Osi` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiCommonTest` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi # Depending of what solvers are available, we add the corresponding files, # libraries and include dirs if COIN_HAS_CPX unitTest_SOURCES += OsiCpxSolverInterfaceTest.cpp AM_CPPFLAGS += -I`$(CYGPATH_W) $(CPXINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiCpx` unitTest_LDADD += ../src/OsiCpx/libOsiCpx.la unitTest_DEPENDENCIES += ../src/OsiCpx/libOsiCpx.la LIBS += $(CPXLIB) endif if COIN_HAS_GLPK unitTest_SOURCES += OsiGlpkSolverInterfaceTest.cpp AM_CPPFLAGS += $(GLPK_CFLAGS) \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiGlpk` unitTest_LDADD += ../src/OsiGlpk/libOsiGlpk.la unitTest_DEPENDENCIES += ../src/OsiGlpk/libOsiGlpk.la LIBS += $(GLPK_LIBS) endif if COIN_HAS_MSK unitTest_SOURCES += OsiMskSolverInterfaceTest.cpp AM_CPPFLAGS += -I`$(CYGPATH_W) $(MSKINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiMsk` unitTest_LDADD += ../src/OsiMsk/libOsiMsk.la unitTest_DEPENDENCIES += ../src/OsiMsk/libOsiMsk.la LIBS += $(MSKLIB) endif if COIN_HAS_XPR unitTest_SOURCES += OsiXprSolverInterfaceTest.cpp AM_CPPFLAGS += -I`$(CYGPATH_W) $(XPRINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiXpr` unitTest_LDADD += ../src/OsiXpr/libOsiXpr.la unitTest_DEPENDENCIES += ../src/OsiXpr/libOsiXpr.la LIBS += $(XPRLIB) endif if COIN_HAS_GRB unitTest_SOURCES += OsiGrbSolverInterfaceTest.cpp AM_CPPFLAGS += -I`$(CYGPATH_W) $(GRBINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiGrb` unitTest_LDADD += ../src/OsiGrb/libOsiGrb.la unitTest_DEPENDENCIES += ../src/OsiGrb/libOsiGrb.la LIBS += $(GRBLIB) endif if COIN_HAS_SOPLEX unitTest_SOURCES += OsiSpxSolverInterfaceTest.cpp AM_CPPFLAGS += $(SOPLEX_CFLAGS) \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiSpx` unitTest_LDADD += ../src/OsiSpx/libOsiSpx.la unitTest_DEPENDENCIES += ../src/OsiSpx/libOsiSpx.la LIBS += $(SOPLEX_LIBS) endif unitTest_LDADD += ../src/Osi/libOsi.la $(OSILIB_LIBS) unitTest_DEPENDENCIES += ../src/Osi/libOsi.la $(OSILIB_DEPENDENCIES) unittestflags = if COIN_HAS_SAMPLE unittestflags += -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` endif if COIN_HAS_NETLIB unittestflags += -netlibDir=`$(CYGPATH_W) $(NETLIB_DATA)` -testOsiSolverInterface endif test: unitTest$(EXEEXT) ./unitTest$(EXEEXT) $(unittestflags) .PHONY: test ######################################################################## # Cleaning stuff # ######################################################################## # Here we list everything that is not generated by the compiler, e.g., # output files of a program DISTCLEANFILES = *.mps *.mps.gz *.lp test2out *.out.gz *.out Vol-1.5.4/Osi/test/OsiSpxSolverInterfaceTest.cpp0000644000175000017500000006665612346347404020663 0ustar sudipsudip//----------------------------------------------------------------------------- // name: OSI Interface for SOPLEX // author: Tobias Pfender // Konrad-Zuse-Zentrum Berlin (Germany) // license: this file may be freely distributed under the terms of EPL // date: 01/17/2002 //----------------------------------------------------------------------------- // Copyright (C) 2002, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. // // Last edit: $Id: OsiSpxSolverInterfaceTest.cpp 1967 2014-06-12 16:02:12Z stefan $ #include "CoinPragma.hpp" #include "OsiConfig.h" // Added so windows build with dsp files works, // when not building with soplex. #ifdef COIN_HAS_SOPLEX #include "OsiUnitTests.hpp" #include "OsiRowCut.hpp" #include "OsiCuts.hpp" #include "CoinFloatEqual.hpp" #include "CoinPackedMatrix.hpp" //#include #ifndef SOPLEX_LEGACY #define SOPLEX_LEGACY #endif // to check for value of infinity #include "soplex.h" // it's important to include this header after soplex.h #include "OsiSpxSolverInterface.hpp" void OsiSpxSolverInterfaceUnitTest( const std::string & mpsDir, const std::string & netlibDir ) { // Test default constructor { OsiSpxSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.soplex_ != NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 0, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "SoPlex", "default constructor"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "SoPlex", "set application data"); } { CoinRelFltEq eq; OsiSpxSolverInterface m; std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str(),"mps"); // int ad = 13579; // m.setApplicationData(&ad); // OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == ad, {}, "SoPlex", "set application data"); { const CoinPackedMatrix * colCopy = m.getMatrixByCol(); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumCols() == 8, {}, "SoPlex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMajorDim() == 8, {}, "SoPlex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumRows() == 5, {}, "SoPlex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMinorDim() == 5, {}, "SoPlex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getVectorLengths()[7] == 2, {}, "SoPlex", "exmip1 matrix"); CoinPackedMatrix revColCopy; revColCopy.reverseOrderedCopyOf(*colCopy); CoinPackedMatrix rev2ColCopy; rev2ColCopy.reverseOrderedCopyOf(revColCopy); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumCols() == 8, {}, "SoPlex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMajorDim() == 8, {}, "SoPlex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumRows() == 5, {}, "SoPlex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMinorDim() == 5, {}, "SoPlex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getVectorLengths()[7] == 2, {}, "SoPlex", "twice reverse matrix copy"); } // Test copy constructor and assignment operator { OsiSpxSolverInterface lhs; { OsiSpxSolverInterface im(m); OsiSpxSolverInterface imC1(im); OsiSpxSolverInterface imC2(im); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "SoPlex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "SoPlex", "copy constructor"); } // Test clone { OsiSpxSolverInterface soplexSi(m); OsiSolverInterface * siPtr = &soplexSi; OsiSolverInterface * siClone = siPtr->clone(); OsiSpxSolverInterface * soplexClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(soplexClone != NULL, {}, "SoPlex", "clone"); OSIUNITTEST_ASSERT_ERROR(soplexClone->getNumRows() == soplexSi.getNumRows(), {}, "SoPlex", "clone"); OSIUNITTEST_ASSERT_ERROR(soplexClone->getNumCols() == m.getNumCols(), {}, "SoPlex", "clone"); delete siClone; } // test infinity { OsiSpxSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == soplex::infinity, {}, "SoPlex", "value for infinity"); } { OsiSpxSolverInterface soplexSi(m); int nc = soplexSi.getNumCols(); int nr = soplexSi.getNumRows(); const double * cl = soplexSi.getColLower(); const double * cu = soplexSi.getColUpper(); const double * rl = soplexSi.getRowLower(); const double * ru = soplexSi.getRowUpper(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[0],2.5), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1],0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1],4.1), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2],1.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[0],2.5), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4],3.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1],2.1), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4],15.), {}, "SoPlex", "read and copy exmip1"); double newCs[8] = {1., 2., 3., 4., 5., 6., 7., 8.}; soplexSi.setColSolution(newCs); const double * cs = soplexSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "SoPlex", "set col solution"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "SoPlex", "set col solution"); { OsiSpxSolverInterface solnSi(soplexSi); const double * cs = solnSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "SoPlex", "set col solution and copy"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "SoPlex", "set col solution and copy"); } OSIUNITTEST_ASSERT_ERROR(!eq(cl[3],1.2345), {}, "SoPlex", "set col lower"); soplexSi.setColLower( 3, 1.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cl[3],1.2345), {}, "SoPlex", "set col lower"); OSIUNITTEST_ASSERT_ERROR(!eq(cu[4],10.2345), {}, "SoPlex", "set col upper"); soplexSi.setColUpper( 4, 10.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cu[4],10.2345), {}, "SoPlex", "set col upper"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[0], 1.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[1], 0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[2], 0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[3], 0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[4], 2.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[5], 0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[6], 0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[7],-1.0), {}, "SoPlex", "read and copy exmip1"); } // Test getMatrixByRow method { const OsiSpxSolverInterface si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(smP->getMajorDim() == 5, return, "SoPlex", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "SoPlex", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[0], 3.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[1], 1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[2], -2.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[3], -1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[4], -1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[5], 2.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[6], 1.1), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[7], 1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[8], 1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[9], 2.8), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], -1.2), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "SoPlex", "getMatrixByRow: elements"); const int * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "SoPlex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "SoPlex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "SoPlex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "SoPlex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "SoPlex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "SoPlex", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "SoPlex", "getMatrixByRow: indices"); } //-------------- // Test rowsense, rhs, rowrange, getMatrixByRow { OsiSpxSolverInterface lhs; { OsiSpxSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "SoPlex", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1.matrixByRow_ == NULL, {}, "SoPlex", "matrix by row"); OSIUNITTEST_ASSERT_WARNING(siC1.colsol_ == NULL, {}, "SoPlex", "col solution"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsol_ == NULL, {}, "SoPlex", "row solution"); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "SoPlex", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "SoPlex", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "SoPlex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "SoPlex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "SoPlex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "SoPlex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "SoPlex", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "SoPlex", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "SoPlex", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "SoPlex", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "SoPlex", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "SoPlex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "SoPlex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "SoPlex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "SoPlex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "SoPlex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "SoPlex", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "SoPlex", "row range"); // Change SOPLEX Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByCol_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.colsol_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsol_ == NULL, {}, "SoPlex", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "SoPlex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "SoPlex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "SoPlex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "SoPlex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "SoPlex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "SoPlex", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "SoPlex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "SoPlex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "SoPlex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "SoPlex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "SoPlex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "SoPlex", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "SoPlex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "SoPlex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "SoPlex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "SoPlex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "SoPlex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "SoPlex", "row range after adding row"); lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByCol_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colsol_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsol_ == NULL, {}, "SoPlex", "freed origin after assignment"); const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "SoPlex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "SoPlex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "SoPlex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "SoPlex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "SoPlex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "SoPlex", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "SoPlex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "SoPlex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "SoPlex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "SoPlex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "SoPlex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "SoPlex", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "SoPlex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "SoPlex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "SoPlex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "SoPlex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "SoPlex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "SoPlex", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, {}, "SoPlex", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "SoPlex", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "SoPlex", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "SoPlex", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "SoPlex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "SoPlex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "SoPlex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "SoPlex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "SoPlex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "SoPlex", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "SoPlex", "matrix by row after assignment: indices"); } //-------------- } // Do common solverInterface testing by calling the // base class testing method. { OsiSpxSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir,netlibDir); } } #endif Vol-1.5.4/Osi/test/OsiGrbSolverInterfaceTest.cpp0000644000175000017500000007440412101340333020570 0ustar sudipsudip//----------------------------------------------------------------------------- // name: OSI Interface for GUROBI // template: OSI Cplex Interface written by T. Achterberg // author: Stefan Vigerske // Humboldt University Berlin // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and 'TODO' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2009 Humboldt University Berlin and others. // Corporation and others. All Rights Reserved. #include "CoinPragma.hpp" #include "OsiConfig.h" //#include //#include #include "OsiUnitTests.hpp" #include "OsiGrbSolverInterface.hpp" #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" // Added so build windows build with dsp files works, // when not building with gurobi. #ifdef COIN_HAS_GRB #include "gurobi_c.h" //-------------------------------------------------------------------------- void OsiGrbSolverInterfaceUnitTest( const std::string & mpsDir, const std::string & netlibDir ) { // Test default constructor { OsiGrbSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.obj_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.coltype_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colspace_ == 0, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 0, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "gurobi", "default constructor"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "gurobi", "default constructor"); } { CoinRelFltEq eq; OsiGrbSolverInterface m; std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str(),"mps"); { OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 8, {}, "gurobi", "exmip1 read"); const CoinPackedMatrix * colCopy = m.getMatrixByCol(); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumCols() == 8, {}, "gurobi", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMajorDim() == 8, {}, "gurobi", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumRows() == 5, {}, "gurobi", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMinorDim() == 5, {}, "gurobi", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getVectorLengths()[7] == 2, {}, "gurobi", "exmip1 matrix"); CoinPackedMatrix revColCopy; revColCopy.reverseOrderedCopyOf(*colCopy); CoinPackedMatrix rev2ColCopy; rev2ColCopy.reverseOrderedCopyOf(revColCopy); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumCols() == 8, {}, "gurobi", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMajorDim() == 8, {}, "gurobi", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumRows() == 5, {}, "gurobi", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMinorDim() == 5, {}, "gurobi", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getVectorLengths()[7] == 2, {}, "gurobi", "twice reverse matrix copy"); } // Test copy constructor and assignment operator { OsiGrbSolverInterface lhs; { OsiGrbSolverInterface im(m); OsiGrbSolverInterface imC1(im); OSIUNITTEST_ASSERT_ERROR(imC1.lp_ != im.lp_, {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumCols() == im.getNumCols(), {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumRows() == im.getNumRows(), {}, "gurobi", "copy constructor"); OsiGrbSolverInterface imC2(im); OSIUNITTEST_ASSERT_ERROR(imC2.lp_ != im.lp_, {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumCols() == im.getNumCols(), {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumRows() == im.getNumRows(), {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.lp_ != imC2.lp_, {}, "gurobi", "copy constructor"); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.lp_ != m.lp_, {}, "gurobi", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "gurobi", "copy constructor"); } // Test clone { OsiGrbSolverInterface gurobiSi(m); OsiSolverInterface * siPtr = &gurobiSi; OsiSolverInterface * siClone = siPtr->clone(); OsiGrbSolverInterface * gurobiClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(gurobiClone != NULL, {}, "gurobi", "clone"); OSIUNITTEST_ASSERT_ERROR(gurobiClone->lp_ != gurobiSi.lp_, {}, "gurobi", "clone"); OSIUNITTEST_ASSERT_ERROR(gurobiClone->getNumRows() == gurobiSi.getNumRows(), {}, "gurobi", "clone"); OSIUNITTEST_ASSERT_ERROR(gurobiClone->getNumCols() == m.getNumCols(), {}, "gurobi", "clone"); delete siClone; } // test infinity { OsiGrbSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == GRB_INFINITY, {}, "gurobi", "value for infinity"); } { OsiGrbSolverInterface gurobiSi(m); int nc = gurobiSi.getNumCols(); int nr = gurobiSi.getNumRows(); const double * cl = gurobiSi.getColLower(); const double * cu = gurobiSi.getColUpper(); const double * rl = gurobiSi.getRowLower(); const double * ru = gurobiSi.getRowUpper(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[0],2.5), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1],0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1],4.1), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2],1.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[0],2.5), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4],3.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1],2.1), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4],15.), {}, "gurobi", "read and copy exmip1"); double newCs[8] = {1., 2., 3., 4., 5., 6., 7., 8.}; gurobiSi.setColSolution(newCs); const double * cs = gurobiSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "gurobi", "set col solution"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "gurobi", "set col solution"); #if 0 // TODO set and copy of solutions not supported by OsiGrb currently { OsiGrbSolverInterface solnSi(gurobiSi); const double * cs = solnSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "gurobi", "set col solution and copy"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "gurobi", "set col solution and copy"); } #endif OSIUNITTEST_ASSERT_ERROR(!eq(cl[3],1.2345), {}, "gurobi", "set col lower"); gurobiSi.setColLower( 3, 1.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cl[3],1.2345), {}, "gurobi", "set col lower"); OSIUNITTEST_ASSERT_ERROR(!eq(cu[4],10.2345), {}, "gurobi", "set col upper"); gurobiSi.setColUpper( 4, 10.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cu[4],10.2345), {}, "gurobi", "set col upper"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[0], 1.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[1], 0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[2], 0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[3], 0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[4], 2.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[5], 0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[6], 0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[7],-1.0), {}, "gurobi", "read and copy exmip1"); } // Test getMatrixByRow method { const OsiGrbSolverInterface si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(smP->getMajorDim() == 5, return, "gurobi", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "gurobi", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[0], 3.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[1], 1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[2], -2.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[3], -1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[4], -1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[5], 2.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[6], 1.1), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[7], 1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[8], 1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[9], 2.8), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], -1.2), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "gurobi", "getMatrixByRow: elements"); const int * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "gurobi", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "gurobi", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "gurobi", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "gurobi", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "gurobi", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "gurobi", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "gurobi", "getMatrixByRow: indices"); } //-------------- // Test rowsense, rhs, rowrange, getMatrixByRow { OsiGrbSolverInterface lhs; { OsiGrbSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.obj_ == NULL, {}, "gurobi", "objective"); OSIUNITTEST_ASSERT_WARNING(siC1.collower_ == NULL, {}, "gurobi", "col lower"); OSIUNITTEST_ASSERT_WARNING(siC1.colupper_ == NULL, {}, "gurobi", "col upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "gurobi", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rowlower_ == NULL, {}, "gurobi", "row lower"); OSIUNITTEST_ASSERT_WARNING(siC1.rowupper_ == NULL, {}, "gurobi", "row upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1.matrixByRow_ == NULL, {}, "gurobi", "matrix by row"); //TODO OSIUNITTEST_ASSERT_WARNING(siC1.colsol_ != NULL, {}, "gurobi", "col solution"); //TODO OSIUNITTEST_ASSERT_WARNING(siC1.rowsol_ != NULL, {}, "gurobi", "row solution"); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "gurobi", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "gurobi", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "gurobi", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "gurobi", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "gurobi", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "gurobi", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "gurobi", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "gurobi", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "gurobi", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "gurobi", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "gurobi", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "gurobi", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "gurobi", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "gurobi", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "gurobi", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "gurobi", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "gurobi", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "gurobi", "row range"); #if 0 // TODO: free rows not really supported by OsiGrb // Change GUROBI Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.obj_ == NULL, {}, "gurobi", "objective"); OSIUNITTEST_ASSERT_ERROR(siC1.collower_ == NULL, {}, "gurobi", "col lower"); OSIUNITTEST_ASSERT_ERROR(siC1.colupper_ == NULL, {}, "gurobi", "col upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowlower_ == NULL, {}, "gurobi", "row lower"); OSIUNITTEST_ASSERT_ERROR(siC1.rowupper_ == NULL, {}, "gurobi", "row upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByCol_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.colsol_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsol_ == NULL, {}, "gurobi", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "gurobi", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "gurobi", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "gurobi", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "gurobi", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "gurobi", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "gurobi", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "gurobi", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "gurobi", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "gurobi", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "gurobi", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "gurobi", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "gurobi", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "gurobi", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "gurobi", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "gurobi", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "gurobi", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "gurobi", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "gurobi", "row range after adding row"); #endif lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.obj_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.collower_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colupper_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowlower_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowupper_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByCol_ == NULL, {}, "gurobi", "freed origin after assignment"); //TODO OSIUNITTEST_ASSERT_ERROR(lhs.colsol_ != NULL, {}, "gurobi", "freed origin after assignment"); //TODO OSIUNITTEST_ASSERT_ERROR(lhs.rowsol_ != NULL, {}, "gurobi", "freed origin after assignment"); #if 0 // TODO: free rows not really supported by OsiGrb const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "gurobi", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "gurobi", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "gurobi", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "gurobi", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "gurobi", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "gurobi", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "gurobi", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "gurobi", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "gurobi", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "gurobi", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "gurobi", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "gurobi", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "gurobi", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "gurobi", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "gurobi", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "gurobi", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "gurobi", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "gurobi", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, {}, "gurobi", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "gurobi", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "gurobi", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "gurobi", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "gurobi", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "gurobi", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "gurobi", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "gurobi", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "gurobi", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "gurobi", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "gurobi", "matrix by row after assignment: indices"); #endif } } // Do common solverInterface testing by calling the // base class testing method. { OsiGrbSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir, netlibDir); } } #endif Vol-1.5.4/Osi/test/OsiMskSolverInterfaceTest.cpp0000644000175000017500000007302311612351731020616 0ustar sudipsudip/* Unit test for OsiMsk. This file is licensed under the terms of Eclipse Public License (EPL). */ #include "CoinPragma.hpp" #include "OsiConfig.h" //#include //#include #include "OsiUnitTests.hpp" #include "OsiMskSolverInterface.hpp" #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" // Added so build windows build with dsp files works, // when not building with gurobi. #ifdef COIN_HAS_MSK #include "mosek.h" //-------------------------------------------------------------------------- void OsiMskSolverInterfaceUnitTest( const std::string & mpsDir, const std::string & netlibDir ) { unsigned int numInstancesStart = OsiMskSolverInterface::getNumInstances(); // Test default constructor { OsiMskSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.obj_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.coltype_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.coltypesize_ == 0, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 0, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(OsiMskSolverInterface::getNumInstances() == numInstancesStart+1, {}, "mosek", "number of instances during first test"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "mosek", "default constructor"); } OSIUNITTEST_ASSERT_ERROR(OsiMskSolverInterface::getNumInstances() == numInstancesStart, {}, "mosek", "number of instances after first test"); { CoinRelFltEq eq; OsiMskSolverInterface m; OSIUNITTEST_ASSERT_ERROR(OsiMskSolverInterface::getNumInstances() == numInstancesStart+1, {}, "mosek", "number of instances"); std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str(),"mps"); { OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 8, {}, "mosek", "exmip1 read"); const CoinPackedMatrix * colCopy = m.getMatrixByCol(); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumCols() == 8, {}, "mosek", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMajorDim() == 8, {}, "mosek", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumRows() == 5, {}, "mosek", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMinorDim() == 5, {}, "mosek", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getVectorLengths()[7] == 2, {}, "mosek", "exmip1 matrix"); CoinPackedMatrix revColCopy; revColCopy.reverseOrderedCopyOf(*colCopy); CoinPackedMatrix rev2ColCopy; rev2ColCopy.reverseOrderedCopyOf(revColCopy); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumCols() == 8, {}, "mosek", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMajorDim() == 8, {}, "mosek", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumRows() == 5, {}, "mosek", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMinorDim() == 5, {}, "mosek", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getVectorLengths()[7] == 2, {}, "mosek", "twice reverse matrix copy"); } // Test copy constructor and assignment operator { OsiMskSolverInterface lhs; { OsiMskSolverInterface im(m); OsiMskSolverInterface imC1(im); OSIUNITTEST_ASSERT_ERROR(imC1.getNumCols() == im.getNumCols(), {}, "mosek", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumRows() == im.getNumRows(), {}, "mosek", "copy constructor"); OsiMskSolverInterface imC2(im); OSIUNITTEST_ASSERT_ERROR(imC2.getNumCols() == im.getNumCols(), {}, "mosek", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumRows() == im.getNumRows(), {}, "mosek", "copy constructor"); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "mosek", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "mosek", "copy constructor"); } // Test clone { OsiMskSolverInterface mosekSi(m); OsiSolverInterface * siPtr = &mosekSi; OsiSolverInterface * siClone = siPtr->clone(); OsiMskSolverInterface * mosekClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(mosekClone != NULL, {}, "mosek", "clone"); OSIUNITTEST_ASSERT_ERROR(mosekClone->getNumRows() == mosekSi.getNumRows(), {}, "mosek", "clone"); OSIUNITTEST_ASSERT_ERROR(mosekClone->getNumCols() == m.getNumCols(), {}, "mosek", "clone"); delete siClone; } // test infinity { OsiMskSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == MSK_INFINITY, {}, "mosek", "value for infinity"); } { OsiMskSolverInterface mosekSi(m); int nc = mosekSi.getNumCols(); int nr = mosekSi.getNumRows(); const double * cl = mosekSi.getColLower(); const double * cu = mosekSi.getColUpper(); const double * rl = mosekSi.getRowLower(); const double * ru = mosekSi.getRowUpper(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[0],2.5), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1],0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1],4.1), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2],1.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[0],2.5), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4],3.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1],2.1), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4],15.), {}, "mosek", "read and copy exmip1"); double newCs[8] = {1., 2., 3., 4., 5., 6., 7., 8.}; mosekSi.setColSolution(newCs); const double * cs = mosekSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "mosek", "set col solution"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "mosek", "set col solution"); { OsiMskSolverInterface solnSi(mosekSi); const double * cs = solnSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "mosek", "set col solution and copy"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "mosek", "set col solution and copy"); } OSIUNITTEST_ASSERT_ERROR(!eq(cl[3],1.2345), {}, "mosek", "set col lower"); mosekSi.setColLower( 3, 1.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cl[3],1.2345), {}, "mosek", "set col lower"); OSIUNITTEST_ASSERT_ERROR(!eq(cu[4],10.2345), {}, "mosek", "set col upper"); mosekSi.setColUpper( 4, 10.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cu[4],10.2345), {}, "mosek", "set col upper"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[0], 1.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[1], 0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[2], 0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[3], 0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[4], 2.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[5], 0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[6], 0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[7],-1.0), {}, "mosek", "read and copy exmip1"); } // Test getMatrixByRow method { const OsiMskSolverInterface si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(smP->getMajorDim() == 5, return, "mosek", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "mosek", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[0], 3.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[1], 1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[2], -2.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[3], -1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[4], -1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[5], 2.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[6], 1.1), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[7], 1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[8], 1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[9], 2.8), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], -1.2), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "mosek", "getMatrixByRow: elements"); const int * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "mosek", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "mosek", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "mosek", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "mosek", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "mosek", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "mosek", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "mosek", "getMatrixByRow: indices"); } //-------------- // Test rowsense, rhs, rowrange, getMatrixByRow { OsiMskSolverInterface lhs; { OsiMskSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.obj_ == NULL, {}, "mosek", "objective"); OSIUNITTEST_ASSERT_WARNING(siC1.collower_ == NULL, {}, "mosek", "col lower"); OSIUNITTEST_ASSERT_WARNING(siC1.colupper_ == NULL, {}, "mosek", "col upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "mosek", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rowlower_ == NULL, {}, "mosek", "row lower"); OSIUNITTEST_ASSERT_WARNING(siC1.rowupper_ == NULL, {}, "mosek", "row upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1.matrixByRow_ == NULL, {}, "mosek", "matrix by row"); OSIUNITTEST_ASSERT_WARNING(siC1.colsol_ == NULL, {}, "mosek", "col solution"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsol_ == NULL, {}, "mosek", "row solution"); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "mosek", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "mosek", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "mosek", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "mosek", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "mosek", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "mosek", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "mosek", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "mosek", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "mosek", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "mosek", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "mosek", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "mosek", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "mosek", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "mosek", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "mosek", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "mosek", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "mosek", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "mosek", "row range"); // Change MOSEK Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.obj_ == NULL, {}, "mosek", "objective"); OSIUNITTEST_ASSERT_ERROR(siC1.collower_ == NULL, {}, "mosek", "col lower"); OSIUNITTEST_ASSERT_ERROR(siC1.colupper_ == NULL, {}, "mosek", "col upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowlower_ == NULL, {}, "mosek", "row lower"); OSIUNITTEST_ASSERT_ERROR(siC1.rowupper_ == NULL, {}, "mosek", "row upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByCol_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.colsol_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsol_ == NULL, {}, "mosek", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "mosek", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "mosek", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "mosek", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "mosek", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "mosek", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "mosek", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "mosek", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "mosek", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "mosek", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "mosek", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "mosek", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "mosek", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "mosek", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "mosek", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "mosek", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "mosek", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "mosek", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "mosek", "row range after adding row"); lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.obj_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.collower_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colupper_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowlower_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowupper_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByCol_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colsol_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsol_ == NULL, {}, "mosek", "freed origin after assignment"); const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "mosek", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "mosek", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "mosek", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "mosek", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "mosek", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "mosek", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "mosek", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "mosek", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "mosek", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "mosek", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "mosek", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "mosek", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "mosek", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "mosek", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "mosek", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "mosek", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "mosek", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "mosek", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, {}, "mosek", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "mosek", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "mosek", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "mosek", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "mosek", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "mosek", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "mosek", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "mosek", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "mosek", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "mosek", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "mosek", "matrix by row after assignment: indices"); } OSIUNITTEST_ASSERT_ERROR(OsiMskSolverInterface::getNumInstances() == numInstancesStart+1, {}, "mosek", "number of instances"); } OSIUNITTEST_ASSERT_ERROR(OsiMskSolverInterface::getNumInstances() == numInstancesStart, {}, "mosek", "number of instances at finish"); // Do common solverInterface testing by calling the // base class testing method. { OsiMskSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir, netlibDir); } } #endif Vol-1.5.4/Osi/test/OsiTestSolverInterfaceTest.cpp0000644000175000017500000000120311575423733021004 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). #include "OsiTestSolverInterface.hpp" #include "OsiUnitTests.hpp" //############################################################################# //-------------------------------------------------------------------------- void OsiTestSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir) { // Do common solverInterface testing { OsiTestSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir, netlibDir); } } Vol-1.5.4/Osi/test/OsiCpxSolverInterfaceTest.cpp0000644000175000017500000006520311612344643020623 0ustar sudipsudip//----------------------------------------------------------------------------- // name: OSI Interface for CPLEX // author: Tobias Pfender // Konrad-Zuse-Zentrum Berlin (Germany) // date: 09/25/2000 // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2000, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. #include "CoinPragma.hpp" #include "OsiConfig.h" //#include //#include #include "OsiUnitTests.hpp" #include "OsiCpxSolverInterface.hpp" #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" // Added so build windows build with dsp files works, // when not building with cplex. #ifdef COIN_HAS_CPX #include "cplex.h" void OsiCpxSolverInterfaceUnitTest( const std::string & mpsDir, const std::string & netlibDir ) { // Test default constructor { OsiCpxSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.obj_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.coltype_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.coltypesize_ == 0, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 0, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "cplex", "default constructor"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "cplex", "default constructor"); } { CoinRelFltEq eq; OsiCpxSolverInterface m; std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str(),"mps"); { OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 8, {}, "cplex", "exmip1 read"); const CoinPackedMatrix * colCopy = m.getMatrixByCol(); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumCols() == 8, {}, "cplex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMajorDim() == 8, {}, "cplex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumRows() == 5, {}, "cplex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMinorDim() == 5, {}, "cplex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getVectorLengths()[7] == 2, {}, "cplex", "exmip1 matrix"); CoinPackedMatrix revColCopy; revColCopy.reverseOrderedCopyOf(*colCopy); CoinPackedMatrix rev2ColCopy; rev2ColCopy.reverseOrderedCopyOf(revColCopy); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumCols() == 8, {}, "cplex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMajorDim() == 8, {}, "cplex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumRows() == 5, {}, "cplex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMinorDim() == 5, {}, "cplex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getVectorLengths()[7] == 2, {}, "cplex", "twice reverse matrix copy"); } // Test copy constructor and assignment operator { OsiCpxSolverInterface lhs; { OsiCpxSolverInterface im(m); OsiCpxSolverInterface imC1(im); OSIUNITTEST_ASSERT_ERROR(imC1.lp_ != im.lp_, {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumCols() == im.getNumCols(), {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumRows() == im.getNumRows(), {}, "cplex", "copy constructor"); OsiCpxSolverInterface imC2(im); OSIUNITTEST_ASSERT_ERROR(imC2.lp_ != im.lp_, {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumCols() == im.getNumCols(), {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumRows() == im.getNumRows(), {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.lp_ != imC2.lp_, {}, "cplex", "copy constructor"); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.lp_ != m.lp_, {}, "cplex", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "cplex", "copy constructor"); } // Test clone { OsiCpxSolverInterface cplexSi(m); OsiSolverInterface * siPtr = &cplexSi; OsiSolverInterface * siClone = siPtr->clone(); OsiCpxSolverInterface * cplexClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(cplexClone != NULL, {}, "cplex", "clone"); OSIUNITTEST_ASSERT_ERROR(cplexClone->lp_ != cplexSi.lp_, {}, "cplex", "clone"); OSIUNITTEST_ASSERT_ERROR(cplexClone->getNumRows() == cplexSi.getNumRows(), {}, "cplex", "clone"); OSIUNITTEST_ASSERT_ERROR(cplexClone->getNumCols() == m.getNumCols(), {}, "cplex", "clone"); delete siClone; } // test infinity { OsiCpxSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == CPX_INFBOUND, {}, "cplex", "value for infinity"); } // Test getMatrixByRow method { const OsiCpxSolverInterface si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(smP->getMajorDim() == 5, return, "cplex", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "cplex", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[0], 3.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[1], 1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[2], -2.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[3], -1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[4], -1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[5], 2.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[6], 1.1), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[7], 1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[8], 1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[9], 2.8), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], -1.2), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "cplex", "getMatrixByRow: elements"); const int * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "cplex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "cplex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "cplex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "cplex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "cplex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "cplex", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "cplex", "getMatrixByRow: indices"); } //-------------- // Test rowsense, rhs, rowrange, getMatrixByRow { OsiCpxSolverInterface lhs; { OsiCpxSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.obj_ == NULL, {}, "cplex", "objective"); OSIUNITTEST_ASSERT_WARNING(siC1.collower_ == NULL, {}, "cplex", "col lower"); OSIUNITTEST_ASSERT_WARNING(siC1.colupper_ == NULL, {}, "cplex", "col upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "cplex", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rowlower_ == NULL, {}, "cplex", "row lower"); OSIUNITTEST_ASSERT_WARNING(siC1.rowupper_ == NULL, {}, "cplex", "row upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1.matrixByRow_ == NULL, {}, "cplex", "matrix by row"); OSIUNITTEST_ASSERT_WARNING(siC1.colsol_ != NULL, {}, "cplex", "col solution"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsol_ != NULL, {}, "cplex", "row solution"); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "cplex", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "cplex", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "cplex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "cplex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "cplex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "cplex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "cplex", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "cplex", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "cplex", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "cplex", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "cplex", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "cplex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "cplex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "cplex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "cplex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "cplex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "cplex", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "cplex", "row range"); // Change CPLEX Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.obj_ == NULL, {}, "cplex", "objective"); OSIUNITTEST_ASSERT_ERROR(siC1.collower_ == NULL, {}, "cplex", "col lower"); OSIUNITTEST_ASSERT_ERROR(siC1.colupper_ == NULL, {}, "cplex", "col upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowlower_ == NULL, {}, "cplex", "row lower"); OSIUNITTEST_ASSERT_ERROR(siC1.rowupper_ == NULL, {}, "cplex", "row upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByCol_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.colsol_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsol_ == NULL, {}, "cplex", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "cplex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "cplex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "cplex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "cplex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "cplex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "cplex", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "cplex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "cplex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "cplex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "cplex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "cplex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "cplex", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "cplex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "cplex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "cplex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "cplex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "cplex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "cplex", "row range after adding row"); lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.obj_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.collower_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colupper_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowlower_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowupper_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByCol_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colsol_ != NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsol_ != NULL, {}, "cplex", "freed origin after assignment"); const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "cplex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "cplex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "cplex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "cplex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "cplex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "cplex", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "cplex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "cplex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "cplex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "cplex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "cplex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "cplex", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "cplex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "cplex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "cplex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "cplex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "cplex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "cplex", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, {}, "cplex", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "cplex", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "cplex", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "cplex", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "cplex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "cplex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "cplex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "cplex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "cplex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "cplex", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "cplex", "matrix by row after assignment: indices"); } } // Do common solverInterface testing by calling the // base class testing method. { OsiCpxSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir, netlibDir); } } #endif Vol-1.5.4/Osi/test/OsiTestSolver.hpp0000644000175000017500000005247412243675677016361 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). // this is a copy of VolVolume (stable/1.1 rev. 233) #ifndef __OSITESTSOLVER_HPP__ #define __OSITESTSOLVER_HPP__ #include #include #include #include #include #include "CoinFinite.hpp" #ifndef VOL_DEBUG // When VOL_DEBUG is 1, we check vector indices #define VOL_DEBUG 0 #endif template static inline T VolMax(register const T x, register const T y) { return ((x) > (y)) ? (x) : (y); } template static inline T VolAbs(register const T x) { return ((x) > 0) ? (x) : -(x); } //############################################################################ #if defined(VOL_DEBUG) && (VOL_DEBUG != 0) #define VOL_TEST_INDEX(i, size) \ { \ if ((i) < 0 || (i) >= (size)) { \ printf("bad VOL_?vector index\n"); \ abort(); \ } \ } #define VOL_TEST_SIZE(size) \ { \ if (s <= 0) { \ printf("bad VOL_?vector size\n"); \ abort(); \ } \ } #else #define VOL_TEST_INDEX(i, size) #define VOL_TEST_SIZE(size) #endif //############################################################################ class VOL_dvector; class VOL_ivector; class VOL_primal; class VOL_dual; class VOL_swing; class VOL_alpha_factor; class VOL_vh; class VOL_indc; class VOL_user_hooks; class VOL_problem; //############################################################################ /** This class contains the parameters controlling the Volume Algorithm */ struct VOL_parms { /** initial value of lambda */ double lambdainit; /** initial value of alpha */ double alphainit; /** minimum value for alpha */ double alphamin; /** when little progress is being done, we multiply alpha by alphafactor */ double alphafactor; /** initial upper bound of the value of an integer solution */ double ubinit; /** accept if max abs viol is less than this */ double primal_abs_precision; /** accept if abs gap is less than this */ double gap_abs_precision; /** accept if rel gap is less than this */ double gap_rel_precision; /** terminate if best_ub - lcost < granularity */ double granularity; /** terminate if the relative increase in lcost through ascent_check_invl steps is less than this */ double minimum_rel_ascent; /** when to check for sufficient relative ascent the first time */ int ascent_first_check; /** through how many iterations does the relative ascent have to reach a minimum */ int ascent_check_invl; /** maximum number of iterations */ int maxsgriters; /** controls the level of printing. The flag should the the 'OR'-d value of the following options:
  • 0 - print nothing
  • 1 - print iteration information
  • 2 - add lambda information
  • 4 - add number of Red, Yellow, Green iterations
Default: 3 */ int printflag; /** controls how often do we print */ int printinvl; /** controls how often we run the primal heuristic */ int heurinvl; /** how many consecutive green iterations are allowed before changing lambda */ int greentestinvl; /** how many consecutive yellow iterations are allowed before changing lambda */ int yellowtestinvl; /** how many consecutive red iterations are allowed before changing lambda */ int redtestinvl; /** number of iterations before we check if alpha should be decreased */ int alphaint; /** name of file for saving dual solution */ char* temp_dualfile; }; //############################################################################ /** vector of doubles. It is used for most vector operations. Note: If VOL_DEBUG is #defined to be 1 then each time an entry is accessed in the vector the index of the entry is tested for nonnegativity and for being less than the size of the vector. It's good to turn this on while debugging, but in final runs it should be turned off (beause of the performance hit). */ class VOL_dvector { public: /** The array holding the vector */ double* v; /** The size of the vector */ int sz; public: /** Construct a vector of size s. The content of the vector is undefined. */ VOL_dvector(const int s) { VOL_TEST_SIZE(s); v = new double[sz = s]; } /** Default constructor creates a vector of size 0. */ VOL_dvector() : v(0), sz(0) {} /** Copy constructor makes a replica of x. */ VOL_dvector(const VOL_dvector& x) : v(0), sz(0) { sz = x.sz; if (sz > 0) { v = new double[sz]; std::copy(x.v, x.v + sz, v); } } /** The destructor deletes the data array. */ ~VOL_dvector() { delete[] v; } /** Return the size of the vector. */ inline int size() const {return sz;} /** Return a reference to the i-th entry. */ inline double& operator[](const int i) { VOL_TEST_INDEX(i, sz); return v[i]; } /** Return the i-th entry. */ inline double operator[](const int i) const { VOL_TEST_INDEX(i, sz); return v[i]; } /** Delete the content of the vector and replace it with a vector of length 0. */ inline void clear() { delete[] v; v = 0; sz = 0; } /** Convex combination. Replace the current vector v with v = (1-gamma) v + gamma w. */ inline void cc(const double gamma, const VOL_dvector& w) { if (sz != w.sz) { printf("bad VOL_dvector sizes\n"); abort(); } double * p_v = v - 1; const double * p_w = w.v - 1; const double * const p_e = v + sz; const double one_gamma = 1.0 - gamma; while ( ++p_v != p_e ){ *p_v = one_gamma * (*p_v) + gamma * (*++p_w); } } /** delete the current vector and allocate space for a vector of size s. */ inline void allocate(const int s) { VOL_TEST_SIZE(s); delete[] v; v = new double[sz = s]; } /** swaps the vector with w. */ inline void swap(VOL_dvector& w) { std::swap(v, w.v); std::swap(sz, w.sz); } /** Copy w into the vector. */ VOL_dvector& operator=(const VOL_dvector& w); /** Replace every entry in the vector with w. */ VOL_dvector& operator=(const double w); }; //----------------------------------------------------------------------------- /** vector of ints. It's used to store indices, it has similar functions as VOL_dvector. Note: If VOL_DEBUG is #defined to be 1 then each time an entry is accessed in the vector the index of the entry is tested for nonnegativity and for being less than the size of the vector. It's good to turn this on while debugging, but in final runs it should be turned off (beause of the performance hit). */ class VOL_ivector { public: /** The array holding the vector. */ int* v; /** The size of the vector. */ int sz; public: /** Construct a vector of size s. The content of the vector is undefined. */ VOL_ivector(const int s) { VOL_TEST_SIZE(s); v = new int[sz = s]; } /** Default constructor creates a vector of size 0. */ VOL_ivector() : v(0), sz(0) {} /** Copy constructor makes a replica of x. */ VOL_ivector(const VOL_ivector& x) { sz = x.sz; if (sz > 0) { v = new int[sz]; std::copy(x.v, x.v + sz, v); } } /** The destructor deletes the data array. */ ~VOL_ivector(){ delete [] v; } /** Return the size of the vector. */ inline int size() const { return sz; } /** Return a reference to the i-th entry. */ inline int& operator[](const int i) { VOL_TEST_INDEX(i, sz); return v[i]; } /** Return the i-th entry. */ inline int operator[](const int i) const { VOL_TEST_INDEX(i, sz); return v[i]; } /** Delete the content of the vector and replace it with a vector of length 0. */ inline void clear() { delete[] v; v = 0; sz = 0; } /** delete the current vector and allocate space for a vector of size s. */ inline void allocate(const int s) { VOL_TEST_SIZE(s); delete[] v; v = new int[sz = s]; } /** swaps the vector with w. */ inline void swap(VOL_ivector& w) { std::swap(v, w.v); std::swap(sz, w.sz); } /** Copy w into the vector. */ VOL_ivector& operator=(const VOL_ivector& v); /** Replace every entry in the vector with w. */ VOL_ivector& operator=(const int w); }; //############################################################################ // A class describing a primal solution. This class is used only internally class VOL_primal { public: // objective value of this primal solution double value; // the largest of the v[i]'s double viol; // primal solution VOL_dvector x; // v=b-Ax, for the relaxed constraints VOL_dvector v; VOL_primal(const int psize, const int dsize) : x(psize), v(dsize) {} VOL_primal(const VOL_primal& primal) : value(primal.value), viol(primal.viol), x(primal.x), v(primal.v) {} ~VOL_primal() {} inline VOL_primal& operator=(const VOL_primal& p) { if (this == &p) return *this; value = p.value; viol = p.viol; x = p.x; v = p.v; return *this; } // convex combination. data members in this will be overwritten // convex combination between two primal solutions // x <-- alpha x + (1 - alpha) p.x // v <-- alpha v + (1 - alpha) p.v inline void cc(const double alpha, const VOL_primal& p) { value = alpha * p.value + (1.0 - alpha) * value; x.cc(alpha, p.x); v.cc(alpha, p.v); } // find maximum of v[i] void find_max_viol(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub); }; //----------------------------------------------------------------------------- // A class describing a dual solution. This class is used only internally class VOL_dual { public: // lagrangian value double lcost; // reduced costs * (pstar-primal) double xrc; // this information is only printed // dual vector VOL_dvector u; VOL_dual(const int dsize) : u(dsize) { u = 0.0;} VOL_dual(const VOL_dual& dual) : lcost(dual.lcost), xrc(dual.xrc), u(dual.u) {} ~VOL_dual() {} inline VOL_dual& operator=(const VOL_dual& p) { if (this == &p) return *this; lcost = p.lcost; xrc = p.xrc; u = p.u; return *this; } // dual step void step(const double target, const double lambda, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v); double ascent(const VOL_dvector& v, const VOL_dvector& last_u) const; void compute_xrc(const VOL_dvector& pstarx, const VOL_dvector& primalx, const VOL_dvector& rc); }; //############################################################################ /* here we check whether an iteration is green, yellow or red. Also according to this information we decide whether lambda should be changed */ class VOL_swing { private: VOL_swing(const VOL_swing&); VOL_swing& operator=(const VOL_swing&); public: enum condition {green, yellow, red} lastswing; int lastgreeniter, lastyellowiter, lastrediter; int ngs, nrs, nys; int rd; VOL_swing() { lastgreeniter = lastyellowiter = lastrediter = 0; ngs = nrs = nys = 0; } ~VOL_swing(){} inline void cond(const VOL_dual& dual, const double lcost, const double ascent, const int iter) { double eps = 1.e-3; if (ascent > 0.0 && lcost > dual.lcost + eps) { lastswing = green; lastgreeniter = iter; ++ngs; rd = 0; } else { if (ascent <= 0 && lcost > dual.lcost) { lastswing = yellow; lastyellowiter = iter; ++nys; rd = 0; } else { lastswing = red; lastrediter = iter; ++nrs; rd = 1; } } } inline double lfactor(const VOL_parms& parm, const double lambda, const int iter) { double lambdafactor = 1.0; double eps = 5.e-4; int cons; switch (lastswing) { case green: cons = iter - VolMax(lastyellowiter, lastrediter); if (parm.printflag & 4) printf(" G: Consecutive Gs = %3d\n\n", cons); if (cons >= parm.greentestinvl && lambda < 2.0) { lastgreeniter = lastyellowiter = lastrediter = iter; lambdafactor = 2.0; if (parm.printflag & 2) printf("\n ---- increasing lamda to %g ----\n\n", lambda * lambdafactor); } break; case yellow: cons = iter - VolMax(lastgreeniter, lastrediter); if (parm.printflag & 4) printf(" Y: Consecutive Ys = %3d\n\n", cons); if (cons >= parm.yellowtestinvl) { lastgreeniter = lastyellowiter = lastrediter = iter; lambdafactor = 1.1; if (parm.printflag & 2) printf("\n **** increasing lamda to %g *****\n\n", lambda * lambdafactor); } break; case red: cons = iter - VolMax(lastgreeniter, lastyellowiter); if (parm.printflag & 4) printf(" R: Consecutive Rs = %3d\n\n", cons); if (cons >= parm.redtestinvl && lambda > eps) { lastgreeniter = lastyellowiter = lastrediter = iter; lambdafactor = 0.67; if (parm.printflag & 2) printf("\n **** decreasing lamda to %g *****\n\n", lambda * lambdafactor); } break; } return lambdafactor; } inline void print() { printf("**** G= %i, Y= %i, R= %i ****\n", ngs, nys, nrs); ngs = nrs = nys = 0; } }; //############################################################################ /* alpha should be decreased if after some number of iterations the objective has increased less that 1% */ class VOL_alpha_factor { private: VOL_alpha_factor(const VOL_alpha_factor&); VOL_alpha_factor& operator=(const VOL_alpha_factor&); public: double lastvalue; VOL_alpha_factor() {lastvalue = -COIN_DBL_MAX;} ~VOL_alpha_factor() {} inline double factor(const VOL_parms& parm, const double lcost, const double alpha) { if (alpha < parm.alphamin) return 1.0; register const double ll = VolAbs(lcost); const double x = ll > 10 ? (lcost-lastvalue)/ll : (lcost-lastvalue); lastvalue = lcost; return (x <= 0.01) ? parm.alphafactor : 1.0; } }; //############################################################################ /* here we compute the norm of the conjugate direction -hh-, the norm of the subgradient -norm-, the inner product between the subgradient and the last conjugate direction -vh-, and the inner product between the new conjugate direction and the subgradient */ class VOL_vh { private: VOL_vh(const VOL_vh&); VOL_vh& operator=(const VOL_vh&); public: double hh; double norm; double vh; double asc; VOL_vh(const double alpha, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v, const VOL_dvector& vstar, const VOL_dvector& u); ~VOL_vh(){} }; //############################################################################ /* here we compute different parameter to be printed. v2 is the square of the norm of the subgradient. vu is the inner product between the dual variables and the subgradient. vabs is the maximum absolute value of the violations of pstar. asc is the inner product between the conjugate direction and the subgradient */ class VOL_indc { private: VOL_indc(const VOL_indc&); VOL_indc& operator=(const VOL_indc&); public: double v2; double vu; double vabs; double asc; public: VOL_indc(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual); ~VOL_indc() {} }; //############################################################################# /** The user hooks should be overridden by the user to provide the problem specific routines for the volume algorithm. The user should derive a class ... for all hooks: return value of -1 means that volume should quit */ class VOL_user_hooks { public: virtual ~VOL_user_hooks() {} public: // for all hooks: return value of -1 means that volume should quit /** compute reduced costs @param u (IN) the dual variables @param rc (OUT) the reduced cost with respect to the dual values */ virtual int compute_rc(const VOL_dvector& u, VOL_dvector& rc) = 0; /** Solve the subproblem for the subgradient step. @param dual (IN) the dual variables @param rc (IN) the reduced cost with respect to the dual values @param lcost (OUT) the lagrangean cost with respect to the dual values @param x (OUT) the primal result of solving the subproblem @param v (OUT) b-Ax for the relaxed constraints @param pcost (OUT) the primal objective value of x */ virtual int solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost) = 0; /** Starting from the primal vector x, run a heuristic to produce an integer solution @param x (IN) the primal vector @param heur_val (OUT) the value of the integer solution (return COIN_DBL_MAX here if no feas sol was found */ virtual int heuristics(const VOL_problem& p, const VOL_dvector& x, double& heur_val) = 0; }; //############################################################################# /** This class holds every data for the Volume Algorithm and its solve method must be invoked to solve the problem. The INPUT fields must be filled out completely before solve is invoked. dsol have to be filled out if and only if the last argument to solve is true. */ class VOL_problem { private: VOL_problem(const VOL_problem&); VOL_problem& operator=(const VOL_problem&); void set_default_parm(); // ############ INPUT fields ######################## public: /**@name Constructors and destructor */ //@{ /** Default constructor. */ VOL_problem(); /** Create a a VOL_problem object and read in the parameters from filename. */ VOL_problem(const char *filename); /** Destruct the object. */ ~VOL_problem(); //@} /**@name Method to solve the problem. */ //@{ /** Solve the problem using the hooks. Any information needed in the hooks must be stored in the structure user_data points to. */ int solve(VOL_user_hooks& hooks, const bool use_preset_dual = false); //@} private: /**@name Internal data (may be inquired for) */ //@{ /** value of alpha */ double alpha_; /** value of lambda */ double lambda_; // This union is here for padding (so that data members would be // double-aligned on x86 CPU union { /** iteration number */ int iter_; double __pad0; }; //@} public: /**@name External data (containing the result after solve) */ //@{ /** final lagrangian value (OUTPUT) */ double value; /** final dual solution (INPUT/OUTPUT) */ VOL_dvector dsol; /** final primal solution (OUTPUT) */ VOL_dvector psol; /** violations (b-Ax) for the relaxed constraints */ VOL_dvector viol; //@} /**@name External data (may be changed by the user before calling solve) */ //@{ /** The parameters controlling the Volume Algorithm (INPUT) */ VOL_parms parm; /** length of primal solution (INPUT) */ int psize; /** length of dual solution (INPUT) */ int dsize; /** lower bounds for the duals (if 0 length, then filled with -inf) (INPUT) */ VOL_dvector dual_lb; /** upper bounds for the duals (if 0 length, then filled with +inf) (INPUT) */ VOL_dvector dual_ub; //@} public: /**@name Methods returning final data */ //@{ /** returns the iteration number */ int iter() const { return iter_; } /** returns the value of alpha */ double alpha() const { return alpha_; } /** returns the value of lambda */ double lambda() const { return lambda_; } //@} private: /**@name Private methods used internally */ //@{ /** Read in the parameters from the file filename. */ void read_params(const char* filename); /** initializes duals, bounds for the duals, alpha, lambda */ int initialize(const bool use_preset_dual); /** print volume info every parm.printinvl iterations */ void print_info(const int iter, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual); /** Checks if lcost is close to the target, if so it increases the target. Close means that we got within 5% of the target. */ double readjust_target(const double oldtarget, const double lcost) const; /** Here we decide the value of alpha1 to be used in the convex combination. The new pstar will be computed as
pstar = alpha1 * pstar + (1 - alpha1) * primal
More details of this are in doc.ps.
IN: alpha, primal, pstar, dual
@return alpha1 */ double power_heur(const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) const; //@} }; #endif Vol-1.5.4/Osi/depcomp0000755000175000017500000003710011405216166013425 0ustar sudipsudip#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/Osi/missing0000755000175000017500000002540611405216166013455 0ustar sudipsudip#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/Osi/install-sh0000755000175000017500000002202111405216166014050 0ustar sudipsudip#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # 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 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/Osi/CHANGELOG0000644000175000017500000001250513421763114013264 0ustar sudipsudip23/01/2018 OsiMsk - add compatibility with Mosek 9.0 beta 20/04/2017 OsiSpx - add compatibility with SoPlex 3.0 31/05/2016 OsiMsk - get it compiling with Mosek 8 beta (conic MIP only with Mosek 7, MSK_initenv() removed) 18/05/2016 OsiCpx - switch from deprecated CPXcopymipstart to CPXaddmipstarts 10/03/2016 OsiMsk - improved performance of frequently called checkMSKerror() and MSKassert() functions (contributed by Geoff Leyland) 17/02/2016 OsiCpx - fixed handling of cplex message callbacks in OsiCpx::reset() 15/02/2016 OsiCpx - fixed OsiCpx::getRowActivity() when solved a MIP 09/06/2015 OsiSpx - added compatibility with SoPlex 2.2 - added OsiSpx::getLpPtr() 12/06/2014 OsiSpx - added compatibility with SoPlex 2.0 (using SoPlex legacy interface) 10/02/2014 OsiMsk - fixed bug in OsiMsk::getPrimalRays() when number of rows < number of columns 17/01/2014 OsiGrb - fixed bug in OsiGrb::deleteCols() where the columns types got lost 11/18/2013 OsiMsk - changed MIP optimizer to Mosek's own conic MIP optimizer, if Mosek version >= 7 09/11/2013 OsiCpx - fixed getIterationCount() for MIPs (use CPXgetmipitcnt instead of CPXgetitcnt) 08/30/2013 OsiGrb - fixed bug in getObjectiveCoefficients and getBasisStatus for LPs without ranged rows 08/23/2013 OsiGrb - fixed bug in deleting row or column names when deleting several rows/columns at once 04/02/2013 OsiMsk - update to work with Mosek 7, too (contributed by Erling D. Andersen) 02/02/2013 OsiUnitTest - replace macro for asserting a condition and collecting its outcome by a function to improve compilation speed (contributed by Victor Zverovich) 29/11/2012 OsiMsk - added getRescode() to get result code of last MSK_optimize call 21/11/2012 OsiCpx - calling setWarmStart with a too small basis now disables the use of an advanced basis for the next LP solve 20/11/2012 OsiGlpk, OsiCpx - workaround problem in Glpk with empty problem name (patch by Bertrand Le Cun) - not using CPXsolninfo for MIPs with CPLEX < 11.0 anymore 25/07/2012 OsiGrb - fix mipstart option in OsiGrb: pass only values for discrete variables to Gurobi 26/11/2011 OsiGrb - add implementation of OsiGrb::applyCuts that batches the row cuts before transfering them to Gurobi 12/11/2011 OsiSpx - add resolve with cleared basis if solve fails with exception (which may be due to a singular startbasis), needs SoPlex >= 1.5.0.7 03/09/2011 OsiMsk - fix bug in one loadProblem method when NULL was passed as row range array 30/07/2011 Osi - fix writing LP files with names: the objective name was not copied, leading to a segfault in CoinLpIO 30/07/2011 OsiSpx, OsiGlpk - allow NULLs for row* arguments in some loadProblem call 28/07/2011 OsiSpx - invert dual ray in getDualRays to match Osi definition when testing infeasibility proof 12/07/2011 MSVisualStudio - updated MSVC++ v10 project files to catch up with buildsystem changes 25/06/2011 Osi - add generic implementations of is{Primal,Dual}ObjectiveLimitReached 25/06/2011 OsiCommonTest - add unittest command line parameter -onerror to specify behaviour in case of a failing test 23/06/2011 OsiMsk - add isLicenseError() to check whether last solve was abandoned due to a mosek licensing issue 22/06/2011 OsiCpx - fix handling of primal/dual objective limit so it correctly takes objoffset into account - preserve objective sense also when empty model is loaded - make sure getWarmStart returns proper atlower/atupper status for inequalities 13/06/2011 OsiCommonTest, unittest - removed now redundant counting of unittest failures, so test functions now return void 03/06/2011 OsiMsk - fix caching flags (bitwise negation is ~, not !) - free all cached data when loading problem - fix getDualRay and getPrimalRay so they should return a ray now - fixed various further issues in unittest, so OsiMsk passes it now 15/05/2011 OsiXpr - added option (mipstart) to pass column solution as initial solution to a MIP solve 30/04/2011 OsiCpx, OsiGrb - added option (mipstart) to pass column solution as initial solution to a MIP solve 29/04/2011 OsiMsk - fix loss of Mosek task when copying OsiMsk 25/04/2011 OsiSpx - add methods to set/get/check timelimit - fix bug in solve methods where cached result vectors where not cleared - fix setWarmStart to swap status for slack variables as in getWarmStart - fix caching flags (bitwise negation is ~, not !) - redirect set/get name discipline to base class - fix primal/dual objective limit: take objoffset into account, correct check if limit changed after solve - getColSolution and getObjValue now return lower bound and value in lower bound before solve 01/04/2011 OsiGlpk - if initial basis is invalid or singular in initialSolve or resolve, construct advanced basis and try again 31/03/2011 OsiGrb - fixed handling of free variables in setWarmStart 30/03/2011 OsiGrb - fixed memory leak in loadProblem 21/03/2011 OsiCommonTest, unittest - add classes TestOutcome{s} to collect outcome of unittests - add macros to simplify asserts and exception catching and storing results as TestOutcome - change general and OsiGlpk tests to use new macros - return number of unexpected errors as return code of unittest - add parameter -verbosity to unittest to specify amount of output of unittests - a bit cleanup 21/03/2011 started CHANGELOG Vol-1.5.4/README.md0000644000175000017500000000572213434065343012605 0ustar sudipsudip# Welcome to the COIN Vol Project ## Introduction Vol (Volume Algorithm) is an open-source implementation of a subgradient method that produces primal as well as dual solutions. The primal solution comes from estimating the volumes below the faces of the dual problem. This is an approximate method so the primal vector might have small infeasiblities that are negligible in many practical settings. The original subgradient algorithm produces only dual solutions. ## Background/Download Vol is written in C++ and is released as open source code under the [Eclipse Public License](http://www.opensource.org/licenses/eclipse-1.0)(EPL). To get all of the dependencies and build the `Vol` package, do ``` git clone https://github.com/coin-or/Vol Vol git clone https://github.com/coin-or-tools/BuildTools BuildTools/get.dependencies fetch BuildTools/get.dependencies build ``` To test by building an application, do ``` cd build/Vol/examples/VolUfl make ./ufl ``` ## Included Projects If you download the Vol package, you get [these](https://github.com/coin-or/Vol/blob/master/Dependencies) additional projects. ## Doxygen Documentation If you have `Doxygen` available, you can build the html documentation by typing ``` make doxydoc ``` in the `Vol` directory. Then open the file `coin-Vol/doxydoc/html/index.html` with a browser. Note that this creates the documentation for the `Vol` package as a whole. If you prefer to generate the documentation only for a subset of these projects, you can edit the file `Vol/doxydoc/doxygen.conf` to exclude directories (using the `EXCLUDE` variable, for example). If `Doxygen` is not available, you can use the link to the {{{Vol}}} html documentation listed below. ## Documentation * [Overview of different directories](https://projects.coin-or.org/Vol/attachment/wiki/WikiStart/volDoc.pdf?format=raw) * [The Volume Algorithm: Producing Primal Solutions With a Subgradient Method](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/7a1b25774639540a852565be0070cfb5?OpenDocument) * [On Some Difficult Linear Programs Coming from Set Partitioning](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/53731ca97769f3838525672f0070dc2b?OpenDocument) * [Solving Large Scale Uncapacitated Facility Location Problems](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/08e1ac62bb877f9a852567b500500996?OpenDocument) * [Near-Optimal Solutions to Large Scale Facility Location Problems](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/215bca4e7e2406ec852568430076860c?OpenDocument) * [Solving Steiner Tree Problems in Graphs with Lagrangian Relaxation](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/4a61544906b57a6d8525696c0057f955?OpenDocument&Highlight=0,barahona) * [Vol html documentation](http://www.coin-or.org/Doxygen/Vol/hierarchy.html) * [COIN-OR Initiative](http://www.coin-or.org/) Vol-1.5.4/LICENSE0000644000175000017500000002622713434065343012336 0ustar sudipsudipEclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. Vol-1.5.4/config.sub0000755000175000017500000007772610642477222013327 0ustar sudipsudip#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Vol-1.5.4/Makefile.am0000644000175000017500000000420111511202647013343 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 281 2011-01-05 23:58:31Z lou $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign EXTRA_DIST = doxydoc/doxygen.conf ######################################################################## # Subdirectories # ######################################################################## # subdirs is set by configure as the list of all subdirectories to recurse # into SUBDIRS = $(subdirs) ######################################################################## # Extra Targets # ######################################################################## test: all cd Vol; $(MAKE) test unitTest: test tests: all for dir in $(subdirs); do \ if test -r $$dir/test/Makefile; then \ (cd $$dir; $(MAKE) test) \ fi; \ done unitTests: tests doxydoc: for dir in $(subdirs) ; do \ if test $$dir != @PACKAGE_NAME@ && test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) doxydoc) \ fi ; \ done ; \ if test -r doxydoc/doxygen.conf ; then \ doxygen doxydoc/doxygen.conf ; \ fi clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) # DocInstallDir is defined in Makemain.inc and is specific to the package. # For the short term, adopt the notion that we install only the package # doxydoc. install-doxydoc: doxydoc if test -r doxydoc/doxygen.conf ; then \ $(mkdir_p) $(DocInstallDir) ; \ cp -R doxydoc $(DocInstallDir) ; \ fi uninstall-doxydoc: rm -rf $(DocInstallDir)/doxydoc clean-local: clean-doxydoc uninstall-local: uninstall-doxydoc .PHONY: tests unitTests doxydoc ######################################################################## # Maintainer Stuff # ######################################################################## # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = coin_subdirs.txt include BuildTools/Makemain.inc Vol-1.5.4/Vol/0000755000175000017500000000000013434204224012051 5ustar sudipsudipVol-1.5.4/Vol/configure0000755000175000017500000313245713434066267014014 0ustar sudipsudip#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for Vol 1.5.4. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # # Copyright 2006 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package Coin which is distributed # under the Eclipse Public License. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string=`eval $cmd`) 2>/dev/null && echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='Vol' PACKAGE_TARNAME='vol' PACKAGE_VERSION='1.5.4' PACKAGE_STRING='Vol 1.5.4' PACKAGE_BUGREPORT='coin-vol@list.coin-or.org' ac_unique_file="src/VolVolume.cpp" ac_default_prefix=`pwd` # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os ALWAYS_FALSE_TRUE ALWAYS_FALSE_FALSE have_svnversion VOL_SVN_REV CDEFS ADD_CFLAGS DBG_CFLAGS OPT_CFLAGS sol_cc_compiler CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT COIN_CC_IS_CL_TRUE COIN_CC_IS_CL_FALSE MPICC CXXDEFS ADD_CXXFLAGS DBG_CXXFLAGS OPT_CXXFLAGS CXX CXXFLAGS ac_ct_CXX COIN_CXX_IS_CL_TRUE COIN_CXX_IS_CL_FALSE MPICXX EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE host host_cpu host_vendor host_os ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL ac_c_preproc_warn_flag ac_cxx_preproc_warn_flag RPATH_FLAGS DEPENDENCY_LINKING_TRUE DEPENDENCY_LINKING_FALSE LT_LDFLAGS PKG_CONFIG ac_ct_PKG_CONFIG COIN_HAS_PKGCONFIG_TRUE COIN_HAS_PKGCONFIG_FALSE COIN_PKG_CONFIG_PATH COIN_PKG_CONFIG_PATH_UNINSTALLED COINUTILS_LIBS COINUTILS_CFLAGS COINUTILS_DATA COINUTILS_DEPENDENCIES COINUTILS_LIBS_INSTALLED COINUTILS_CFLAGS_INSTALLED COINUTILS_DATA_INSTALLED VOLLIB_CFLAGS VOLLIB_LIBS VOLLIB_PCLIBS VOLLIB_PCREQUIRES VOLLIB_DEPENDENCIES VOLLIB_CFLAGS_INSTALLED VOLLIB_LIBS_INSTALLED COIN_HAS_COINUTILS_TRUE COIN_HAS_COINUTILS_FALSE OSI_LIBS OSI_CFLAGS OSI_DATA OSI_DEPENDENCIES OSI_LIBS_INSTALLED OSI_CFLAGS_INSTALLED OSI_DATA_INSTALLED OSIVOLLIB_CFLAGS OSIVOLLIB_LIBS OSIVOLLIB_PCLIBS OSIVOLLIB_PCREQUIRES OSIVOLLIB_DEPENDENCIES OSIVOLLIB_CFLAGS_INSTALLED OSIVOLLIB_LIBS_INSTALLED COIN_HAS_OSI_TRUE COIN_HAS_OSI_FALSE OSITESTS_LIBS OSITESTS_CFLAGS OSITESTS_DATA OSITESTS_DEPENDENCIES OSITESTS_LIBS_INSTALLED OSITESTS_CFLAGS_INSTALLED OSITESTS_DATA_INSTALLED COIN_HAS_OSITESTS_TRUE COIN_HAS_OSITESTS_FALSE SAMPLE_LIBS SAMPLE_CFLAGS SAMPLE_DATA SAMPLE_DEPENDENCIES SAMPLE_LIBS_INSTALLED SAMPLE_CFLAGS_INSTALLED SAMPLE_DATA_INSTALLED COIN_HAS_SAMPLE_TRUE COIN_HAS_SAMPLE_FALSE coin_have_doxygen coin_have_latex coin_doxy_usedot coin_doxy_tagname coin_doxy_logname COIN_HAS_DOXYGEN_TRUE COIN_HAS_DOXYGEN_FALSE COIN_HAS_LATEX_TRUE COIN_HAS_LATEX_FALSE coin_doxy_tagfiles coin_doxy_excludes LIBEXT VPATH_DISTCLEANFILES ABSBUILDDIR LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CDEFS_set=${CDEFS+set} ac_env_CDEFS_value=$CDEFS ac_cv_env_CDEFS_set=${CDEFS+set} ac_cv_env_CDEFS_value=$CDEFS ac_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_cv_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_cv_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_cv_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_cv_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_cv_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_cv_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_MPICC_set=${MPICC+set} ac_env_MPICC_value=$MPICC ac_cv_env_MPICC_set=${MPICC+set} ac_cv_env_MPICC_value=$MPICC ac_env_CXXDEFS_set=${CXXDEFS+set} ac_env_CXXDEFS_value=$CXXDEFS ac_cv_env_CXXDEFS_set=${CXXDEFS+set} ac_cv_env_CXXDEFS_value=$CXXDEFS ac_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_cv_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_cv_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_cv_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_cv_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_cv_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_cv_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_MPICXX_set=${MPICXX+set} ac_env_MPICXX_value=$MPICXX ac_cv_env_MPICXX_set=${MPICXX+set} ac_cv_env_MPICXX_value=$MPICXX ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS ac_env_PKG_CONFIG_set=${PKG_CONFIG+set} ac_env_PKG_CONFIG_value=$PKG_CONFIG ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set} ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Vol 1.5.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Vol 1.5.4:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug compile all projects with debug options tests (implies --disable-shared) --enable-debug-vol compile project Vol with debug compiler flags --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. --enable-static[=PKGS] build static libraries [default=no] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-dependency-linking disable linking library dependencies into shared libraries --disable-pkg-config disable use of pkg-config (if available) --disable-interpackage-dependencies disables deduction of Makefile dependencies from package linker flags Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-vol-verbosity specify the debug verbosity level for project Vol --with-vol-checklevel specify the sanity check level for project Vol --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-coin-instdir prefix of installation directory for precompiled COIN packages --with-coinutils-lib linker flags for using package CoinUtils --with-coinutils-incdir directory with header files for using package CoinUtils --with-coinutils-datadir directory with data files for using package CoinUtils --with-osi-lib linker flags for using package Osi --with-osi-incdir directory with header files for using package Osi --with-osi-datadir directory with data files for using package Osi --with-ositests-lib linker flags for using package OsiTests --with-ositests-incdir directory with header files for using package OsiTests --with-ositests-datadir directory with data files for using package OsiTests --with-sample-lib linker flags for using package Sample --with-sample-incdir directory with header files for using package Sample --with-sample-datadir directory with data files for using package Sample --with-dot use dot (from graphviz) when creating documentation with doxygen if available; --without-dot to disable Some influential environment variables: CDEFS Additional -D flags to be used when compiling C code. ADD_CFLAGS Additional C compiler options DBG_CFLAGS Debug C compiler options OPT_CFLAGS Optimize C compiler options CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC C MPI Compiler CXXDEFS Additional -D flags to be used when compiling C++ code. ADD_CXXFLAGS Additional C++ compiler options DBG_CXXFLAGS Debug C++ compiler options OPT_CXXFLAGS Optimize C++ compiler options CXX C++ compiler command CXXFLAGS C++ compiler flags MPICXX C++ MPI Compiler CPP C preprocessor CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags PKG_CONFIG path to pkg-config utility Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Vol configure 1.5.4 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Vol $as_me 1.5.4, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # List one file in the package so that the configure script can test # whether the package is actually there # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. ############################################################################# # Standard build tool stuff # ############################################################################# # Get the system type ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # If this project depends on external projects, the Externals file in # the source root directory contains definition of where to find those # externals. The following macro ensures that those externals are # retrieved by svn if they are not there yet. # As backup, we make sure we don't loose an FLIBS if it has been set # by the user save_FLIBS="$FLIBS" # A useful makefile conditional that is always false if false; then ALWAYS_FALSE_TRUE= ALWAYS_FALSE_FALSE='#' else ALWAYS_FALSE_TRUE='#' ALWAYS_FALSE_FALSE= fi # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes # Set the project's version numbers cat >>confdefs.h <<_ACEOF #define VOL_VERSION "$PACKAGE_VERSION" _ACEOF coin_majorver=`echo $PACKAGE_VERSION | sed -n -e 's/^\([0-9]*\).*/\1/gp'` coin_minorver=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.\([0-9]*\).*/\1/gp'` coin_releasever=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/gp'` if test "x$coin_majorver" = x ; then coin_majorver=9999 ; fi if test "x$coin_minorver" = x ; then coin_minorver=9999 ; fi if test "x$coin_releasever" = x ; then coin_releasever=9999 ; fi cat >>confdefs.h <<_ACEOF #define VOL_VERSION_MAJOR $coin_majorver _ACEOF cat >>confdefs.h <<_ACEOF #define VOL_VERSION_MINOR $coin_minorver _ACEOF cat >>confdefs.h <<_ACEOF #define VOL_VERSION_RELEASE $coin_releasever _ACEOF # We use the following variable to have a string with the upper case # version of the project name COIN_PRJCT=VOL # Set the project's SVN revision number. The complicated sed expression # (made worse by quadrigraphs) ensures that things like 4123:4168MS end up # as a single number. # Extract the first word of "svnversion", so it can be a program name with args. set dummy svnversion; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svnversion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svnversion"; then ac_cv_prog_have_svnversion="$have_svnversion" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svnversion="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svnversion" && ac_cv_prog_have_svnversion="no" fi fi have_svnversion=$ac_cv_prog_have_svnversion if test -n "$have_svnversion"; then echo "$as_me:$LINENO: result: $have_svnversion" >&5 echo "${ECHO_T}$have_svnversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$have_svnversion" = xyes; then svn_rev_tmp=`LANG=en_EN svnversion $srcdir 2>/dev/null` if test "x$svn_rev_tmp" != xexported -a "x$svn_rev_tmp" != x -a "x$svn_rev_tmp" != "xUnversioned directory"; then VOL_SVN_REV=`echo $svn_rev_tmp | sed -n -e 's/^[0-9]*://' -e 's/\([0-9]\)[^0-9]*$/\1/p'` cat >>confdefs.h <<_ACEOF #define VOL_SVN_REV $VOL_SVN_REV _ACEOF fi fi # Capture libtool library version, if given. coin_libversion=6:4:5 # Check if user wants to produce debugging code echo "$as_me:$LINENO: checking whether we want to compile in debug mode" >&5 echo $ECHO_N "checking whether we want to compile in debug mode... $ECHO_C" >&6 # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" case "${enableval}" in yes) coin_debug_compile=true if test "${enable_shared+set}" = set; then :; else enable_shared=no fi ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug" >&2;} { (exit 1); exit 1; }; } ;; esac else coin_debug_compile=false fi; # Check whether --enable-debug-vol or --disable-debug-vol was given. if test "${enable_debug_vol+set}" = set; then enableval="$enable_debug_vol" case "${enableval}" in yes) coin_debug_compile=true ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug-vol" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug-vol" >&2;} { (exit 1); exit 1; }; } ;; esac else : fi; # m4_ifvaln([Vol], if test $coin_debug_compile = true; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Check whether --with-vol-verbosity or --without-vol-verbosity was given. if test "${with_vol_verbosity+set}" = set; then withval="$with_vol_verbosity" if test "$withval" = yes; then withval=1 fi coin_vol_verbosity=$withval else coin_vol_verbosity=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_VOL_VERBOSITY $coin_vol_verbosity _ACEOF # Check whether --with-vol-checklevel or --without-vol-checklevel was given. if test "${with_vol_checklevel+set}" = set; then withval="$with_vol_checklevel" if test "$withval" = yes; then withval=1 fi coin_vol_checklevel=$withval else coin_vol_checklevel=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_VOL_CHECKLEVEL $coin_vol_checklevel _ACEOF # m4_ifvaln([Vol], # Get the name of the C++ compiler and appropriate compiler options # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # For consistency, we set the C compiler to the same value of the C++ # compiler, if the C++ is set, but the C compiler isn't (only for CXX=cl) if test x"$CXX" != x; then case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) if test x"$CC" = x; then CC="$CXX" { echo "$as_me:$LINENO: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&5 echo "$as_me: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&2;} fi ;; esac fi coin_has_cc=yes save_cflags="$CFLAGS" # For *-*-solaris*, promote Studio/Workshop cc compiler to front of list. # Depending on the user's PATH, when Studio/Workshop cc is not present we may # find /usr/ucb/cc, which is almost certainly not a good choice for the C # compiler. In this case, put cc after gcc. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl gcc" else comps="gcc icl cl" fi ;; *-*-solaris*) # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_sol_cc_compiler+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$sol_cc_compiler"; then ac_cv_prog_sol_cc_compiler="$sol_cc_compiler" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_sol_cc_compiler="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_sol_cc_compiler shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set sol_cc_compiler to just the basename; use the full file name. shift ac_cv_prog_sol_cc_compiler="$as_dir/$ac_word${1+' '}$@" fi fi fi fi sol_cc_compiler=$ac_cv_prog_sol_cc_compiler if test -n "$sol_cc_compiler"; then echo "$as_me:$LINENO: result: $sol_cc_compiler" >&5 echo "${ECHO_T}$sol_cc_compiler" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$sol_cc_compiler" = "cc" ; then comps="cc xlc gcc pgcc icc" else comps="xlc gcc pgcc icc cc" fi ;; *-*-darwin*) comps="clang gcc cc" ;; *-linux-gnu*) comps="gcc cc pgcc icc xlc" ;; *-linux-*) comps="xlc gcc cc pgcc icc" ;; *) comps="xlc_r xlc cc gcc pgcc icc" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CC || test "${ac_cv_prog_CC+set}" != set || { ac_cv_prog_CC=; export ac_cv_prog_CC; } # AC_MSG_NOTICE([C compiler candidates: $comps]) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -z "$CC" ; then { { echo "$as_me:$LINENO: error: Failed to find a C compiler!" >&5 echo "$as_me: error: Failed to find a C compiler!" >&2;} { (exit 1); exit 1; }; } fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cc_g" = yes ; then ac_cv_prog_cc_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CFLAGS="$save_cflags" # add automake conditional so we can recognize cl compiler in makefile coin_cc_is_cl=false case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_cc_is_cl=true ;; esac if test $coin_cc_is_cl = true; then COIN_CC_IS_CL_TRUE= COIN_CC_IS_CL_FALSE='#' else COIN_CC_IS_CL_TRUE='#' COIN_CC_IS_CL_FALSE= fi # Check if a project specific CFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CFLAGS+set} if test x$coin_tmp = xset; then eval CFLAGS=\${${COIN_PRJCT}_CFLAGS} fi fi if test x"$CFLAGS" = x; then coin_add_cflags= coin_opt_cflags= coin_dbg_cflags= coin_warn_cflags= if test "$GCC" = "yes"; then case "$CC" in icc* | */icc*) ;; *) coin_opt_cflags="-O3" coin_add_cflags="-pipe" coin_dbg_cflags="-g -O0" coin_warn_cflags="-Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall -Wno-unknown-pragmas -Wno-long-long" esac fi if test -z "$coin_opt_cflags"; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -O2' coin_dbg_cflags='-MDd' else coin_opt_cflags='-MT -O2' coin_dbg_cflags='-MTd' fi coin_add_cflags='-nologo -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -Ox' coin_dbg_cflags='-MDd -debug' else coin_opt_cflags='-MT -Ox' coin_dbg_cflags='-MTd -debug' fi coin_add_cflags='-nologo -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CC" in icc* | */icc*) coin_opt_cflags="-O3 -ip -mp1" coin_add_cflags="" coin_dbg_cflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cflags="-i_dynamic $coin_add_cflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgcc* | */pgcc*) coin_opt_cflags="-fast" coin_add_cflags="-Kieee -pc 64" coin_dbg_cflags="-g" ;; esac ;; *-ibm-*) case "$CC" in xlc* | */xlc* | mpxlc* | */mpxlc*) coin_opt_cflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_cflags="-g" ;; esac ;; *-hp-*) coin_opt_cflags="-O" coin_add_cflags="-Ae" coin_dbg_cflags="-g" ;; *-*-solaris*) coin_opt_cflags="-xO4" coin_dbg_cflags="-g" ;; *-sgi-*) coin_opt_cflags="-O -OPT:Olimit=0" coin_dbg_cflags="-g" ;; esac fi if test "$ac_cv_prog_cc_g" = yes && test -z "$coin_dbg_cflags" ; then coin_dbg_cflags="-g" fi if test -z "$coin_opt_cflags"; then # Try if -O option works if nothing else is set CFLAGS="-O" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cflags" = xyes; then coin_warn_cflags= fi if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$coin_dbg_cflags $coin_add_cflags $coin_warn_cflags" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$coin_opt_cflags $coin_add_cflags -DNDEBUG $coin_warn_cflags" fi DBG_CFLAGS="$DBG_CFLAGS $ADD_CFLAGS $CDEFS" OPT_CFLAGS="$OPT_CFLAGS $ADD_CFLAGS $CDEFS" if test "$coin_debug_compile" = "true"; then CFLAGS="$DBG_CFLAGS" else CFLAGS="$OPT_CFLAGS" fi else CFLAGS="$CFLAGS $ADD_CFLAGS $CDEFS" if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$CFLAGS" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$CFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CFLAGS="$CFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CFLAGS works save_CFLAGS="$CFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&2;} CFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C compiler options are: $CFLAGS" >&5 echo "$as_me: C compiler options are: $CFLAGS" >&6;} if test x"$MPICC" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C compiler $MPICC" >&5 echo "$as_me: Will use MPI C compiler $MPICC" >&6;} CC="$MPICC" fi # Correct the LD variable if we are using the MS or Intel-windows compiler case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #Let's try if that overcomes configuration problem with VC++ 6.0 ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu coin_has_cxx=yes save_cxxflags="$CXXFLAGS" # For *-*-solaris*, promote Studio/Workshop compiler to front of list. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl g++" else comps="g++ icl cl" fi ;; *-*-solaris*) comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; *-darwin*) comps="clang++ g++ c++ CC" ;; *-linux-gnu*) comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;; *) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CXX || test "${ac_cv_prog_CXX+set}" != set || { ac_cv_prog_CXX=; export ac_cv_prog_CXX; } # AC_MSG_NOTICE([C++ compiler candidates: $comps]) ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC $comps do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu #AC_PROG_CXX sets CXX to g++ if it cannot find a working C++ compiler #thus, we test here whether $CXX is actually working ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking whether C++ compiler $CXX works" >&5 echo $ECHO_N "checking whether C++ compiler $CXX works... $ECHO_C" >&6; cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&5 echo "$as_me: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu coin_cxx_is_cl=false # It seems that we need to cleanup something here for the Windows case "$CXX" in clang* | */clang*) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh mv confdefs.hh confdefs.h coin_cxx_is_cl=true ;; esac # add automake conditional so we can recognize cl compiler in makefile if test $coin_cxx_is_cl = true; then COIN_CXX_IS_CL_TRUE= COIN_CXX_IS_CL_FALSE='#' else COIN_CXX_IS_CL_TRUE='#' COIN_CXX_IS_CL_FALSE= fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cxx_g" = yes ; then ac_cv_prog_cxx_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CXXFLAGS="$save_cxxflags" # Check if a project specific CXXFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CXXFLAGS+set} if test x$coin_tmp = xset; then eval CXXFLAGS=\${${COIN_PRJCT}_CXXFLAGS} fi fi if test x"$CXXFLAGS" = x; then # ToDo decide whether we want -DNDEBUG for optimization coin_add_cxxflags= coin_opt_cxxflags= coin_dbg_cxxflags= coin_warn_cxxflags= if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) ;; *) # ToDo decide about unroll-loops coin_opt_cxxflags="-O3" coin_add_cxxflags="-pipe" coin_dbg_cxxflags="-g -O0" coin_warn_cxxflags="-Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long" esac fi # Note that we do not need to cover GCC in the following tests. if test -z "$coin_opt_cxxflags"; then case $build in *-cygwin* | *-mingw*) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -O2' coin_dbg_cxxflags='-MDd' else coin_opt_cxxflags='-MT -O2' coin_dbg_cxxflags='-MTd' fi coin_add_cxxflags='-nologo -EHsc -GR -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -Ox' coin_dbg_cxxflags='-MDd -debug' else coin_opt_cxxflags='-MT -Ox' coin_dbg_cxxflags='-MTd -debug' fi coin_add_cxxflags='-nologo -EHsc -GR -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CXX" in icpc* | */icpc*) coin_opt_cxxflags="-O3 -ip -mp1" coin_add_cxxflags="" coin_dbg_cxxflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CXXFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cxxflags="-i_dynamic $coin_add_cxxflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgCC* | */pgCC*) coin_opt_cxxflags="-fast" coin_add_cxxflags="-Kieee -pc 64" coin_dbg_cxxflags="-g" ;; esac ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) coin_opt_cxxflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cxxflags="-bmaxdata:0x80000000 -qrtti=dyna -qsuppress=1500-036 -qsuppress=1500-029 -qsourcetype=c++" coin_dbg_cxxflags="-g" ;; esac ;; *-hp-*) case "$CXX" in aCC* | */aCC* ) coin_opt_cxxflags="-O" coin_add_cxxflags="-AA" coin_dbg_cxxflags="-g" ;; esac ;; *-*-solaris*) coin_opt_cxxflags="-O4" coin_dbg_cxxflags="-g" ;; esac fi # Generic flag settings. If these don't work, add a case above. if test "$ac_cv_prog_cxx_g" = yes && test -z "$coin_dbg_cxxflags" ; then coin_dbg_cxxflags="-g" fi if test -z "$coin_opt_cxxflags"; then # Try if -O option works if nothing else is set CXXFLAGS=-O cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cxxflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cxxflags" = xyes; then coin_warn_cxxflags= fi # Do final setup of flags based on values determined above. if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$coin_dbg_cxxflags $coin_add_cxxflags $coin_warn_cxxflags" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$coin_opt_cxxflags $coin_add_cxxflags -DNDEBUG $coin_warn_cxxflags" fi DBG_CXXFLAGS="$DBG_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" OPT_CXXFLAGS="$OPT_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test "$coin_debug_compile" = "true"; then CXXFLAGS="$DBG_CXXFLAGS" else CXXFLAGS="$OPT_CXXFLAGS" fi # Handle the case where CXXFLAGS was set externally. else CXXFLAGS="$CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$CXXFLAGS" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$CXXFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CXXFLAGS="$CXXFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CXXFLAGS works save_CXXFLAGS="$CXXFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&2;} CXXFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C++ compiler options are: $CXXFLAGS" >&5 echo "$as_me: C++ compiler options are: $CXXFLAGS" >&6;} if test x"$MPICXX" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C++ compiler $MPICXX" >&5 echo "$as_me: Will use MPI C++ compiler $MPICXX" >&6;} CXX="$MPICXX" fi # correct the LD variable in a build with MS or Intel-windows compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Initialize automake and libtool { # START coin_disable_shared=no # Test if force_shared has been set if test "x" = xforce_shared; then if test x$enable_shared = xno; then { { echo "$as_me:$LINENO: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&5 echo "$as_me: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&2;} { (exit 1); exit 1; }; } fi enable_shared=yes; else case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CC" in clang* ) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Building of DLLs not supported in this configuration." >&5 echo "$as_me: Building of DLLs not supported in this configuration." >&6;} ;; *gcc*) if test x"$enable_dependency_linking" = xyes; then coin_disable_shared=no else { echo "$as_me:$LINENO: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&5 echo "$as_me: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&2;} fi ;; *) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then { echo "$as_me:$LINENO: WARNING: Shared objects are not supported." >&5 echo "$as_me: WARNING: Shared objects are not supported." >&2;} fi ;; esac fi if test x"$coin_disable_shared" = xyes; then if test x"$enable_shared" = xyes; then : else # we don't disable shared, because it was not selected anyway coin_disable_shared=no fi enable_shared=no fi # By default, we only want the shared objects to be compiled # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=no fi; # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='vol' VERSION='1.5.4' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME echo "$as_me:$LINENO: checking whether we are using the correct autotools" >&5 echo $ECHO_N "checking whether we are using the correct autotools... $ECHO_C" >&6 if test "${ac_cv_use_correct_autotools+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_use_correct_autotools=check fi echo "$as_me:$LINENO: result: $ac_cv_use_correct_autotools" >&5 echo "${ECHO_T}$ac_cv_use_correct_autotools" >&6 if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf # Extract the first word of "autoconf", so it can be a program name with args. set dummy autoconf; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_autoconf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_autoconf"; then ac_cv_prog_have_autoconf="$have_autoconf" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_autoconf="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_autoconf" && ac_cv_prog_have_autoconf="no" fi fi have_autoconf=$ac_cv_prog_have_autoconf if test -n "$have_autoconf"; then echo "$as_me:$LINENO: result: $have_autoconf" >&5 echo "${ECHO_T}$have_autoconf" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_autoconf = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of autoconf" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of autoconf... $ECHO_C" >&6 autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of autoconf as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of autoconf as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location echo "$as_me:$LINENO: checking whether autoconf is coming from the correct location" >&5 echo $ECHO_N "checking whether autoconf is coming from the correct location... $ECHO_C" >&6 autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if we have automake # Extract the first word of "automake", so it can be a program name with args. set dummy automake; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_automake+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_automake"; then ac_cv_prog_have_automake="$have_automake" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_automake="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_automake" && ac_cv_prog_have_automake="no" fi fi have_automake=$ac_cv_prog_have_automake if test -n "$have_automake"; then echo "$as_me:$LINENO: result: $have_automake" >&5 echo "${ECHO_T}$have_automake" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_automake = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of automake" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of automake... $ECHO_C" >&6 automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of automake as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of automake as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable automake is picked up from the correct location echo "$as_me:$LINENO: checking whether automake is coming from the correct location" >&5 echo $ECHO_N "checking whether automake is coming from the correct location... $ECHO_C" >&6 automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` if test -r $want_dir/libtool/ltmain.sh; then have_ltmain=yes : else have_ltmain=no : fi echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of libtool." >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of libtool.... $ECHO_C" >&6 if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of libtool." >&5 echo "$as_me: error: You don't have the correct version of libtool." >&2;} { (exit 1); exit 1; }; } fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: I cannot find the ltmain.sh file." >&5 echo "$as_me: error: I cannot find the ltmain.sh file." >&2;} { (exit 1); exit 1; }; } fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi if test -r $want_dir/aclocal/libtool.m4; then LIBTOOLM4="$want_dir/aclocal/libtool.m4" : else { { echo "$as_me:$LINENO: error: I cannot find the libtool.m4 file." >&5 echo "$as_me: error: I cannot find the libtool.m4 file." >&2;} { (exit 1); exit 1; }; } : fi # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svn"; then ac_cv_prog_have_svn="$have_svn" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svn="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svn" && ac_cv_prog_have_svn="no" fi fi have_svn=$ac_cv_prog_have_svn if test -n "$have_svn"; then echo "$as_me:$LINENO: result: $have_svn" >&5 echo "${ECHO_T}$have_svn" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$have_svn = xyes; then echo "$as_me:$LINENO: checking whether svn understands https" >&5 echo $ECHO_N "checking whether svn understands https... $ECHO_C" >&6 if test "${ac_cv_svn_understands_https+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out fi echo "$as_me:$LINENO: result: $ac_cv_svn_understands_https" >&5 echo "${ECHO_T}$ac_cv_svn_understands_https" >&6 fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else { { echo "$as_me:$LINENO: error: Cannot find the BuildTools directory" >&5 echo "$as_me: error: Cannot find the BuildTools directory" >&2;} { (exit better disable maintainer mode.); exit better disable maintainer mode.; }; } fi fi fi # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` abs_lib_dir=$full_prefix/lib abs_include_dir=$full_prefix/include abs_bin_dir=$full_prefix/bin if test $coin_have_externals = yes && test x$have_svn = xyes; then HAVE_EXTERNALS_TRUE= HAVE_EXTERNALS_FALSE='#' else HAVE_EXTERNALS_TRUE='#' HAVE_EXTERNALS_FALSE= fi # AC_MSG_NOTICE([End automake initialisation.]) LIBTOOL= if test -f ../libtool; then coin_config_dir=.. LIBTOOL='$(SHELL) $(top_builddir)/../libtool' fi if test "x$LIBTOOL" = x; then if test -f ../../libtool; then coin_config_dir=../.. LIBTOOL='$(SHELL) $(top_builddir)/../../libtool' fi fi if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Creating libtool script (calling COIN_PROG_LIBTOOL).]) # Stuff for libtool # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi; # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi; echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done fi SED=$lt_cv_path_SED echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu | dragonfly*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix3*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 5814 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) LD="${LD-ld} -64" ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------- ## ## Report this to coin-vol@list.coin-or.org ## ## ---------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:6948:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux*) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8015: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8019: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic='-qnocommon' lt_prog_compiler_wl='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8283: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8287: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works=yes fi else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8387: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8391: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix3*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs=no ;; esac fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which library types will actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e 1s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi if test -z "$LTCFLAGS"; then eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_CXX=yes else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes if test "$GXX" = yes ; then lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_CXX=no ;; esac fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | kfreebsd*-gnu | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_CXX='+b $libdir' ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix3*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: ;; linux*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc*) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC*) # Portland Group C++ compiler archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd='echo' ;; osf3*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ $rm $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. We must also pass each convience library through # to the system linker between allextract/defaultextract. # The C++ compiler will combine linker options so we # cannot just pass the convience library names through # without $wl. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. # So that behaviour is only enabled if SCOABSPATH is set to a # non-empty value in the environment. Most likely only useful for # creating official distributions of packages. # This is a hack until libtool officially supports absolute path # names for shared libraries. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" \ || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $rm -f confest.$objext # PORTME: override above test on systems where it is broken case $host_os in interix3*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; solaris*) case $cc_basename in CC*) # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. postdeps_CXX='-lCstd -lCrun' ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_CXX='-qnocommon' lt_prog_compiler_wl_CXX='-Wl,' ;; esac ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | kfreebsd*-gnu | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc* | ecpc*) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC*) # Portland Group C++ compiler. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13176: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13180: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_CXX=yes fi else lt_prog_compiler_static_works_CXX=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6 if test x"$lt_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13280: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13284: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || \ test -n "$runpath_var_CXX" || \ test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_CXX # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_CXX" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_F77='-qnocommon' lt_prog_compiler_wl_F77='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14850: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14854: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_F77=yes fi else lt_prog_compiler_static_works_F77=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6 if test x"$lt_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14954: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14958: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_F77=no fi ;; interix3*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_F77='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='' link_all_deplibs_F77=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_F77=no ;; esac fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var_F77" || \ test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no old_archive_cmds_GCJ=$old_archive_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17161: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17165: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; interix3*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_GCJ='-qnocommon' lt_prog_compiler_wl_GCJ='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-fpic' lt_prog_compiler_static_GCJ='-Bstatic' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; solaris*) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_GCJ='-Qoption ld ';; *) lt_prog_compiler_wl_GCJ='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; unicos*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_can_build_shared_GCJ=no ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17429: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17433: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_GCJ=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_GCJ=yes fi else lt_prog_compiler_static_works_GCJ=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6 if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then : else lt_prog_compiler_static_GCJ= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17533: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:17537: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_GCJ=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_GCJ=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_GCJ=no fi ;; interix3*) hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_GCJ=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_GCJ=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_GCJ=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = no; then runpath_var= hardcode_libdir_flag_spec_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_GCJ=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_GCJ=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_GCJ=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ='$convenience' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi[45]*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_GCJ=no hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='' link_all_deplibs_GCJ=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_GCJ=no ;; esac fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; *) hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_GCJ=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_GCJ='${wl}-z,text' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_GCJ='${wl}-z,text' allow_undefined_flag_GCJ='${wl}-z,nodefs' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ pic_flag=$lt_prog_compiler_pic_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix3*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ test "X$hardcode_automatic_GCJ" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext printf "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # No longer needed now that CPPFLAGS is correctly set -- lh, 061214 -- # AC_REQUIRE([AC_COIN_DLFCN_H]) # NEW: If libtool exists in the directory higher up, we use that one # instead of creating a new one # It turns out that the code for AC_PROG_LIBTOOL is somehow AC_REQUIRED # out in front of this macro body. You'll notice that LIBTOOL is already # defined here. We'll have to count on this macro not being called if libtool # already exists, or at least move the libtool fixes outside the conditional. # AC_MSG_NOTICE([Entering coin_prog_libtool, LIBTOOL = "$LIBTOOL".]) # This test is therefore removed. -- lh, 061214 -- # if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Calling PROG_LIBTOOL.]) # AC_MSG_NOTICE([Finished PROG_LIBTOOL.]) { echo "$as_me:$LINENO: Build is \"$build\"." >&5 echo "$as_me: Build is \"$build\"." >&6;} mydos2unix='| dos2unix' case $build in *-mingw*) CYGPATH_W=echo ;; esac case $build in # Here we need to check if -m32 is specified. If so, we need to correct # sys_lib_search_path_spec *-cygwin* | *-mingw*) case "$CXX" in clang* ) # we assume that libtool patches for CLANG are the same as for GNU compiler - correct??? { echo "$as_me:$LINENO: Applying patches to libtool for CLANG compiler" >&5 echo "$as_me: Applying patches to libtool for CLANG compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Applying patches to libtool for cl compiler" >&5 echo "$as_me: Applying patches to libtool for cl compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|fix_srcfile_path=\"\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's%compile_deplibs=\"\$dir/\$old_library \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$old_library | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%compile_deplibs=\"\$dir/\$linklib \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$linklib | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%lib /OUT:%lib -OUT:%' \ -e "s%cygpath -w%$CYGPATH_W%" \ -e 's%$AR x \\$f_ex_an_ar_oldlib%bla=\\$(lib -nologo -list \\$('"$CYGPATH_W \$1"') '"$mydos2unix"' | xargs echo); echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$('"$CYGPATH_W \$1"'); done%' \ -e 's%$AR t "$f_ex_an_ar_oldlib"%lib -nologo -list \$('"$CYGPATH_W \$1"') '"$mydos2unix"'%' \ -e 's%f_ex_an_ar_oldlib="\($?*1*\)"%f_ex_an_ar_oldlib='\`"$CYGPATH_W"' \1`%' \ -e 's%^archive_cmds=.*%archive_cmds="\\$CC -o \\$lib \\$libobjs \\$compiler_flags \\\\\\`echo \\\\\\"\\$deplibs\\\\\\" | \\$SED -e '"\'"'s/ -lc\\$//'"\'"'\\\\\\` -link -dll~linknames="%' \ -e 's%old_archive_cmds="lib -OUT:\\$oldlib\\$oldobjs\\$old_deplibs"%old_archive_cmds="if test -r \\$oldlib; then bla=\\"\\$oldlib\\"; else bla=; fi; lib -OUT:\\$oldlib \\\\\\$bla\\$oldobjs\\$old_deplibs"%' \ libtool > conftest.bla ;; *) { echo "$as_me:$LINENO: Applying patches to libtool for GNU compiler" >&5 echo "$as_me: Applying patches to libtool for GNU compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla ;; esac mv conftest.bla libtool chmod 755 libtool ;; *x86_64-*) if test "$GCC" = yes && (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm32' >& /dev/null); then { echo "$as_me:$LINENO: Applying patches to libtool for 32bit compilation" >&5 echo "$as_me: Applying patches to libtool for 32bit compilation" >&6;} sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="/lib /usr/lib"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi ;; *-solaris*) if test "$GCC" = yes && \ (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm64' >/dev/null 2>&1) ; then hdwisa=`isainfo | sed -e 's/\([^ ]*\) .*$/\1/'` if `$EGREP 'sys_lib_search_path_spec=' libtool | $EGREP -v $hdwisa >/dev/null 2>&1` ; then { echo "$as_me:$LINENO: Applying patches to libtool for 64-bit GCC compilation" >&5 echo "$as_me: Applying patches to libtool for 64-bit GCC compilation" >&6;} fixlibtmp=`$CC -m64 -print-search-dirs | $EGREP '^libraries:'` fixlibtmp=`echo $fixlibtmp | sed -e 's/libraries: =//' -e 's/:/ /g'` if `echo "$fixlibtmp" | $EGREP -v $hdwisa >/dev/null 2>&1` ; then # AC_MSG_NOTICE(Compensating for broken gcc) for lib in $fixlibtmp ; do if test -d "${lib}${hdwisa}" ; then syslibpath64="$syslibpath64 ${lib}${hdwisa}/" fi done syslibpath64="${syslibpath64} ${fixlibtmp}" else syslibpath64="$fixlibtmp" fi sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="'"$syslibpath64"'"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi # AC_MSG_NOTICE(Result is ) # $EGREP 'sys_lib_search_path_spec=' libtool fi ;; # Cygwin. Ah, cygwin. Too big and ugly to inline; see the macro. *-darwin*) { echo "$as_me:$LINENO: Applying patches to libtool for Darwin" >&5 echo "$as_me: Applying patches to libtool for Darwin" >&6;} sed -e 's/verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"/verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"/' \ -e 's/ -dynamiclib / -dynamiclib -single_module /g' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac # This fi matches the commented `if test "x$LIBTOOL" = x;' up at the head of # the macro. -- lh, 061214 -- # fi # AC_MSG_NOTICE([End libtool initialisation.]) # AC_MSG_NOTICE([Finished COIN_PROG_LIBTOOL.]) # set RPATH_FLAGS to the compiler link flags required to hardcode location # of the shared objects RPATH_FLAGS= if test $enable_shared = yes; then case $build in *-linux-*) if test "$GXX" = "yes"; then RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -Wl,--rpath -Wl,$dir" done fi ;; *-darwin*) RPATH_FLAGS=nothing ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) RPATH_FLAGS=nothing ;; esac ;; *-hp-*) RPATH_FLAGS=nothing ;; *-mingw32) RPATH_FLAGS=nothing ;; *-*-solaris*) RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -R$dir" done esac if test "$RPATH_FLAGS" = ""; then { echo "$as_me:$LINENO: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&5 echo "$as_me: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&2;} fi if test "$RPATH_FLAGS" = "nothing"; then RPATH_FLAGS= fi fi else { echo "$as_me:$LINENO: Using libtool script in directory $coin_config_dir" >&5 echo "$as_me: Using libtool script in directory $coin_config_dir" >&6;} # get all missing information from the config.log file # output variables and defines as_save_IFS=$IFS IFS=' ' for oneline in `cat $coin_config_dir/config.status`; do case "$oneline" in # First some automake conditionals s,@am__fastdep* | s,@AR@* | s,@CPP@* | s,@CPPFLAGS@* | s,@CXXCPP@* | \ s,@RANLIB@* | s,@STRIP@* | s,@ac_ct_AR@* | s,@ac_ct_RANLIB@* | \ s,@ac_ct_STRIP@* | s,@host* | s,@LN_S@* | s,@RPATH_FLAGS@* | \ s,@ac_c_preproc_warn_flag@* | s,@ac_cxx_preproc_warn_flag@* ) command=`echo $oneline | sed -e 's/^s,@//' -e 's/@,/="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; s,@DEFS@* ) command=`echo $oneline | sed -e 's/^s,@DEFS@,/defsline="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; esac done IFS=$as_save_IFS # And some defines (assuming here that the packages base dir # doesn't have a config.h file for word in $defsline; do # echo word $word case $word in -DHAVE_[A-Z_]*_H=1 | -DSTDC_HEADERS=1 ) i=`echo $word | sed -e 's/-D/#define /' -e 's/=/ /'` # echo dd $i echo $i >>confdefs.h ;; esac done fi # AC_MSG_NOTICE([End of INIT_AUTO_TOOLS.]) # Check whether --enable-dependency-linking or --disable-dependency-linking was given. if test "${enable_dependency_linking+set}" = set; then enableval="$enable_dependency_linking" dependency_linking="$enableval" else dependency_linking=auto fi; if test "$dependency_linking" = auto; then # On Cygwin and AIX, building DLLs doesn't work dependency_linking=no if test x"$coin_disable_shared" = xno; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) dependency_linking=yes ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) dependency_linking=no ;; *gcc*) dependency_linking=yes ;; *) dependency_linking=yes ;; esac ;; *) dependency_linking=yes ;; esac fi fi if test "$dependency_linking" = yes ; then LT_LDFLAGS="-no-undefined" else LT_LDFLAGS= fi if test "$dependency_linking" = yes; then DEPENDENCY_LINKING_TRUE= DEPENDENCY_LINKING_FALSE='#' else DEPENDENCY_LINKING_TRUE='#' DEPENDENCY_LINKING_FALSE= fi # Check if we want to set the library version echo "$as_me:$LINENO: checking if library version is set" >&5 echo $ECHO_N "checking if library version is set... $ECHO_C" >&6 if test x"$coin_libversion" != x; then LT_LDFLAGS="$LT_LDFLAGS -version-info $coin_libversion" echo "$as_me:$LINENO: result: $coin_libversion" >&5 echo "${ECHO_T}$coin_libversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi #END } ############################################################################# # COIN components # ############################################################################# # Check whether --enable-pkg-config or --disable-pkg-config was given. if test "${enable_pkg_config+set}" = set; then enableval="$enable_pkg_config" use_pkgconfig="$enableval" else if test x$coin_cc_is_cl = xtrue; then use_pkgconfig=no else use_pkgconfig=yes fi fi; if test $use_pkgconfig = yes ; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="${ac_tool_prefix}pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_PKG_CONFIG"; then ac_ct_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_PKG_CONFIG"; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_ct_PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_PKG_CONFIG="pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_PKG_CONFIG=$ac_cv_prog_ac_ct_PKG_CONFIG if test -n "$ac_ct_PKG_CONFIG"; then echo "$as_me:$LINENO: result: $ac_ct_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_ct_PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi PKG_CONFIG=$ac_ct_PKG_CONFIG else PKG_CONFIG="$ac_cv_prog_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.16.0 echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 PKG_CONFIG="" fi fi # check if pkg-config supports the short-errors flag if test -n "$PKG_CONFIG" && \ $PKG_CONFIG --atleast-pkgconfig-version 0.20; then pkg_short_errors=" --short-errors " else pkg_short_errors="" fi fi if test -n "$PKG_CONFIG"; then COIN_HAS_PKGCONFIG_TRUE= COIN_HAS_PKGCONFIG_FALSE='#' else COIN_HAS_PKGCONFIG_TRUE='#' COIN_HAS_PKGCONFIG_FALSE= fi # assemble pkg-config search path for installed projects COIN_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" # let's assume that when installing into $prefix, then the user may have installed some other coin projects there before, so it's worth to have a look into there # best would actually to use ${libdir}, since .pc files get installed into ${libdir}/pkgconfig, # unfortunately, ${libdir} expands to ${exec_prefix}/lib and ${exec_prefix} to ${prefix}... if test "x${prefix}" = xNONE ; then COIN_PKG_CONFIG_PATH="${ac_default_prefix}/lib64/pkgconfig:${ac_default_prefix}/lib/pkgconfig:${ac_default_prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" else COIN_PKG_CONFIG_PATH="${prefix}/lib64/pkgconfig:${prefix}/lib/pkgconfig:${prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi # Check whether --with-coin-instdir or --without-coin-instdir was given. if test "${with_coin_instdir+set}" = set; then withval="$with_coin_instdir" if test -d "$withval"; then : ; else { { echo "$as_me:$LINENO: error: argument for --with-coin-instdir not a directory" >&5 echo "$as_me: error: argument for --with-coin-instdir not a directory" >&2;} { (exit 1); exit 1; }; } fi COIN_PKG_CONFIG_PATH="$withval/lib/pkgconfig:$withval/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi; # assemble additional pkg-config search paths for uninstalled projects if test x$coin_projectdir = xyes ; then # if we are in a project setup, then in a classic setup, we want to find uninstalled projects # their (relative) location is written to coin_subdirs.txt by the configure in the project base directory # unfortunately, if the user set prefix, then we do not know where the project base directory is located # but it is likely to be either .. (if we are a usual coin project) or ../.. (if we are a unusual coin project like ThirdParty or Data) COIN_PKG_CONFIG_PATH_UNINSTALLED= if test -f ../coin_subdirs.txt ; then for i in `cat ../coin_subdirs.txt` ; do if test -d ../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi if test -f ../../coin_subdirs.txt ; then for i in `cat ../../coin_subdirs.txt` ; do if test -d ../../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi fi if test -n "$PKG_CONFIG" && test x$coin_cc_is_cl = xtrue; then { echo "$as_me:$LINENO: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&5 echo "$as_me: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&2;} fi echo "$as_me:$LINENO: checking for COIN-OR package CoinUtils" >&5 echo $ECHO_N "checking for COIN-OR package CoinUtils... $ECHO_C" >&6 coin_has_coinutils=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "CoinUtils"; then coin_has_coinutils=skipping fi done fi if test "$coin_has_coinutils" != skipping; then # Check whether --with-m4_tolower(CoinUtils) or --without-m4_tolower(CoinUtils) was given. if test "${with_coinutils+set}" = set; then withval="$with_coinutils" if test "$withval" = no ; then coin_has_coinutils=skipping fi fi; fi COINUTILS_LIBS= COINUTILS_CFLAGS= COINUTILS_DATA= COINUTILS_DEPENDENCIES= COINUTILS_PCLIBS= COINUTILS_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-lib or --without-m4_tolower(CoinUtils)-lib was given. if test "${with_coinutils_lib+set}" = set; then withval="$with_coinutils_lib" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_LIBS="$withval" COINUTILS_PCLIBS="$withval" VOLLIB_PCLIBS="$withval $VOLLIB_PCLIBS" VOLLIB_LIBS="$withval $VOLLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_LIBS_INSTALLED="$withval" VOLLIB_LIBS_INSTALLED="$withval $VOLLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-incdir or --without-m4_tolower(CoinUtils)-incdir was given. if test "${with_coinutils_incdir+set}" = set; then withval="$with_coinutils_incdir" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_CFLAGS="-I`${CYGPATH_W} $withval`" VOLLIB_CFLAGS="-I`${CYGPATH_W} $withval` $VOLLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_CFLAGS_INSTALLED="$COINUTILS_CFLAGS" VOLLIB_CFLAGS_INSTALLED="$COINUTILS_CFLAGS $VOLLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-datadir or --without-m4_tolower(CoinUtils)-datadir was given. if test "${with_coinutils_datadir+set}" = set; then withval="$with_coinutils_datadir" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_coinutils = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinutils"; then COINUTILS_VERSIONS=`$PKG_CONFIG --modversion "coinutils" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinutils" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS="$cflags" COINUTILS_LIBS=`$PKG_CONFIG --libs "coinutils" 2>/dev/null` COINUTILS_DATA=`$PKG_CONFIG --variable=datadir "coinutils" 2>/dev/null` coin_has_coinutils=yes echo "$as_me:$LINENO: result: yes: $COINUTILS_VERSIONS" >&5 echo "${ECHO_T}yes: $COINUTILS_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then COINUTILS_LIBS=`echo " $COINUTILS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi COINUTILS_PCREQUIRES="coinutils" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in VolLib VOLLIB_PCREQUIRES="coinutils $VOLLIB_PCREQUIRES" VOLLIB_CFLAGS="$COINUTILS_CFLAGS $VOLLIB_CFLAGS" VOLLIB_LIBS="$COINUTILS_LIBS $VOLLIB_LIBS" else COINUTILS_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinutils"` coin_has_coinutils=notGiven echo "$as_me:$LINENO: result: not given: $COINUTILS_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $COINUTILS_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module CoinUtils without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module CoinUtils without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package CoinUtils (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package CoinUtils (fallback)... $ECHO_C" >&6 coin_has_coinutils=notGiven COINUTILS_LIBS= COINUTILS_LIBS_INSTALLED= COINUTILS_CFLAGS= COINUTILS_CFLAGS_INSTALLED= COINUTILS_DATA= COINUTILS_DATA_INSTALLED= COINUTILS_PCLIBS= COINUTILS_PCREQUIRES= # initial list of dependencies is "coinutils", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinutils" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$COINUTILS_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` COINUTILS_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$COINUTILS_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi COINUTILS_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS="$projcflags $COINUTILS_CFLAGS" # set LIBS variable COINUTILS_LIBS="$projlibs $COINUTILS_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS_INSTALLED="$projcflags $COINUTILS_CFLAGS_INSTALLED" # set LIBS variable COINUTILS_LIBS_INSTALLED="$projlibs $COINUTILS_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_coinutils=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_COINUTILS 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then COINUTILS_LIBS=`echo " $COINUTILS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` COINUTILS_LIBS_INSTALLED=`echo " $COINUTILS_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi COINUTILS_PCREQUIRES="coinutils" VOLLIB_PCREQUIRES="coinutils $VOLLIB_PCREQUIRES" VOLLIB_CFLAGS="$COINUTILS_CFLAGS $VOLLIB_CFLAGS" VOLLIB_LIBS="$COINUTILS_LIBS $VOLLIB_LIBS" VOLLIB_CFLAGS_INSTALLED="$COINUTILS_CFLAGS_INSTALLED $VOLLIB_CFLAGS_INSTALLED" VOLLIB_LIBS_INSTALLED="$COINUTILS_LIBS_INSTALLED $VOLLIB_LIBS_INSTALLED" fi if test $coin_has_coinutils != notGiven && test $coin_has_coinutils != skipping; then COIN_HAS_COINUTILS_TRUE= COIN_HAS_COINUTILS_FALSE='#' else COIN_HAS_COINUTILS_TRUE='#' COIN_HAS_COINUTILS_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_coinutils" >&5 echo "${ECHO_T}$coin_has_coinutils" >&6 fi if test $coin_has_coinutils != skipping && test $coin_has_coinutils != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_COINUTILS 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) COINUTILS_DEPENDENCIES=`echo " $COINUTILS_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` VOLLIB_DEPENDENCIES=`echo " $VOLLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$COINUTILS_CFLAGS" ; then { echo "$as_me:$LINENO: CoinUtils CFLAGS are $COINUTILS_CFLAGS" >&5 echo "$as_me: CoinUtils CFLAGS are $COINUTILS_CFLAGS" >&6;} fi if test -n "$COINUTILS_LIBS" ; then { echo "$as_me:$LINENO: CoinUtils LIBS are $COINUTILS_LIBS" >&5 echo "$as_me: CoinUtils LIBS are $COINUTILS_LIBS" >&6;} fi if test -n "$COINUTILS_DEPENDENCIES" ; then { echo "$as_me:$LINENO: CoinUtils DEPENDENCIES are $COINUTILS_DEPENDENCIES" >&5 echo "$as_me: CoinUtils DEPENDENCIES are $COINUTILS_DEPENDENCIES" >&6;} fi if test -n "$COINUTILS_DATA" ; then { echo "$as_me:$LINENO: CoinUtils DATA is $COINUTILS_DATA" >&5 echo "$as_me: CoinUtils DATA is $COINUTILS_DATA" >&6;} fi if test -n "$COINUTILS_PCLIBS" ; then { echo "$as_me:$LINENO: CoinUtils PCLIBS are $COINUTILS_PCLIBS" >&5 echo "$as_me: CoinUtils PCLIBS are $COINUTILS_PCLIBS" >&6;} fi if test -n "$COINUTILS_PCREQUIRES" ; then { echo "$as_me:$LINENO: CoinUtils PCREQUIRES are $COINUTILS_PCREQUIRES" >&5 echo "$as_me: CoinUtils PCREQUIRES are $COINUTILS_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: VolLib CFLAGS are $VOLLIB_CFLAGS" >&5 echo "$as_me: VolLib CFLAGS are $VOLLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: VolLib LIBS are $VOLLIB_LIBS" >&5 echo "$as_me: VolLib LIBS are $VOLLIB_LIBS" >&6;} { echo "$as_me:$LINENO: VolLib DEPENDENCIES are $VOLLIB_DEPENDENCIES" >&5 echo "$as_me: VolLib DEPENDENCIES are $VOLLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_coinutils != notGiven && test $coin_has_coinutils != skipping; then COIN_HAS_COINUTILS_TRUE= COIN_HAS_COINUTILS_FALSE='#' else COIN_HAS_COINUTILS_TRUE='#' COIN_HAS_COINUTILS_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package Osi" >&5 echo $ECHO_N "checking for COIN-OR package Osi... $ECHO_C" >&6 coin_has_osi=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Osi"; then coin_has_osi=skipping fi done fi if test "$coin_has_osi" != skipping; then # Check whether --with-m4_tolower(Osi) or --without-m4_tolower(Osi) was given. if test "${with_osi+set}" = set; then withval="$with_osi" if test "$withval" = no ; then coin_has_osi=skipping fi fi; fi OSI_LIBS= OSI_CFLAGS= OSI_DATA= OSI_DEPENDENCIES= OSI_PCLIBS= OSI_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_osi != skipping; then # Check whether --with-m4_tolower(Osi)-lib or --without-m4_tolower(Osi)-lib was given. if test "${with_osi_lib+set}" = set; then withval="$with_osi_lib" if test "$withval" = no ; then coin_has_osi=skipping else coin_has_osi=yes OSI_LIBS="$withval" OSI_PCLIBS="$withval" OSIVOLLIB_PCLIBS="$withval $OSIVOLLIB_PCLIBS" OSIVOLLIB_LIBS="$withval $OSIVOLLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSI_LIBS_INSTALLED="$withval" OSIVOLLIB_LIBS_INSTALLED="$withval $OSIVOLLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_osi != skipping; then # Check whether --with-m4_tolower(Osi)-incdir or --without-m4_tolower(Osi)-incdir was given. if test "${with_osi_incdir+set}" = set; then withval="$with_osi_incdir" if test "$withval" = no ; then coin_has_osi=skipping else coin_has_osi=yes OSI_CFLAGS="-I`${CYGPATH_W} $withval`" OSIVOLLIB_CFLAGS="-I`${CYGPATH_W} $withval` $OSIVOLLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSI_CFLAGS_INSTALLED="$OSI_CFLAGS" OSIVOLLIB_CFLAGS_INSTALLED="$OSI_CFLAGS $OSIVOLLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_osi != skipping; then # Check whether --with-m4_tolower(Osi)-datadir or --without-m4_tolower(Osi)-datadir was given. if test "${with_osi_datadir+set}" = set; then withval="$with_osi_datadir" if test "$withval" = no ; then coin_has_osi=skipping else coin_has_osi=yes OSI_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSI_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_osi = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "osi"; then OSI_VERSIONS=`$PKG_CONFIG --modversion "osi" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "osi" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSI_CFLAGS="$cflags" OSI_LIBS=`$PKG_CONFIG --libs "osi" 2>/dev/null` OSI_DATA=`$PKG_CONFIG --variable=datadir "osi" 2>/dev/null` coin_has_osi=yes echo "$as_me:$LINENO: result: yes: $OSI_VERSIONS" >&5 echo "${ECHO_T}yes: $OSI_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then OSI_LIBS=`echo " $OSI_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi OSI_PCREQUIRES="osi" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in OsiVolLib OSIVOLLIB_PCREQUIRES="osi $OSIVOLLIB_PCREQUIRES" OSIVOLLIB_CFLAGS="$OSI_CFLAGS $OSIVOLLIB_CFLAGS" OSIVOLLIB_LIBS="$OSI_LIBS $OSIVOLLIB_LIBS" else OSI_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "osi"` coin_has_osi=notGiven echo "$as_me:$LINENO: result: not given: $OSI_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $OSI_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Osi without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Osi without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Osi (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Osi (fallback)... $ECHO_C" >&6 coin_has_osi=notGiven OSI_LIBS= OSI_LIBS_INSTALLED= OSI_CFLAGS= OSI_CFLAGS_INSTALLED= OSI_DATA= OSI_DATA_INSTALLED= OSI_PCLIBS= OSI_PCREQUIRES= # initial list of dependencies is "osi", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="osi" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$OSI_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` OSI_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$OSI_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi OSI_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSI_CFLAGS="$projcflags $OSI_CFLAGS" # set LIBS variable OSI_LIBS="$projlibs $OSI_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSI_CFLAGS_INSTALLED="$projcflags $OSI_CFLAGS_INSTALLED" # set LIBS variable OSI_LIBS_INSTALLED="$projlibs $OSI_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_osi=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_OSI 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then OSI_LIBS=`echo " $OSI_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` OSI_LIBS_INSTALLED=`echo " $OSI_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi OSI_PCREQUIRES="osi" OSIVOLLIB_PCREQUIRES="osi $OSIVOLLIB_PCREQUIRES" OSIVOLLIB_CFLAGS="$OSI_CFLAGS $OSIVOLLIB_CFLAGS" OSIVOLLIB_LIBS="$OSI_LIBS $OSIVOLLIB_LIBS" OSIVOLLIB_CFLAGS_INSTALLED="$OSI_CFLAGS_INSTALLED $OSIVOLLIB_CFLAGS_INSTALLED" OSIVOLLIB_LIBS_INSTALLED="$OSI_LIBS_INSTALLED $OSIVOLLIB_LIBS_INSTALLED" fi if test $coin_has_osi != notGiven && test $coin_has_osi != skipping; then COIN_HAS_OSI_TRUE= COIN_HAS_OSI_FALSE='#' else COIN_HAS_OSI_TRUE='#' COIN_HAS_OSI_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_osi" >&5 echo "${ECHO_T}$coin_has_osi" >&6 fi if test $coin_has_osi != skipping && test $coin_has_osi != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_OSI 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) OSI_DEPENDENCIES=`echo " $OSI_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` OSIVOLLIB_DEPENDENCIES=`echo " $OSIVOLLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$OSI_CFLAGS" ; then { echo "$as_me:$LINENO: Osi CFLAGS are $OSI_CFLAGS" >&5 echo "$as_me: Osi CFLAGS are $OSI_CFLAGS" >&6;} fi if test -n "$OSI_LIBS" ; then { echo "$as_me:$LINENO: Osi LIBS are $OSI_LIBS" >&5 echo "$as_me: Osi LIBS are $OSI_LIBS" >&6;} fi if test -n "$OSI_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Osi DEPENDENCIES are $OSI_DEPENDENCIES" >&5 echo "$as_me: Osi DEPENDENCIES are $OSI_DEPENDENCIES" >&6;} fi if test -n "$OSI_DATA" ; then { echo "$as_me:$LINENO: Osi DATA is $OSI_DATA" >&5 echo "$as_me: Osi DATA is $OSI_DATA" >&6;} fi if test -n "$OSI_PCLIBS" ; then { echo "$as_me:$LINENO: Osi PCLIBS are $OSI_PCLIBS" >&5 echo "$as_me: Osi PCLIBS are $OSI_PCLIBS" >&6;} fi if test -n "$OSI_PCREQUIRES" ; then { echo "$as_me:$LINENO: Osi PCREQUIRES are $OSI_PCREQUIRES" >&5 echo "$as_me: Osi PCREQUIRES are $OSI_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: OsiVolLib CFLAGS are $OSIVOLLIB_CFLAGS" >&5 echo "$as_me: OsiVolLib CFLAGS are $OSIVOLLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: OsiVolLib LIBS are $OSIVOLLIB_LIBS" >&5 echo "$as_me: OsiVolLib LIBS are $OSIVOLLIB_LIBS" >&6;} { echo "$as_me:$LINENO: OsiVolLib DEPENDENCIES are $OSIVOLLIB_DEPENDENCIES" >&5 echo "$as_me: OsiVolLib DEPENDENCIES are $OSIVOLLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_osi != notGiven && test $coin_has_osi != skipping; then COIN_HAS_OSI_TRUE= COIN_HAS_OSI_FALSE='#' else COIN_HAS_OSI_TRUE='#' COIN_HAS_OSI_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package OsiTests" >&5 echo $ECHO_N "checking for COIN-OR package OsiTests... $ECHO_C" >&6 coin_has_ositests=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "OsiTests"; then coin_has_ositests=skipping fi done fi if test "$coin_has_ositests" != skipping; then # Check whether --with-m4_tolower(OsiTests) or --without-m4_tolower(OsiTests) was given. if test "${with_ositests+set}" = set; then withval="$with_ositests" if test "$withval" = no ; then coin_has_ositests=skipping fi fi; fi OSITESTS_LIBS= OSITESTS_CFLAGS= OSITESTS_DATA= OSITESTS_DEPENDENCIES= OSITESTS_PCLIBS= OSITESTS_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_ositests != skipping; then # Check whether --with-m4_tolower(OsiTests)-lib or --without-m4_tolower(OsiTests)-lib was given. if test "${with_ositests_lib+set}" = set; then withval="$with_ositests_lib" if test "$withval" = no ; then coin_has_ositests=skipping else coin_has_ositests=yes OSITESTS_LIBS="$withval" OSITESTS_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSITESTS_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_ositests != skipping; then # Check whether --with-m4_tolower(OsiTests)-incdir or --without-m4_tolower(OsiTests)-incdir was given. if test "${with_ositests_incdir+set}" = set; then withval="$with_ositests_incdir" if test "$withval" = no ; then coin_has_ositests=skipping else coin_has_ositests=yes OSITESTS_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSITESTS_CFLAGS_INSTALLED="$OSITESTS_CFLAGS" fi fi fi; fi if test $coin_has_ositests != skipping; then # Check whether --with-m4_tolower(OsiTests)-datadir or --without-m4_tolower(OsiTests)-datadir was given. if test "${with_ositests_datadir+set}" = set; then withval="$with_ositests_datadir" if test "$withval" = no ; then coin_has_ositests=skipping else coin_has_ositests=yes OSITESTS_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSITESTS_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_ositests = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "osi-unittests"; then OSITESTS_VERSIONS=`$PKG_CONFIG --modversion "osi-unittests" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "osi-unittests" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSITESTS_CFLAGS="$cflags" OSITESTS_LIBS=`$PKG_CONFIG --libs "osi-unittests" 2>/dev/null` OSITESTS_DATA=`$PKG_CONFIG --variable=datadir "osi-unittests" 2>/dev/null` coin_has_ositests=yes echo "$as_me:$LINENO: result: yes: $OSITESTS_VERSIONS" >&5 echo "${ECHO_T}yes: $OSITESTS_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then OSITESTS_LIBS=`echo " $OSITESTS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi OSITESTS_PCREQUIRES="osi-unittests" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else OSITESTS_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "osi-unittests"` coin_has_ositests=notGiven echo "$as_me:$LINENO: result: not given: $OSITESTS_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $OSITESTS_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module OsiTests without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module OsiTests without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package OsiTests (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package OsiTests (fallback)... $ECHO_C" >&6 coin_has_ositests=notGiven OSITESTS_LIBS= OSITESTS_LIBS_INSTALLED= OSITESTS_CFLAGS= OSITESTS_CFLAGS_INSTALLED= OSITESTS_DATA= OSITESTS_DATA_INSTALLED= OSITESTS_PCLIBS= OSITESTS_PCREQUIRES= # initial list of dependencies is "osi-unittests", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="osi-unittests" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$OSITESTS_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` OSITESTS_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$OSITESTS_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi OSITESTS_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSITESTS_CFLAGS="$projcflags $OSITESTS_CFLAGS" # set LIBS variable OSITESTS_LIBS="$projlibs $OSITESTS_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSITESTS_CFLAGS_INSTALLED="$projcflags $OSITESTS_CFLAGS_INSTALLED" # set LIBS variable OSITESTS_LIBS_INSTALLED="$projlibs $OSITESTS_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_ositests=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_OSITESTS 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then OSITESTS_LIBS=`echo " $OSITESTS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` OSITESTS_LIBS_INSTALLED=`echo " $OSITESTS_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi OSITESTS_PCREQUIRES="osi-unittests" fi if test $coin_has_ositests != notGiven && test $coin_has_ositests != skipping; then COIN_HAS_OSITESTS_TRUE= COIN_HAS_OSITESTS_FALSE='#' else COIN_HAS_OSITESTS_TRUE='#' COIN_HAS_OSITESTS_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_ositests" >&5 echo "${ECHO_T}$coin_has_ositests" >&6 fi if test $coin_has_ositests != skipping && test $coin_has_ositests != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_OSITESTS 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) OSITESTS_DEPENDENCIES=`echo " $OSITESTS_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$OSITESTS_CFLAGS" ; then { echo "$as_me:$LINENO: OsiTests CFLAGS are $OSITESTS_CFLAGS" >&5 echo "$as_me: OsiTests CFLAGS are $OSITESTS_CFLAGS" >&6;} fi if test -n "$OSITESTS_LIBS" ; then { echo "$as_me:$LINENO: OsiTests LIBS are $OSITESTS_LIBS" >&5 echo "$as_me: OsiTests LIBS are $OSITESTS_LIBS" >&6;} fi if test -n "$OSITESTS_DEPENDENCIES" ; then { echo "$as_me:$LINENO: OsiTests DEPENDENCIES are $OSITESTS_DEPENDENCIES" >&5 echo "$as_me: OsiTests DEPENDENCIES are $OSITESTS_DEPENDENCIES" >&6;} fi if test -n "$OSITESTS_DATA" ; then { echo "$as_me:$LINENO: OsiTests DATA is $OSITESTS_DATA" >&5 echo "$as_me: OsiTests DATA is $OSITESTS_DATA" >&6;} fi if test -n "$OSITESTS_PCLIBS" ; then { echo "$as_me:$LINENO: OsiTests PCLIBS are $OSITESTS_PCLIBS" >&5 echo "$as_me: OsiTests PCLIBS are $OSITESTS_PCLIBS" >&6;} fi if test -n "$OSITESTS_PCREQUIRES" ; then { echo "$as_me:$LINENO: OsiTests PCREQUIRES are $OSITESTS_PCREQUIRES" >&5 echo "$as_me: OsiTests PCREQUIRES are $OSITESTS_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_ositests != notGiven && test $coin_has_ositests != skipping; then COIN_HAS_OSITESTS_TRUE= COIN_HAS_OSITESTS_FALSE='#' else COIN_HAS_OSITESTS_TRUE='#' COIN_HAS_OSITESTS_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package Sample" >&5 echo $ECHO_N "checking for COIN-OR package Sample... $ECHO_C" >&6 coin_has_sample=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Sample"; then coin_has_sample=skipping fi done fi if test "$coin_has_sample" != skipping; then # Check whether --with-m4_tolower(Sample) or --without-m4_tolower(Sample) was given. if test "${with_sample+set}" = set; then withval="$with_sample" if test "$withval" = no ; then coin_has_sample=skipping fi fi; fi SAMPLE_LIBS= SAMPLE_CFLAGS= SAMPLE_DATA= SAMPLE_DEPENDENCIES= SAMPLE_PCLIBS= SAMPLE_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-lib or --without-m4_tolower(Sample)-lib was given. if test "${with_sample_lib+set}" = set; then withval="$with_sample_lib" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_LIBS="$withval" SAMPLE_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-incdir or --without-m4_tolower(Sample)-incdir was given. if test "${with_sample_incdir+set}" = set; then withval="$with_sample_incdir" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_CFLAGS_INSTALLED="$SAMPLE_CFLAGS" fi fi fi; fi if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-datadir or --without-m4_tolower(Sample)-datadir was given. if test "${with_sample_datadir+set}" = set; then withval="$with_sample_datadir" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_sample = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coindatasample"; then SAMPLE_VERSIONS=`$PKG_CONFIG --modversion "coindatasample" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coindatasample" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS="$cflags" SAMPLE_LIBS=`$PKG_CONFIG --libs "coindatasample" 2>/dev/null` SAMPLE_DATA=`$PKG_CONFIG --variable=datadir "coindatasample" 2>/dev/null` coin_has_sample=yes echo "$as_me:$LINENO: result: yes: $SAMPLE_VERSIONS" >&5 echo "${ECHO_T}yes: $SAMPLE_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SAMPLE_LIBS=`echo " $SAMPLE_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi SAMPLE_PCREQUIRES="coindatasample" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else SAMPLE_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coindatasample"` coin_has_sample=notGiven echo "$as_me:$LINENO: result: not given: $SAMPLE_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $SAMPLE_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Sample without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Sample without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Sample (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Sample (fallback)... $ECHO_C" >&6 coin_has_sample=notGiven SAMPLE_LIBS= SAMPLE_LIBS_INSTALLED= SAMPLE_CFLAGS= SAMPLE_CFLAGS_INSTALLED= SAMPLE_DATA= SAMPLE_DATA_INSTALLED= SAMPLE_PCLIBS= SAMPLE_PCREQUIRES= # initial list of dependencies is "coindatasample", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coindatasample" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$SAMPLE_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` SAMPLE_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$SAMPLE_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi SAMPLE_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS="$projcflags $SAMPLE_CFLAGS" # set LIBS variable SAMPLE_LIBS="$projlibs $SAMPLE_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS_INSTALLED="$projcflags $SAMPLE_CFLAGS_INSTALLED" # set LIBS variable SAMPLE_LIBS_INSTALLED="$projlibs $SAMPLE_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_sample=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SAMPLE 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SAMPLE_LIBS=`echo " $SAMPLE_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` SAMPLE_LIBS_INSTALLED=`echo " $SAMPLE_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi SAMPLE_PCREQUIRES="coindatasample" fi if test $coin_has_sample != notGiven && test $coin_has_sample != skipping; then COIN_HAS_SAMPLE_TRUE= COIN_HAS_SAMPLE_FALSE='#' else COIN_HAS_SAMPLE_TRUE='#' COIN_HAS_SAMPLE_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_sample" >&5 echo "${ECHO_T}$coin_has_sample" >&6 fi if test $coin_has_sample != skipping && test $coin_has_sample != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SAMPLE 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) SAMPLE_DEPENDENCIES=`echo " $SAMPLE_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$SAMPLE_CFLAGS" ; then { echo "$as_me:$LINENO: Sample CFLAGS are $SAMPLE_CFLAGS" >&5 echo "$as_me: Sample CFLAGS are $SAMPLE_CFLAGS" >&6;} fi if test -n "$SAMPLE_LIBS" ; then { echo "$as_me:$LINENO: Sample LIBS are $SAMPLE_LIBS" >&5 echo "$as_me: Sample LIBS are $SAMPLE_LIBS" >&6;} fi if test -n "$SAMPLE_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Sample DEPENDENCIES are $SAMPLE_DEPENDENCIES" >&5 echo "$as_me: Sample DEPENDENCIES are $SAMPLE_DEPENDENCIES" >&6;} fi if test -n "$SAMPLE_DATA" ; then { echo "$as_me:$LINENO: Sample DATA is $SAMPLE_DATA" >&5 echo "$as_me: Sample DATA is $SAMPLE_DATA" >&6;} fi if test -n "$SAMPLE_PCLIBS" ; then { echo "$as_me:$LINENO: Sample PCLIBS are $SAMPLE_PCLIBS" >&5 echo "$as_me: Sample PCLIBS are $SAMPLE_PCLIBS" >&6;} fi if test -n "$SAMPLE_PCREQUIRES" ; then { echo "$as_me:$LINENO: Sample PCREQUIRES are $SAMPLE_PCREQUIRES" >&5 echo "$as_me: Sample PCREQUIRES are $SAMPLE_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_sample != notGiven && test $coin_has_sample != skipping; then COIN_HAS_SAMPLE_TRUE= COIN_HAS_SAMPLE_FALSE='#' else COIN_HAS_SAMPLE_TRUE='#' COIN_HAS_SAMPLE_FALSE= fi ############################################################################## # VPATH links for example input files # ############################################################################## # In case this is a VPATH configuration we need to make sure that the # input files for the examples are available in the VPATH directory. echo "$as_me:$LINENO: checking whether this is a VPATH configuration" >&5 echo $ECHO_N "checking whether this is a VPATH configuration... $ECHO_C" >&6 if test `cd $srcdir; pwd` != `pwd`; then coin_vpath_config=yes; else coin_vpath_config=no; fi echo "$as_me:$LINENO: result: $coin_vpath_config" >&5 echo "${ECHO_T}$coin_vpath_config" >&6 # Allow for newlines in the parameter if test $coin_vpath_config = yes; then cvl_tmp="examples/VolUfl/ufl.par" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi # Allow for newlines in the parameter if test $coin_vpath_config = yes; then cvl_tmp="examples/VolUfl/data.gz" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi # Allow for newlines in the parameter if test $coin_vpath_config = yes; then cvl_tmp="examples/Volume-LP/data.mps.gz" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi # Allow for newlines in the parameter if test $coin_vpath_config = yes; then cvl_tmp="examples/Volume-LP/lp.par" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi # Setup doxygen { echo "$as_me:$LINENO: configuring doxygen documentation options" >&5 echo "$as_me: configuring doxygen documentation options" >&6;} # Check to see if doxygen is available. # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_doxygen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_doxygen"; then ac_cv_prog_coin_have_doxygen="$coin_have_doxygen" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_doxygen="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_doxygen" && ac_cv_prog_coin_have_doxygen="no" fi fi coin_have_doxygen=$ac_cv_prog_coin_have_doxygen if test -n "$coin_have_doxygen"; then echo "$as_me:$LINENO: result: $coin_have_doxygen" >&5 echo "${ECHO_T}$coin_have_doxygen" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_latex+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_latex"; then ac_cv_prog_coin_have_latex="$coin_have_latex" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_latex="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_latex" && ac_cv_prog_coin_have_latex="no" fi fi coin_have_latex=$ac_cv_prog_coin_have_latex if test -n "$coin_have_latex"; then echo "$as_me:$LINENO: result: $coin_have_latex" >&5 echo "${ECHO_T}$coin_have_latex" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Look for the dot tool from the graphviz package, unless the user has # disabled it. # Check whether --with-dot or --without-dot was given. if test "${with_dot+set}" = set; then withval="$with_dot" else withval=yes fi; if test x"$withval" = xno ; then coin_doxy_usedot=NO echo "$as_me:$LINENO: checking for dot " >&5 echo $ECHO_N "checking for dot ... $ECHO_C" >&6 echo "$as_me:$LINENO: result: disabled" >&5 echo "${ECHO_T}disabled" >&6 else # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_doxy_usedot+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_doxy_usedot"; then ac_cv_prog_coin_doxy_usedot="$coin_doxy_usedot" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_doxy_usedot="YES" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_doxy_usedot" && ac_cv_prog_coin_doxy_usedot="NO" fi fi coin_doxy_usedot=$ac_cv_prog_coin_doxy_usedot if test -n "$coin_doxy_usedot"; then echo "$as_me:$LINENO: result: $coin_doxy_usedot" >&5 echo "${ECHO_T}$coin_doxy_usedot" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi # Generate a tag file name and a log file name coin_doxy_tagname=doxydoc/${PACKAGE}_doxy.tag coin_doxy_logname=doxydoc/${PACKAGE}_doxy.log if test $coin_have_doxygen = yes; then COIN_HAS_DOXYGEN_TRUE= COIN_HAS_DOXYGEN_FALSE='#' else COIN_HAS_DOXYGEN_TRUE='#' COIN_HAS_DOXYGEN_FALSE= fi if test $coin_have_latex = yes; then COIN_HAS_LATEX_TRUE= COIN_HAS_LATEX_FALSE='#' else COIN_HAS_LATEX_TRUE='#' COIN_HAS_LATEX_FALSE= fi # Process the list of project names and massage them into possible doxygen # doc'n directories. Prefer 1) classic external, source processed using # a project-specific doxygen.conf, we use the tag file; 2) classic # external, source processed using package doxygen.conf; 3) installed # doxydoc. Alternatives 1) and 2) are only possible if the directory will be # configured, which we can't know unless this is the package base configure, # since coin_subdirs is only set there. Hence it's sufficient to check for # membership. If we use a tag file from a classic external, exclude the # source from doxygen processing when doxygen runs in the base directory. coin_doxy_tagfiles= coin_doxy_excludes= tmp="CoinUtils Osi" for proj in $tmp ; do lc_proj=`echo $proj | tr [A-Z] [a-z]` echo "$as_me:$LINENO: checking for doxygen doc'n for $proj " >&5 echo $ECHO_N "checking for doxygen doc'n for $proj ... $ECHO_C" >&6 doxytag=${lc_proj}_doxy.tag doxyfound=no # proj will be configured, hence doxydoc present in build tree doxysrcdir="${srcdir}/../${proj}" # AC_MSG_NOTICE([Considering $doxysrcdir (base)]) if test -d "$doxysrcdir" ; then # with a doxydoc directory? doxydir="$doxysrcdir/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (base)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) if test -d "$doxydir" ; then # use tag file; don't process source doxydir="../${proj}/doxydoc" coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 coin_doxy_excludes="$coin_doxy_excludes */${proj}" else # will process the source -- nothing further to be done here echo "$as_me:$LINENO: result: $doxysrcdir (src)" >&5 echo "${ECHO_T}$doxysrcdir (src)" >&6 fi doxyfound=yes fi # Not built, fall back to installed tag file if test $doxyfound = no ; then eval doxydir="${datadir}/coin/doc/${proj}/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (install)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 fi done ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) ac_config_files="$ac_config_files Makefile examples/VolLp/Makefile examples/VolUfl/Makefile examples/Volume-LP/Makefile src/Makefile src/OsiVol/Makefile test/Makefile doxydoc/doxygen.conf vol.pc vol-uninstalled.pc" if test $coin_has_osi = yes ; then ac_config_files="$ac_config_files osi-vol.pc:src/OsiVol/osi-vol.pc.in osi-vol-uninstalled.pc:src/OsiVol/osi-vol-uninstalled.pc.in" fi # even though we do not use the config_vol.h file, we config a header file here # this is for the compilation of OsiVol, which works much better with -DHAVE_CONFIG_H # instead of a list of single defines (-DPACKAGE_NAME=...) in the compiler flags ac_config_headers="$ac_config_headers inc/config_vol.h" # Finally, we let configure write all the output... echo "$as_me:$LINENO: checking which command should be used to link input files" >&5 echo $ECHO_N "checking which command should be used to link input files... $ECHO_C" >&6 coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac echo "$as_me:$LINENO: result: $coin_link_input_cmd" >&5 echo "${ECHO_T}$coin_link_input_cmd" >&6 if test x$coin_skip_ac_output != xyes; then # library extension case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${ALWAYS_FALSE_TRUE}" && test -z "${ALWAYS_FALSE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CC_IS_CL_TRUE}" && test -z "${COIN_CC_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CXX_IS_CL_TRUE}" && test -z "${COIN_CXX_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_EXTERNALS_TRUE}" && test -z "${HAVE_EXTERNALS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DEPENDENCY_LINKING_TRUE}" && test -z "${DEPENDENCY_LINKING_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_PKGCONFIG_TRUE}" && test -z "${COIN_HAS_PKGCONFIG_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_PKGCONFIG\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_PKGCONFIG\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_COINUTILS_TRUE}" && test -z "${COIN_HAS_COINUTILS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_COINUTILS_TRUE}" && test -z "${COIN_HAS_COINUTILS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_OSI_TRUE}" && test -z "${COIN_HAS_OSI_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_OSI\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_OSI\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_OSI_TRUE}" && test -z "${COIN_HAS_OSI_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_OSI\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_OSI\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_OSITESTS_TRUE}" && test -z "${COIN_HAS_OSITESTS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_OSITESTS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_OSITESTS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_OSITESTS_TRUE}" && test -z "${COIN_HAS_OSITESTS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_OSITESTS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_OSITESTS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SAMPLE_TRUE}" && test -z "${COIN_HAS_SAMPLE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SAMPLE_TRUE}" && test -z "${COIN_HAS_SAMPLE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_DOXYGEN_TRUE}" && test -z "${COIN_HAS_DOXYGEN_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LATEX_TRUE}" && test -z "${COIN_HAS_LATEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by Vol $as_me 1.5.4, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ Vol config.status 1.5.4 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "examples/VolLp/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/VolLp/Makefile" ;; "examples/VolUfl/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/VolUfl/Makefile" ;; "examples/Volume-LP/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Volume-LP/Makefile" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/OsiVol/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiVol/Makefile" ;; "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "doxydoc/doxygen.conf" ) CONFIG_FILES="$CONFIG_FILES doxydoc/doxygen.conf" ;; "vol.pc" ) CONFIG_FILES="$CONFIG_FILES vol.pc" ;; "vol-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES vol-uninstalled.pc" ;; "osi-vol.pc" ) CONFIG_FILES="$CONFIG_FILES osi-vol.pc:src/OsiVol/osi-vol.pc.in" ;; "osi-vol-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-vol-uninstalled.pc:src/OsiVol/osi-vol-uninstalled.pc.in" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "inc/config_vol.h" ) CONFIG_HEADERS="$CONFIG_HEADERS inc/config_vol.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@ALWAYS_FALSE_TRUE@,$ALWAYS_FALSE_TRUE,;t t s,@ALWAYS_FALSE_FALSE@,$ALWAYS_FALSE_FALSE,;t t s,@have_svnversion@,$have_svnversion,;t t s,@VOL_SVN_REV@,$VOL_SVN_REV,;t t s,@CDEFS@,$CDEFS,;t t s,@ADD_CFLAGS@,$ADD_CFLAGS,;t t s,@DBG_CFLAGS@,$DBG_CFLAGS,;t t s,@OPT_CFLAGS@,$OPT_CFLAGS,;t t s,@sol_cc_compiler@,$sol_cc_compiler,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@COIN_CC_IS_CL_TRUE@,$COIN_CC_IS_CL_TRUE,;t t s,@COIN_CC_IS_CL_FALSE@,$COIN_CC_IS_CL_FALSE,;t t s,@MPICC@,$MPICC,;t t s,@CXXDEFS@,$CXXDEFS,;t t s,@ADD_CXXFLAGS@,$ADD_CXXFLAGS,;t t s,@DBG_CXXFLAGS@,$DBG_CXXFLAGS,;t t s,@OPT_CXXFLAGS@,$OPT_CXXFLAGS,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@COIN_CXX_IS_CL_TRUE@,$COIN_CXX_IS_CL_TRUE,;t t s,@COIN_CXX_IS_CL_FALSE@,$COIN_CXX_IS_CL_FALSE,;t t s,@MPICXX@,$MPICXX,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CPP@,$CPP,;t t s,@CXXCPP@,$CXXCPP,;t t s,@F77@,$F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@ac_c_preproc_warn_flag@,$ac_c_preproc_warn_flag,;t t s,@ac_cxx_preproc_warn_flag@,$ac_cxx_preproc_warn_flag,;t t s,@RPATH_FLAGS@,$RPATH_FLAGS,;t t s,@DEPENDENCY_LINKING_TRUE@,$DEPENDENCY_LINKING_TRUE,;t t s,@DEPENDENCY_LINKING_FALSE@,$DEPENDENCY_LINKING_FALSE,;t t s,@LT_LDFLAGS@,$LT_LDFLAGS,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@ac_ct_PKG_CONFIG@,$ac_ct_PKG_CONFIG,;t t s,@COIN_HAS_PKGCONFIG_TRUE@,$COIN_HAS_PKGCONFIG_TRUE,;t t s,@COIN_HAS_PKGCONFIG_FALSE@,$COIN_HAS_PKGCONFIG_FALSE,;t t s,@COIN_PKG_CONFIG_PATH@,$COIN_PKG_CONFIG_PATH,;t t s,@COIN_PKG_CONFIG_PATH_UNINSTALLED@,$COIN_PKG_CONFIG_PATH_UNINSTALLED,;t t s,@COINUTILS_LIBS@,$COINUTILS_LIBS,;t t s,@COINUTILS_CFLAGS@,$COINUTILS_CFLAGS,;t t s,@COINUTILS_DATA@,$COINUTILS_DATA,;t t s,@COINUTILS_DEPENDENCIES@,$COINUTILS_DEPENDENCIES,;t t s,@COINUTILS_LIBS_INSTALLED@,$COINUTILS_LIBS_INSTALLED,;t t s,@COINUTILS_CFLAGS_INSTALLED@,$COINUTILS_CFLAGS_INSTALLED,;t t s,@COINUTILS_DATA_INSTALLED@,$COINUTILS_DATA_INSTALLED,;t t s,@VOLLIB_CFLAGS@,$VOLLIB_CFLAGS,;t t s,@VOLLIB_LIBS@,$VOLLIB_LIBS,;t t s,@VOLLIB_PCLIBS@,$VOLLIB_PCLIBS,;t t s,@VOLLIB_PCREQUIRES@,$VOLLIB_PCREQUIRES,;t t s,@VOLLIB_DEPENDENCIES@,$VOLLIB_DEPENDENCIES,;t t s,@VOLLIB_CFLAGS_INSTALLED@,$VOLLIB_CFLAGS_INSTALLED,;t t s,@VOLLIB_LIBS_INSTALLED@,$VOLLIB_LIBS_INSTALLED,;t t s,@COIN_HAS_COINUTILS_TRUE@,$COIN_HAS_COINUTILS_TRUE,;t t s,@COIN_HAS_COINUTILS_FALSE@,$COIN_HAS_COINUTILS_FALSE,;t t s,@OSI_LIBS@,$OSI_LIBS,;t t s,@OSI_CFLAGS@,$OSI_CFLAGS,;t t s,@OSI_DATA@,$OSI_DATA,;t t s,@OSI_DEPENDENCIES@,$OSI_DEPENDENCIES,;t t s,@OSI_LIBS_INSTALLED@,$OSI_LIBS_INSTALLED,;t t s,@OSI_CFLAGS_INSTALLED@,$OSI_CFLAGS_INSTALLED,;t t s,@OSI_DATA_INSTALLED@,$OSI_DATA_INSTALLED,;t t s,@OSIVOLLIB_CFLAGS@,$OSIVOLLIB_CFLAGS,;t t s,@OSIVOLLIB_LIBS@,$OSIVOLLIB_LIBS,;t t s,@OSIVOLLIB_PCLIBS@,$OSIVOLLIB_PCLIBS,;t t s,@OSIVOLLIB_PCREQUIRES@,$OSIVOLLIB_PCREQUIRES,;t t s,@OSIVOLLIB_DEPENDENCIES@,$OSIVOLLIB_DEPENDENCIES,;t t s,@OSIVOLLIB_CFLAGS_INSTALLED@,$OSIVOLLIB_CFLAGS_INSTALLED,;t t s,@OSIVOLLIB_LIBS_INSTALLED@,$OSIVOLLIB_LIBS_INSTALLED,;t t s,@COIN_HAS_OSI_TRUE@,$COIN_HAS_OSI_TRUE,;t t s,@COIN_HAS_OSI_FALSE@,$COIN_HAS_OSI_FALSE,;t t s,@OSITESTS_LIBS@,$OSITESTS_LIBS,;t t s,@OSITESTS_CFLAGS@,$OSITESTS_CFLAGS,;t t s,@OSITESTS_DATA@,$OSITESTS_DATA,;t t s,@OSITESTS_DEPENDENCIES@,$OSITESTS_DEPENDENCIES,;t t s,@OSITESTS_LIBS_INSTALLED@,$OSITESTS_LIBS_INSTALLED,;t t s,@OSITESTS_CFLAGS_INSTALLED@,$OSITESTS_CFLAGS_INSTALLED,;t t s,@OSITESTS_DATA_INSTALLED@,$OSITESTS_DATA_INSTALLED,;t t s,@COIN_HAS_OSITESTS_TRUE@,$COIN_HAS_OSITESTS_TRUE,;t t s,@COIN_HAS_OSITESTS_FALSE@,$COIN_HAS_OSITESTS_FALSE,;t t s,@SAMPLE_LIBS@,$SAMPLE_LIBS,;t t s,@SAMPLE_CFLAGS@,$SAMPLE_CFLAGS,;t t s,@SAMPLE_DATA@,$SAMPLE_DATA,;t t s,@SAMPLE_DEPENDENCIES@,$SAMPLE_DEPENDENCIES,;t t s,@SAMPLE_LIBS_INSTALLED@,$SAMPLE_LIBS_INSTALLED,;t t s,@SAMPLE_CFLAGS_INSTALLED@,$SAMPLE_CFLAGS_INSTALLED,;t t s,@SAMPLE_DATA_INSTALLED@,$SAMPLE_DATA_INSTALLED,;t t s,@COIN_HAS_SAMPLE_TRUE@,$COIN_HAS_SAMPLE_TRUE,;t t s,@COIN_HAS_SAMPLE_FALSE@,$COIN_HAS_SAMPLE_FALSE,;t t s,@coin_have_doxygen@,$coin_have_doxygen,;t t s,@coin_have_latex@,$coin_have_latex,;t t s,@coin_doxy_usedot@,$coin_doxy_usedot,;t t s,@coin_doxy_tagname@,$coin_doxy_tagname,;t t s,@coin_doxy_logname@,$coin_doxy_logname,;t t s,@COIN_HAS_DOXYGEN_TRUE@,$COIN_HAS_DOXYGEN_TRUE,;t t s,@COIN_HAS_DOXYGEN_FALSE@,$COIN_HAS_DOXYGEN_FALSE,;t t s,@COIN_HAS_LATEX_TRUE@,$COIN_HAS_LATEX_TRUE,;t t s,@COIN_HAS_LATEX_FALSE@,$COIN_HAS_LATEX_FALSE,;t t s,@coin_doxy_tagfiles@,$coin_doxy_tagfiles,;t t s,@coin_doxy_excludes@,$coin_doxy_excludes,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then { echo "$as_me:$LINENO: Copying data files for VPATH configuration" >&5 echo "$as_me: Copying data files for VPATH configuration" >&6;} else { echo "$as_me:$LINENO: Creating VPATH links for data files" >&5 echo "$as_me: Creating VPATH links for data files" >&6;} fi for file in $coin_vpath_link_files; do dir=`(dirname "./$file") 2>/dev/null || $as_expr X"./$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"./$file" : 'X\(//\)[^/]' \| \ X"./$file" : 'X\(//\)$' \| \ X"./$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"./$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test -d $dir; then : ; else { if $as_mkdir_p; then mkdir -p $dir else as_dir=$dir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dir" >&5 echo "$as_me: error: cannot create directory $dir" >&2;} { (exit 1); exit 1; }; }; } fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi { echo "$as_me:$LINENO: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&5 echo "$as_me: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&6;} if test x$coin_projectdir = xyes; then { echo "$as_me:$LINENO: Configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Configuration of $PACKAGE_NAME successful" >&6;} else { echo "$as_me:$LINENO: Main configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Main configuration of $PACKAGE_NAME successful" >&6;} fi else { echo "$as_me:$LINENO: No configuration of $PACKAGE_NAME necessary" >&5 echo "$as_me: No configuration of $PACKAGE_NAME necessary" >&6;} fi Vol-1.5.4/Vol/inc/0000755000175000017500000000000013434204224012622 5ustar sudipsudipVol-1.5.4/Vol/inc/config_vol.h.in0000644000175000017500000000430611536752115015540 0ustar sudipsudip/* inc/config_vol.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if the CoinUtils package is available */ #undef COIN_HAS_COINUTILS /* Define to 1 if the Osi package is available */ #undef COIN_HAS_OSI /* Define to 1 if the OsiTests package is available */ #undef COIN_HAS_OSITESTS /* Define to 1 if the Sample package is available */ #undef COIN_HAS_SAMPLE /* Define to the debug sanity check level (0 is no test) */ #undef COIN_VOL_CHECKLEVEL /* Define to the debug verbosity level (0 is no output) */ #undef COIN_VOL_VERBOSITY /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* SVN revision number of project */ #undef VOL_SVN_REV /* Version number of project */ #undef VOL_VERSION /* Major Version number of project */ #undef VOL_VERSION_MAJOR /* Minor Version number of project */ #undef VOL_VERSION_MINOR /* Release Version number of project */ #undef VOL_VERSION_RELEASE Vol-1.5.4/Vol/ltmain.sh0000755000175000017500000057753011420636474013726 0ustar sudipsudip# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $mkdir "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` if eval $echo \"$deplib\" 2>/dev/null \ | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $absdir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes ; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then $show "${rm}r $gentop" $run ${rm}r "$gentop" fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ char * find_executable (const char* wrapper) { int has_slash = 0; const char* p; const char* p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char* concat_name; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char* path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char* q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR(*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); return NULL; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: Vol-1.5.4/Vol/doxydoc/0000755000175000017500000000000013434204224013522 5ustar sudipsudipVol-1.5.4/Vol/doxydoc/doxygen.conf.in0000644000175000017500000017400012231275140016454 0ustar sudipsudip# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxydoc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = "@abs_top_srcdir@/" # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = @coin_doxy_logname@ #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @abs_top_srcdir@/src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.hpp \ *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = @coin_doxy_tagfiles@ # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = @coin_doxy_tagname@ # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = YES # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @coin_doxy_usedot@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES Vol-1.5.4/Vol/examples/0000755000175000017500000000000013434204224013667 5ustar sudipsudipVol-1.5.4/Vol/examples/VolLp/0000755000175000017500000000000013434204224014723 5ustar sudipsudipVol-1.5.4/Vol/examples/VolLp/vollp.cpp0000644000175000017500000001560211511202647016570 0ustar sudipsudip// $Id$ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "VolVolume.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinMpsIO.hpp" //############################################################################# class lpHook : public VOL_user_hooks { private: lpHook(const lpHook&); lpHook& operator=(const lpHook&); private: /// Pointer to dense vector of structural variable upper bounds double *colupper_; /// Pointer to dense vector of structural variable lower bounds double *collower_; /// Pointer to dense vector of objective coefficients double *objcoeffs_; /// Pointer to dense vector of right hand sides double *rhs_; /// Pointer to dense vector of senses char *sense_; /// The problem matrix in a row ordered form CoinPackedMatrix rowMatrix_; /// The problem matrix in a column ordered form CoinPackedMatrix colMatrix_; public: lpHook(const double* clb, const double* cub, const double* obj, const double* rhs, const char* sense, const CoinPackedMatrix& mat); virtual ~lpHook(); public: // for all hooks: return value of -1 means that volume should quit /** compute reduced costs @param u (IN) the dual variables @param rc (OUT) the reduced cost with respect to the dual values */ virtual int compute_rc(const VOL_dvector& u, VOL_dvector& rc); /** Solve the subproblem for the subgradient step. @param dual (IN) the dual variables @param rc (IN) the reduced cost with respect to the dual values @param lcost (OUT) the lagrangean cost with respect to the dual values @param x (OUT) the primal result of solving the subproblem @param v (OUT) b-Ax for the relaxed constraints @param pcost (OUT) the primal objective value of x */ virtual int solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost); /** Starting from the primal vector x, run a heuristic to produce an integer solution @param x (IN) the primal vector @param heur_val (OUT) the value of the integer solution (return DBL_MAX here if no feas sol was found */ virtual int heuristics(const VOL_problem& p, const VOL_dvector& x, double& heur_val) { return 0; } }; //############################################################################# lpHook::lpHook(const double* clb, const double* cub, const double* obj, const double* rhs, const char* sense, const CoinPackedMatrix& mat) { const int colnum = mat.getNumCols(); const int rownum = mat.getNumRows(); colupper_ = new double[colnum]; collower_ = new double[colnum]; objcoeffs_ = new double[colnum]; rhs_ = new double[rownum]; sense_ = new char[rownum]; std::copy(clb, clb + colnum, collower_); std::copy(cub, cub + colnum, colupper_); std::copy(obj, obj + colnum, objcoeffs_); std::copy(rhs, rhs + rownum, rhs_); std::copy(sense, sense + rownum, sense_); if (mat.isColOrdered()) { colMatrix_.copyOf(mat); rowMatrix_.reverseOrderedCopyOf(mat); } else { rowMatrix_.copyOf(mat); colMatrix_.reverseOrderedCopyOf(mat); } } //----------------------------------------------------------------------------- lpHook::~lpHook() { delete[] colupper_; delete[] collower_; delete[] objcoeffs_; delete[] rhs_; delete[] sense_; } //############################################################################# int lpHook::compute_rc(const VOL_dvector& u, VOL_dvector& rc) { rowMatrix_.transposeTimes(u.v, rc.v); const int psize = rowMatrix_.getNumCols(); for (int i = 0; i < psize; ++i) rc[i] = objcoeffs_[i] - rc[i]; return 0; } //----------------------------------------------------------------------------- int lpHook::solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost) { int i; const int psize = x.size(); const int dsize = v.size(); // compute the lagrangean solution corresponding to the reduced costs for (i = 0; i < psize; ++i) x[i] = (rc[i] >= 0.0) ? collower_[i] : colupper_[i]; // compute the lagrangean value (rhs*dual + primal*rc) lcost = 0; for (i = 0; i < dsize; ++i) lcost += rhs_[i] * dual[i]; for (i = 0; i < psize; ++i) lcost += x[i] * rc[i]; // compute the rhs - lhs colMatrix_.times(x.v, v.v); for (i = 0; i < dsize; ++i) v[i] = rhs_[i] - v[i]; // compute the lagrangean primal objective pcost = 0; for (i = 0; i < psize; ++i) pcost += x[i] * objcoeffs_[i]; return 0; } //############################################################################# int main(int argc, char * argv[]) { const char extension[4] = "mps"; if (argc != 2) { printf("Usage: vollp \n (omitting the .mps)\n"); exit(1); } CoinMpsIO mpsio; mpsio.readMps(argv[1], extension); printf("\n\n\n\n ============== Starting volume =================\n\n\n\n"); VOL_problem volprob; const CoinPackedMatrix* mat = mpsio.getMatrixByCol(); const int psize = mat->getNumCols(); const int dsize = mat->getNumRows(); char * sense = new char[dsize]; memcpy(sense, mpsio.getRowSense(), dsize); // Set the lb/ub on the duals volprob.dsize = dsize; volprob.psize = psize; volprob.dual_lb.allocate(dsize); volprob.dual_ub.allocate(dsize); int i; for (i = 0; i < dsize; ++i) { switch (sense[i]) { case 'E': volprob.dual_lb[i] = -1.0e31; volprob.dual_ub[i] = 1.0e31; break; case 'L': volprob.dual_lb[i] = -1.0e31; volprob.dual_ub[i] = 0.0; break; case 'G': volprob.dual_lb[i] = 0.0; volprob.dual_ub[i] = 1.0e31; break; default: printf("Volume Algorithm can't work if there is a non ELG row\n"); abort(); } } lpHook myHook(mpsio.getColLower(), mpsio.getColUpper(), mpsio.getObjCoefficients(), mpsio.getRightHandSide(), mpsio.getRowSense(), *mat); volprob.solve(myHook, false /* no warmstart */); //------------- extract the solution --------------------------- printf("Best lagrangean value: %f\n", volprob.value); double avg = 0; for (i = 0; i < dsize; ++i) { switch (sense[i]) { case 'E': avg += CoinAbs(volprob.viol[i]); break; case 'L': if (volprob.viol[i] < 0) avg += (-volprob.viol[i]); break; case 'G': if (volprob.viol[i] > 0) avg += volprob.viol[i]; break; } } printf("Average primal constraint violation: %f\n", avg/dsize); // volprob.dsol contains the dual solution (dual feasible) // volprob.psol contains the primal solution // (NOT necessarily primal feasible) return 0; } Vol-1.5.4/Vol/examples/VolLp/Makefile.in0000644000175000017500000000604311576071355017007 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # $Id: Makefile.in 726 2006-04-17 04:16:00Z andreasw $ ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGEME entries below. # ########################################################################## # In this case we define DRIVER to be the name of the executable and filename # without extension DRIVER = vollp # CHANGEME: This should be the name of your executable EXE = $(DRIVER)@EXEEXT@ # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = $(DRIVER).@OBJEXT@ # CHANGEME: Additional libraries ADDLIBS = # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = # CHANGEME: Directory to the sources for the (example) problem definition # files SRCDIR = @srcdir@ VPATH = @srcdir@ ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile the # # package. # ########################################################################## COIN_HAS_PKGCONFIG = @COIN_HAS_PKGCONFIG_TRUE@TRUE COIN_CXX_IS_CL = @COIN_CXX_IS_CL_TRUE@TRUE # The following is necessary under cygwin, if native compilers are used CYGPATH_W = @CYGPATH_W@ # C++ Compiler command CXX = @CXX@ # C++ Compiler options CXXFLAGS = @CXXFLAGS@ # additional C++ Compiler options for linking CXXLINKFLAGS = @RPATH_FLAGS@ # Include directories (we use the CYGPATH_W variables to allow compilation with Windows compilers) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) INCL = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --cflags vol` else INCL = @VOLLIB_CFLAGS_INSTALLED@ endif INCL += $(ADDINCFLAGS) # Linker flags ifeq ($(COIN_HAS_PKGCONFIG), TRUE) LIBS = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --libs vol` else ifeq ($(COIN_CXX_IS_CL), TRUE) LIBS = -link -libpath:`$(CYGPATH_W) @abs_lib_dir@` libVol.lib @VOLLIB_LIBS_INSTALLED@ else LIBS = -L@abs_lib_dir@ -lVol @VOLLIB_LIBS_INSTALLED@ endif endif all: $(EXE) .SUFFIXES: .cpp .c .o .obj $(EXE): $(OBJS) bla=;\ for file in $(OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \ $(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla $(LIBS) $(ADDLIBS) clean: rm -rf $(EXE) $(OBJS) .cpp.o: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .cpp.obj: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` .c.o: $(CC) $(CFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .c.obj: $(CC) $(CFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` Vol-1.5.4/Vol/examples/VolLp/INSTALL0000644000175000017500000000064510611730644015765 0ustar sudipsudip The vollp example shows how to use the Volume algorithm to solve an LP (well, to get an approximate solution). In fact, the very same code is in the heart of the OsiVolSolverInterface code of Osi. To build the vollp example of using Vol - make - must use gnu make. To run vollp - ./vollp There are command line parameters. When none are specifed, help text describing the parameters is provided. Vol-1.5.4/Vol/examples/Volume-LP/0000755000175000017500000000000013434204224015447 5ustar sudipsudipVol-1.5.4/Vol/examples/Volume-LP/reader.h0000644000175000017500000000420611511202647017065 0ustar sudipsudip/* Copyright (C) 2000, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). $Id$ */ #ifndef __NAMES_HPP__ #define __NAMES_HPP__ #include #include #include #include /* The classes in this file are used for reading in an MPS file. Rname is used for storing the names and signs of the constraints. Cname is used for storing the names of the variables. */ using std::string; using std::map; using std::vector; using std::cout; using std::endl; class LP_parms; class VOL_lp; // The function that actually reads in the MPS file int reader(const LP_parms &lp_par, VOL_lp *lp_pb); //############################################################################# class Rname { public: int nrows; map name; vector sign; public: Rname() : nrows(0) {} ~Rname() {} int original_index(const string & Name) { map::iterator j = name.find(Name); if ( j == name.end() ) { cout << " name not found: " << Name << endl; abort(); } return j->second; } void add(const string &Name, const string &Sign) { map::iterator j = name.find(Name); if ( j==name.end() ){ name[Name]=nrows++; sign.push_back(Sign); } else { cout << " duplicated row: " << Name << endl; abort(); } } }; //############################################################################# class Cname{ private: int ncols; public: map name; public: Cname() : ncols(0) {} ~Cname() {} int original_index(const string & Name) { map::iterator j = name.find(Name); if ( j == name.end() ) { cout << " name not found: " << Name << endl; abort(); } return j->second; } void add(const string &Name) { map::iterator j = name.find(Name); if ( j==name.end() ){ name[Name]=ncols++; } else { cout << " duplicated row: " << Name << endl; abort(); } } }; //############################################################################# #endif Vol-1.5.4/Vol/examples/Volume-LP/lp.h0000644000175000017500000000366311511202647016244 0ustar sudipsudip/* Copyright (C) 2000, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). $Id$ */ #ifndef __LP_H__ #define __LP_H__ #include #include #include #include "VolVolume.hpp" #include "lpc.h" using std::string; //############################################################################# // parameters controlled by the user class LP_parms { public: string fdata; // file with the data string dualfile; // file with an initial dual solution string dual_savefile; // file to save final dual solution string primal_savefile; // file to save primal integer solution int h_iter; // number of times that the primal heuristic will be run // after termination of the volume algorithm double var_ub; // upper bound for the variables LP_parms(const char* filename); ~LP_parms() {} }; //############################################################################# class LP_data_and_hook : public VOL_user_hooks { // original data for LP public: VOL_lp lp_pb; // lp data VOL_dvector rhs; // right hand side VOL_ivector ix; // best integer feasible solution so far double icost; // value of best integer feasible solution public: LP_data_and_hook() : icost(DBL_MAX) {} virtual ~LP_data_and_hook() {} public: // for all hooks: return value of -1 means that volume should quit // compute reduced costs int compute_rc(const VOL_dvector& u, VOL_dvector& rc); // solve relaxed problem int solve_subproblem(const VOL_dvector& u, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector&v, double& pcost); // primal heuristic // return DBL_MAX in heur_val if feas sol wasn't/was found int heuristics(const VOL_problem& p, const VOL_dvector& x, double& heur_val); }; //############################################################################# #endif Vol-1.5.4/Vol/examples/Volume-LP/Makefile.in0000644000175000017500000000603311576071355017532 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # $Id: Makefile.in 726 2006-04-17 04:16:00Z andreasw $ ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGEME entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = volume-lp@EXEEXT@ # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = lp.@OBJEXT@ lpc.@OBJEXT@ reader.@OBJEXT@ # CHANGEME: Additional libraries ADDLIBS = # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = # CHANGEME: Directory to the sources for the (example) problem definition # files SRCDIR = @srcdir@ VPATH = @srcdir@ ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile the # # package. # ########################################################################## COIN_HAS_PKGCONFIG = @COIN_HAS_PKGCONFIG_TRUE@TRUE COIN_CXX_IS_CL = @COIN_CXX_IS_CL_TRUE@TRUE # The following is necessary under cygwin, if native compilers are used CYGPATH_W = @CYGPATH_W@ # C++ Compiler command CXX = @CXX@ # C++ Compiler options CXXFLAGS = @CXXFLAGS@ # additional C++ Compiler options for linking CXXLINKFLAGS = @RPATH_FLAGS@ # Include directories (we use the CYGPATH_W variables to allow compilation with Windows compilers) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) INCL = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --cflags vol` else INCL = @VOLLIB_CFLAGS_INSTALLED@ endif INCL += $(ADDINCFLAGS) # Linker flags ifeq ($(COIN_HAS_PKGCONFIG), TRUE) LIBS = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --libs vol` else ifeq ($(COIN_CXX_IS_CL), TRUE) LIBS = -link -libpath:`$(CYGPATH_W) @abs_lib_dir@` libVol.lib @VOLLIB_LIBS_INSTALLED@ else LIBS = -L@abs_lib_dir@ -lVol @VOLLIB_LIBS_INSTALLED@ endif endif all: data.mps $(EXE) .SUFFIXES: .cpp .c .o .obj $(EXE): $(OBJS) bla=;\ for file in $(OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \ $(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla $(LIBS) $(ADDLIBS) clean: rm -rf $(EXE) $(OBJS) data.mps dual.txt primal.txt data.mps: data.mps.gz gzip -d -c $@.gz > $@ .cpp.o: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .cpp.obj: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` .c.o: $(CC) $(CFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .c.obj: $(CC) $(CFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` Vol-1.5.4/Vol/examples/Volume-LP/lpc.h0000644000175000017500000000206611511202647016403 0ustar sudipsudip/* Copyright (C) 2000, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). $Id$ */ #ifndef __LPC_H__ #define __LPC_H__ #include #include "VolVolume.hpp" using std::vector; class VOL_lp { public: int ncols, nrows, nels; int maxcols, nints; VOL_ivector mrow; VOL_ivector mcstrt; VOL_dvector dels; VOL_dvector dcost; VOL_dvector dloc; VOL_dvector dupc; VOL_dvector dlor; VOL_dvector dupr; VOL_ivector intnums; VOL_ivector check_col; vector mr; vector mc; vector els; vector cost; VOL_lp(); ~VOL_lp(){ } void build_col(int row, double el); void rhs(int row, double lb, double ub); void finish_up(); int n_cols(){ return ncols; } void set_nrows( const int n); void intcol(int j); void addobj( double xx); void addel(int row, double el); void startcol(); void ub(const int i, const double x); void lb(const int i, const double x); void init_bounds( const int n); }; #endif Vol-1.5.4/Vol/examples/Volume-LP/lp.par0000644000175000017500000000060510435426173016576 0ustar sudipsudipfdata=data.mps *fdata=data *dualfile=dual.txt dual_savefile=dual.txt primal_savefile=primal.txt h_iter=0 var_ub=1.0 printflag=3 printinvl=20 heurinvl=100000000 greentestinvl=2 yellowtestinvl=2 redtestinvl=10 lambdainit=0.1 alphainit=0.01 alphamin=0.0001 alphafactor=0.5 alphaint=80 maxsgriters=2000 primal_abs_precision=0.02 gap_abs_precision=0. gap_rel_precision=0.01 granularity=0. Vol-1.5.4/Vol/examples/Volume-LP/lp.cpp0000644000175000017500000002143011511202647016567 0ustar sudipsudip// $Id$ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). // This is an implementation of the Volume algorithm for LPs like // min cx // Ax >= b // l <= x <= u // This works best when A is a 0-1 matrix, and x is bounded // between 0 and 1 // See the references // F. Barahona, R. Anbil, "The Volume algorithm: producing primal solutions // with a subgradient method," Mathematical Programming, 87 (2000) 385-399. // F. Barahona, R. Anbil, "On some difficult linear programs comming from // set partitioning," IBM report RC 21410, 1999. #include #include #include #include #include #include #include #include #include "VolVolume.hpp" #include "lp.h" #include "lpc.h" #include "reader.h" using std::ifstream; using std::ofstream; void LP_read_data(const LP_parms &lp_par, LP_data_and_hook *lp_data); int main(int argc, char* argv[]) { // read in problem specific parameters and initialize data structures LP_parms lp_par("lp.par"); LP_data_and_hook lp_data; // read data LP_read_data(lp_par, &lp_data); // create the VOL_problem from the parameter file VOL_problem volp("lp.par"); volp.psize = lp_data.lp_pb.ncols; volp.dsize = lp_data.lp_pb.nrows; bool ifdual = false; if (lp_par.dualfile.length() > 0) { // read dual solution ifdual = true; VOL_dvector& dinit = volp.dsol; dinit.allocate(volp.dsize); // read from file ifstream file(lp_par.dualfile.c_str()); const int dsize = volp.dsize; int idummy; for (int i = 0; i < dsize; ++i) { file >> idummy >> dinit[i]; } } // Set bounds on the dual variables // first the lower bounds to -inf, upper bounds to inf volp.dual_lb.allocate(volp.dsize); volp.dual_lb = -1e31; volp.dual_ub.allocate(volp.dsize); volp.dual_ub = 1e31; // now go through the relaxed constraints and change the lb of the ax >= b // constrains to 0, and change the ub of the ax <= b constrains to 0. VOL_lp &lp_pb=lp_data.lp_pb; VOL_dvector &rhs=lp_data.rhs; rhs=lp_pb.dlor; const double bnd=1.e20; for (int i = 0; i < volp.dsize; ++i) { if ( lp_pb.dlor[i] < -bnd ) { // constraint i is '<= volp.dual_ub[i] = 0; rhs[i]=lp_pb.dupr[i]; } if ( lp_pb.dupr[i] > bnd ) { // constraint i is '>=' volp.dual_lb[i] = 0; rhs[i]=lp_pb.dlor[i]; } } // start time measurement double t0; struct tms timearr; clock_t tres; tres = times(&timearr); t0 = timearr.tms_utime; // invoke volume algorithm if (volp.solve(lp_data, ifdual) < 0) { cout << "solve failed...\n"; } else { // recompute the violation const int n = lp_data.lp_pb.ncols; const int m = lp_data.lp_pb.nrows; // const VOL_dvector& rhs = lp_data.lp_pb.rhs; const VOL_ivector& mrow = lp_data.lp_pb.mrow; const VOL_ivector& mcstrt = lp_data.lp_pb.mcstrt; const VOL_dvector& dels = lp_data.lp_pb.dels; int i,j,k; VOL_dvector v(m); for (i = 0; i < m; ++i) { v[i] = rhs[i]; } for (i = 0; i < n; ++i) { const double xx=volp.psol[i]; const int k1=mcstrt[i]; const int k2=mcstrt[i+1]; for ( j=k1; j 0.0 && volp.dual_ub[i] == 0.0 ) || ( v[i] < 0.0 && volp.dual_lb[i] == 0.0 ) ) continue; vc += fabs(v[i]); } vc /= m; cout << " Average violation of final solution: " << vc << endl; if (lp_par.dual_savefile.length() > 0) { // save dual solution ofstream file(lp_par.dual_savefile.c_str()); const VOL_dvector& u = volp.dsol; int n = u.size(); int i; for (i = 0; i < n; ++i) { file << i+1 << " " << u[i] << endl; } } if (lp_par.primal_savefile.length() > 0) { // save primal solution ofstream file(lp_par.primal_savefile.c_str()); const VOL_dvector& x = volp.psol; int n = x.size(); int i; for (i = 0; i < n; ++i) { if ( x[i] > 1.e-8 ) file << i+1 << " " << x[i] << endl; } } // run a couple more heuristics double heur_val; for (i = 0; i < lp_par.h_iter; ++i) { heur_val = DBL_MAX; lp_data.heuristics(volp, volp.psol, heur_val); } } // end time measurement tres = times(&timearr); double t = (timearr.tms_utime-t0)/100.; cout << " Total Time: " << t << " secs \n"; return 0; } //############################################################################ // void LP_read_data(const LP_parms &lp_par, LP_data_and_hook * data) { VOL_lp& lp_pb = (*data).lp_pb; reader(lp_par,&lp_pb); const int m=lp_pb.nrows; (*data).rhs.allocate(m); } //############################################################################ //###### USER HOOKS // compute reduced costs int LP_data_and_hook::compute_rc(const VOL_dvector& u, VOL_dvector& rc) { const int n = lp_pb.ncols; const VOL_dvector& dcost = lp_pb.dcost; const VOL_ivector& mcstrt = lp_pb.mcstrt; const VOL_ivector& mrow = lp_pb.mrow; const VOL_dvector& dels = lp_pb.dels; int i,k=0; double redcost; for ( i=0; i < n; i++){ redcost=dcost[i]; const int k1=mcstrt[i]; const int k2=mcstrt[i+1]; double *dd=dels.v+k1; double *d2=dels.v+k2; int *mm=mrow.v+k1; while ( dd != d2 ) { k = *mm; redcost -= u[k] * (*dd); ++dd; ++mm; } rc[i]=redcost; } return 0; } // IN: dual vector u // OUT: primal solution to the Lagrangian subproblem (x) // optimal value of Lagrangian subproblem (lcost) // v = difference between the rhs and lhs when substituting // x into the relaxed constraints (v) // objective value of x substituted into the original problem (pcost) // xrc // return value: -1 (volume should quit) 0 ow int LP_data_and_hook::solve_subproblem(const VOL_dvector& u, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost) { const VOL_dvector& dcost = lp_pb.dcost; const int n = lp_pb.ncols; const int m = lp_pb.nrows; const VOL_ivector& mrow = lp_pb.mrow; const VOL_ivector& mcstrt = lp_pb.mcstrt; const VOL_dvector& dels = lp_pb.dels; const VOL_dvector& dloc = lp_pb.dloc; const VOL_dvector& dupc = lp_pb.dupc; int i,k; lcost = 0.0; for (i = 0; i < m; ++i) { lcost += u[i] * rhs[i]; v[i] = rhs[i]; } pcost = 0.0; for (i = 0; i < n; ++i) { if ( rc[i] >= 0.0 ) x[i]=dloc[i]; else x[i]=dupc[i]; const double xx=x[i]; lcost += rc[i]*xx; pcost += dcost[i] * xx; const int k1=mcstrt[i]; const int k2=mcstrt[i+1]; double *dd=dels.v+k1; double *d2=dels.v+k2; int *mm=mrow.v+k1; while ( dd != d2 ) { k= *mm; v[k]-= (*dd)*xx; ++mm; ++dd; } } return 0; } // IN: fractional primal solution (x), // best feasible soln value so far (icost) // OUT: integral primal solution (ix) if better than best so far // and primal value (icost) // returns -1 if Volume should stop, 0/1 if feasible solution wasn't/was // found. int LP_data_and_hook::heuristics(const VOL_problem& p, const VOL_dvector& x, double& icost) { // no heuristic at this moment return 0; } //############################################################################# // Constructor of LP_parms //############################################################################# // reading parameters specific to LP LP_parms::LP_parms(const char *filename) : fdata(""), h_iter(10) { char s[100]; ifstream file(filename); if (!file) { cout << "Failure to open file\n"; exit(2); } string ss; while (1) { file.getline(s, 100, '\n'); string ss; ss = s; if (ss.find("fdata") == 0) { int j = ss.find("="); int j1 = ss.length() - j + 1; fdata = ss.substr(j+1, j1); } else if (ss.find("dualfile") == 0) { int j = ss.find("="); int j1 = ss.length() - j + 1; dualfile = ss.substr(j+1, j1); } else if (ss.find("dual_savefile") == 0) { int j = ss.find("="); int j1 = ss.length() - j + 1; dual_savefile = ss.substr(j+1, j1); } else if (ss.find("primal_savefile") == 0) { int j = ss.find("="); int j1 = ss.length() - j + 1; primal_savefile = ss.substr(j+1, j1); } else if (ss.find("h_iter") == 0) { int i = ss.find("="); h_iter = atoi(&s[i+1]); } else if (ss.find("var_ub") == 0) { int i = ss.find("="); var_ub = atof(&s[i+1]); } if (file.eof()) break; } file.close(); } Vol-1.5.4/Vol/examples/Volume-LP/data.mps.gz0000644000175000017500000037361110435426173017542 0ustar sudipsudip‹³šû=data.mpslÛÍŽmWy†Ñþ¹Šj‚¥$^óûée!Kþ“m%=C`û ƒ”»†Ø„,Uc¿5kW={mi¨Uï|ü³Þÿç—¯?¾þï¯ß|÷öÏ^½óÙ'ÿò9Gy3xüê÷>ùð—}üãùs~8úàã/ÞÿÅûŸýÝÑ«w>þäã{ÿ³O~8‰¨¼¯ÞùùûŸñòù'~ü×Ï牗Ÿ|óæÛ—7øö§yÚ‡Ÿrüç/x7þq³sò‰¿œþÉ/?{ïÇWñê—¿¹þï~ùôËï¾zùü_èO~þú«¯^Þ{óõ×ß}ó»_ùíïÞ|óÇ—Ï^ÿñõ—oýÛŸ~ÿìŸ}ú釼÷³/>øä/ß}óûoÞüé›ïïÀG½ÿñ?Ü‚?|÷öõË»ÿô¼|ðéËÿ{ý]Ç篿}ùõ›ÿzýöwßüÇËÞ¾ùÕW¯¿~ùòíïþøýþÍÛ7_¿üéÍÛß¿¼}ýÕ—ß¾þ÷—oßüÝwøö·¯¿â›ß¼üùãû‘ÿðÞ›¯Þ¼}ùⷯ߼}ýõ«w^}ÿþò#ßÿ×þ|³^^}ÿÞ¾zùøååͯþó¯u/¿xyùõóÂ8Žp¤£íÇ:®ãy×ñ8Ž#é(G;ƱŽë+µàXp,8 ŽÇ‚cÁ±àX„aAX„aAX„iAZ¤iAZ¤iAZP”eAYP”eAYP”mA[дmA[дmA[0ŒcÁX0ŒcÁX0ŒkÁZ°¬kÁZ°¬kÁZp-¸\ ®ׂkÁµàZp-¸÷oDz×ñ8Ž#é(G;ƱŽ+ƒ<<<<<<<<< ŽÇ‚cÁ±àXp,8 ŽaAX„aAX„aAX¤iAZ¤iAZ¤eAYP”eAYP”eAYдmA[дmA[дcÁX0ŒcÁX0ŒcÁX°¬kÁZ°¬kÁZ°¬ׂkÁµàZp-¸\ ®ׂ{ýé]Çã8Žp¤£íÇ:,ÐÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰¡‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰©‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰¥‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰­‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰£‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šx5ñjâÕÄ«‰W¯&^M¼šø¼ûã8‘Žr´cë¸þ¡¸Ç‚cÁ±àXp,8 ŽÇ‚cAX„aAX„aAX¤iAZ¤iAZ¤iAYP”eAYP”eAYP´mA[дmA[дmÁX0ŒcÁX0ŒcÁX0¬kÁZ°¬kÁZ°¬kÁµàZp-¸\ ®ׂkÁµà^ÿ‹ä]Çã8Žp¤£íÇ:,ÐÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄGM|4ñÑÄG&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx4ñhâÑÄ£‰G&M<šx41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141415151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±4±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5±5q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q4q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5q5ñjâÕÄû?¬ý˲%¹®¬õõÙ;Ý Þš2™L&Ó1;¿ôÊž:êêñ5jWeÐkÍpÐGp¯VZù-2 ᮉ×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰×ĉkâÄ5qâš8qMœ¸&N\'®‰ÖDC‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:C‹¡ŽÅPÇb¨c1Ô±êX u,†:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:G‹£ŽÅQÇâ¨cqÔ±8êXu,Ž:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–@K Ž%PǨc Ô±êXu,:–øGÇòùßÿ—ÿ×ÿú¿ýÿ§Ï¿ý¯ÿçÿùÿ¸þKð?þúçÿõþ_ÿù¿ÿñÿßþŸÿûÿü¿ýÿúûÿßõç?ÿÿßÿŸúë¯nü.¿~øú÷ Óý_CöL—£¶ïŸ~Ûß²Odû&Œ7á{Ú9{:8]ÿ{è߇ð<=÷pF·}Û•·Ý÷tãôØÓÓóˆ.×–ý{þbm‡@Éfj¡o¬”£žÿ¡÷ÊèÎiÛ¶=íéߥ°Q3žŒþ;ÈwCÿ5úüG¾_¥®_[úù)vt¥ƒqÔÁúßBÿîôí¹@`ó® t¡k\‰=ýwøðíU £:ŒÒíhÌÛј·£1oGcގƼyßyùµ¥Ÿ‡v7j]µ¶§³ÇûÇK–Ñq/£Ý|êžþ;ðüùæQçQ§ÐA»N:hkû¬ƒN_±•£¶ËQÛûí»ðåĄݑ=G´°uÕ=ý»tf¶(ôlŒî =è`{úïðà§cIèfAÌs« ͧT;z1k¡C }]lp.J »Dûµ¥þZëžþ;œûéÅ8ï¹°$r=7¾œÑ±§§Ôß?t…ôæÑàÌý·>úñ£Ü|o~ôü¦ŸÇ_m;Z¶®É;¸ß|Œ[¾ß|¬ìéßVÊ×'n¤+¡kte–ðƒàíIq48±HÐÓz:[„ùÐî÷uãÖï7ãöŒï7ã›#z¿Jß6c¿Rߺbÿ[ßÓ¿ÿÖÌ?>wÛÓËFŸÿÈŽ:x{z‚y¸"¡…ufìéßÆÌµ¿Ãì7ôßá÷O4÷ä"Œ®{º]g"Ž'ÖÌiìÀGX)øæËýD}s1öt©›ómO÷÷‹i{º=Økïëe ´Ñ%<ÚÑÐ.+<:;øž~Á¿?¥kO?Žà¯¿o@z–)CÛ†v2ª?8=}¼þhup}VCø¬øøï·PçöäMÿ.ÆŒž{úÕ¼›k­¥ r½N¯Âi }=´‹öIÇ îÍçFgÝïñn{úwe7hoDu¿Ç'WÙ7ý»”‹y—é‚Pã¨í{ æ"ÐÅXϹ§gÑÆ6¢äžyÑÎFÍGèAÚöYzޝ­2sn•…6¶R˜@³ÃU ¡ç•­¯µ o¬ñ ‹º·ÊœŸ‚êÞð𺧳skh6´Ù‹Ó¯ýèñÖ]ÐøÞoP÷ûºó#âMÿv¶¾~K½hcn°àÆEó0÷¬"Í;8g™ìj3ëà:Ø®“6agî{ú·ÉÖÚK ™MÜ?¼è`fKð½uÑõâOv48¶‡ÑS »Z.¾ïùïRÙzç¶§ÍÙY¢ ´s÷@󣡻Š.kM0Ÿ¸á×– ãÌŒàWË Œ/:µéNÙêQÏWðM§¿¹§ÿÎ@öèP+M÷Ù1ö´¶œØ%ÐVè¬-ŒÞÛÁÏP ,Öó«ìi¯d®Õd!lk)«Œn Ý=šYϧÐóGÕßǾ§›ñ³?¢wÝ4ï`å÷Pm(œGœGÛÇ„å„ÙR Ý;£çž’m]s¿u•!ÐÌ\¨‰¹°hf.Tá}ÿ®,\ªò ¤ÙÆÇc[fæBbÜ/š÷u(£Æ|Tu³¥²yÞ.¡íÆŒêv m·ÂnxŒrߟ²ƒûbûþ”ÜõÕ÷ÇÐྡîGtü·ÐÙ5zߟv¢íiîaqî“ìpâ §¼¹§ƒY¿Áψ‹N\®¦Ðt¥èíhh;®ïéߥÑͧ£&†Ò„°3óÃô¾û¹§‡3«Ì‹B3k”]Û[[èAw‰èÉ•sì鯼º­\Í"ðwœrô¾—G“í­Á÷õEs9E-Í\~•;í]›}˜šÝ{ÕQšÙüô±èƉU4ßü‡MŠåuvÅÁ¸ý¸RÐÕá¬íð=][ù~J™°MîŒîM¡ÙÇЇB³ƒÅPF]ŠT~×4½Æå×׋n3r¹/pøÑ<÷í<¯|›^tíl®õªÐíû÷íGoÌ·o,ó½]¹ßyìmçÊ]mcoVî´{ó°ò#ÑØ[~•‰ÆÞ¨«üX2÷F]m{úw¿È6=ùÅã¢'3O&?¯ ÍÚæ.  rüg×Ðåáæúçÿïýìw.íg ÖOº Òv›BÛÝŸ=æ¥GèŸÓ?R–¨{zŽç›»®kKÛu9¡‹@{<š¹0æVɨ™2æÖfcôÜÓ£’žZšÜÎ<âþ ÿ)5û° ^Â<ÿ§fì#=Ú/B»Òsgm{ÛÓÑݯØÓý¢WŽÞuN`ÛÎ…Ü‹ŽNCë‹@³ópr3„tg45OæþøQ¹“dîºÊýS0Oæžþm<dîm˜Æ-  Š ¾m¶£&ö†NãFÖÜ:Ysoè4ßÓ¿ËêñÝòŸ´ó¡½åÔI³ôF×í½¥Ò] iœR\{ÚØé6æätÙ>w’úãÏé,¡[Bû–N3ýYÃzìéW!í·ÎýeÛõ¨í¶m{þÚÒ8½ 4ÍýTæ¾ç¿ »Ó5â¼h£â£$sÔ¢ÙýJ–9jÑÁgNÙ®óY"º?t’ *ù¬Êv—èíGôv—è}O¿Š"½w¾l{»Î÷±§»ÓMší‘Ì»~ÔÁ?kmáÁd¥ì×Úd¥.Û…p$ ¡m—²‘,e¶ýÞF–øqûÅ ßÓ<Ùæ¼š'äÁ-‹.×÷‰CÍ@É~ÓÁõM|:›¹ï6Ÿ,…Þ¢™K` žluž]¡™¾#³†nº°`¦$µÒß§VZ4Òw.\tó$‡êvûÈ6>Ûn3[¶À¬{úùÝï Í›¶J?ã)Ð,׫Ðöc ·?´Ý| WDÝ4¼$)W±±o»mi. ®Ù¬ýC¿¸.ºY2þsÿxIBákON—=ÍÇíˆÞn…ÇëÜtzv÷8j"”&꾉$%s;¢÷eÖóû£Œdz£&æ û©$1ýÔNŽˆ±ŸÚIŠØ¦vÛÒ\…éBÛϬÿКE¶&KÙ¢ B’Å覓¸X¡í`Ú‘Í–E³ IẽI ÂL Ùýz¶ÇÜt¥RŠšŒ¹°B&´°øÍ-…Z߉¼^6±_!yàÃMÿ¶Æѵ)ÐT!SÛžvºd¯õ¦Í…"Ða4˰ýsŒ® MæÕöô¼ý£q4)n{2q¤Ä~ãË–Ñ?>á$Ã@ÇEscøž®‰×¡^'W÷;s²ZÖýÎÌX7ýÛxÚ;ÚË&îí;9OÕ8j"”&ö‹sFï×]K*ZënÛÒIæ´{ºe#(¬Ió„nÂ×÷•VŽèý×ãÊKÛ‰s§íç|rÕÕöÓÙ“b!íˆÞOç¬ÔÈ~®ñŠ 7ý»$õ0Ú̵éJÏY6ûÉ]@@S_A¡!Kð…–I2«š¸ü_4ɬn4W ЂÿD\66Ö¶ =·‡´óÿP‹@wÖöž›åò‡Úê4ɮ㲟h2æ>\ Ë…¯¼ïÿÓ¥àÜÓ…þq"H4µ!ÆMïmÈlÝ›‡Í¶ô_óœ¬ç™ÝÒÚÿô˞ϣ¶çÞnhg–‡ûµ§ƒ]„Uf–GdVîÜÛ-]¡Çû7öÒnY4SJq¿³íÓ~ÑyÓŸ÷Í4Ì<>kÑor†Ís† te!Hµw¦y;§ðÜuÖ¯&‹n%y¼rôZoGóy;\´SoRè¤ØŽ)ô÷Ù…‘þ>“5Òlà_@³š.u(m3¡måÑû@³èñt:/š&’UÆœ} INf¤Ù˜Oa®5vá×xÔ<Ò4{¸B¿¨4Í=.¼±$A¹ís‚¤KÈín4IøPèùâS²ûÅØ‹Á1ep×RléÌÿjEð?%†`y÷-ý»°¥¬$É¢iP6sVó^µ)ÐÌJî²­´£Qk»QóHfm?j»oßX6j7Í®©“˜c¤“ )‰Æ–Î:è |”ó¨ƒ3ëà?d‚±=·t6}O'|¶Ï‰“>žÑ~Dǽ_-¹ ᦟçàîÚÉ6““§­Õ’†{V…¦EèC ³y·_R“­äÎ4B·’lI…<%|qò”dwKÇXb¿ÚžîÌë0’“àMVŽo(m‹Þ9LfÕB†+=gGĘO–ÑhzhÖöLnÍ¢æz^ž’kÿýÍ4©æZx5×ÑÑ] +k»¹@·Îè!Ðä俺)4ëyFí!{ÇŸ-[xc,»üçShÒó1„¶§±jVº1Z˜-“d—/S™k³³žýl±BÞ·=ä ýI?ä±û'Ñ'M&ôCÜãŸ<ÑsO?hVþ¡Ë~¶Øƒç쟄`­(4«Á`מnd®¯ƒ°èÏ^N+Eï¿Pˆ øç†êèVŸß˜÷¹c>HÕ JÛ£ûÌaM Üë¹_‘ƒÕûøü0zº\MzþùAi{ BO¥íŒ® MÚ~ÈÙ÷“¶«û­KxcVȨYFÍHUœ0a®ÅCŒhƼVï£L&·þŸ†B“™úTªç'Ml¦Ï]¡YÛͺ9£«B“Ù2•/ô¡ÂÔZ˜©ÌvˆÌvØ;ŠÞ?q²+œ™xMÚfÑLI<ÒM—§…÷ïJtaÖ}é{zŠ<ŸšBë~&VîMÏJjfͶî$¢h*4©•E-º’ÝÀ›Í=ýpÑðgåô<ùJ„ }néß…×12!OhÖÄ}Í*µš'ôÞÉu©&dè¬"Œ YF³¡Ýà”ä²÷¦e\´$RuÑAÓ'=ßûYy½SRŸft?¢÷»/ËuÓÏ€þüÑþ“Nrá›»1ëà½jð”&änL¬VîÆÉn%Óë¦ÖûHn‰„”YÏë®ç–è˜n:ɽbBÖɬƒíhhÛÑÐîWË™L©ýj™DÝÕ{½{‘ïÆ„d–-fFïóFZrŸ¿O˘í1wZFcÑIy<¤ù‡±ÏÝh¼ÐMóìæIj ÙÅ{Rx h£lS蹇O†Ö÷£¶§“º…ÉR¶èI C\{ÚY=/¦ÐLbJÛF…H®ÐoÞX½±Ûàšôõ=M‹yUtòbêÑãÕ£ Y&d=š7Ͳdyb N;Ú¶Ú+Y!…m³méìÅÌ=ýøIÿÊ‹À ýæÅtåÅVAòQ VÁØÒ©kt\'M Át˜[:u ;jÂöž¯ØÓ™fŸŠ×’•óNÅëAK&ãGm/· sr$Z? Ù)”—oZ´³t^/®ÉÛÛï7ɪ=–ß’Ùµ<­Ö¢ëþýƒ)t2þû5¿Œ-åŽ5¦ù[‡Òö`>Óı·hæ;ñ)ôœçPÍfíM³kþH®ù÷ N-Ùëö /:KGlû”•–˜Îû†™ÏôN#Èó·&›1ÐìÅ$Öá>;aÚó²ÿ”š)Ç,¹°^4M—™ø«núM2ãE¿É< 4«þ—¤#š*HIÓ>]£%Ù&ö©ә껙šÝƒïóú¥m¯´úlÃOCûÌ|iÛõè¹ÛQÛí¨íý²-ÐÏVøîì8Wfi{ñ…n3KgùAöyÓçGÏ=Žž{=·° ö-•¥óë:h¯rD ‹ßà´ÿwÐχš_ùeô¢+}­ÜÍíWõüNO˜uPX!'§÷kœ_[:KªéûôRÆ%l¾O/en[ú·1œñ¤{Hs¡ñÅhÑ%:lÙ»_tòöö«Oìà+ÿœ¾§ËÛْ׺ÏÅ”=Þôsàáß?…f93ø¾¾èÆöõì퓊ò}ž‹¤çûe”»œnú·³úÓ‰³hv)Õ¹uÑK¡Ê†E—‡’ájf=LÇ4‡$ÒÁèh'4féŒn==„Q«‰²JÑø“&êÀÏ.ÐÎÚVƼ²1¯cß¶]D]`ExcVˆ ÖŠÒöSBÕL´ýsË8jA• @?ä¶úG)¼ï]™å=šÅŽ')öÒqu¦ïÆ<ÊEÚ.×h¦T+T·ü/š)Õ„ï;ŒhhËÐöÃUÙ?´ cîDÝ.|¡L[ø”<ö'M”¨ñ$IþI“½$b*='œx0õÒ•|ßQ‹B3ma5Sè`Nèýºöù#ò¾ÛæZw¦L¬Â˜÷Iž{\Â÷=.ÞÁý)¯&¦QÇð_?4…fB<ÌNÉ"MÓç+m³’Q§@¿¨Z‰4MÛ¦<7ó$KЬÒU-]Y¤Q5aÌ+;¼ÔäD 4Kth¨=–çùÛ‹{úMþJ¤YþJî|÷}‚A«É\Û»XjÛÒYÅÌ)Ð<’°ïé7q¾Oòg5i{ï÷©IÛó¿ƒþmÉ™tŸà.¥÷~€dù²²¿S …f7üÞrÑIrtß§ÇKo…À$´÷f´ØÒÏ ±J‚ÿI;MÕÆsH"Í>+Œ4Ýð/f9ï#zoè´º¥[£AÑ M³õØÓ>hÆ|Ž !ɨí·Ö¶t6j&Ð,_£óL«‹v–†Ó•¶…ÜDâ¥Ý'SLGíÞº*ý¾úÕ÷½ Óõ•ŸOm…ñcÉ>‘c:8ýhpúÑàô£ÁéÊàìM§qÓü‹±Ä¸_™.Æ÷U™,ÛcR•iv¨¹ª@³¨ÕHüû‹¦U™›ÒóFéèîßÇ€N6ݽ=ÙÛ–þmó{}Ç¢“Ø$ßg9IG7øþ¶O’Q<ÉúóG{{2ñrøªVË6ÁäÃX4+½æ]i›E­fÆÞMG¡‘£®ÐlA(U¡YÜD™ÍNûM Yu⨠Mëª\˜WZ’* ‰X4‹HŠ+!Í|C¡´¬¶ Ï(²èƶ¦ŒZcr¥–ÍT?ú¾—ò‰’¸(_ÛluæJO Y„'aûäH6lKÿîL“ß“˜¬•Zé!þ¦üóÃh– ù!ÅÝXÛ4]à¿èÎè!Ѓµ=”¶ÉN±©´MŠaç†í¢ýb4¿ºš$:,N“îý‹&Ïí®ÐNé.Ð,ˆÂ›Ò6Kø÷pwò@wÖ¶ò¾½ï ©)fI’KWhÀAK§= ExÊ1þŸ´Y<¡ÆK§"]ÑU¡IbjëS ÇÅ<—BÏY¢ÃÏ!Ð-ØÑsÿ•|,}cGáMÌ׿ó°ÊRîV‰nŒîM¾Ð0a¦†‘ГxPŒ=Г¥9žBÛÁRîòb·¾O0h#±¸nç\Ðj#uO7v&*%Ê–.…¥A}ˆ[ýI?Õnþg=ÚöÆò®¶§üB %úû@D¤Ù^R§@“pŸÝš–Zô`mOá}Çdá|EµJ•JµK š0æ•/缚삥&k*ÐÑ] ;ó¡´=ØsOá+©“Ò¨5båÚÕöóÜXù•Ïûç¶Âöo»„¶­³’Âû¶¬¨EݯŠÎ¬½°¶ÿ¾ÃÛC[Sh–ì_X™â)¶õŸ”¶Yè¨_ûQ 'ÅêÃ/aÔœØçY&Ò¬ç¦ÐÎÚv–ô>¬ 4 °Ž$¨}Ñ•œ,â)nû'MJ¿ÄCaòšÙŠ­ =oäûŽ6„Që,èµ kËcˆ¿¡ç=XQ‹*|c=Yô÷·½Éí¾ß÷µÌm™)|ß׎Ä[¶¿q‰½¼¿’L$~wJmgù#üRèÊn ’P—E³ðƒÈ¼á÷åš3:óHßtÐhž§+­ÍîU YTíBÛIu{ß'AO'ż'}­]“KÅ} uK.³ÿÐÏá¿6;©9œnëžÄ›ñùa 4 ò7^"ibÏØäç•EOr^ñ§Šˆ?Æü"öŒ—ëÚÓ¬¬šwÊûfÂB +uU|?æŸ?êŒæm—£y^v÷GV¯mÛ³¹Æ=†Ð6ñ«~èMîpœÙºÛ(ò“£…ðš@“Òf΋U=™¦$´Í–‹Àî “-#„H†Ph¶"óä9@‹píéÇ€…_y,¤™êÁÛž®‰¦|_P#»DŽý%rRB<±B§Ž`zNê—~~ M·«*ЕÑüH´èBŽD^hÍX y%ÎKxî µS?{¨ ï;YÛc?!¹Ý~—_y uùµ‰b‰•ë01²ê¾ƒÉb´b‹iüÜÓQ™qŸ„ÔÝtc¹ Z1.ÉãµýàÔ-ý¼ ÿýb¦@·aÛ‹¦!ã‰À`Ñ–”½šîD‰åqÓüûNŽ›@3¯|’ p__=)zӝЅ"ý}ißE¿r]ýÂu¹è7®Ë›æ‡ÕÄV\4·…ç®ìUå½r>.úóqÑIJ·¶¿CHüømUÿ¾z-ÒýûÄMsó$ñA,šOЦÐ/²î.ÚhNhnH+m³ƒrfH/š{”¶ÙõwM²›´•æEÆßæGóÜæùò̲#¾í{þò}{ö¾ÿüQ N N=^(W¯=^Ý­qÑ…¶/mSèù½ŸuѬ8fæ¨h‚£B鹿Ù6ëþð¨´]iØ…òÆhÔXfKe1Õ™£¢­0Æäµî½Ù‹i»é외ty/’cÍ>D=X¿Âsóôu.ÑT47:˜å ÍSç o¬²tó5 š}Æ=š-@I´Ðì3N4 ‹ÌT™BÛ¯Rçµ~ô…®„ºt® ¦ï;¹lûä^Û{ÎygËóbm»óiæ)]4õN'áºmì¿’ªÐì•$š~%¨ѯ¤]¨5fÜdÆ7=Ø^2B '»‚žE¡™I8-š<÷ta¶L–Ptºð•#õÉÊC §Ÿô þÆÏS Ir¬Ï¦Ð$åPZ³èIÔ=Ÿª@³$2Þö=· IÿlmþˆÊ*}¿*’<Ç'y„5µ0Ú/f)ä,„žI2ñù¡)4ëy5fÒeãJ2 ÉLu7¡m'‰šÜy¢&¤YèÜ%ô<.Òóˆ!ЕÜÂ<•ýI“DªŸ„ç®ì§Úþ‹Æêðu^­²íïì2»eÙ-óÈn™GvË‚Ϫ=4?éxaõÌ#«gY=óÈê™GVÏ<²znšÝ|*ŒÚhÔffËdî¤iÂl™ìô>M˜-“Úô¦ÐdÔf¾ïr±´»Oµ4«Um<=å¢Ù  ¹ô“QG ¹Ÿ4QD?r?èIj›>r4±SŸ ¹ÿ¤¥}4ä~Ѓ´ýhÈýØ ‹&(³ { ™k†ÜOšFQððs Yò‹ªÐÑJÏIjÌGCîa&1&ÌÔG£Žr?iò}?r?hVùøÑûI³ë%ЃåK˜Âs;—<r?è'£î¤3KsØ~uøü«],Ä[Ä*xEj4‹:sO7Ó’ëö¾¿¬OîÊúþv3©1Ù÷7/IâŒ?tþxûKŽè[ú¹Ðò½˜)Ð1)=÷t½èÕP28óè¹çÑsÏ£çžÿÏýù#¾ëdpƽmNºm–=vp¿Ç$â¬q‡­r}§ 4‹Ë›Íä}ÿÜï¬! ©5¤´Í¯ýûž®M="´]™ ™ºo‰-šZbÉõØ¢i’œ$Ø¢ 9ʘ³b¯™8kHóÙ¾·!oº%ˆco eŸñ <}¡èš»VÇÞàJôÔcop%'€±Âi~è¤ç{£'‰w­‡$OÄSÝŸôü>OÄ¢'«Í5¹ëeì͵ìk]¹åhѲ§y‰â$ÌfÑì>’kx éΠФ¬g™¶§ÍÉL5ç¥Tî¬ÕµÿÆlô³Ÿ\·´ÛÅ´¨¹±˜,3hšÑ‡Ç±/Ú™^Ë 4)Äê.¬-î¤ ©ûÜ¡^Õ°Öo¬Ô\WÆœ§Ým˜wMmîW‡è˜¶š+?®LmÓ.nLmÓ\ IÙ‚DmôdÏ=•¹6Ùê0•ol’z“e†0Sg°žWaÌg-Œ6…f¥*̵ÙÙ©rìÇÜ.r&ýü Ðä+±«v…&¥¸mî÷sÖs¿\¡É‰Öç%Ðd]3ŸûïÛžJhþú»Ðïþ};{nwÁvpge¡=.näLZ}ÿÜþBèOqý\ûhÉÉîÖó²¦F´!ÐÑ]h»Ó” chécšÐöLŒºýu( ¹égÁÖˆ¯;#>2#þÎsfÉlw8÷ôç’1ØÞL$×7…ß6ZÖÄÜÒ¯ ­ M«$T…¦é‡BÓ«—@¿¨’4Ï\o ý}¥ ùm»Ò6sÖÔÌY3vn¦:”÷ý"tèÉÆ|*oŒ? cþ&±,Ð/JÖM©­ï1I}ÓÉgìE ­ÒÙš ÉêhÍ&E6jeës} Õþúwå‚Õ;ú*k"¡mOó¡-[e’äô¦_åÀ¿/ÛŽ£¶·fK’žõ¦“JÄC¡™Ñ“­@ÓõuÿÜϋѯ<œiZá^xîÆâÏZ1fÏÝ”çî,€c*=ŸlužÉê¼h]1CóÉ„kå¢yß].c1 ü´¹èÂâ#÷-ºuæBÛƒzUlÿÜVIN «Üï 4­åBï¬íF΋n´ ÒÝÝ ÏínìŒ.Œ¹ñ’{ÐȤ͞¶s¯ÆüU¡+¥…7ÖØ}y/Âs÷B¢ ºï¿ü _¶ÇКCËö„ÙJb"lÍê–þü ݵ®Ð,;ƒ'Ͻµx›Ç–þÝÙáÑj³-m§¨&Ũ[:.ê°¢ }þE—ÓÅ/€&—ŸóFèÁÚž.Ð$ÉéǤz^.V»˜_@ ==š\¬~>bá•Áhš*ô_4{î¡<7 ŠûüÐö´‘‹¶Ï¦ÐÁèªÐÑÂ3+„6¥ç$yTðroÿ¢É<7Þ·ñ[)»N¿?ôçh°Ðh&’´˜±¥íåÆ#Èfъɲ4«µº§gkŒî =ؤØÚçxåhR”58Ɔ–®ífGmÛÑ„´£ iGÒŽ&¤­IQÙ”j Ý=¶t:ïüèµú}>%7ï–Ĉܴ93Xð¸ MçZ÷te÷×Ùkõí:S[t'QÑ}î{þùÛºœZ½ï;«Ó(5žYkÑÔ$ï¦Ðƒ-\q±hcÑàfü\4‰(úü`{:ÈÎ`<':Е °ŸÖµŸ4©]èù YQíAôD;£›@“x$㊠ 'ó Í"¼od\q4[™&÷( M|@—@þ(Ýšx®($>¥ÇÜÓ,ÚáóCShâµëíèÆt ]¡YtKï®Ð¬í¡´Í2ð&Ž ¤©£¢oéÏÉÚ¿>°#Í®WSèÎè¡ÐÌQQ.&õº£˜B³ÜÁE؉>Ô¿vTÍ¢™Š°|þ(­ô|PWƒð¾gÁPhv`WÞ·9ss«b°*4a<¾Ô¶7gŸ½é—Ç®›f–6•¶YFÊ6•¶çd÷fÉÊ´î;×ö"ý½¶÷_´1ÚšišÆ}óD)j‘ìþëÞŒEåV¥íÚØ=ÊÜ¿±Ïz\מ,þànL ‰žÚ‡)m³›¯aU ­‰C¨­âûdQx·EO§,¥mi«Ì®\´1§Lõ==HîÿÏsOO?>‹Ð6ÓrÛ4aÔ¦±Js?jîäzÆ#ùÆn:©3a ͪŠ]S ™Ž<„1w¦dòH΂@³[ua¦z5ëÍÔØáÊs³³`¸òÜì.õœÕIl¦E³ºJÛ´¦I(sV°«Ê¨ÑÚ{Ui»±3°òÆ:{cÝ…¶YnŽôô¾èÊÎÀUXzctë =¿?½7áô®ô¼³@ ]=š=÷Ø·ýY½Ø…ù˜=ÙYpV…nŒî Íz.ìߟ™´=…(& ˜¥(49‡f~ÅE'—*ûh!OŒº}´ODuÓüz uð墯ß;Ùíì2)qŒ¬ò¼#¾7(Wš›Q¿wtÁÑ-´ýäÏÞºªmÌMnû1ôHS/ôýÂÙ<¶Îæ+„¶gsUèÎæE7æ&oM ¹»¸oé(…-Û¥)ôøÞñ9ŽŸcïø ¥í`1Vá ß»MÇ‘Ût¬íÊ™ëR¡É"u/Ì£Ýà.rË*îô«íé$ì^¢£§@Wæ©eO¿s.š‰ú¯ä2 hæ>LæÐ/܇wÌl3zÝ»oÛX©Xãéù€ž üJŒºE£Î2‹kÑ,Ñ\$;ѪjÅŽ>‘¢¬2–Á/JÛ³{4®ìèS•¶+k[znlWú¾çŸ?b{Irìš]¢MèI×sNvƒPh:T¦@»À3¥çÆ.Ñ\¡™›¼7á±/4¦¹B£«@“ôQ1•çžÄÂŽ$1ÒdÔ&·™\Aæ{¨ßAÄLøÖ’$k‹f¹!ÚÚ.KøuñÀ›6¦¿°Dµh&>³ÊwàEOYnI6 Ù‰*Ú¾íÏ1‡/wÂÍÎ%‰ølÑ#ØÚÂ÷1_ÁÓÁÖ5î.ör4ÏÿDUw–8 ó '@³Kòž\’ßôg:W6ÏÛ–~ŒüçWhhÆm¦›þü±™wU/z°³ÿHf Ðüc؇»—®ý¡?“‚åTÏ^«­×ê쵆@3C"»ióYÙâ×ötµñý”Z4;~Ôd YÁòÎŽ^š.~û1÷`wI–(¤Ù=]ß÷üóÅ°È îF:œÑû1ÿ¬¯Ì½°ÿÆþú£Æh¾øÑú'Šþ1`ý×&šÜ]X:C¡Ù7Æ/‹žìK J ùW²oû1àmû¾]xß]¡Y £ó8š-±›--I“æ±[×Òy¾â“Ç«GW·ƒ'Kç üb√جwÔ$RŸ<©!Òdñ›ü4 49Mûäþ›Ž‹Ù¬OW4Ú}|¯*sÓ¿;s¡ö$sÉ¢ÙÌJbdÝ‘J…˜äŸš@WFW‰&Z%±€MrŸL¡É®t¥íÎÚîJÛ$ÂÚʨ ÝÝšNœbH;£•¹F*?|6¥²§™Ö"±YW$"ëy»„÷Ý.JOfnëV„ž³¸UKâV‘f*%Û·í‹™}?×|N¶l ³åUr I|öç‡)ÐmÂ\‹‹¥z¸Fh’¿ÿóƒ)´3ZóÉz>¥ž³76…7ÆÓŠ”"Ð…Ò]¡É5E_h°¸ÕHâV‘nŒî M{.Ìó`W‰.ic´2jÌ]¦Œs%¶&ÌTV[íóÃPhrÂéÊcy¬¢+o¬³7Ö•7ÖÙëÊëìueUì,¼b˜°2 –fXShvÁÂÃ+|ª—Y÷ýÈ>ïGö9ÐÌÊM«‹®ÌÊå±ÂH3[±*ÏM’-}~p…Žï-ìE³‡$nuÑ,UÓ燲§£³‘›B³ ]xnj#× ͼeSèybaKtgôØÓ¯,ì~da÷ÛFîÔ® ݾ·ÏfN™>šœb??„BWF7…îߟ,úþdÑ\ ùÉ¢)4m{4ycŸ¦@3e÷5ŠBÓ„…ʨ 6jŠüxpúÅ’ü ËEé®Ðß',š&,,E¡Ù©ÆL y o(4Ëû`M¡Yè– …&¶Oá¹YíŸÏ¡Ð•ÑM¡;£‡B³*6×Þ^ ¦üŒDù‰´3:º2º)tgôPh6jE5–%$Š2j,Ð/;½÷ýéÝ„ž7–€¶5…&þÔÏU¡Y _fKg޽4…ߟûö;”um²y>“y¾—me'ÉqtOtÓäæP³ü¤¬ÛÕ›Bû<óˆ.Ñ;‡FršË'~d YæÄ$þà¦+»éÉNTãèD5Ö™ˆÝ:$A¥‹&1Ÿº@WÖ¶òÆó´º5¯,KHµ"Ð4?~r„ªìäL”]±ßô`ƒÑö£æ,…éãó'Ý)ÝúÅIr$ÇÑIrìO’c(ôdçPßÒáÌvp fvR-hîîn ÍzE Y4š‡2jLäçQšœ[ÝÏÔGÊS´1Ú:¾·×€ŒVž›ùZWhæwhC5æwhÂêðù#vO$¬ÑXî…6šÛ Mo™„/´³µ%ÉP´³z¨ÞšÙç!ÌZMµ×¢Ð솫ºB³®ªŒ[º²:° %Ñ…ý;:ûƺòõÁÚvÁè¬IŸ—@³x‡>•yÎò›$9º=˜Ïc\¡ÐìNòj Ý-Œù`^‹Q”¶YQŽ‘ø÷róì;N±s{ÍbÈnšÆUžÃwѯNTóèD5NTóèD5NTóèD5NTóèD5÷'ªÄºŸGÖý<²ÏçÖ>Ïâ[æ²ç÷öÚÜÚkY”È\» [Ï…/ôq³£ÜOz²žÏPhºì¿ïlѽÒ7xáåØë'#¶ô_y›È’”/AšåŒâJþE;  >´‹NîÂŽGÐ8Õ-ý»+ÞW/®Îè}Ï?û)YÛíâ7@óËÛˆ£Á¹E9sþ^|ëšòÚÅõ]XÖ­ÂC;€f_LñPhøÅ`@ó°±®Ð߇MÃÆš2j…nµ*ÐL²—ä‰z4SouV#qKTÞ7m,‚%¹fŸ±+m;½ž)Í÷ÖRüö)nS¹èÐÚ–6¦Ó¶D§teC{ ´³å‹{΀f÷G×Pž›EA:¿›^´“[Öϼçýè}÷£÷ÝÞw?zßýè}÷£÷ÝÞw?zßãè}Ýû~Èü“6–¤"}ß‹f²Ø‹Ÿ0fñºÙûGï{lßw’æqÑ…ZQF­¨W3eÔXºÃt¦ŽÿŽ™ú—VšÑ<âh–û»Òs’’ìsÂÞ˜³*oÁo¾b}¡óè G_è<úBçÑ:¾Ðyô…Σ/t}¡óè G_è<úBçÑ:¾Ðyò…VÁ½ÃÓ¸VÁ½ÃsUÁÿÁ¿ïº÷$Œº<FÖ–¾oû÷ƒ_ð:Éù4i{¸@¯Œ M*óŒPÚÖóÄt0º ôlÌ>ç9*xÈ÷}ñ;»E×`)àùí2Ð쥥m–{¡ò{ÒE³4®ŸºB“•©s§ Ðì¨7aÔ:s£M…žå2â7ÛH³:N]i›¥üO¢ÃfighrŸà­ïß·³¨ï×~¦z¿Xúy®hº°¤¿v 4«¥Ômÿ•ø$y|*ÏÍ ]S Yϧ…B³ûBk Í"Cxc“eÝ*¾cÁœÍQ¢ 4m»î,¾Ë÷³%KîÔ¢(4‰sÂWòù#vãW„ž¦äÊì~xðûa¤™BØCcTÖvUÚ®,榆BóOiã”Ô¨w¹ÆÌ²¤œêM[gaIøÐì°Úy9U¤™‰ÀA@³à˜$w÷MÇCÞ?¢ 4 êM‚cžìCÚ… ‚ø«Gs­îŽ>·º?èÎÜä=Æ–ÎæZ4 (¶Þ·£öט³à7î :y1íèÅÜ7NE¾§Öà?ç¦ÐýÅ´n}&==ýjùZuO'³Y“±-!‹Žþý"Ðö‹@rºZßxjÚ&dß;IÆž¦NKÒ‚Õ•Ú#XºèdpúšRãûu¦¯#+Ä;÷mgÇ h&Ë 7¬\õÇúr~c&Ííöý]¶ùü¹x‚?þåÄ GSê¦;ËÓyÜ6Ð,c6)Ín—»)m³Ûåžœß{3VI:Vº_ Í2Y$•¡o:X…äHŠ/-º2UG­MÎiµ =g>Rš)+]\4+ÕÚeœ\[~Òn“¹¶¿mL¢ë]’®¿úCøòÍp–¨xnúóGl»j ͪ:$’¦¾Ä´"¯ƒ©Õ’Sý¢™îª%–ߊ_fY,EI»NfK»NfË¢éq?)xÓ±Ýè¡Ð¬íRº³SFw…f7@½*4{î®ösíc챜u¼xK‰z«†X!Þ>úÑ¥&èÍ‚B_æo™sO³g>Ç~Ô|NZ©)4 çHÂó€&_É%ŒÚçȺvµ"Ðl÷¿’‹¬E“‹¬È®ƒnš…©E)S YR±bÂs;³¼»BWF7…f–ÇPÚÌvU¡Ù<ö+Só¯…I4ÛCMxßÁükáE¡YRw…®ŒÞwcA-±r¡ -ó·(_hc3µ›0[˜<1ºò¾Y ÏÂûî,í_wShZbTóÎF- ,B$–Ç*IQŠÿ¤Ùç–Ùç@SMßÓdŒd7¸éA¾ðTª‹ž¬*Ðä)&frÔ’\5ßÅ »j.É ×¢YêÜìd1—¯‡]÷¦ÐÌniû7ön…ò‡ôÅôëäSê+߉„{(aþ@÷G€›îÑÙgì{Ú‚]7â‘fJ•ëÚÓƒû?z9z1e;8£ ôtvºâþ®›6&&ÎN8‹6êSæacÔ—ÌŸíeOG¥§«¹§+é+¼ïçCÔ??ìÛ~e74¡–+t|m}-:±¾„çN¢»»}Jv¯q,>ûª{º³Ê égGkÜ­í*õ{7Ð/Š'Ít„e ´]ìR‹;äýF‚½èW‹€m÷•ÆUJ‹~µ„,E«Ž8hÍêäéïCn: 9¾±ÏÁõúþDÛö'Záûü‘në<ÌB®¢ÐöýiºmOÓO·OtctWèñýY¼ÅÛÑY¼ÅÛÑYhæÁpeÔ¨@D™ç<ý]…¦m Ïýê4ÝŽNÓíè4ÝŽNÓmšVæ 9&¬ƒÚPF-I›Ü÷*’–uwM§I.fèYÉ¡mfÆìM·Êè.И£iñžhR\m¥ç£0:š\Ï<ÇhúÆ’Òl7].²U~vJh²]}~è = Í#&bî’$×Bšõœ+X€n¬í¶oÛ˜Yöù¡+49¼ø¼ö´³b•+P]y¬ªÐö`WbIÕ›v¦äðD‹41ý\M”·î¡Ðõ\˜-Ÿ?b=çʤÉu\¾’Ï‘£OíE Y:•Ú§@³8ut£E2®®Ðä"± «âç*£…7ÖŒ•h¥ç,­HæŒZt£åá…yN/–®²ÿ¾ãbqâÊnðù#v`´ªÐÑC¡Ù!Ý/fÆìå¦ÐìÒÚ•1gªþ+¹†\4Uí{yOfŽŽÛ¿ÉDÍÙÂ-ïi/ªÖÞôCn³?tßÓå¢y¨êM[0ÿf$þÍ%±)l£M>D Yëdùš™iÒß'-úEÒ‚E‹ ðL¡YEÇ+š‡¯¦Ðì<| …¦EÖ/NÏ{@K® ç}f§ÊlùºéÎN•Ýšž‡C¡ë‹Óô¢Ù‰6)Åô|q¿éÉFm*£Æb–çTFm²Q›Ê¨M2[>‡ô¹¥?§é`§ih¶]Õd¸u•)Bkò/šè‡??˜B³¶¹b hRdÌ’zÚ‹…•¹¨ÂsÆÚn¦Ð¬PEX 4Û¦KÑõš\¿º}Ï?T=z²¶gQhctWèÁüBÛÎΤIv?¤™„ž³|mžäkšèI=ÓbÍ|/Âêà,_Ûç¿+ÏͲäx(ÏM²Å¸×Phö¾«ò¾Y5*Ö5w–×È•/ÔÙ7æÊ7æì«Âšúù#gt(4ó–5aÌ+ 3¨S K>ܔա1ßj³*Ь8jsa¶4V$´…0[+ÚBx߆üÛ~uøü ¯VÅG×Òö¨;Žº@³Ë[áû~<ÑþÚä{{©hr¢úC¿;Q-ú͉ è'* _œ¨€~q¢š¨fh~è¼±Ù驯¶taŽÊÅÏ%HwF.¬í¢´ÝØÍ*wéŒkë¬Âs?»èQë'íöõ‰ h~¢š{z“®™ÐóÁîF‡2æoÎD@Ó< õM?^vç _œKîŒÞ%¯N@=Y(m³4ýhró’Y÷@Së¾ cÎ2xxRž iv]•ž³{YïÂ\{cŸ/º²“E­Âû®Z÷®ÐÁhaÌ+=YL¥m&l­Só7Ö=Ьx_bÝ#M­{…~aÝM­û*Œ9³î³ªÈ@ÓdÛÛ-Ù}th–é}ïûñÖ‡Þô<Ðñõ• Ðüæeì“’´Ä¾‹ºwšxiìéÁœìUª~Ò6ŒeláÆ›~”Íýú;°“uv4j¶µ«íéÎF­g£ö‡~˜´ÿŒùe 팅®Œn Í"®¡ÐäØõpóø“þœØá…'œº³ãÝBÚí Í®¢¸^iª¾Ü·ýù#–oDhÛì¢I‡ºBÓ¤¬S  Ë%Å]—‹⺴Æã.ÝHÜ…53…fÕz0ó$ Ý­¤1zÿÆ‚¹"s/Í܇<öit–l´@³ ³r t¡¡zû7VX2ù2š%“fêçX2ys…&Æyh–œ´ _è«êÀH3µNk ;Â^òÎnÙç€h< oܵ…“²dC ™½–Zt‘€õ.´ …fI¶‡Òö‹ÂbH³Ðæ¿èQ™ÌøÍ´Ù™nÑ<0Áº~ïÂó{'bƒD 4q|z" š\Éxæl^4sŒd–梣y¢k¤Ùþ-Ìsg9'üšÊs3—Î5C¡YϧÐóÂ\Ié Yp@©Â˜³üŸ%Õš¥˜,ºöù#Vcw(ÏMÝCxß6XŽ2SÍ5VEg Ÿ=IøŒô÷Á H 4+¸äÊÚâ9›…݀˗¼+£ÆŠ=y¯ MÝäJÏÙ\så+qVžË•uÍ'{î)ôœù¸>?„B“]p¸ 4‘³ø˜ =Y¹‡²§?Ä 6ûwx¡EI‹@KÇeS _”4Eš%m,¹øþlçzÞXŦ´”ö ý}qN  ßf* Ày’‘ü Ë)“©û„yÙiîN˜×˜:IpÓŸ#;Í%ß7Ðíû“$дÀõ%ÐÌ¿–”ÇFš–ÇŽ=MO±‘Xš+Iaì <úEqm¤Y‰êÄ^šÞ‡òÜ,ótÊs¿9ý}ao¤¿/ì4µ©ŒÍÃWöÏìûåûÎöïªÐíûÝ?ö»™ͤϙí‚í Œ/g!4‹fâewSh–ÂÔC¡ë÷v Ь¸—…f£ʨq›Iµðï-. Ù¨…0j, #šÒóÆzÞ”ž¿)ÅŽô÷¥Ø‘~aí-š—bWž{°çÊs³ò¹mÏÝYÉâ^C¡ÙEVÅ7šèE'V®ðÆÞrûÌÇ™\w6rK’I-zÔvÝ[؉•[÷VnrÛ²è`%{¢*tûÞF®G6ò¢YÆç¤˜ú¢_YØõÈF®G6r=²‘ë‘¥Yw–fzGU×»'J¼±@³x‡ ý}, Ynòìv è!î‹îöýíÐìV±W…~^_×Ý»«¹$z0z ta7{¥(4ëyⵚÝUå¹+{îª<7»7Èî$fwsÍšÞhV…fcÞ”Qc·kÙmê¢Y¡È,nh6j]5v_rueÔØ}É%}¡ü¹)4»{Ÿ—@“üÿŸ”Qc·-×Tž›ÉúK=/ä\â¥*4»“,Â.è¬Æ†—&¼±ÂÒ–®ô¼³ž¥çon°fed•™ÊªƒxR=iö¾•y^Ø<7ÁÒÌ$j¦ÐÎèPèÊè¦ÐLঌ9½÷7eÌŽ¹²¶[[lV…nŒî =-Ìg’¥L·è7ò8 _Èã€f1MxßÞXœG3…fq-šÅy(+ò›D³HÓH eÔØzî]é9O8¢Ì5©á ÍfêPfê1%Ðl¶Le¶°„#]Y[Øéݕӻ³Ó»wemaõM=‰/šé †U…ŒVzÎ’ WzÎÒPe/l/Âû~¼À£—vô‹»¹zt7Wîæªp7·óäÆC°zÞyþë‘ç¿ùÏ…ªf‰¼í<à©û®Ål&ËÒÜ4KÿùA¡ßøÏÛÖžù°Û‘{Õ碑]xîNvàTë°h®uh Ý­ôœÕcëSi›UTëÊ\›Lc?[?(ô` °ä ´3:š¬ÈÙ™è¦Ù™(ŽY4Ž …¦±±M¡Y´D Í¢%„U1Xô[$É'‘f»sÝIFv' 4³[B™-•Í–ª¼ov÷Uèy°\èQ»B³:tUxî`÷þÑŠB³ÊêÊÚU7Wf êm£*4‹…ÖóG£îï„}ìóGÌVö±Ï±xäKø¾ßäŸGúûüó@¿±r…Rk‰•Û¬ÜUÈ)˜.6±®Œn{:"¾·™ú‘ÍE¤X‚¸Ä¯4»ÁNâتÐôæ^yn®l•hvï?¶óüù²ø» þI¿¹úÅ=0Ð/î~q ô‹{àE¿¹úÅ=0Ð/î~q¼hvÓ“é¦z`h潄uíñêñ»n| ƒÑU¡_¨j¦z`a¦RMn™ÂL5æ»Ï½ýè^°Ý .š§ó…f=Wæ¿]»„Qc'‹,½;Ðlmqemy¥É]4»ƒvå};{ß®¼o§úoemqv_’irû‘÷hz‚.ýF_ô }É¢ßèK€¦ú’¦Ð/"@¿PˆUó’¬ucù°‰œyŠÆÖ Å#åO}QЬãlå?icIuíJîÞMöK ­"ÍÔ)¥íi®àNÎ7LMœéK€fµD§ÐóJ¢¡¬6¡mVPÇ’‚:H7Fw&'hKŠW/šUµ¤(ÒìV± s­³Xª¬ðÄ]Ô&Q ì¿’…ÀΡÉz4fVÚæñÈC¡Yl¬0×>Ä,kÿ…:óB»°"ÿõG,¦¨(m³ I C ‰µçYFk YD’ ol°âlƒë¿çu²ý¡ŸWïvƒ›þüÛ‰ö=ÿë*£›BÿùU…¶ ëyq‰®Œn Ý=𬩅ç šä úüàÍ2CšòÜÆžÛ”ç6ÿ>óÌ¢ßdžAšÞ2)mÕ+mÖö…f7\£)4‹Â{‰4?0Î} …¤’Ùú÷ƒ}ñg ‰mÛýQ0º te‹À%Ð…¦Xçמ‹¦"ñ$ hvõÜ4Zt°çnÜL;zßûÌÝ·ôïÎmŸç¾¶´5’ðóÃhfH7~üš&Åç.¤YÏ»Ò6K7î&Gº2Z5ÌÙ†Ðó§"3¿6éüæÅB¡ù‹‰£é”jÍ&E68±A=z¼ößA¿œv48Mœ}ÌMR„sÞ17¬g/Éàì½òI Ï?ôï‡ÊH¶.ýyÓ…m<iòZ#±!ílãs¥ç,§kR k.ß¶±ˆ[f^yÛZVÞ`ΣI1ïch°½51S—‹‹÷5ùÞ€fÎ9‹=¬—@7Vp¦™B_pfÑt‡šÉ¤¸éI.4mºðܓ՜,e?æŸ?bÒóÒš¸™‚C-:X0Tpg,Ò´í¹¥ƒÉC#IŽ4KbF¥©õÚ»™:u3Ýôï‡ÐÝ6^¯zѳ±zÕÍš¬-å¢A"‹.¬¸ÑçW·´UfCVZõigõ‹ãÚÓ#Xj(zÊCš§†êÝXx*=Õÿ‹þ:¹Ó¿hZ:%š?[ډǭ)4 v´^šb Ï…p…¦ Ú/RTL Y¢~˜ó/š%  †ÒÁ¤çQšÊý‡Ò6 ©±ÿJ¼VVÇ·†B³:¾C¡Y¥íæûuíóGäÚÿ*û÷W¡tWhjÁ«á"ÍÊ®]^ÚùÐ Ñd›^5eY}Ó{ÚŒ”f!ÐìNÅ] »[aÍT$#”¶™ŠdDèïµÿ¢©c 4ߦ‹BÓ<ˆÊ˜wÿ~›.Â6­Œyg³etfù>ÇPÆœE±Œ)Œù$1OŸªB7Fw…ìÀ(ÌÔi¬ç¦ôÜÚ·ÇM¤)9lli¿ŒÅ¡m;‹·r~Ãþ/šy\é9SÖ_±óeÄòfÕ®Ð,o–°2}Œ/b weÔ:¹Ýÿü Í2yWh–ÓÇ…çî¬^å¹™9Ú…èóGÑÂ\cŠDWÖTgkª+kªO–ßušð…Nv€˜ÊêÀa>Ýš)ófÛ¡q±L —ðÜŸ?bÕm?[¢°:%$šx¤yÆN¤Y%ž±ó_t0ZóÒx…{êÄ ·#3üÝ+½`ñº¥#y~åA:@»Û÷Fü¢YpÒHÞU@Òá Í é¨ ÍZ¿rñß¿h&ìû1‹Iè.Án‰‹Ø-©AiGå¢ Îl‡Ïñ×*„.&åºÌ ¬¶§ß™F¾7’¡õ#ãÆwÊtËð£-ö ?ò½ø‘ïÅ·¾—l ñÝ’^Ïøº`á“óÑ|X™ó7s%ÆÎ•øùŒù”ªG=¯G,u{ÁR“µý¦k{á2¯G.ózä2¯G.ózä2¯G.ózdm×#—yÝ»Ì}ßö£wšz¤ÒQ¿wþÖ#ço=rþÖ#ço=rþÖ#ço=rþÞi² 9Ù}~0~ãJ¬G®ÄzdùÕ#WbÍ\‰ï%Ééªí%íh/šIùl 4KAy(Û‘‡rE׺I4óÔÍK gùÞïÓ¶~Ÿ1›B³çžÂ{µ‡¶£=´í÷ÐKé9IõùÁš=wÆ|òëPèÊh©íV.¤dg£æJÏ™¥9}ÿ¾ß]yM¯¼/~cy´#Ë£ –GSh¶+£ÖÙ¨õ(Mn^R?_;òóµ#»eÑ,ÝEïÊûfIüz¯ ÍzÞ•ž³²}(cÎeva|g¯µ#{­ÙkíÈ^šú»BFOf¶biJÏYZ¶Ò‹@3åHæß\Å"Xr³Ìñ)åÈðùb÷tWrOwÓ“éfÛöüÙˆÿ燦Ðä$&þ¦GbÜŒ£¡½õŒ“¥˜µ(´1Úš™e‰+kÑæñž[Ú/¶ð^Úe¥JÜh‹ž´¾ïØÓ5XÐ~(4 £V™O¹¶¢Ð¬má}þˆ %’k©E3‘Fí¦ÐÄ$¬CyîAéhVé®ÎªÐí{çÄÈ–¯?4 y´Í£h-@óhšG ЪðÆK[3”u&ûI² "MöïëÚÏn;4a/ V/.ZÚnLÕ’ï{Ÿ‘f\¿vô_i=YqZ=,c$k ÐT^öô¼˜Ýr¹B3Ûç`,BV®hº°Øä¢šù<"”ž3ŸGD(4{îžûMúy IöǼô´3º)tgôPèïSßÍ2ŒM¯ MÞØ eÌY¦­,òñÎÛt± W …&a WÝ÷<¼² ˆ¦Ðd´PèÊè¦ÐÑS ÉÝ\ja×e#³‘]¡+£÷«ÃÇÈ%tWzÞÙ¨õ6ší>‘Xvhk£eÅX“ÅoÑlñIÄçM!”$ã,ûÔO1ÙÿAþȨӵméǺÆ[\V¶´_¬bIIŒø¾ÞXgôPhf™Ò¶Q÷µ§[¶“*oe¥Ô` oѽèÄ3;ަÔÑüC®¥û4]·´ vÂ\Ž4KÓœÜ0Íò»Î"Гµ=•¶'ͱzíéɪHÌ^šÅU%§ŒESýäµ5g•‰??L6vª´ýlùœÍìûs!ÐÁè&ÐÅÙòÕúÅòuÓÁÎ⡼±`o,”7$“áçWhv&-U¡Ùù¨(=gs-”¹ì„“IJÆÚ2XY²ÞË{éIæJ¤Y=„"<÷dó|Æþ+‰+Xi°0…æ“bŸ¾eðªe.×qg›ÝhìÉãÍå:&Ç1êžž…¹óÊPèùývµhcnL3…þ>!)Òß'$EšZ¢ÞXô`m¥mvx]ûçN6ÚĹh¶ð^¥ 4[:Ë%´¸P] Y¨^éM¡;s©í¿v‘õhFÕšn8¡Ðl“¯M¡Ù¨UeÔXz‡hʨ±Àh¨͠ÛU(tý~³š¹1•¹Æ´›>•¹Æd>•¹6Ù\›Ê\cáS>•¹6Ù\›Ê\cÁW>•¹ÆRE5oó„E–®hzYO:Û§¥úÑòƒþÝ/rÄ/wÞ´3Ù»'•æ=ø]†•£ÇÛËÞFòü ?T™ÿƒÛ˶ª‡‹À撚ŒžM¶éÏE¡YÕT^%fÑÁ*ÄÜ·ý1n˜#’Ÿp_û €.×׆Ò¬çEéya=/JÏ©YÆÝ˜‹.ÌY¢+ô`´ÐóÂô6¥…f~Ÿê Íü><>iMК@3ÍKá÷(H3Cº+ï›åìSxîÎ"ûì Í*Ma¶ æïºöù#¶] ëÚç‚ÑU¡£»B³HDSFÅ` WFņWFݪWFݪ'¸o:Y×"É…4‹cä¤Ùm4…f˜1š\,%·@' ï^4ŸV¾3¬ÚOçÉ=ÉMg›®ÐÁh©íÎè¡Ð“YÛÜ¿yÓŸ?jŒî ==šlÓåÚÏ–¿þÈØ)#šeå)ÉgìËC¡™¼äz>˜\M¡;£‡B³ž¥çìê7Éʃ´3:š=wQž›]·Sh`:\5§±eü}ï%¹™ÅG6Sìl¦’\ÞÞôçœÑ¡Ð/ì–8²[bo·T¥çÄ^’”9¶ä¡¬ˆ]áÙ#‘f»`r€ÑKsP%ší%‰åG» ЬháØÏ–Ç ‡n24+;8]¡ÙA™ßË.zzP6f©%†‡BóÖ£å«nŒÓúi£ëÚOšÚÆ–.,º¾$Ñõ@“#@I2~Y=ZB€fÞѨ ݾ?úÔíÑ'3Ãë‘^ zdÌÖ#c¶³õȰª™§îÏ ‘ýõ׎~¾7Û^KÝt°b×.X4[Û-[Û&ÑB£µ==+òœ®ÍŠGWÚf¢æÁ£¤€ôBmßöãÍ×ß?cþù#%•\S´£K­¶÷Ü4…fiEÊÜÏTwf»yÚf‚¬Ï®Ð¤çžx̓8^šÍ5ʨ±„…>šB³1ʘ3«Ó§)4ëùz>¨ÞIXS³K-á%K!ÐÄ^÷ý¨…;“zWhš Zi›],ybXÝt#«Cô¶Ÿç‘d“0Aˆ–lÓK Æ´êתý¢š$Òþý–±hv»’{q Û÷ÐãûkŠ~tMÑœýè’£ —]¡Ù¨%›Ý¢Ù9¡$ŸÐìtÕ\¡ÙéªU…ß‹fy…“êë@³,Xe(=gBÓ2”÷ÍL#/ÂLufPº 3ÕÙVéf Ͷi …®Œn ÍÌSF9½Ý•QcNïl›šš+£Æržº+£ælÔ\5–3-)4‹ÈË  Ù¨){‰³½Ä•½ÄÙ^âÊ^âl/ÉŒøE3ýªWè`tUèÆè®ÐãûDʨ1·µ+6“3›É›É™ÍäŠÍ4.æ¶¾B¡_\¿ýâúèׯ‹~sý ô‹ëW Ù¨eÔÞø¦—·Ê¨½‰ÀúEæ¢ßD`vá ì ý"³g~Ý_»ÌE³µeLe®%Kˆâ"9¬Þ). ‰çëv ´õŒ'um¥<˜ô°{:¹ži ýâÐ6öÇ®¦ÐôàÔzÔïCð­ oÌXøyvüGÇqtüÂ@xn÷¾Õqd–#³l™F+ÕsFÅF-XÛÕ…ÙRin¡)¼ïA£ ökêï¸X­º«›Bÿæ5ö+S°t*‘ä’Bº2Zj»3š¿±y´Í£h N×"Ð4ñOò…Naë{úU˜Áö1á¹_¹çÞ…Ç«*Í÷±!Ð,òÔ‹@¿Ú‰ÍdTn]¡Ç÷;ѹ}c¾µx‹mÛþëüû/T‘À»@³äfIÍ ™Ý˜Y@7Íê·}lVfuÌÒyîGÛÕ¹²çN²¾#Íf*?<.šÕµò¤®ÕMË<Iö/ ùÕ»Çѧ»OéóCìéh4-ÛØÒÅ3¶Ÿ1ÐìSâQæH×ïEóLM ™&)¼è`‹~öÍAÐ/4 ý}‚¤¿æGúûh~¤¿OÐô‹ HŸ éï4 ý}‚¤¿OÐô % Òß+‘þ>AÒß'hp%Û2j/4 ý}‚¤¿OÐàB"±ä<öGþMï$í?éÇ«Ç_ìºñ'Ý=:Ø-S(=¯ä$ùxÝø“f=¯JÏ»Íü-7Í|#óy,šÝIva¶<^ÿýbW~?iòÜóžûñúïïŠB³»¹¢´m¬ç Íîæ\i;Øs+óü¡îè%ЯnoºæW¾’w~ž÷+*£ÆæùTæù¤ó|Hm³1M¡Ù<ʘÏòÂKÕ÷ž"žpèÂüÉýØ¢y+wÑNë_(=¯¬öF3ô‹[d _Ü"/º•ï=&hóÊnrÛè7wÐ@¿¸ƒ^)™ç ?Ý´±ò¹vu…f÷À×hV>ן&Ð,Ò²(mÓ;èäì4óÖXShæoq¥mv‚¶¦Œ‚XSÞ7÷ÎU…îßû< A¢}ï9šK\xîäü­Ð,U¯Oa¦•£ú%ÐlÔBØK²¨ªÐä¹£ 35‰9Ø·=Y€„T`‰Iø'ùKcx-»À·Aùæ‚~Ño.èýæ‚~Ño.èýæ‚~l éq ô«ëÞE¿¹î½i~Ý Í é¤íM?ÞOþbw’?éÂLÂD– 4»4Mr/Œ½)œÈHVÂ<æºÌÄË@³I<åÐ4s¯Ä„4K‘”˜á@³R&¼ÐLNq%Æ,Ð,'~¯ Írâ÷.д|ÌTÚf®ËÌ4Z©þØfgm 4j, ÍŒ:å{c¦¼1coÌ”7fL6”]{.ú͵çJõG“3^˜¿ºþúÅõßLaWèøþ:h: Í ß …fmOaM}u5éɘ×p…F ßXeµ £VÙ÷]•ﻲï»*ßweßwíªXÙz^•¹VÙ\«Ê\«l®Ue®Uæ”i—0[ÚÅò\U¡™šûê ͤ˜—ðÆsé´Rš 9‹2j,Óx+M¡Y Û"Ì–Ævƒ¦¬ç¹ZH4ë¹bå6^9Óš¿!Ïirìš»cvzPžGåytPžGåytPžG7Ns㤌ګHöE¿‰d_ô›HöytÛ5÷·]C¡';â_Ío»L¡És§qÑs¹è¿4MýÆA0óÈA0óÈA0óÈA0óÈAy«¿/4‹“½¦0[^EUý"ªz ÷6¦Ð/¢ª~U=·wFYTõ¢ßDUÏ#÷Ð/¢ª~U}”qÛ2nMk?¸°"¿Éz4umT…~é y«_ÄlÎ#÷ÂÜ ÂL­lm©ÊÚRÙÚR•µå•sb9'æ‘sbîSµùâˆ?Žøóèˆ?Žøó舿hc£Âzþtš¦'èš·¸BH"ÎO5èwgà›~uúÅèg` _œÍ/‹‡@¿9Åur²@úû“Ð/NH²@úû“Ð/NH²@úû“Å¢ßX÷HoÝýºGú{ëéï­{¤¿·îf{¨ÍªÐík {Ñoì5¤©Õ#Œyec^•1¯lÌ«2æ•ÕªCµÆòƒ·«)4st_C¡Y:æ¢ôœ•PmÅú{?Ð/ü!T.Hvà»öÀ›<7=â…BgÑÌ—;_îM¿ÒØMsï¹BÓÜ{JÛo²ç=_ØŠeo+Æž~tÿãíMüÁùÿI›7ƒÏãÿ‘®ŒVÚ&¥r,¦@³ª 6®=ÅÿïÇÜí¢YäªB³àÉ4ÓD[¸BÓCM¡™åQ•ž3Ùª2æ,Í|ÁôKsÑ/ͶïmŲõÆ&ù\U…n_û¦ ú!Ì5¶”DÑ/:XùŒ$sÐ/²zßt<„²—~p…& òû%´Ý³L¨ç’ê\Ð4Ô™ˆ÷¦ßvd`ØÖÀ(]¡™[¥(Ïm× ãfÑì¹MynžÔ¸ ô›d@¿H ô‹d@¿H¹è7Z ß¸íÈ}hGîC;rÚÞ}x ôÙ5Ð/Q€~!»ú…ìè7nÓ›~Æ4µ©ŒÚ Ðä¹óþ'ý˜ûð×&µ ÒLòͯd€~‘éï“"Í”I¦ŒMïÇ/ªv¦kâ‚R¤YГ+oŒŠô«B¿HïwÓgÒÿú¡ 3õÝÑöFaž'róªÐ•ÒS Yý½ìÐô÷²k¤¿×ýæÈg‘Ïú{mÒßk‹þ^[ô‹àŸE¿ÑÍÒë{Þ·³ÔnJÛ/tMH¯kú…® iüãU¡¿O€4{c®¼±`o,”7Ôµ¡´ÍB"‡D"ÍfËPfËxáVú{-ÒßkÉ€¦®,emq¶¶¸´¶ÀÂhs¿g.Shgt(te¡ýsþˆT+T%MN5¾,Mj§Ž-í…)“Jb#=¾wú‘ûhÚöè7ÎÇUÛ“ÇtE½Ö8ÚÈçÏÕ£®Rw/’RÆQ©»8*7B¹9¥ço Æ-š¦•L R,z¼(œG…Óâ¨pZ• ¡üOJ °²¥e%ÀB)Öšñê{º†U^ªh£çá¹¥_•áŠ}®Pè7i©€vz%Í®@£»@wZ+»*4 ÆÂs7–Tº¡í^(ݚ̖.ÌTïìlÖ]¢YÏ]é9›-]X™>k£{hæÿè}(4k{6f¢aBÏ å}dh…Úl‰qÓŽŒ›E¿È¸ 430âèW†Õ¢_ÔšZ-Í®@GvÚ¶&av yÓìr4¥çìr4¥çoªý¢ú1ÐÔVF]CŽ®ŒZgs­+sÖNîÊÚÙÚ•/´³/t(_è›ìî@³QʨÑëWF \h{:»òva®%ùÙ‹B³@e]›l]{Lûþ“f×ÎU˜-³’Ùò9ù–ÎŽ]U¡ÙEb3ÛŽmPáìûlßH³«ßDësT]-Žª«Ý´9¹@M›‹î´^µ)4=ê†BŸ+iaݧ@Å«%µ|f‡ôá ݾ?¤ý}žòXÎ^ä)Gšæ) Íb…íhVá,ÉrŽ4Ír Í.P­)4‹r6eÔØaÕÜšõÜ•ž³Ãª…òÆxL¼ðÆÞd_t°™Åš¹UJUhvUPºBï]Y‹¦Ž0+ ÍFÍ”Q{ãF[4«Ån Í2¬{(4«ê®|%Ájñ……f£¦|cÁ¾±P¾±`Éú"”QcJ‚eÔ˜j%ª2j•:]•QklÔš2j/* ýâ³e÷t¿v—˜‹fêêèÊsó*ÊlaJßèÊléÔMÎg‹P‹/9Iþ©¿Ð¯ëÅEÖªôž£+4;‡Ðóì,X·4=Í}L‡¾¥­{íóCléwVд*Íè7v˪õÁ”Ý!Œùg]cßXFíÕêpÓ9øÛìÍìµ~ cÞ™¢½›ÐóÎòtõfKg zo¬³pØÞ”¶Ù^Ò›2j¬¦lBÛƒYC™ç#œ}UšLA±ªÒFûžæE37ùQe˜8ª ³èΔ#ÝšÅ]d#«2 s|eÌi¼ÉPƜִ™Ê˜'ª•±¥k!þóC(ô÷•afñ&IÌ좃i^ö_è_>FêÊš[ÚXyf«IäM׋ś\BÛ•¼±Ï®ÐÄmZ=ÚYÏ“¥sÑAÓíŸ;KÔš&ãhg©c²¸t¨ÖAËΛ@Ó„˜I"±E7åÜ”çî4!¦ðÜoj^ÍڮݚÅÄ×a íŒVž{ÒäŒBÏsÂ5¾’æ4M‘ÒvÐäŒU¡™!­ÌÔVYTV+Í ÊÖºB³7Ööcq]FR*hbÄÇå.ÐäÐWt®|h÷µ2cvîYSh&®ý˜àËð“¦ÕÆ›B³€:šf€Æ<©t®ŒZc£Ö”Qkôø¡ŒZc£Ö”Qc!ç³+£öêø±h6j]5¥3»2j,JgveÔX”Nš$aÕ¼x“$á¨ZGÕ:”Q{•$á¨ÖGÕúˆm­4I¢ß$I˜ÂqóÚÒY’Shër…B³X—äô÷X‘fGÝ¢ŒZa£V”Q{QüéG| iZ‹)Ð/*ÃlÔBµ`£Ê\ 6×B™kÁæZ(s-Ø\«Ê\«lÔª2jo¢Ñ€~6w.Ï®Ð/rÌÛ!4˜i^=Y4Ú4…fÑhs?æVÉššº²æ‘+k¹²æÞ•%¬knEµ&ÐorfUÄšÝ~Øp…fn´¡Œ?Ùè ÍbøÆhVÅfQh6jShûU2 YRŒËš9¯ªÐ4GzWhv)£Æ¢.½(£ÆbÙ¼(£ÆÜh®¬ÎbÙ¼(£ÆâªÜ›B³¤>š:›/f1.ØL‰X©ûf£ʨ½¨ü„4µªÌs–XÊ›2ÏÙMº7ež3ǧ7ež³¨¬,Öh¶:4eÔèåBWF‰:½+£ÆÄÞ•QcI1²~ Ù¨ueÔ½’Qž›]¢e:@_~=Žê£…R­*4«2RÏY•1å+©ÒÂûN®ÁŠBÛ÷—hG•Ý⨲[Uv ¡²ÛPFYØU±°+³°«baWfaWÅ®ÌÂ®Š…]'­‡§Œ³°«²2ÑjzUY™ê¤Õô„¶Ûõ}%¿8ªäG•ü⨒_UòCššba7fa7ÅÂnL-ÒŠ2jL-ÒL5¦i¦Œ­hʨ­¨´ýæzÿ¨öbµCyc•½±ª¼±ÊÞXUF­²Q«Ê¨Ñ°†:š…T4á4טޣ5ShJÒB¡Y0Åfz±hf35ÅfjÌfjÜfªû*¡É½`]UBiÄBßÓɽÿhš,?ÉR4  Mî¿ýæè7¹‹žT-Âooº°ðÏE¡é-Sè`ZpníÝtÄê{º«'óü]ükÿy…š“Ô<ö4÷ˆzèi‚¦‰~[hÌÙ•ž¿Hx‹ô÷ o‘f¡ .¼18œÔFGúûó7Ð/ÂP‘þþ4ë9¿Uz²ÝÿFWË4¡í7–&Òík«hnõ„BoyÜttr›úù!šUÛâg" ù¢îK‰fæÉ]J”†-~,ªõkSñ hp•TZô›ªS‹~£Ð©PR“”%YBVqHZ_=V(ïÈ®=/Wèïk} Í–¯*е~ïtš:]ùuï¢ÛÅŽ>^šŸÅë¾ìÝL¬í£’=U(ÙÃóÙ Íâ‹’a[ðǼîÛ~,#ûkS!ö¦=˜ÜǸèÊî'3+dÑ\"ÑÌ~C¡ç÷vÄ¢™å—øùýÆÏ‡4ÛMµDRš¼U?úŒÿäÇï,Ô¾'jÛº*²–¼ ¿ìDúûÀN _v"Í®\1sÓ™†qß¶M∴Y]¡+£›@7ÖvÛ·ýnùZ4;zÖĨº~}ô‹+1¤¿¿š_‰í¿±A`&Ð….¼M¡™ã9Ùä}Ñ`Í^Wh„”\]½_Ïÿ’ì‘ʶ!Ðü¦Íš»+Y4ó†—iûç¦)Á³Ô).¾¿§[tÐ C…nL·›Üv-ú i”¢´4(¥néÇË_,òñ'Íîm&w.šßÛ_èãõÌî°ÚÊÑšZ„k‘¦Ðluà¡z7mA\—–³@“ ¤Ï¦ÐÑS œxàö¢kc­)4u'í{þîûš9]/¥mlgmÌÉnM¡™£›_{6!Ywü¡ß]\Þôƒ¯ù«Ç]¡ƒ¹“”¶+sF%e±nz^,ç‡ÒóÄ)£´íÌÚ‹K ƒE£…)4•m•=ýêâéï/.îìÊ•}nÚØe±%—Å‹f‰ÔÍKh–˜¢‡@“ç¶jמf—I–\&!Í2Ä”ý¨}þˆ ¯JShVŪ@³ Ä܇>š <ÙCWnÝ+4Û£ÏÆR¨XSèÎhaÔ‚%‹¨ ÍâC˜-A‚A>?(ÏM“Àvṟ‚ ÿq£ ﻳÒ5½\ÍB º²:tædï%š¹‹{cÞYA˜w&GíMi›U¾îMi›9|û¨ ÝÝšZØÂly´3‰ °—sÙ~~p…fŽÏ½}þ\ù‹éhæwðýW³°«æRšý­ô‹Kr¤'ó;cþæ’¼mó6=Ü-,:ö´oéß½“sIïuOÛE2uØÅƒû€f¥/ž‡4±S è^ta)ƒK²—,š¬-3UxîÂTÅ”¶‰ÕóùAµB..-Bh;ˆWÒ2«ç¦Y)«Cè9-ñ0¸Jæ¦?Ävƒ~ tgþ–^š¬keìÛþü‘1z4¹4ýü ]Ýšø‘íh#A¬aE5c;Qv¼iVÀ-’n@“³ÿçhbíÅHl‡›f¤‘ùöÍl‡DH‹´3:š=· ol\x1šòÜ=wSž›xkbpÐÑÂÚtm½+4»éáù|=Y@åT¾ÐÄV¾±Éd×™µ·hg=OvÁm Ôâú#œ6VüÕ’ò­‹f ~,)% 4ñq=nì?hZLlÔ}Ï?Än[jUèöýî¿hÆ2ºÒsV`y&'蛞ÄòãzÍ›'!ÏáÉ7¶hêý¸Eý¤Iò‘±·Ÿ-l‹Äk4µèÂsK.”ä|\tc«C›BÛm²¶‹ë¦³ËÃv´Ý‰Xúù>úžþùÈâS Y^¶ìÈ×öG>¶èW‡¶vthšõhXnÚŽ¾Ð%y‘« i&aáù±fÅêøEV‡*¡4fnétJ ±‹‰qsלdÙ¦{¢$¿éÏÃ.Ux•1¤;£‡B³Ë¤¹µßÁR—DfÜÝ=šEº†+=gBÙ² 4»N–í8škw¤+Ó>zÿ“þ -‹‹æ‹îÒü}×£ç®÷sö™BgÔã€ü'‘ØÂm6÷Xõ•æŸx¬zv>Z7Ê…Ýfs‘ߢø , Qšp±Г,_Æ}/H3‰à%ôÜ™ÏÉ/Shgt(tetSèÎè¡ÐlÔ”÷íì}ûzü,:(lW÷ýää Ìû8šc7)>‹þ¶íÏ[ôy\ú¢_½ÖqôZÇöµzâ Ùòõç„;»ÄX¹'{ÿþ‹™Â®4š¯íמŽÂ¢Ãʾ籜ÿüÍ|I)¤Ù1(1ªÝYÜË%Ðãb±F‹$úØ_:~™:VÖ­ò}¤7ÒDßæv 4sB;w p¾Ó™3ÊÑàÜ>8c6…q›èÎh^-é`tUhfr΢irޤR-ÒÌ~å÷9@zÓ,Œ«èøù¡ te¾fã6ìh®ÙÑ\³£¹fGsÍŽæšÍ5;škv4×ìh®ÙÑ\Û;D w3 _þ²l¿™Xt¥9¬yÌ2Ð$fùóÃÜÓ—ßö"ÝÝšô¼%;Ñ¢Ù \ãöÒ¼ƒq4)–êz²×Ê&‹®lhëÕš„]dÙý€æŠ£ Î¥]tpšB“o½òXy ™W¥&ó® C«´ÍR„Un;½Ï5‰PËkjÌkÊFÍR„%÷iH“7Öx”ÿ¢[ew·\Ý€t0º*4[ãxüÒdÌ“ûÓEw–®waÔ:³a:O]<úÑ\»½h…©ÕJÝÓŸý”Í®0Xtklgà9ãfËvãÙÏ‘foŒ{èÍòÕ[ïBÏY.Kªp½ƒ¬ð8Þq»zKFÛxìÐY!Éš 4[¸7cѬ^œ%éª=ØKÒ>Œy4漟÷í%Ÿ[:{cC ù3…f–_SzÞYÛ<:iöÜ<õÒl=ŸBϳ¶@ž×Él™ßÈnƒx,ÐÁ>óSå¼NV¤Ùláv ÐþýLš(§§ÑOšä›4jì,Þ†ðÆ;‹'rx '¥…QëÌÿ‘N ÝØŠL¿ïY޾’rô•”£¯¤Z95;µ•6™E^'õÀ&±vv¹@¿zcvôÆnº³ö¸xѬ¨»%e.€f)ø{ …®l®)t§´òÜlUìʘw¶*ö!¼ïÎVÅÎëh!ÍvžEhv²Hê*!Ý-ŒÚ`þ–qU…¦kKWèÁÎ%Âl…Ò˜î€~´øù~ñã ‹¦Ë×ÓÚòƒîÌ9ѹsè7¢}ˆ¾ÿùÅý¢YIYK m#Ý-“ú;@“1®¦ôœ8??L&ŽÁ¸øåÒÆhWh6æ]5–2ífêçˆ6(|=ØûJÏ'{î)ô¼0}N)U¡;£…ÙR˜¬2ÉÈŽ4M4'ŒyaÙ&Kâ^šÚTzþ"EÞ¢Õ‰L"¡‘æ»±p•l•c»U–¡ÐóÅF{ÓÆD[f{:Û2\¡YšßÄ»0ÖÂË–~Ó 4KÜšÉEÚ¿_€=ØÒÉ‹Õ Í6œÄ£³h–¦ÿâ¹*‘fŽð¾³…W5¶\S5–'óšÂ¨–!¬\E¡Ù²]ºPÚ:¾ß®€f oé Í÷Óy´tΣ¥s-óhé¼éAå¤BÛÇ ~({šžp¢=ýêrsÑ~}o«Ï#[}îmõä aÑ,É`"áEºo/Ï#{y ö²)4Ýì”QlÔ†0j…¥*W(4«*sIm3[ý Í’Báv¢MªF!ÍÚ6¥mcm›Ò¶ù÷g Ù3å±ÔNÅ”7fóûóÑÎGÊs¿¨„4{î©<÷d©~”¯„WOR¾–Ø «½ô‹ÚK@S÷ù-1xežÜô³²1€~a",Ú.vÑvÑ‹¶Ñã[,Òík,Ð/Ì _˜'H;-à²5geŽ| hVÄtÒóГ}ÆÜ°ZôÃê_ôøÖ•ˆ4w%*moÜü‹þÚ¸:1OªB³ÓÕ%šµ—@+§û¶ãªõûUqѬ˜ç5\¡ãÛCÐřǪ†@³ç.íhV'¤4Sh¶ž7¥çl-]µ>¾_Sý}  yšÆv ·ó׎þý9y’ä–BÛŸE Ø’lÓ‹&Û•ë{º8¹¦(.Ñd )Óš]‘d“èÆh¥çdJ¹Õ²§Y Æç‡ªÐ¤çÞ„ž;1(=†Ðv|=³èÇ[˜Í ÒÌ4*×µ§éEƒ)´q:º2šß~´¶ÜÙ]ewµ¢Ð,_çÚþ<öüÖt0YYtÛÒq±‚\W MŒ—@7s£ôœm´W²Ñ.z°çÊsó/Tynvô¹¦òÜ,‚—¥üÍLÂÙšÚTFíÍÊäkebfÙe ýõ-À¿è¯oþE} ð/úë[¤¿¿øM#•”Q+lÔŠ2j<ÎIµïï/þþþâ_ô×÷ÿ¢¿¾¿øýõýÅ¿h6jC5æF+C5æF+C5vGX†2jl7(Ên@‹·š²®[×LY׌­k¦¬k‰ÅÕúë{›Ñ_ßÛ Íïm”Qcëš)ëš±uÍ”uÍØÚbÊÚblm1em1¶¶˜I=ÿºìÍ¿hö¾]yß,—?Ol‡4-.Í]‚ö)9Ä‘Gfø¢›}X Á6æÆ¬Òöƒ2¶GÝÌ$šyË’Ãê¢YõªÌ,[ô`ô( mßo´q´ÑÆZô¯ï7; ƒÑU¡û÷î…Øo8&ŒyRÍHé9_x•žÓ¥3”ž'‹_=Zünm#‚ì&Ð,Äá1zá?ic ¯e ï¢iÂ~Ô¸çÆGâ¹ùCþÈ=z° …¡´=XÛ‰whâ[ÓšªÄ’Åï¦ç`EE‡+4+¦:†B³² ³ 4ó¥Ï¹ßq±Åﺚ_¥ ôã¦7õȸYô÷B ¤¿Jü‹¦¦‘2æ\ê ôü…Xá_45¬\¡™Üઠý" ¦uU0ê”Qã2‹¦Ðã{WKb"”;J0FHtcthî=‰=m,ݤñ¼eÿ¢ë×¾ _ø^þÞ{²è7Þ¤YÙScµè:¿÷½,úïéï}/@¿ð½ ý½ï妽’ÍÎ+÷`M–¯Ï®Ð´íýûþ˜„,*®…BWFïÇÜg‹¯MB ;½FíÍ%&Ð,!¬—}ÏrÔ ÷@3ÁŠ@³­Ò…¹ö裎°Ÿ´³çvå¹úÚºB3“Ч@3¬BsRÉ$š0Ï?TÝz0ZxîÆ®_›ð}þ¨3z(4óó]˜wÏ׋ 4»qêÊlél¶te¶t6[z¸B3ÿfT…fc^…™ÚIî‹Ïʘ³C:¯õ/šÌóÞ”ž³CzlÅWi ¹W¸)ô÷~]¤¿÷ë.z°§QŠBwF =ìÖ'qº–}:4KÎ%Ò=\!üÉœQšœ¨>Ûî}6"KÚ^<™ã3¾!MÎc%±|C¡ç÷>?òyø‘ÏßGSh–r*£ÆNT~ £æìD•dªAš¥éºB¡ë÷—h.\¢ £V™O³öPhÖóÞš »ÔóùýÞ¢ÙWR•¯ä•ßÁü~äwpÁï ô¼±™Ú®¦Ðý{¿ƒùüÈïàG~?ò;,Ú™ÈU°r?ÄĽ‚•ûù#æóðªÐÌç!ØÈî…_L¿úƒîAéPh&[¬BÛƒ‰Ø³ëýE;ÅVá}ÊÚ®®Ðñ½ßÁ¿ƒÒvcm+62Ë–ú<üÈç±h¶‡ee™öc(ûØ`¥>Æh ͼTŠ:˜:;u°=t${¨ ÐIü-±ó·àjÑo®þ>à éú½­ù×Ê‘­ù×Ê‘­ù×Ê‘­ù×Ê‘­ù×ÊÞ¿fJÏ™üµºÒs&¾©®ôœÉ_3oM9òÖ”#oMÙ{k”¯¤²¯¤*_É+I9ò˜”#IY^ vö¿ªB³3ðÕú…ǤyLʑǤyLÊÞcâÂÊâ4#‰ÓDšÉú…3Ñ«´zHÓ´zÊcÉmº vËyû¢{cIm[ Ùs¥çƒÉ!“Ø9 ƒ‰¥Céù ¡6Ð/„ÚH/ÔFú{¡6Ð/„Ú."H<&¶ó˜<”ÍþIÛEbíJ¬û•Öþb^‹Äfšy-› h–^.ÙK€féå’½Ê7°ç.Ês³T)™çÀŽ<vä9°#ÏyLð(=o4.Wéy/ß{ìÈsp” Ý´»’ ]™ko<vä9€íßË_ý(½;Ð,‘’Shæµ(JÏYÌ¥ç,æÀ­(4Kã`®Ðì}»ò¾™•뮌9³rÝ›B3uŠ…fÏÂs¿ºÙ³ýÍžÒó$ytWhv/X…¹Ö+MÛ ÍF­ _ÉL.U„lljQçGFu~dÔù‘QçGFu~dÔù‘QçGFu~dÔù‘Qç{£n(=cXeõ£,°~”Ö²ÀúQØE¿2n|oÜXè7†~d`ø‘áG†+Ï£ï7ù8Úc· ¦Á wºWÁ ‹¦Á ɨ-úÀ h&YJ®¹oúMÍ=¤_ƒ,šY‰èuï€~ÎqÓ,œÃ2§ëM3§k&XšÍ–¡Ì–ÁfËBÏ'“¨Íä"kÑL$>“‹, £»BFïgËg¯{ž-ŸŠB£]¡ƒÐ±ÿ¾e¸ò¤*ÐäÂÖ3Ù/ÐÑ]¡£…7fõù+ñ$ß!ÒÏß·÷"Œy/ÑBÏ;‘S|~¨ ÍÚ6¥m¿¾·°!+(£…5õѦÆóý½¬ß÷ùL3yå}:te´Ô6ÍÚ¿ÿÆÞ AýFô‹° _„5ý"¬á¦_ A€~!úEXâ߄5ý"¬èa @¿‚,úèB _AýF‚Óu(ô÷ûýêzÑ, c(;Ñ« úE' Ì99¬Öía5;@Ô£D=:@ÔÝ"5GëmX1Úx  «}oԌ޾ï—2€~‘!è2 y÷‹ G©¿¦™"†Òó7e=2(ë‘A 4{ßSyß“æ×F¦ïÂÚ’zêÚÑâ׎¾¥m•–m•@ÓM y‰¢Ð,n•Wòz°¶÷o,Iµ_CxîJ’|†\xîÆâu[RZaѬ´B¨5ýÙ/a¶tÿaYLÝ¢‰ØðóCQhc´+4ë¹)ÏMNÖ“ƒЃÑÂLeñ|Ö]5ÕÞ=šÌÔž¸tÍ|Êsô”Þ÷$z›4Úw®c¶±ƒòþsæó¤2ë¢;Ùä]™-á¬$”Ï}Û¯ §ÍL„fKTV—½F(43(…õ<Øzµ+=gɪ°=–óüçå¹Ù±+‹À\ô¤¥íéÆbfŸBÒ…ÒU¡_Ä.Ú(=úE4àM¿J¸4­­*<÷`å$Ç(Ío b_-1…ãÚ™Âã§uò“?_ýœÑ·ô£õE-®Ÿ4óH7nŽÆ%,Û] iÄ"´,£_xUèöõ¢¯›åÍâ—Ö@³ ƒ‡ÆÝüëO èeŠ~qtò!îÓr?}cÿAþÈ Ý§@‹ÐCiû§á÷Ï"P„¶‡±%ÄlOVŠÉK Ù¥Vã‰H7F…f=çk;Ðì²PhÖs®`š]b6¶·³8ãh£îÚé~¸ËhæJtn»-:hºâ«)4s[aÔ‚¹£(=g¶[”.ÐLß¾ŸçŸ ‡-¼n Í짪´MK[TWhÚvSh–,‘_‰ÍÂÏGSF*]¢™‰ ¬ŠŸ–mÓC˜©cÒmZé9‹Tü,û$‘žìcw’È>™!}íiº‡>nQÿI';¿Ì‹•«³Ü}4;Mgëù¢Y¦”¸„žK^ü44»†ä T¤_ì¶Ö5Zø†¯~4Sýh¦þ¡ÇϧûC~5ÏýhžûÑ<÷£yîGóÜæ¹Ís?šç‹fæa˜Ÿ|%Ù>¦¼±Á#Ó"Ž>Ä8:òÅîÈ÷øý'ýx6Û~ˆ+•Kg¾^y èQ¾ÿŒMcnxœˆ£ÃK^âèðGKH-!q´„ÄÑG§8:8Åþà”,_±_¾\µÁ„äÙñ#ŽŒø82âãÈ ßkÄ=~íèÏÒ9˜#ìhê»Êž—3Zèù(Œ.U¡;£‡@ÛõÂ…W— 9£ÚhÒÒxH ÒÌ–ìu¿%»AÝïc<Î ivû‘|c@³–©ŒßC÷mþˆ¥;E ù M÷Ð.Ð,ѧÒs:jÉÐl/¹ö_ÉçØî_„žK#<ŒivÛe £G€®Ðó{çã¢Yå­pWhöÜ\ë4 ¯ˆFm°t¦Ã«B_ßéïëÛÍCF4…îß»l«à²UF©2—í¢™xϦ=oS Ù¢ñEéÎè!Ѓ•è›Ê˜O–Ê™¯-‹fŽ ·Ksc7¼v ÏÍJÖ{SæZcs­)s­±jMÍC¡+£…¹ÖX8S‹¢Ð¬çQº1º+4ùÆZUÞ3¤[UÞ3¤[žûÍŠô÷{(ÒßÒ@¿ð!ý½×éï½F7ýèþµ‰X´±x€$×q„ Éî_ö»?÷½,š] ÙLfê¢I´Ð£Yð“n¬¨0½éÇMžnì´±ý[¡+¥•ž³àKóGãÛáhö…^É 4Ûý“/hf3%_(ÐÌniC¡'³z”QcWbWWÞXgo¬wÌVäz3 ßX\E°¸„¯äÉ,£¦ØMž»†ðÜ•¸6¼*ßwe{h­Â\«ì+©ÊWRÙWR[Wh6j]i»³¶{Sh6j]5’9Æë¾ÐJt^^‡2jì«Ê7VÙ7–h­œ,„µ¥³SCiû…] [øÆÛC›²‡¾²‘Ë‘\ެÜrdå–#+w¯ã îÓl¶¬½þ½§hÑìžî²=í €º+h¶û'gÁE3Õ•¬©‹ì¹y./ ié¬Ùö´±˜x»„¶+É*éI}ÌE³‚DŸ„Qk,¢¾¥mQßxD=ÒlUä)ñ‘f«¢ m¿¹‚k{Qmp…[Mvqiÿ-—¾Þ§™/4%ƒta®}þDw³›Ò6>qâ–þüÉè<–:Òãjö4=ÖáÜçZh*¸ci?×ÍóT„¹–J&G·0×R¡Ð„çd_*RÓ—7¥ßd;”n M{‰ígêçJtUhz„¨ kìó§@´)4}yS¾œž~¨Ž:izü=ÂúþòÙ]šž¼ÂLmŽ»xÖÛäÛv›ö6ÚvµÑ¶«¶]m´íj£mWíÕ¥Îru±r¡O6»vµÙMš^w4SÚ6t>îG̉ê6¡í#¥ßöJ¿îGì«vÞ*Þv¥x› x…ñnT¶¦9‡Õý=Uç’~÷5)üóCUhÒŠÎÝ¢AgªX‘¹bÅJcÛ}O7È]Œ- ý¦°HtÊS/4åtE'Š¿Ü4Åš] ¹<“Òv'ê8ºšœpŽ1îÈ>ä^xbhzíïqœ2“æk¸u ×¹ò]ÇuT§6h¬&ÈÑÍIã¥íÆí&M%ƒ£S2x¡) àÔ‰_hHi‰ÎcÄ –~l¬¶š|/ÎSi+MW§‚0Þ=ÐÕçš.^EáË;=-âøÚVSqŸ-ýÑ`Ž:ùE“¦ã燤ЙèªÐ;©-4]œvâ“+ME½ó~Ä<3\¹“în M ë]˜-­Óf—„¶š›ÂxwºBäÔ½\iª)“‹Bc1 …ÆRU9Pó*8Öy‘6R>Yl M›¼™@SVÖ#èµÏŸÀSç\ t D^§‚ãBSÕÌ(ìß)Ò›yÑ™çûëÇγpu¾›OÓGsVɸlgÍÑkË«k”æÈ|^œ~ð¹­Ô~ý «ÃîûmTøÄ‹â/4ícólVš»¯&EÜOŠ´mûןúû)¯&E¼šñjRÄ«I¯&Eô&Åoå·§?ê •v5×ìJÙÕl±«ÙbW³Å®f‹]ÍSTHºÖt¥BÒ• IW»Rºš˳&ñý°¦«awBz¯Ò•˜Ï\Àµ¹#Û¬ùj®eA…ä-ãýUœ?ô>óï‰úýKKáƒKmK[ãê‘Ý+æ†?[ús˜ g Gk½’ÚRì˜|mŽ«KÁa:‹Wæ Lg•,ùtׇs…~/®ìé@¹e‘¯ÅNÚyë·î#¼™¯¶ÔQ®¸Æh`–þü‰"ìW_iRú\!fÒNZOTh²ø…䕦-ÃqL-4Å2ø ×J“ qœCK„—¤Ö©q@³ö« Ùwò£¶ã–þ:kÿPöôÑ”Zhò^qžøJcŽ[hvÝ·çf`Úpa“"üì Û¶ÏÖú¤)/Á»ì¹ÒxUÔ¶´ãß&8ŠøªIŽ¢œ‰.{úK°÷ÿé/ÁÞot#º 4•ÁoŽq¹Ð‘hèB_^”/¯ôåUùrR_­*_^ÑY¡+ÑM¡¡v÷—¸ýºÑI¡3&8³ M‡(ä¦Ðt=÷É M•KžªÐt)êQ¤HjA‘]î­|`oBÆÙ‰~¼òÍìcšvASÚNùÀ^‹WöZÜÚkµìé@u…ƒSWx¥#ѦЉè¬Ð è¤|y¢/OÊ—'úò¤|9°ÃÃÎþ•Æ~wÎ4ÞY‘Z&©eEj™¤–©e’ÇâGÁ©å¼Ò™è²¥#ÕLûjþ~¡Éâb§÷JSh¨&®h+îgËW£nk¯Mv"×âŠ;‹Ëµ<âÖòøfTüEWª®ïÙñÊvˆ‚íÐúd÷Þîÿó'!üíl´?¡Ø/¹¦ÿO÷Úˆ–ÚÎD…®D7…†#~@G’ZT¤IjYéw¦~7…nH+Rk$µ®H­'¢³Bƒ /8—ýùmW\Nv¡Ñ¡ t$!†-3V‹áK“¦ç=¼üƒþü)m åÿ³@Så±X”/§<çŠÍJÓ—åËéâa¬ ]‘® ñáØ”¶)ò›Ò6e™Ç¾_¡fà^øü Œ7]¸üü |¹Q!{sŽ“¦Ð¯çº\èD´0bFWÉœ; ÝéÉΚ™tŽ#Ì&Œw¦gÉœ«ƒ M#–SUhz°¡+ý¦Àq Âl)‘J“ »ÁçO,Z!uÎÙhGê\.~Ÿtå÷™4ù}¬(4E}¬)4E}œ× &È[–©%’ZR¤ÆÞ2EjôRmËJ¿3õ;+ýÎÔï¬ô›bÂ-+ý&CúKqo4I­(R+$µ¢H­ÔŠ"µBR+ŠÔ I­(R+$µªH­’Ôª"5JÓüjþ›Î^áIŸÄ£'}t#©5EjGÑìIg:´qQ·AŸyÃÓ•7|¡É;ʈV}Ê@g:nrÕ”•&ß*§a¯t%º)t'¿®Òo¸*êz¤Ó•G:í<Ò_Íÿ¥¿&gl}ÊIð)? ‰~_S*¾ÐöÞŸöþìZš<ñU‘]Þ·¦H­‘Ôš"µ“Œ‘…>ÈY背‘åz fŒT…¦RO蓜…ÆÌ‰ýx{eÑ£Bcô#)t&º(ôAÖÆ|,â$kc¡1k£(t%º)4ÕT Âx×@1#a®¹é­!Ç$ü¹÷óÅ1+uóÕQ7_uóÕQ7_uóÕq3o›%t¡„Öb M ­%+49eJUè“4àA¥ç«cW¾:vå«£O¾:úäÝѧ?ˆõ‡"mA¡Œ·Ÿt¤8]Ì 3µ› µnôå&ÌÔž`¦ö:­|9%õ¤|9%õ¬|99FzUÆ›VhWVh§Ú•ÚÉ1ÒkShZ%MØÇ¾\˜ù‰G+Rë$µ®H­“Ôº"µÞÉ­â¤ÓäqÔ}è˜íDÒú ’¾Ðä Ê—úò |9Fñ¹ÜäB9F¸ÂÞBgrq ­….”AàÄÂÇ sËx­ãèÞ;Fò•s"_9'š.Ã8‘ô…&©Õ.Ðíyï^È‚{¡(ôƒ`¾“÷<ïY8âïGÌ\Žøü°ÿr‹pÜüü Ñ”)#h¦ÏŸ(ß$(mj;*mS>ƨÐôÈwÌ M#±*4eŒ˜ 4”þüPšdž™'úº@SeÁ˜•¶3I­(ýƼª®Œ7¸²ÜŸA½ƒi±)4Œ·ó‚ÈBCÍSsJ²¯4e'™0bßJýþAéw¢~w¥ß”ëb]é7Žwæy"š‚)t":+t!º*t#Zé7e¥æZ2…6’¹¢‘“‘ÌM‘¹‘ÌM‘¹‘ÌM‘y"™'Ej‰ú”~S.[JJ¿©ÖkÊJ¿ õ»(ýÆ×æú^¯ya‘ý—{¡‰&Ðày.TÝr¼sBõ©¶¥ÿýr‹ç·W2…&¶w{`Дÿß¼üÿA“¿¥yþ–Ic•5Çò˜5»¨Úzr,ùF̵ϦЉè¬Ð…è¶§)p½ºÐôÖ¬"óB2÷.}Š_‰ªyzmÒ…hçŠàB7¢•¶+½=ZƒBÓÛ£ÕßMÛÏ–T‹“)4]´KU ¹x^ÛWxóxmU@u~N>aK[£ÚIÍ©û°ÐTõÉ©û0^"×¥W$r¥ê6µ9¥Þ?ê>éJ¥ÉkúMd¤þ<{º“‰ÐSh˜ÎƒYhgÅìëÃyiÀ£>%òV/‘·ˆEù¼K“¦È‹—ÊD…ƶ»@“×È»5鈴 µB¾—bU ÉƒQò¾íô@ áóƒDÓÛ'¶_¡K€J,Ô*ÐøÞnšÒBÛ#ôÛ©²Ö÷µF´±úó§D6+ôƒöÞ}:Ñá‘ÝZ+ aHçÕÚ…Ît˜àƒkW2Õå"}yd‡ûBÓ‘;²¥¿Ò´æäŒIÖi{úó'’yËM9ÒµK42Ø8éÎQ·¾/‡æd`öñ( e`ƇµÔ ãÓÈ‹Ãe¢&è çÄWzVºÝšò?<§ R¤VÀúúú¦õšÔWÞΖ³'œšÞ1sb• ÑFï蕦/OA Á^þü` ˆÎ –€Ðv­¨¾F;¢)m7R_­ 4$­=(t|¿U.t& Hè7¾^âØO+]ˆ® 2oAZ ÔvThN­évµáØvÃñ¬›vDzo…ØÖ ‰]j›næ9ö²mm˜oqÒÿÒ)í–RŽÍA¥íŒm7>pü¯tz¯¾lª/R¼\øg¥”Ÿ])?”ŸÒoV~Ïž¦»”î¹pÒŽ–JW*$]©4—q#%Ð÷´QÜÒ8ŸrЉr"’“±Ð™–ûBúd!¦«¥”®–RºZ iNg˜|5!óþʼn̓þzVÚƒò<ŠÐa"It}o\fÁ¸, m7…¦{´œÂ·ÐtªfËw#ëçOûl'ŽÕËŽ¤‰¢¡)=fí K¤@H¬ ݈îmdh¡ß@%*4™©E‘UF+Uùrº|\ªòåtù¸àåã?èLtQhŠKs*£•¦H*£•–šæySæy£/ïÊ—wúò.Œ7…"gªþAãÛ,—·‡®M?Â\k‘^ËY¡yBîÝ>\adп*À F®¼0i£Ê Æ•þ !‹îq”þ¤Aé?kõˆÎ{:Ðíèà(ýIƒÒÿüÚˆV¾œnòeÄBÅ›øÂlùöœü?þMü•æ»ôI¡énuTÚ¦y•™i¦Æ$Œw¦Ú ùi M™ªAX%2U[•hh»5AjïœÿAÑI¡ÑÂúîôèóÔ-ýùk¹RúÃAi=øu¼ÿK{±¿èNé˽™BãóõM¡ÁIø„¼¥ J\(h¥á:ozÊ^æ)ƒ24‰NDg…†éD½š©õj¦Ö«™Z¯fj½š©õj¦Ö«™Z¯fj½š©õj¦Ö«™Ú®fêpŽz Œ¯FüAÓ©ÒÙ ÝÈk×lÛïï–þÖˆŸ4]nà·iÿ a…Z÷ô‘A¹Ð¯K;­ôûÒNÐöÞ˜]h,Î$|yß‹µºŸ©‰jù'~öºÝštËÓ¢BÓ—·½ÌS Œ¢ ¬ïÏŸ ß! ýP )GŸº>/%(4+Þ}Їë”úßÏ:¤J„Îb˜!#ºÁ˜rÝҸɧ§nûýo¢J„‰+.4^ß.xƒqX÷dŽé>ƒþ.Úß?T…&w=f8,4%cz'»AŒ¿hzšÂ•¹,,s!úT™BC}Kÿ[±Þöóìé/i¿éö´*ˆMîÛÂkl¡©^gáPìBS¬7×F)UMƈ…î”ÉÃáÐI'Ú®ÒSšÊR$60&MæhrÌÑ…ÎDg‰†¶åË©>Œc-4 Ó¥WšØaemÎBo~¼±Zú–þºZqýMÓÙÌ›Î3ñ—®|ySj¦ÏRÒqs¶«I;3'_ ÌH¾m¤_ùµöI…b‡•}¼ Íú5)ôûä IáhŠ™Kט…ñþõ'n¢\Mв›ñq„³$ßB^ÂÃñÚ…&“<§´§é à˜shzƒ+;[öBW¢›BS)Ejb¯ M ±; q¡©K­ M_®Ì5 —D'\²Ðt+¿÷¤Ð•èýxes˜“±Ðè±úì¥f• Ù¶.ÐTëóCVhh»Ç Ðä½ê‚vHþNN{¡)M<¤¦Ðpü e?SS3ºUfE Ñ4ÍM¡;mW¬öQ˜æ# SñÈú–N–é”Þ.tï³ä"ÐT.Ò3&Måoœ\¯•fáìƒÍñâ̰äÐÇæxRfØ€l·æl• [†§¾&MIέo¥ö¯=¤¾ø­š…¤:ƒ£:š2hž}¿-=TÜ9—Oj#-Šþ…®D 2?¨}þM~VÛK-Ñ£ÍÉÉõZhª|ñ¤½ÔR {Ÿ¡?Mט£0Þ‰ÞH–š@gº•škiÖ°wü·öÏŽþ·öJ'œ¾mûןŒèº§)…/:)| MW'…o¥ÑY¡át8âºÐty)8Ki¹ŸCÁg)-4Øê© m—@1ò ŒXÉä$qŽû“¦LûÆ!ªI·H/;ǽԎ’ðVbÅNÞBSKkY¡ÉVwì§£dÓ¯I"Óâµ­(4Åkû^æÝNJ?_õÝk[¡)Vl¥)t§pÉ#ЕÿÂK´Æ’²Æ>¢³™U&ó¤™ óF¥Ý› ÏS£¢`MÐç©‘iÔRVhº¬¬±FkÌ;~,4‡»0×,Ô°òBWf*V¶éŠÔ:I­+R{_µ}¡;^¾dÿ›¦°`l¦ÏŸ¨m“ÚÆe÷Ž1ŸiŽ’A‰÷ºšÎ¤1…&?@ uO—Ð_oÓƒö¶é Ð Ÿ+MFÛ÷;Ñûk_÷пirÈñÛ­+M‰pÎF»Òï7ÚIó5îS]:Ç®â>Õ…‹ñúߊ %>Ù :f²¶3[+MñÖR“ît²ë|²[ir-ñ gÐÈAØA³Ò”‰M¡áz?¬³ÐTÖËœsáJÓoŽúÚ§Uñcáƒþ7zz:ä¼§é±Ñ`|šž4%s”ß ÜzNŠÏBÃ^’)mƒ½øAÀ•{98Õ5&ÁŽøÍö_=¶ámv“&¡<ûÙ+Õîär°“N=»õðù…®tVÚ&ã&yzmÒ‘â…q/ódôå&Ì–Dv'.VcºÒ-iεJ3µ 4Uä œó´ÐTiÀñ½,4–§tLáY̓ʧ9%^&]ÈöÖØB×s­û…¦rZî ý¡­WŠÉ³§n¡ùºlÝÒŽv(M ©ÂíS‹BÓ¡ß_/ol5SÚk¦GZ zÈž^KWzm¡éè•/x€Ú6*ÃjÕø‹B£>f‹Ñ "kQ¡) &hÅÏŸòû(mw¢¤Ìszè4}{Éû/ºPþlö’D±“TÃê>±¶s‚D‰µªÚÇ1’§[…žçpl¦%-—k9cgÐgk,Ï#>`¹í’` æèãlÓK‚)Оú4oÃˤ9xk Mf™sx™4ÖŽl—g̶‚ÌK P`ÝΖ_ªDw&óÄÉTZi#å¾ß)àᥙ@SåîøìG,E(õù! 4ÕŽAørËtå"W¦‹¾V’BãmO7Ê{iI¡É˜m¥(4Þ RÚæDA¡)˜W…ñntßÌ ¨MúàIÞ?èJ´Ò6Íó®ÌóN•„;ËXi˜©=FŽ–ŠÂ*é\a!îsw;_:un´…¶éº§yÃ{ë+ÝßoÓUئ£B“Ÿã…+›¼Òoªfêdh-ôA†Ö¤Éþ10„¶ÑÀÈMZ t+T…&ï¨sš®WÖöR)(“qSº½7& jû«Íô…¦ì°¦ôû ¿k¥Ë{³¬îͲÚÃÎQ Ñ lÊ—sv˜Ò6ex&a%æ– mGº2éd¦­4y0ò~¦~þD'Za…~µ:ÿšLáÒú Ü^¯Nòƒ¦ ²_S־Д™¦H­¡_”¶ ¶ÝúÄ®W†ôBSV\U¤F·†”½$Ñ^âåÔ-ôANÝJ¿Ï©[胜º•~ŸS·ÒïsêVú}NݤN Þ?êÕñc¡é)ÖØ·„˜(Uï MýNÂ\óü›û»uëíÄ6¿™\ÇE¡Ñul{:a‰zNâž4üŠNÁ¯8o 9úuï§s1¢úß/¯Ãþ#Rè€Å2lO‡v¥Ï] aWúü^Øð"“Ƙ¼ã¾wP"U˜ŒOè@nkg1Ì{?tc)q…Æw*œÌ´åî •¨ç üƒþü‰bÓÏ^æŸ?QTýÙK-Q…I¯šéJÃ^îÔˆœt%k»:öòBS–¹íež( ÒMâîžKí÷] é.FgÏmÈ¿¼!ñýï—'k÷!1{ö!1¾Ï¸ÐôM° Ðñu@m¥ß߆\iº iŠÔ¬½æ-4½;øîìJ“‡²*R#?_¨{©}½Öô]eúBÓ9m·…NtN¤vÜYé÷Á•î¯O• §Ê¦|ùÁÉn¥ßŸìúàlfa¯ù.Àýï—̹:)4èÔÆ¯.4=—Øœçâ&]©ä¦Sîs¡ÉFvÊ}Nº=@óC+ˆÎ{úëåýèÂþ_4ù7¿°_hÊ<å “Δq›Ùƒ1izr$vδ=ÕQ¢BÑiOÓ‹hæ”°Yh(’j…Ë^®t$ZùòN_Þ«BCܦrÐzÒ•Ê©Ô H­Ò¹¤F…¦'¤œ{œ“îå ?&Ðà±ÎgÁ•¦âÏ¡)4ÔìïŠÔ:=ãäÄáWšÚNŠÌé(§ÎÊJÓ—'åË3½d’•ñÎTiŽï8-t¡™ZöÚ!Q?yÖýBSŒ0™@S!âšìÔPŠ@×÷5&íÔÈ ñ‹G ±ŠC M–fM ý>ò²ÒyéŠÌ)M° VÏWCz¿Xé÷ñ ÛÞÕýjzÿ‡þîtýÿ²@G°ScäZ'ƒŽ‘r>"G”šœì‘s]«Ô&ΉüŽvˆÓÁO™2ì…^è†u¼óž®tÇ©>¦Ðô’룴M jh{ºS–Ž“O6h+ô$`i] ;æìû é¾—yJ”™bhÚCSÛK-eJÎDÑI )ºéÔXéJô~®9•b“0Þ¼g¥í‚;pèŠ~&AæNíO³« g¾ER‰îÈ1¢BÓf׊@7úr§¾ÌBƒ3*šã^—Ç=cœ…¸ÐFtÛÒ)Q¥”TšLáä¨ÎAW èT®ñbéj¦Žç6r£…n…fKèNóÜ)À²ÐçZÝÒ_§N£/4½=ù6/:RÒYª@ÓÕÔšÚ›RÛûŒ_5Óè¿Øó#ÿ mé¯i¿½£aKGzèóCh¸íG³Wš2fÒ”k9`П?±¹P®†µŒa…PAÎþÐ!@‚DpjhMšjJ§*ô¤©<{¨M ©¤IèVötOD;k}Þ@Å@ƒ³æÚ𮺫!ËÔqtICi› zw!–ÝBtCñÃv7.S¿ò°ÖýRr²(®n,ÙÕ%»º±´Ò”phE¡ßßX²«KvucÉföíI.ÂBä"L:‘¿Ññâ,îÙ ÙY æ‰w¦‡ ¿Æfm¿Bã² ŸƒbShŠÉÛ#Й¢ê¹ t!£º…¦¼Õb M‡‰’š¥*4I­(R«$µªH­Òl©Êl©4[š2[ðÑÔ¦Ìó†Î‚¤Ð”¹Ò™sM®Àemw‹Î#%+ ÞéìØêƒÎ´‡zù3õ^«N\|>JC¹„Þ^2iŠðÆ´ÿr£ZæEB& Uß??(mgªÞéÄæÓ.`Ä[dnä!6ÏC¼ÐÔvPÚ¦çtrPÚ†»”ŸŠBS9•&Œ7íßæÅ*šÚVÆ›jˆ»¹'ƒæÜeÄz@:*4½[’Bä½,ôAÞˤ!»ÛÍ{™4f YPhÊq²»š²G,+4ÕDtò?š¤fŠÔI-)RK˜s£ÌÔL3UÑçôyÏÊLÍ4S³2S3i‡¢¬oŠ]¥²ÿò”(÷ĹtgÛ;m®»~ÜJËdŸç¬ÐdŸç*Ð…ìÔšìÔ’3¬‹B“uïågOú$?{ИŸí¼Îç :yeKŸÅCÓU¹Nú$hºÐXžI¡+…\¤ÆAwº…ØMïžÈ¨KI¡ñÐ&Ì–NãÝ•ñv«E¡Ž›“æãfTh{`\èþþØ5iJ íÒ\£ZÏô‘A¹Ðà„ûjq}¡É°ŠÊ—Ã5’Ï}KµBÐòøBƒ«ÚضÐä&·f ˆÎ M×ôº µ §Ø¡íFIíÚn”Xú~¦=xl1íeþ5?ø÷Y¡ ÑU¡ß§/4§G…6¢“Bg¢•~gêwi Ww,V¥ß•úÝ•ÙBÖ}ìÊl¡Ô_ B¿Ê¯Y| Z~ˆ mD'…¦~ úÜŒh­¦Ä#E#idS4²‘F6kU¡a•XWÆÎc–‚Ðïn•Ï—'H¡ùü Ð¤’°[*tz/E +ÑuO'JöJN²×JÓCÏ‚fJ…Š˜A3}þTˆÞ¯ÐDáýÏU¡éüíÌÔ}"Šwþ‰(FgÁTšÎc-)mçƒëqƒîT\¹?E¡é\ò4¦G@º“B³ÐJÛT´®G‰¦Óœ)2·@´)4˜)#–0Ü:Ó8'…ƶ™Ó<ÿz¬ÿ‹ÆÓ{UdNço÷¯NÐQ8A76 .𵡕¦à‚)ý6úr¾º³Ðûù!*4µ]öôÙÙ?nÏþ¯ÞNºÑÕÛÆ—ë‚h«?oéÏŸ Ñû³H©Þ1¦ÂÎÑš@:I¥íF§9.˜·Òôåýh²°íÙÏÔÏŸèDõ$…ÎDW…¦“Å#Ì t J¿é¨¥ßt Ô”™JKs— M' çÓ•¦¶« t¥shÚ¦dNs*.t$:…†5–rèB'ɺ±D Réû~'ºóù!(´ºÐ™ˆ×Ø>AÞ;ÙUœÈöq¢¬ÐI }e²}”)(ôARãB$5.ôARãB$5Nú$©q¡’ú ©q¡’ú ©qҜԨH®¿z)‘ }¹Ð)‘ }9铔ȅ>H‰\胔ȅƔH¡ßGI+ý>©q¥ß'5®ôÁ z¡ß'5.ôARãJ¿Oj\éƒèùB×÷žƒ…¦‡n8Ѥ#Þ£ÒïH³%*³å ©q¥ß'5ú(©q¡’WšE»¿·èuéÊá;è@ŽO§æàB“ ϹåºÐõÀ]:7²&M7²zTúÍîb‰&©%èT̲te–¥+³,]™eéÊ,K[³¬+R;20Ò•‘® Œte`¤+# Fè“M>]mòiníý–‘v[†ëðM[‡oFìó§H´)4%Á<—GráE'°±¿ÝkÎ wdRž½Þ¤)åÙ²BS²¶U…¦P³—v ±/´š\©(4¹6ø-Ý•&©eEj™¤–©e’ZV¤FOµ6]§àªb+]ˆ® gƒ.ЕÒXjPh¼Âb MR«ŠÔ*I­*R«$µªH^ØòÅúàêÎB\ÝYh’ZS¤ÖX ìKôx§²?8e…>9ú”«£Ï Ý4MQ¡1?8)4•çÍ ÍF¼Òo6Õ¶±°°SÜwÒXÜ·*_NF{û¯LÃê or¡1o2)4æMÖ-}¶]•ývådÊLº†÷J¿\)ýr¥ôË•Ò_hÌÒÙKík"Ð?t!â Mï]…v<”õJé×­Ò÷<7uÄNêAôc¼jF¶zôlõ*,¥"ÐT¥Ó›RƒÎ~Ù Nš^Ðs^¾žt3ºÄkA¡É+öôçO”Lë\œ4½±‘ž½Ô,=x]MøòéÒ— sKôÖDJ&ÐTÑ=å¢Ð”\Y”¶+U6wÔö éʘUeÄ(ÁѼ+c“¦dyA+þ*"ý®) 4x0¬*#V3ÒÂ\«3ªE‘y£Šî‚^ûü‰j²7¡ßΓŽy_ÊÓ ÏŒbœ‰Bý^ŠÃ,ÖGÁzç¹¹…¦`½óÜÜBÓÍ0çeû…¦¶)ýÆ×çÖÊR@œC\@- Ô¸PÿB¹–øq£…Æ:yÿåÞ]Ÿý—[¬¼u²ù'MO€™ÐïÏŸèî‡u¦ÍÎöëûןè>¼sÃyÒT{ÁºÒïŽm×-ýõÂÀöœÐ„sBhgJõ+ÕÙwªÓu5ôÝÝU¼?t'WCwÞ0ZhR~Ej›¶ /~4è£4ìIŸ¤aOºÚv®ôô©¶1k¦(t}¯ô»àb1…>¸:ÞOÂ$Ï&H¯hF~gП?‘Òï{©}Õí[µÝ¯Ôö¤á!÷UŸÊïàÕB¿¿Už­Xf9MÌ÷i }PÚqÒ'në…>p[Oú$ïe¡ñU¹"ФϿ>~ò_úó'ò½p|xÐ_Qûgó>ÚB78›¾Š¼ÒôVŸ®VºÝ÷´óÒWh*ÞæœÅ:RÛ\Cy¥A3ÛÓ‰^gùúˆ×ß4•¬ 9+ôû·ººÐe% 4½ÔjThj›ß ,áJ#‡+|UlwÒ¬‘•/§,^FÞ¤O2ÓŦ=¶:µ°wtÒ%mÏž&¶9á¸2ËíÑûä1<Öž£×šr¤Ã^æg;Qv¢¢Ð´—tAj…Šb|«nöM…ľn2Ó°—¤§î¿üó§DtQh(5ð4¥íF{ Ÿ¨&¨ß!…¦×ùÒÝJ÷÷;p¸Ú'ˆÎI Ovàpµ‡«x_òÎIÆ)³äÝA2ÎB$ãLúäÂBÜCXèƒ{“δû;%ÐʾԟSmÒ'9ñ }¿Ð'–Ç,·G·Ò¢B“½Ö“ µNöZ÷Nг Y¤àG³Wš¼T\2g¡yç²ÒöA¦ñJÓ•{G+.Ô0wôhNBŠ mD'…~ŸÂ´ÒïS˜ú …©Ä++wÒtzw^³_i*äº@ÓÙ?F¥ß”µ¹PÁJ“}ÎY:+M¾ÜX ;·=mþs ;O:ѹ$…¬ÐïËB¯4åø(³%ÑlIÊlqr|©E’¹ k,Q^U2¥m£3eÄŒFÌ”£`q2eÄXRFì ¯j¥3ÑE¡±h°B•LE™-…Æ»*RãæŠÔ*¶­Ì5Ç9±¯Mç?ì*°1è“k±“Æœø¢ÐœŸš¯* tÈ~L éU9¯nõ¤æñK!Åö樳”&])Ô옄&”U Ù¨k{:³aµï·ã|t¶J»2¬&¯uô}¿-=ôjÅ#´¨´DŠ‚Ô½âm´vµÙMšÞòIÂ"Þ hMŽÏ.¬±ÔÉéÚchÇ;º¯ø•Å›ÆV‰9]@³¿+*4lÓѹ 0èÁ{£ã=YèJth°¶??(mC)tï WY*½¿3¼Ð'Þ“tå=™4ß•h¼oSº¾ßhMÏ} .ü—þêÿ‡‚äÓŽh÷’ãx¾*a3hËT£>󕆣giO÷ƒ;û¶Ï’¡¼Æç‡(Ðè&ÑF4ùþ–·Sð¨”Ýlñy}Tæq¡ 5Nú¤PãBc©Å,Ðø*¯"óžñÞ‰ ôIñBÔr^èƒZΓ>©å¼Ð¥ú ÔâBcêµc7Î;â|c&*4…¥ê¤ñ¾s.œw¥¹B® ô‰q³Ü³ÌIÜž´ó¶ÎþË?Âr‡iOÇËF¦—c M.ÔXšÞ;‰Ž3pÒ|Ç©*4ù?ú~¶˜QB«=B¿dyShº¥”²BÓ-¥TšKI‘ÚÁ ©I§‚¯vîÛ>º_U”: BÛ5Ð…š—ñ¾ƒS¦Ô½Ûº ôI!˜…>(3é“B0“Æê~]i›.¶Fç¦P™õ' ¿+>ÎI~¡ ÑU ©ú×S…/·NçaGuš°Ÿ¢B'¢ËžÎäÈ­*4ÝýàÇwßoH úsÔmtÔµ=Ý(¢ßŸý—[§Cz . ݈îM†M¡©m‹MqñnÊ—“‰Ð³0[:x¬;Ñå…¦ÙRöãý5-÷÷¦Ð”§œš@grÊä¢Ða¤~“Ÿ/Õýx§Á¼ÏA¡©í&È?$…¦ûÜg¶ÒtØÑq Mý.J¿ACÆè=š¤V”~Ó9!¥ßtNˆUé7ÕO‹M¡I­)Rk$µ¦Ì5 "ǦHÎ ±+ýîtãÛ±Ýídzï¿üèŠìBS,Ãss¤+Í”®4Ó¤3®Ð ÐXѱt5biÊœfÛܹrQÇmsºráÆ&ME#œíšmÒ!½d!"Pc] !áóóƒBSÞQå% M‡ '-zÐGiÑ+MGnGuNTç×Óôú}JöJ¿OÉ^é÷)Ù+ý>%{Ò')Ù+ý>%{¥é˃òå¾<(_è˃òå”t™CQh:ö†¦Ð$µ¨H-’Ô¢"5JÍQ‘=í’£"µHR‹ŠÔŒÚ6¥m£¶Mj›F,)#†©è% t!§X© MŽ©ª|9•ÄÏU™kÛÞï‚©³lßš<³•½'“îäKw*ß/4ùÒ;G»VºÝš«îãVÙÂÕ\ Ws-ìæZpJ úó'|¥ t¥ §…ÆWTL¡i»âóðJÓ³|mßïÏ2~^³+MEí»)4j‡´¥½—-ŠB×÷ºe¡;é–G Y3E…¶÷zm¡IjQ‘y…ÿæJ“ÔL‘yœ´û•&©™ µ£Ý »ATh#ZùrZ%]Y%G;Qø_ìD߉ùýƒ)t":+4½{«B“Ô¢"5òg;â¬4IÍ©9‹a›Hýu÷ÿ}¸á,4ú^’Bç÷j; Š·(4ªÎ.Ð4)ª3¬ M‹!´£Bª@Ÿ,ã…ÎïâB÷÷K) K‰çšíW‰c ÛöØ•8Q Í¼UÇfMûd·õýù¹­ŸªÐô.ÆÓ:âËI {~ï:txz:œË7/ôÁË mtÊp”ÀBÓ)ƒc•+ ˜ÎU²A;ï$ô}¿¿>IðÛ§œ: ë¸ t%šoî,t#×± _žéU 'ÿcÒ…ê8ï úë³ÿÐSÓáà„“®N8IØ*ƒBÇ÷mò6ÚŸ?å+Å›¯oÞ*^'Ú8iŒ6–&Ð…â…Î; “®•h¥mŽUæX¥2b”òß»"sŠtºNžj›ÜZÎbȆ“šÞ,äôóA=l]KyçZúì%qK{‘Τдepœt¡éab³"Ð'5¥mz ×‰².4UÝ·ò4E¾¬(2ÇoUúÝi¼»Ð6•2ç¶ùBí@sª4/4½eï¤RMºÐÃ[EÐ-Fi¹^d{¡ãy’§y‚'yhrïTçT™¯ÎâY1¶9¬_wÿÿÐß-íéj¾ôH/ÿż§Qé ÏüM ž;ÇÞIW:]qfà n4˜s«`Ðé¡BßÌ[i^ou?)˯n-¿Ð:ÒS”1(4ÙOfm4!Ó#Љ¬¯Ÿ=m MVg¤ö1ðð1ɰ¥-ÐSu>'>É(´ ižçÛÌ¡nŽjc¶ÐùȪBÓ*±.ЉVI M«$™@ãÃÄYh;׳G&n!¯|1…Æ ] +:«B“ªBÛGÎÀ…fg`Qh˜ÎÞ¤°q¢¥ýôáûú MÎÀÇYÆ“&‹÷éû~[„+Œžs¡)ijÕ'ÝÑ šú½tÒŽ#Òš<Qj»¿vc.t+ïmuÛÚêN†ÜBw²x“0Ïé• s @MÚ©j!Ñdu¡ßôB»A·x¹Ó}7Â³ÝÆ ƒ‚©ªY +9IœÂ“î ÝÏ–þü‰>9uq¥Én I !O?<œ3>èHåÄ,|y¤Ú·ì¼Ý@YþÑQú“îXgÿå-EŽŠütF:*4YÛ9)4ÙËÎ9aÞÈäæ(—g’yîÂxS-T+Q¡,}ÇQ±Ð…è¦Ð°Ù9åeš«Èôýí†êDBòöØ[‹BŸX¼3ÓžÔvo{ú«~Eú…îï•ߤáè²áƒþª!Q+þMÓtvÞ%ô™òË‚íúDùå+å·Ðäæp”ß’¯Naÿ.ô;³âdžé*Ÿ§:ó^u:Ê/_)¿|¥ü²§üþÙT¨ê3ë›Ëóõ}Ö·SP±¼íNi²NÊ…F«³ïiOù…~§v¡îÔúk ãfÓhèV¨#_yYih»Õ Ðô¦\sÔv™/ÙË}ßï£û¼ ÷yMi›¶+3¥mò{[ƤÉf5¾Ÿ°Ð•heĨR“å½fú¥ô)DU‚BSp­ 2§·Ü“|¶ Aædúz¹ú¿tz¨þ̓B“_Ý1&mXÌQùr'깿â9*êÎÕ`^˜¨N/yˆù®áBòñò%¥…¦øüÓ$º“‡8îiz Ôœ§@š¼•QiÛȯnYè·áMEe¼ù¸ßûžöŒËíµ7Åg^ 8¨Í±Òïks¬4…j·ÐX7Q¡ª..ôAÕÅ•&»‘¯@¬4š“ã„þ¡?¢élû¶Þ?rÓM&Mo7x>ÞY,—^(ó MûŠãjXèLthª*âYú}¿¾@Ïr?NÚޯm˜q¶tz²#Ð3ÞžçBjƒ>’Ú4J-)4iký¾¢ëô늮ИŒ¶ÿrgR´'\ k¸Öp±&m‰Žž ËÝ®tÞ‹6x¢ýǯYО¸—yÚÒÞ›94½÷bÞÒ1ÁˆE~ônÒV)N]{RhX -ØžnTM¥…ªÐ x[Œ e¬¬Yh£/·¬Ðà­Œ¶—ÚçO¼”ìj:ÛÕt¶Ýt¶šê–¶Jތڃ@Ó…™ŠÑÞ…n”êÒœ=mÒôš‘7¬¦ kÚk­;ú×3Ûý­Q½Ò^ïQ¡YYè^ÛÑ¿þ„Ý«[úó§FJ84ÌœÏ¦ÐØvh*yíc?"•Û‰±*4LÙk‹;úßàõ‘ZÝÓ’oCÌ@CòóCTèDtVèB´ÒïŒýî JøóCPèH´)4I­(Rwvà':ƒýúù!*´:ÝrræyvöÖzµŒ‡K9€~u—qË„SQèú^ Ô+%P¯”@½RõJ Ô+%P¯”@½Ru¯š@gHüýºÆþ¦á«¬±%2|~¨ ݈¾¼¿·TåËÉ'SjVhêwUú]©ßUéw£~7¥ßúÝL¡až×GÐ-ü½Ÿ’Bg¢‹BW¢›BÃvUƒ ‘©‚õçEj¤©Ñå~Ù蚤©Ej;*mG’¹)2'·b5EæÎXò9FÛ¡ 4¹0ê&]È-Q¡è¤ÐðåÉ„5–èÝØ”ªB7¢•¶éâsRÆ;Ñx'e¼’sXh’¹2[RV¤FG€T©Ñ EjtHE‘ÎÔ¢H éük,“Y–ãfÒdÜä ´°í¤ÐäƒE¡A#ç¨ô;R¿£Òv¬ïý>“¦#@nA¡#ѦЉh¥ß´‡z^£&V•¹·’C©B¿ …á½c»:0¶«c»:0¶«cŒB¿+Ü&úzû›^‚BG¢³B¢•~ÓÙ FåË#cRèƒCÛBÓ1 ëûèÐÖ¼CÛÿÿ ¬ïJë»*ë»Òú®Êú®´¾kv¢JQ€ªœC+EjSf ùñkW¾¼Ó—+ú¼’>÷rAšæyWæy§yÞ•yÞAjí¤Ö é24ÅÚkdíµ')4H­)W#‹«…¦Ð$5Å^kd¯yù7 MRStjƒ€ùçakôî–—û³Ð‘hShîž ë( ¾w„9n•IÓ+/¡>ÍÎ(hvå=)Q :î……>Hè‚C()t~ïêWQ¾.Dù¢B¸“›mOS9L÷¸Ù…ãfTh:fǤÐùýQ·_u'}’â°Ð) }â°Ð)“&Óˆ g,ô·ðë?rýBw:n _^H§–:­ô›üE™kGå.”…¹V©ZR}L¡ñ˜«ÂxE7ú º¹ÐÑÍ…>ˆn.4}}^IŸ×¨ŒX¤‹Â<§Gݰç¤kÜìWÇÍ>…/U¡É ©5r'µšÌð` ˆf å‰=Õ|¡q`‚pµ‹'ExnŽ 1aNÕ›ôI\v¡)NçÄeW i¡ßlòf·Ð†ÕJ¿7¬Vú½aµÐhUAjl"(ý>Ù2ú@é¯ô{¥¿Ð¬ôƒB£úÆ»Ñ6íxnšÞ!\) °W@œŒ3é˜è46ÿA§×^„•~ïEXèõn¼+} üs¤›BS:Myú ¥e¥ßû Vš¤V©ÑCEÞ©rÒ'§Ê•~ª\èƒSåJ¿?U®4ž*•~“½\šÒoÚ¦‹¢× mÓΙtÒ'gÒ•~&]iÚ잪ÐïÇ }8^i +R#Kß ;¯ôû°óJ¿;/ôAàx¥ßŽWú}®ðB„WšN´œt„‹üœ^„{ÓÎú®çò½“汋"/4•zýüšVöt#­ØšÐv§Ý ×¦Ð µîì“fGdÈWÃ:¯%·ò~XIùEGù-4uŽ>éHÆl {š^J ÅQ_ƒ.tº*š\Çf M™iVšrË’òåtô)Iùr:ú””šÌ²ÔšÌ2 .4]²¬E˜©¶«nBÛ¶«îlW m¤¾x¶”+ÝRÝb{:@± W3•+ʹдv<“&¬)R£wa‚µªÐ”ÎYRa¹iM-gI­4¶Ý÷t¡<§ÂyN+MGŸ§(4é–§)4éç1iòóñómФϣ"sÒÅ’BÓjŠÌé©@~˜{¥Ñµ‘”ÙB÷éJRúM÷éJRú}²•¹—Àxwe¼;Ù-Ý‚BG¢êm8õjéÂ%íiÇmMÎþÈ;“FsÔøšÅ¤NWõêt5ïˆSýþò&ß‹§:'M^„›BÓBt̲I“YV,*ôê\hê·)ý>Q¼õJu.4mv©î飓|Ý«NeÄ:%íw'ü:iÊ5òŽøÊÕ󲣿[Û[­¸Ðd s¾Ï¤#åûDÇCÙöf¸ã hW¹]iä…®D·=éèóÍ>ÿBS}™^š´_V˜4½¸ðÕ>ÿB“ƒàÉ M¦ð#ÌÞ‰¢0ÞG;Q»Ú‰ÚÕNÔ®ŽíjkWûX»ÚÇÚÕ¢]íc N8e¦ž8£æº¢Ù•™zäÊj‚+KÐŽ/÷PåÖJÙÑîÚöô‘3j¡û{gT¿Ú‰úÕN´Ðt KmãN”öt¡«kžC¨_9„úÞ!•¶O4r\ôY¡4Ó¤)¿¨ä°§+eŒxÖ}¿Ññ¹ÑqVݧ™Øfšt Çg`y¡ÙŽáª{áª{áª{Aé^¼ê^¼ê^¼ê^ôº÷ϦDU´«~Jè˜Çh œ´Q8ÎRhÒ–•¶)ѸàÑJ'¢‹BS¿9—p¡±eÚ>9e¬4ž2º@Sy¬¢Ì–“ÀñJ¿¯tyípŸt¥ÜѪŒw¥2Qµ4…æQÒzX)Ù#mGÿú™¦³‹K¹wõU®¾¼ì¿|ßöçOäb‰ìb™trt{½ê^Ýw¹“özÑ®>° ò¯{úHþ³~{lc¿ê^ßv/8 cž6ÙYfÏÍÚ¼‹DYÎ䜴#A Wö„u¾]Ý“XèƒéeKÖ=ÙÊ—gЧeާY¼’y¼Ñ“ö„cWhW“Âö“ÂéžyÝÃñþ‹¶ô>œ0éDG”ÌG”I{3'] Lº˜t50éj`ÒÕÀ¤«IÊÀ\Yh–¯&_ L¾˜¼O´Yí• iåJ´åJ´åJ´åJ´E­b¾öý1€(K9:–Ñ4_)Ëɱ-mII¡Ã&_ÉYiÌæ‹Í7ôM0¼¹ÒŒMÛR<#çgM:V<²%¦˜zì&Ћˆ‹˜tŠÃÚ®†µyÃúû‡¤ÐüýjRÌã …·N™tl¸Þ‚BSpŒ¯D­4MŠ–÷t ¨¤Vø¢Izn&=7Ý[hZë‰çݤKD_¥)4­7žÎ)\Imžß*:šîà:r¥©0|hÔRÎc»)^Im‰dÔøÖô¤#Ý“‹ìPXè²ÒïUÈJ¬±AÞ|’] Œ]‰Ö®º·œzaRØ#|¹Q‡qjÒJÑM¡éË“ð剂ѩ*4•/HÎRZh´ÄRºšRéJC&ACF…¶×6äJ£ Ùúd:O_]½4~X{¥éb—U…nDwÆÇm¢ð剢–‰ëæ®4íiUjÕ,µ|µJ¦ƒ|±‘À }¢¶ó^móeºI}¹™ðåF}Œóô&}¤:ó•êÌŠê,W“bqÜ`ù§$Ð'“¢\íååJùM§Ñ“ÞO©r5¥Ê•ò+[åç$º¬4]®Ê‚Ôrƪ} ]‘Ž{Ú¹—*´íÜÀJõj)-/Ûû¥T¯l˜zuÊ«‚vn}²ç]Aʹ7Î\_h’¹g Ô+K ^Yõʘ4¹¸RO MžöÖ¯t%Z˜-™²Ýr6…¦ îeéË):V„yž©î^.Q¡Im—¤Ð!)E¡ë{¥_¯”þòÂ÷ûÛ_+ýþöWZî¿¿ýµÒïo­ôûÛ_ɽ‡üó§«ÀKšá òfDNë_i:öòE«•&«Óñ¤,ïª]$ÝŠŠÔN6ùô¡K é) Mjûi MÇ ¾8»ÐTŒÀÛ¦¯¢A©_púÕ Gˆç8ÇÞ¾?ö>—y+ûÞ[éœ2úÞ,+B¿¿¬ñ4ý…>0¬&Mõ¹S Mmw©mª8Äiå“Δ¨—SVhÚhSUhüra¼3]ŸÈYïL*å"ÑdŽE攟‹"sz79Eæ´J²²J2}œ«©_™FýÊ4êW¦QL£|åÎÏ~Ãá-c¡9"Ð÷ôÉ–±ÐìÖRÚ¦;èÆêkÒ'Šw¥ëkÕ9éÕ¹ÒïUçJ¿W } :ú@u®ô{Õ¹ÒÔï¢ôû@ùe%cKÿúS$ºíi>ú°v¡Éûí9ƒ¿iRúöý¶=uU iž›3Ï'·«BS>†5…¦‡ÛM™-F³Å8K0Ç«™…™ZšÞá2&èè8y¥ñ ,Бo~Df (ÛÕÀ˜00¦Ð‰è¬Ð…èªÐíýÀ˜00@“‰à kº±tµ”Ò^jì-›´ã-«M:½ ']m8Kz Ζ.Ðý`»JWÛUºÚ®&}p¥¥yRä«éœ¯¦sv†¼§C>X ùj1,W€¨mgX'}ðâÔJÇ÷ª3_íiK ÍaÄŒN8ÞRÊWK)_-¥¼·›ðå‰óPr¹Zˆ³.<Å2çuæ²ÖÚh?5gJ)É[úÐ ™7ªÈƒœéï¯Þ¤(´](DU¸^vv¯ÞüþSyn„Sfi,´¥8~W–Ë3$Z¥íBo`. UÜË3? W Û#QdÏeYê+à¾Þúà=Ærõc¹z±\½ÇX®êJ”Å›DÆG1£ú¶Æy~+M6E0…&›‚ï^®4ÙRA‘Õ¶ H™²¨H ‚)ŠÔ(TfE‘…ʬ(R#_³Ejäk¶ªH }®Ué7³ƒÙ%^éÔéƒ#½8:°Ð˜‘êhäéƒÃ3bVè÷:•ÏÆ“>ÒkñJ¯EA¯%…&‡IPúM27EæF2·¢|9ícžvˆWÚ!n×wŠ‚ÔRÄĨ¦Ð””Åõ«𢽉ï-4Ùê©…¦Üé&´9=»(ú´£¿Çþ¡ÄÇ¿èH—ã<“pÒ%½ö’—½—Ü3næ=S:YÚ¶ŒJ ôÉF«ø÷óŽþµÙÑë~¹*49Dñž4nWœ×9éHyÑÙp–Ø:D…/·Ê¤Ð¤¶¹¬à¤‰¯í–|5[òÕlÉW³%ogKp櫓¸çN—,”M ÉsVhÒ©ŠÌŽºùjžçí<÷Ê‹ë£`E¡IŸ?Âx7óÕq3ï›Êl1š-¦Ì£jYéwÁ}LX%VÓûc¾:0.ïH·÷å —PÆy²¨Ð”3nI¡én„ «äf/ùõ'úò¦|9%|fe¶äÊM(!ª²£SØÉw›ôIÈb¡B5¥^õ»^õû*DµÒïC5 íG‰cõýý5‰è‰¿èB©£¥˜BSþ¸ãJìWý^ŠY“õåØó^ ÷sÚÎT 2;úu†¨ÈÅ"HíßÐ(õ¡qêÃJG¢M¡é)Ç^ž4͵V”¶©DdkJ¿é¹ªÖ„ñnt’o]ùr²:›cuΈh¼»2Þ=Ã\ëʈu²Õ;ßЬÏÍú®Ï^›t¤ËÎŽ^›ô‰^›´ó¼F W WÂY"~ؽ¸§õ•¦TÍB¿+ô¯¯NºÇBthö7Öx5¬ñjX£0¬¶§æü +ùY+'®t#ZZ%_HMA¡#ѦÐôOR¤Fé|5)R£t¾š©Ñ¾R³"5²#jV¤Fþ§š©‘GÁS!ñJ…Ä+bWÚÁ®´ƒ])}»Rú¶Wúì˜t¥ÌÌÊžÒ•¦‡¶Ø¯¾Ðt•²¦¨ÐFtRh’ZR¤FéÕ¤Hî*Ô¬H ŸΊÔÈf­Y‘ZFC‘=ÃW³"µƒGÝ&ýM¡ÒùBW¢›B¿€y¡`®éJ+¦+­˜®l¦te3¥+›)]ÙLéÊfJW6Sº²™Ò•Í”®ÖwºZßéj%aE…æÉW 1_-ļ]ˆÎ½˜•¦`ËSš‚LÐï“L±•~Ÿ»Òï3`Wú}l½ IÖ«d݇$=µ¯Ôv¾RÛùJmç+µ¯Ôv¾RÛùJmç«£n¾:êæ«£n¾:êæ«£nŽºÂ—wz3Ä;(竃r¹Ú‰ÊÕNT®v¢…®ïÙåê˜]®|«åÊ1Rþãí›'õjRÔ«I1iÊÆ Ai›l·àØn ÍÂÙ‘WX­3ˆL3'pÞö¤c8p-íƒÈÍ9îºQÎxs¢0“¦Dׯ‰®+MÍj Mýæô¢•.DW…¦@.߀_hºÂØzThê7ç‚LºÓ\ëYZ§ý´gAjؽ˜B“ƒF™©Ÿ©¨]PaG;ÛGã+úu‰°ÓBìBÛÊ`4Î^iZ ]øòN×mz( MÃÊוÛ#ŒXÜÑNjSᬆ®Ú^BÐFtRhÜp„¶¹¢ gâ®ôûLÜ•¦J\Ðr¡Þ QúèrVH ýþZÙJ“Ô‚"5zÓ¢"µHR‹‚Ôrż΢ÐXt_èw¡œÒÒŠBÓa¢ImSÑý.ȼQ쪥¤Ð´—¤¢Ð”­•šB³ò‹WÊ/n¯§€â• ‰‚ 1…~ïµkË}?z¯¸ý.ÏÆBÛ…–q©JÛ´Œ‹³Œº¿ßh¯’cš“„ÙâøüšB¿·}’HKÂLmä1lIZ§·±;_bXh¾xÛìJ…ØÞ~*í<šB( » Y¬ôûEnÅ¥ßA‡I§Fo ðùh¥éF£Bl«xsÚ.ÕvShR~U˜-…œ$¥f…¦óMi›n•&ÌÔ#µ­ä sí$T³Òéu°e¥ß[ÚUîO»ÊýYi —(ý¦»†M‘y#™·”-^Aæ¼ÙŤжJaÄ:=^,ì¡¿þDÞe•tZ%ݱ}Þ‘·§íþí–¼£÷) }r°ÒûwºÚ¿ú}ÊÁJ^ÒÕî¿Ðñ½!m½ÞÁ) §¦Ðû÷¤ñ&M ß»’pìR¾üd÷_hô­f…FÛAç•~Ÿñ¼ÐÏ+ý>ãy¥ßg<¯ôûŒç•>8ê¦+«']Y= ý>ãyÒŽŸ/+ôÝ’®ì–tey,4ec:«dŸ*øÝ­–·ÑèX³Š Yщ¼,4¶]kßö=}ä ÏWÞðIsÐZ =`ÛŸgOwº«ÞËcI¥âIQ®&ä̘*ñ½;©\™„åÊ$,W¡¡råÒ)W.²7 ³¬\™eåÊ4*W¦QÙ›FIhû$ u¥ßg¡.ôÉ6]®¶é…~qaÒGΉâÔ¶Ût¹r/,™”±cU¡±ma…vʶöœåÊ9Q}žv´g`8í #o´uO—ÖÞÇʪ·Mÿü©] §m…ã$øN³GrèŒþlNœt¡”A/ڮ짅>È&hS}½¿95é£3ÊBº½?áÌ´=;C.t~¯¾š ¾¸m%—°ìè_“‚ N]iJƒïiOwÜ®œ“üR1‡lõšÆ;+_N&BÏE¡É—î˜ MR+ŠÔ¨j/ŠÔ V)R¤ÆUŠ©qZ®"5Î\éÏÍRê3É“òãBg+M8-w¡)-7r¢À¤#e*E>®4 ùBû¤.Ûš _ntaÃØf]i ±Ò_i2O¬(4%H˜"5rŠYR¤FÆ5Aj‰4I™©‰fjQè´)4Þ`¤ÖhÃi9*4™FY˜k SþÝÒH·´*Ì5çŠ0bÊg÷GZ'j’BÓ†£èóNˆþ4…¦mZÑÈ4rŠÔ(ý¼W¥mòXu>útå²BÙÑ¿vÒÈìÁ˜ô‘v[íÐùð2éN‡—·—•n¯Má…>0…Wú½)¼Òïoj­ô{cv¡Ù˜5…¦ñ.ÊxSª^/J¿é6¤g§Æ«5·Öž·ÇýÚ„¶}.Ñx…KørÖŠQi;aTè“yom+Í‹Á®¦”]©m»ñA¬ô{D_2ÓÈDHE¡&…Ýø?úDéÛ•Ò·ÿÇJ¿÷¬ôÁR²«¥d7þ•~ïÿXiÞWÒÕ2ž©’TØ.D‰&†ã˜OÑ%‰¦e‹w>ŒDÆ$ŽÉ¯4E—9Õb¡i7NŽ¥¿ÐôFPÚ¦DËÊñáIW SÔ.´Ý¨ÌGã+ð+߫ΙR”‘6…Nï•_”Ÿ 5o/ÏWJ _™‡ùÊ<ÌWæa¾2ó•y˜¯,|µŸæ«ýtÒÅ2Všw%%çiKÿú=þæè×%´Î°ÎÜʉÈötÁ%8-º/ùïËÌ®4NHAjÞÌ©WÃZ¯†uÒoe&…ÎïC5õ*TS·¡ãò]“Æ÷p¬6¦t2Ïñ_¯ÿuëøO=)4¾$ô;S);A¦ISÉyE¨×­¨EÚÉ+B+ýþ¡•ÆpIVhÊæÈ‚v8 xÔ}À£4…¦€Gf ¿T½Öè‘h/ØR÷Á–$´}äQ¨W…*X@U¡Û{£zÒXPQY¡Žý¤ôûÄ'P=ëëŸMNÄJ÷÷a¢z&Zh:Dq†\Wò ÛŽ>+¢¸Ð¸;F]và´§®W_[éJ´ µZ0ü-|ùIùÇ~Uþ±_•ìWåûUùǾ/ÿèQìWEûUÅ~UDq¡+°“Bç÷ºEɧì;úW™Yª^ëø šoåß+MÃ:.?yÝü„AïÅÿÿ€æèB'ÚpRÚN´á$\ÆФ:kÝÓ… W–.ÐîF4ÌõZéßšá+ýÞ ÿƒ&µ†ÕJ“aÕJPh|†4)ôk#~¥ßoЯ·Œ?h˜pµŒÃ~[ÚÓF7 ¬ mÚOÝšÜy½îé£e®CCRh<+_Nª³á%Ä?h{kÃŒä¾Ã™·35–º§#Y±t®X‡¤íiLl.ŽÚži6¤¶Kú}4Ïg9@Zßµ #V)›£ö¨Ðtu³'…&_–,ÿƒÆ€fShÚpAjnž·'*4­Ð')4é– H­Q¥¿šB“Ô¢"5ºTÞ¢"5ÊZjQ‘ä[ã¶…|«v´§×ãÆÍT÷tÁU’úž>xâçŸøI ýúb÷ôë‹Ý+Íz­*4Y µFE½j dÞ/!k)léïgãß!±¾§îÖL¡Ñ)|ywŽùJ8y+œîhŠ,øx£B¿öâüA³pÊ•pÊV8ž'eÒ¤Fƒ=M%vB+{:’›):ÛÇBSÕ ´ýíbÞÿ{Rž¼§DNOUè×¹v+Ð.Œ˜À6…~íºÿƒ.o]÷Ðþ~„~g2Më#̵Jó¼*óœs ›ÐïJ µ+_ÞѨfj£™Ú‚ óFŽà¦¬Ð#“¼l7üî8‡–J.X AZ§¢†=E…¦ ' Ú¡“iÚsVh ¶2?¶¬4y+½¶áåË1DÕ„yÞ/D!ÏÌÙäë•yXó0(4µÝÒžv†•'¤#¶£ûݳXhÛë^¿ê^¿²€f1 :Põ'+4i g_YhJuq, å4šRŠÔj|ýA¿®ñµÒïk|ýA¿®ñõ}0'Í©.8[Âs3ÏCø_ÐNegžOÚ¹?ßg [ Þ=Ú%®‘vôG´ä{ŒQ 3ÖÄe¯i°«/Ÿïáê ¬:W/‰e¦Ç‹>^üMç± 4{^øƒ¦Ì³=GnSÚ6jÛ´¶©h¬e…¦â@Vš Õ˜0b–ÐQ÷t¢˜Jz’Bg¢‹B“£óÿ )Í&<ýþBâ4^HT¤Fº%)º…Ý;A‘{ST¤F‘¨©òï—.ÌóJW)ÍB8hVú½ƒf¥ßGšú Ò”ˆLRè÷‘æ•~i^é÷‘æ°DƒÞGšWú}¤y¥)Ò¬hÅFZ±)Z±‘VlŠVl¤›¢iŦhÅÞÇçWú½30(Ñ?Ejñù•~Ÿ7Õ5Vúý]˜?è×waþ _ßþƒ~}øúuu•~_]ãúuu?è×7iþ _ߤùƒÆ›4‚•ÛéÆX¯ÂîßÉSçøVƒzO;ú¨äÇJsù͸§“EßÓ‰\xIé÷‘š®lÅùBY{ù {ºR²rr¥éYÎbYiÌbÚn³XšJ´(H­S¸+KüA¿wº†›×“þ _¿ž´Òèø, Í»ARè}ž®ôyô¹ [<Å«¤õ”íºóžÎT{8ó}”…&·JfO|P2vÚŽþõ':0:‡—ѧÃKu/ MG>çð²Ðtä{šBS¿ÃˤéðRƒ"5”yTڦͮF¥mšç5*#FæIŠÌ)¿«šÒo*QMé7™F•/.„zµÆêÕ«Wk¬^­±IÓ6]mz¡)¹ØÙ¦š +ÇéB>öâ &MÛtqfÒdÔ•V÷´çNÂðÑvô¯Ñkï‡u–Ÿhè­M—ú½I±ÐôPv7…Æ)•÷t¡3i U¡qB&Ž8¥„+XHÁ„¶=×}½šË“ý½YY õj1Ôíb0Ç :/·S½ï8°ÐÔv6…&ÇsÎMƆqY£Ig:dEj™ŠÊNc¡é8•/§#Xæ´ô•¦//Âxgªp‘‹)4¹o9¨;éB‰ˆžò«[åWº0ד\¡©ºFmÂxW²¾*—ŸˆíJ#·+Ü®4ò,?ANPsœ  M®†,|¹‘ÔœÚ'IRhrïðÅ‘•¦§¥ŠÒïŠZQèw¦Ëʈe±Ìušv¢œM¡ÑI’šú•~“^ËE‘99½sI ‰. {ISèþÞmž9ŠÊöoºá›©A¡ÑÕ` ÍÝëWj{æ ÑB ÎF;iª˜/íBÛ{s´_™£ýÊíWæh¿2GC{ï!ž4%æšT§2׎¼Ó MªÓqkõ+#¾_ñýʈïWF|¿2âû•߯Œø™ßxxºÒïOú ñt¥û~»ÊŠÔد®´MÛt-ŠÌq›®Ê—Ÿl•ÝÛ*ÿÙT˜ôI¥•~_i`¡* ¬ôûJ+ñ¥íƒûú¦¤&oé_w‰éF.gQØò8VÄÚ®d·8ù ÝPjuO7Š6® µÒ´Jx\hÚ[j JÀÂÕ¤˜ Ý´Ñ6êlyjˆŒºÞ÷tzðµ²,Ð”ŽœªÐ6¿7Æ—~šjð:µüWÛ® MÁÔ¤ô›Ïå/Ws-^͵å©!,Û÷ôÑLW3u)Eˆ¾—°§KBÅû4ùÚJd^(i ¡ß«¢G…>¸÷¶Òïï½-4§˜…&³Ì™;&¡BÓuÇ$œô‘VŒ{­Ø©y H¹=“wôYmÌ•~ÿ˜ÅB¾'úà)ŒIŸˆ¦´Í¥?”®ÐBcJ>šÎi?ùâáBc±7~/Ôl̲£½Øö4–°nBÛÎF[÷ôI™Ù…>x|o¥ß?¾7içñ=…æw€L¡ñ ¢.Ðñ`ËÈÂ*æÚÉ{ }PÑÊÕ+Wk¬l×XŒaOLjtRhÊqNvË«p”=’„~;ÅÖ«BcÁsáË¥å:…¿3½‹ðå…Bb…Cb MYR…Ç+Mõ ªòå´•ª|9­ÐÒ”/oXÉB˜ç'ÅÖm©Ä†ù‚Ôð²ˆser¡ʆÛò"þ¤v–Zi<ú(_~ðíB“íКÒ6³[´C£ë&èóN»SÊy¡J9/ôA)ç•ÆRÎÊ——÷oÊ™ò¦œ × 8&oóÂWª‘hªšìÄÍ–Ë ¸òžntÜl±)4Þ|ŽMyÍqßNÚÑííjXgÖqGwžíi¾Fèì§ ™Þ@Ócôµ ýnd³6'ž0iZ /~.´óBN£séWA¦¾ 294v•Acû /7`æcðœOÏhÓâóÝ'žó+M÷;Ù†\hšó‘mÈ•¦ Ê-)4¥›°3vÒ‰NÖফ”ô(“"\MŠp5¬“¦¼¯Ø„¶O'&)‡Ø©Ô´Ð´6×&]È\+l®¥p5)”¤ þr!q‚«¤™8AýN¿'Íi«É®>p†'9,¥«&ÒE¸Ð'Lžÿš«.f…¦à‡³}¤­%šÒoÚ>‚³}ä«ñÎWã¯Æ;_w¾ï|5Þùj¼óÕx Na¥éÖÅZ•ìRN‹‹‘Ü›ìR^hÊÍHÎ^¾Ðx1O ù¦ƒcdÕ+™Ïs²¡#¾ 4{­S»úÀ¶SO:·÷Sª]M©v5¥ÚvJ%Ej‰†59Ã:i.«|yÂÒ«A ¹ì«Òoï¦|9æ 4Aj™RnœÂ­+M¢Ò6½«à”^]hr9eg›îWë»_­ï~µ¾ûÕúîWë»_­ï~µ¾ûÕúîWë»ï×wSÚ>Y¡ýj…ö«Ú¯Vh¿Y¡ù¹Y¡ù¹Y¡ }°Bós³Bú`…®ôûºÒïWèB¬Ð•~¿Bú`^é÷;ðB¬ïIŸ¬Ð…>X¡ }²BÃÕ W+4\­ÐpµBÃÕ W+4\­ÐpµBÃÕ W+4\­ÐpµBÃÕ W+4\­ÐxµBãÕ W+4^­ÐxµBãÕ W+4^­ÐxµBã•»Ð'k,^­±xµÆâÕS"mG÷Xí¼T M¹´qÿå¿þ®ê¹•“.á}ÁÔ•¦| .G°ÐøÞg­4`ºÖt5¬i;¬óŸºLŠ´‰Øyyÿ•~hJŠKœ¦¼Òé½ÒO‚7\h;Ó›SŽ/}¥ß—È[é÷%òú .ž…—ŠD¿¯9´Ò$ó¢È_¬*ŠÌê-tÅ÷©a9ƪH¢|¹ z-SrwV4S&Í”›òåT÷'w¥m*ˆœ»Ò6>ÏÈ—Ò&]è Dáôì•Æ¶‹BÓ&ÿ4…¦Ì• ìc…Ë=#]éÊÀHWFR %Í íhg“÷¶é<7;{¿Ùå«í*_m mï•þB×÷j;_©í,¨í$Дâ9Åa¡Yù RsÔ—D£d^è•‚B¨|¥B²§B~þT®”@¹:e”«SF¹R@åêœP®Î åêœ dÍT¡mo­×«I1Ó[2–ù}údX«àw3…Æ)MU|œGƒWŸ‘ëM…[gš2©H4ùÝŠ0[ŽwS¤F÷ïò“ö4?Ÿ„™šÃûÅ M7¢³2ϳ¥÷{y»ZßíJé·½ÒçwšJ ‡¬|9Y~N¦÷B$yæ%+ÝZM¡¢JNòåd«'K ßëÔ&èTåËéöXJÊ—'úò$}9êse¼_hºV–²"5ÞK©QÝŸ¤¬ïDë;)ëûä ù•®ï÷±% ’d.iº1–šòåxcŒë¬t{7[20i'rÎfm¿?U¡bvKö'¦CPhÚý×ÒUæéB<°ÒïŸFXé÷O#,4Ú-¦´}rôiÊÑGIËm;úÐ4êWçá~uëWQ·~ušîW§é~ušÞ'{ŽÈ~uëWnÌ~uëWNЫ·:Vú nÖ¯âfWï„,4•5tË÷µþ¦O° M_Þ”/§‚й+mS‰<Ïù;k$PúyyL¡Ó{×ñB“ö© ÝÞGŸú•ë¸ ®ca¼øQQòãÛŽ>Û*}ŒœËY”ìz>Ùìú`³[é÷›]ró¹ÜíB“yâø7Wš¾<)_Žy…I1Ú*ßêBS‚Š“ÓX„{M‘¥8‘+MF]k Ý_ûVËr«€ü›œ4°Òè×m Ý_ûuš’2W£[iÚì‚"5z$)›BÒ,sá6…£ÂÍáe¡ùðb{:’VŒŽV\hª3ÄÙÖ+Mi8Ûz¡&¿Å=}ò\ßJÓlÉE¡i…²§n¥i…rŒp¡Þ¦]é÷oÓ®ôû·iWúýÛ´+MR«ŠÔ¨¢k®ŠÔŽ>+MR«ŠÔ*I­*R#ïhnJÛalRÛ4b]±ƒc×Jã±Ké7UÍ]é7=ÃQ¡ßë¹?Q¡ß';®ôûdÇ•~Ÿì¸Ò“©‘ÝR‚"µ€79”~S Þ•~GêwTú}h¹Òl`—àÃ*î +~£µ¸5̶fÙr ®¼?(Ç«ƒòrŽ]´^i C*m“w4±s¥ñØõ4“BÓfç,ÄåmWQøòL 1ǨЖ*Í bW Ñ®â¤rOú ÷dÒGËØ®–± Ë8(ô·Ì®¼e¶÷–)ãí¨¥ß`ñÐBc>Ÿ2Þ¥½W_&¨/e¦äA¬ôò³+å7郘üJ¿É¯ôû˜üBŸœì„kªŽWx¹hJ%¯ðBcÉÇ(ÐÔïàœ*mÔ¶9é…†5fYè·QôòÒ6™„V¢BÓkÂ%)4½äxO&/W¥mòAXÚ>ÉŠ[é÷Yq+ý>+n¥)—ÐñµMšfKRfËIFÞJ“Ô”Ùr’Ï7铪g 0³\X¡lH'Aæ9áݺ¤Ð´‡¦¢Ðä5JŠÌ±¤kfj¦¬×¬èÔœË{¯pºò §½WXÙÇ*ynjH Mït†¢ÐôEÆ»’ÍT£)4=¬ÌµJs­*s­âÃY1ÚKª²—T|YUÙK*í%UÙK*ÍóªÌs~°D±¸œ‡¡³B¢«Bã;BÛ-Ò üòâJ¿Ag¡o(ÂqǺßt7g'ÊÓÊíd+ m¥ šsžtE¯EÛÓ'÷NVúÀï¯,®å%Ý÷Ùü+M ŽÊ—Å'çKºôåõF¬Òk¶Õ„ÙR)Š_SPhÜÇŠB·÷ûXö1ShÜ ºâ»bŠÌ)²ê¼ñ]”W›…yÎÝ9:U¸rïh‡åÒ|&º(ôûÇAšFÌó·Áߢ|9åxÞš²÷Ö8gƒrå1)W^‹åº?Þ<ÙIÜB\é÷·úàâJø[Ê•¿¥\ù[ʕ翞ÿ¬Ðå½ç¿l=ÿùF,?˜ù(Ì–£¬Ë…>Ⱥ\hŒ…®ïãeïë‰JÛ±¾÷•+OQ¹ò•+O‘ðø¢™O‘°JN®MºR”©*³¥Òl©1*4Y=Qï#ÏA¹òÁs`MçÐZ³B“ç V…&û¼)#FñPçíÝ…¦,¼ösÍyÓ=*4½Üû$…ÎäóPÚ¦yÞ”yÞ(ç ™)47!XržÂß½ïéHƘ:ãÓ¶@<«;é\ñÅ7¡mçþdh*`ç¼m^ªà„‹ ÍSª]M©¶ŸR\Yp¡©² w²kû³™IŸ4Yú–•¶ùd—šOv‚Ì“Ðo¾Ó–…;:] UZŠÒ6ÆÊœ}åªjGQên³%“?G¥í“,ISö¡S¨`¥ß*XéòÞÚž4FV³Òïƒëþ+}`«·i«cd5+4ÆF•¶ÙÒÆÛ‰n ë›-ý¢ôûÄVŸ4eéxÖö¤[xomOº“¿+R£3íúÝ(~Ñ‚ÐïF§Ê¦h¦Œ›veÜ4Ÿªò8®†Y‡®ÍçÚ\œÞ¶§3–²£úÕ†³Ð)© }’Ú¯6»>•©¯&ŒØ‘èWGî>—1…†žªÐ˜f Ì–F¦Q A¡I ShT_Y¡Ë{å·Ð$5e%gtAu*RcDê¬ð½.µNH}qfÒÊ‚5΃¨BE¶ë¼OŠ7r´q¥ÉQÁQ·•¦Seo{:=¤¶9› ./î‘›# R+T­µXRhºýÊ$VšnZShº*õ›*Ŗ𤖩Q$¤$Ejä{)I‘Å +«íIWRÛÎ g¥É3ªB·×磅&µ]Ym¯ôûÌÓ•¦Í΄/ohU¡ÙªñJñÆí–aüÎѤ­cºïéD®ÄÄ®ÄIJ•,&|y¡ë‚¥ _~’€¶Ð¸ªB7 YRk4Þ“ÀVšCVÚ&l+JÛäjÊ\klÎ\³«5fWkÌæ‹D…®ïWè¼dIfYr̲…Nï×·í×w¾¼PübQ¡Ë{ãfÒ”"ꓦ@n}„¹æh¦¬Ðå½^[húò ÈÜ1O„Ù☂̛a’gUhÚä³°¾ lYùrr¸·¬|9kä¨Ðz/Ê—³>—¾œœ UX%Înš¾œÝÖU¸DíÒçEf æ🴑ÓÛø]Ê•¦DKGæóŠ&ÒÓ^j¿”>Ö¸Uhr[çˆ?/ÑõÐúm×€š©tÄË ‚Ì+¥·TeÄ8ißY% šIh»Q¨¿eaĥ嶒mA iž7.[ó•vÈWÚ! Ú!*4µÍ×,Vº¾×-Y°SM¡Ó{Í”¯4ÓB“#Ì„~Zßž^[®Q‘fz¢BSì„‹ç­4Ža¦²NåèÇBŸèÔ,èTEjæJ¿éEìÚ”~·ôÞÊÍ{+7 m;ú\i;£…-HÍÙ ’Bç÷vjöa®5ÒkM™k¼)z­q´–«íj¹ƒÒß+ýråœ(WΉ%Ó;¾_Æåj—}œŽ³Ã:áBÌ}rÜ,W˸\VËÕaµ\-ãrµŒ:¿w].4Íg} É뎻¸nMBo˘©ÐN0OH…v¼'Ë3ŸX‚îÙÓ'åïêòDÙûRl“.XV¤ _~t²kû“]hçBµ µf8¥©yG0!ÍÑ3ó‘±F!1¾é¾ÒïßgœtKÂéû!U…FóPøòNØnU¡ÑJÛä®ïŽ–ZèH´)4L{n&d{n&äJ¿Ÿ“n”ŠÞ8}¥ûëI1éNI"=E…ÆÑkáj`Ftß(ØblYh:Wš‚ŠÁš2¦8T³Ò•è.Ðè±(Èüh1„«Å°¼l/š mÊ´/¥)4¹™ª0[ vJUÚ¦ßÂFÖB“‰VØ~t5tõ#vRëg¥éŒè(¿…¦Plª ý¾âÝBT¼[i äf¥ßt¬Yé7ž0“ ×޶«…®¯- IwºÇÜ£0Ï;9%»…®D ëûh£ ÊF+丕-ýëOTxš£A MóŽŠLÚ¨h‡9ªsÒ¤:ÍQ“¦ó©5åËÆ’ÒžNKJœó´Òt.ïRۧ挩•¦HTF,S<'›0bËda¦ž8çVú½sn¡ÙÇšú­¬ïVÒk÷ÚB³—\‘9u= ãÝi£íY˜ç¢½ó¼“Q׫Ҷ#!m’}®myE…*þsàeÒF5_c[èŽ)›Q¡1žï£…&+„'Ú’NFiUEÚ‰‡¾]¥“­4†éŠB“ÔœóÑ’Fê‹ÓÚU2Z»JFkéj…¦«š® «™ŒFnd‹BÛF÷2Œãw Mñ;ϰJW†Uº2¬š®\pàJV M×££ ólxÏNy£w½Ý•F³Ì:½×ÈéJ#§+œ®4rºÒÈéJ#§+œ®4rú_hä³c MG¾¦h¦N«¤+«¤Ó*éÊ*é´Jz. MŒ,H­ÓᥥߴJº²J:­’®¬’N«¤—¦Ð`©‚néDîU™ktìòNBš¬Óo!k‰/Eµ‘Q)N#ߤéÈ#ßBcÛE¡©`Q¾œö’X„¶¹8Š·YjßR²DËÍ/s‡=]ÈÊ-Ž•»Ðt­ 2/´Æ¼ÈKÙÆN*W)št¥ºœÎµ‡•¦ÈË#¬±“wŽšœpN‚ïBÓÕÁjÂLÅܾö«¤QZ´SÖe¡¹0‹Ò6–VájÅ­^éÔ™)Æo$>M–‡óFâB“­è¼$:é“ÂK Mi\Î;f MÙyÇl¥i}G¡íJ…ñvÖ˜)4¾Š¥´M¹*3õh}׫õ]¯Öw½Zßíj}/UcéElç4×ö×\Yh:YDçü½Ðý½Íԛɚ¾Ü \.ty¯×–ê©ï_H^è­¸ÐïËѵ«Ú« Ͷ¢Ðï#[±ímEeZcEYcNŽOVh´r•/'Zšòå'B3™™/÷šB¿/·°Òå½…Ý®,ì¥b-íÀ\¬¡)Õr™¼CºÒï_ÕXèƒr“M©9+ôû¤`äJ¿/¹Ð#Wú}ÁÈ•~_òq¥ß—|\èƒ÷!špÀÑ©K9Y¬•o /ÞW…&_ßšt¤[CÑñ;Lúà釕Æg'’BSô< ýæŠ0ÞFi,¦Œ·U¬Û.Híä}§•~ÿ¾ÓJ¿ßi¥ß¿ï´Ðï;-ôAÍøIò§–¬Ðu(Ê\«/€%…ÆÊëE¡ß¿í¼ÐTÀ®6Shì^n̰9Úg]Jß =íik”ñÙÚžÎôðuæ*+MG~øz¥i1tAj…ªI”'(4?Ø _iªæød…¦CÛSš”À£H̲©µ†µfx¦ ×—Øî#q;ðjíBâöž>»";é“רº»èˆvdeEšÑ™ ]ˆ®MåM"G?&]ètU¢BÓK&£|]ÈFsTçÌ'#ÏMáSƤ 2 Ÿ2ºf¯QâÑœ•Õ—x4­ÎÊšt¦|ÑÌéî+M2ž=]èÕÁˆV•¾ÐïBñ‹›B¿/Û´ÐÅIWú}Ýö•~_·}¡ñf{¤»û²çÏŸ„@¢cÍWñÑ/¾¢Ù——ÿž÷Ó¹ ÓYhûÈt'KU¡é½£üÚÕˆÍ*‘ ø(Ò Z¼áù=˜.Ýwô¯Ý˜6;t‚.t''(ËüC‡«/ãË20žÆËUh;“³?£Yö‰@I¡éËñ]Ð?hÜ*©åŽÛ´òåïOvÐííF»Ð…*ý•')t~»MÿA׃5¶k¬:mÇ«5wÚ!ïÛþ^`ßïèô{üÉv݋ޤ°Ñ=òÒz“bÒtFyúž.´Œ‹·Œ'Mž2º£ÒŽHW2OW2OW2OÃòÃ*Y ©îFiU¡Éxü𤖋B“Ôrè£ñnWãݮƻïÇ»ïè_þeºêY!?t"MòlÖISý.o›4f%zš©­Hwë¼mº_iä~¥‘']têÝ) µ—¬Ðä˜*U¡ÉÀ(ÏBÛN¹¤¨ÐtãØ±4 =U…¦3QQúÍ…žL¡öï…>Ø¿C¾Zcy·ÆbÍMNïè¸omÏs°¾ó8YÐóÆ{Ð4Þ©D…>8—,ôÁ¹d¡Î%¡\Í–²ÕÈ)îi£, óÖØ i™·Æ&MµŒ¼56iº;ëÙȃ¦[CVƒBcƳÒoÊp·ªô›Ö·u¡ßéÁSlPèK³\YšåÊÒ,W–fÙ[šM¡I+ÆG )·,Eg}×+ݲõ FïD5h:Qy²Ac Yw/©W{É•W2\y%C»±vµ´ýn ´Í÷@¼½¤]í%íj/iW{I»ÚKÚ~/Q¤F·gܨ]íDíj'jW;Ѥi…:é ]΂ƒ¦;¤)D…&;ÕIqXhêwPúêÁ>Ö®ö±vµMš¤©yŽ‘~¥xû•âíWŠ·ïoUèåׯ”_¿R~}¯ü”~³ÃWøò3ƒò* ¼€ÎÏŸâs3ãscùMúÄò´‘Ó, tÂ…h{úh_Yèƒ}eÒ'>Æ…>Ðí“v4d܇†,îè£ßÐõ}xfÐNx&*4m>NèwÒGn6ÝIŸlº ít/^MŠ‘.Š*ÜÖ:Ñ,)E…¦aMI¡IS8©T M“"5…¦I‘©Qñ/ôO`¡|ƒÎF×{¼qÒÎÚÕ2¶­ýêØq“>9Ä.ôÁ!6ÚÍ1tÒGºÝ®t»]évSt{ºšiLŠp`‰ š"æD+kv.ÏÁ„LWrÐïßIXé##+]YéÊÈJWFÖ6ÂîesLú$›c¡îå«¥”¯–Ò ±¼·éNš*{x›î¤é(è¸ñ']q_I Mý®J¿+V4QFìhO]«Y éÖœ9·æ}¶#Nú Åg¡Ñ«¢|ù‘ÈWJ ;J`¿Ñ–+íP®Ü-# L27'mÒt©ß”/7z×ÞRh<À=BÛgNqæÚøÓ>úêuo ôN·#˜°þoè÷/.üAS='–7iŠåEÇ!=irHǪôû}À•n$sç¶`Ü ¼M¾ïÆ»8™[ƒ.T=§8yÛ“¦WªŠçkž4Á²¬ÐtÇÒ”~ÓKÙE‘yA™'åËé­ë’”/OX…ïè÷MºÒ ­NÀÉž›yn#¶@…b }×´F&ŠB×÷!ÂA' •¥j M†UWh:Uæ,|yÎH…¦ò¹)4UÙ,Ê—SNJ.Ê—c•Í®Ðï+TýA¿®PµÐªþ _W¨úÐáJ;„½ÕÓúý«+ͯD…¦*Žwz¡É^+E¡Ñ^S¤Fï©ÅªHé®>[}Þ”Ùrb¯Ù>òåìß6"_T"9–æ ÕsÏÞúç$ovÕ½qʸÝ3§{ãO{ï´·ÖÓÕZOûµžšN8ÞÎ0hÚìé{Ú( ۜ쵅¦»“½¶ÐäsÜ; MN±(Œ˜q¸DyÂläØš=&|y"K²¨Ðäæ°¤Ðõô,Þ½ÓÛI³Š(_ŽbéË_?°Ð¥„ƒyÞ®æùÖç®Ð¶[¡Ù;°·1Ï_?MñÖX»ZcíêÀÞ¶ö¢ô›”¾{äž4¶ÝšÍNö ™M±æ ÌÞCìöl$<ãÝ^ïT?i *>RÛd»9q”IS¢ŒkùõågQé÷IÊBä¡Lú$eÒ'y(“> `Oú$e¡òPíÅ©ÓÖ m{úûŠùýï+)\µ=2¡Ÿ×O=­tB'tShZˆŽ#xÒ”:jNHrÒô°…9΂ISØÀœRœ MývÊNšJhYW¤æxèSÜO©²£]íü4݇ó< …¬Ðå½Ga¡ö•Ic]µ*ÈK—"|ùÁ›©+]É$¯Q¡©0vU¾üý›©+Ío¦*_þþÍÔ…®+®&|yMðåÕÉYhz=,e…¦xmª Mo‡fa•TŒ4ç¨ÐôÒlVúM¶[K¶§Áš"µFG0ÏÒt'MÂLíÎ 3mýû^ÞWY÷xIϹI¶Ðô”žsÒ4Ö~nN!ôAÕ@^h**éÙOƒ>)åµÐ¥¼šúídú ”פ¹”—Òï“R^ }PÊkÒÞ^¾D™§)æ= <#ÆôlÇ­8铪 ]ÞŸOÓöž„—±6裌µI¿Mj¥ÉµW<Å;ij;)mg´#Úž>ÛËÓÕ^>iz»5'…¦h²JŽbI íLÈm°Ë‹x§‘?NýæMŠìãOÛ`Wrr%ÒWQ®Drr%š<:­)4ÅO'ˆ&M×!’ã5]hr¥;iâƒÎä¬ÉÞ¹|ÒäÎ~šBSŽˆã÷œ4Y 9*ýÆÇ²L±£û® MÁ.ï¤U÷«¤ìèÓy^wó¼¡íRУКÚv²¸&}äQ¨[Ÿ€§™êÕYiÒT›×šìˆnE¡±B}Sh2É“0b®v'¸™¶aYW+¶+­Ø®´bÛjEÏ×9hòuæštjP¤FÙS9(R£«êînЮvƒ¶Ý ¢òåä,p÷’A¾~¡|¹á>¦|9ùüÜhí-Þ\7<¾¼ÑötsJøåm ­8lä‘&N›¼wíg¡®ý,4m8Öš†µ8úÐtÝ))R;¹r´ÐWŽšàEhûèÒPWs-ìçZUèv0Þáj¼ÃÕxOšLBçÀ8è£CóB;¢WÃ÷^œªÐý`XãÞ”úd)EE´¶mßѧ:ήæ¼]Íy»Òqv50v¥ãÒÕˆM·b8¹à”l{ÚÑN¿·ž³â¸sÙÓiGÿJB¥Ùâ8‡]) ß<f<8é kÝw¯íhïýZ'l“·©»Þs̃vžz/ }ð~íBÓÙØ)æ1içH”ÛÕÀ´«™Ù¢ô\hèpX£BÛÁ°¶«amûaUúí k¿ÖqꢌM/…xÐ<¬ŽWeÐýÁ'‘‹BÓÀΤ=á„+ᄽpöôW`¿ÿ¦á(î÷;^õ;:ý²«&l»(›ô?ôG‚ñ``&f­]ÍZSfmºmºmºmºmºšóùJjùJjùJjy/5GS”«~e­×«&ê•hë•hë•h¯¬²¶·Êœzͳ«ÆŸ®,£Ö¯>pÐà¨ö×ú•eÔ˨ –Ïù.˜|ØéÂ\v´kt>[úÌ*[胙´70v%»Ží…“º]úÀ"œôÉîØÓ•ÌÓ•ÌÓ^æ¦Ð'R»²)z¾’Z¾’ZÞK-*4jç¤Ðå@…ä+’R®¦\ L¹˜r50“ÎD…>pf,ôɰeXëÕ°Ö«a­WÃZ¯†µ Æ^¬Ñº£Ýî)´7zýêûþ“B××z><‚©Ø™Þ›Š|Àù¡Ï|Óá‰WmÇ«¶íªm»j;]µ=­§‰|ÕDVš(WM”‹£ñJ'þÓ^!÷°£ý©¼6¶}dl/tpšØ«T>ÿпþä4ѯšèŽþöÚËYIa„8¿*„pÕDPz!h²´£¿Å¾m»j{j2Jà(zéªíü? 7X®š(W™4ï¿¡^}`UdЮšhNûîõ«¶ûMÛQP-¬ûbøÐßgÎøS¼jÂþôáÔŽéªí´oÛÖ|Õv¾j»\µ}¥N¢¢N¢ NêŽ>]oíªí+=³}xØ;>ÿÐgÇç•~|^é÷.Â…>p†í3¶šû½}æÒ=>XlÜíû„šE»}þïC—ýo¤Dc‰Q £óiÿuGÿúÍ¾Š²Ð‘¢‹1+4¹,ÌÚÈheO'¨3W©œ4ÕˆN•ÎD #F7õ£sS¥a¼+—ãžt…¢«ñ[EÔ/´ºPÛEi»PÛEj;-ȼÂ%¹ÏY¡a¼k‹ݨßMéw£~·¢Ð•è¦Ðàm¯]ÐLÞùü HBûµ+Rë$5e…VZ¡íÚn£hAZƒŸ¢Bg¢‹BW¢…ÙÒ þóƒ£òÕš÷{hh#ËÏ’BƒÌS {:CÁÑX²@ŸíDy·ÇVt}h7x„/¯™tKyºn)Q¡Ov¢¼ß‰ŠB“F®JÛ•Ú®JÛpÙûëõ…¦=´e…Æ=´*4ÙLM™©fjWfj'©uEj¤Ö©uš-Ž«aÐ2Û#H­Ñ™´… Ð‘è¬Ð…èªÐ´GA·¸ÛUÙoW}GÿÚ•(jËžþöÀùÿÿ°ÿòφïEçáᕦ ™š^ŠÕ;vMúû°šÊû¡?Bû.ssÍÑšÌQsÍÑßt*É™wõjJXc$KÀÚž¦”Qøò#ö7]qG”h²#šòå-ìˆõjWªW;äËÁÎPÇÎ@ç„§(4¥mÖí‚Ô\íܶKÉÛF¢Ý­}ˆÑú(cgÒ'97)^ícñƵÐt“Û”¶ôÚ#´])²]«…&­è$3/4iEo¼m4ÏÞBÓ<·¬Ð¤¼ã¤I;Xè£(^íñÆÙåËO.ˆ¤«kÉ»(1þ”¯”~Þ{ ›BŸœÍòþlV÷t¥Û35ývÎfY¡é$©ÍòÕÙ,_ÍòÕÙìê6ÅBŸVY9]ísµ½ÅPöç#Sè“NÙG‹B\4´³+™B·ƒa-WörÙ;A©9ŽH¡mggpÆ»^ÍÔz¥¶ëNm»ó|Òé`ž×«“|ÝžäAj™6œ©eº®™=Wb½:'L:ø ê•¢^ù êöœàÙêã²ù J6…>ÉÁ˜ôIF½òÔ+ÿG½òÔ«mº^éóº °¸†t»Ò©íJ§¶­)ìñ#O™n‰Õh M» “i¼ÐhP ý®Øo‹ M¥ç±š4ì¼$…IÓÀšB;†Õ>Ükb$R'2G½L†I“9šúž>ªØ2èB†tñ±M&Bñ“&¥ï™„“&¥ß”~“›£xnŽAS"Vé‚ÔŽêž,4¥R9u0òs3ÏóHv¤<çaò•NïG,‡«/W_®¾<^}y¼úòxõåvõåé@êÔ…>ЩƒN¤²ã2tv’ßr¾N¾N¾N¹úòú? íÊ+Ô‘§Å{P¨#·«/ïÿú´ßý¦ßåjË(ÏX ¤¾›µ<7[åB;ÝÛï+NlÙ·Ô=o!:P058ÁÔ…NDKmƒýdÎlÐÎSÇQ¡Éµäd[/4°cQhö}•x5)âÕ¤4EšƒS0uÐ ¦Ç<\èLtÝÓ1AÛQé·QÆ”I4•»0§ÜŤiÃ7ç80鎋A˜-‰< Éñ(,t":+4e’Da¼æ¡8¹“¦KN|~Ò IE‘¹ãœ+{ë×¹aPF¥>xFÖ¤)L”(œxíBÓ®L ©öKtÜ烎t-Ü¢Ðo#3ÉLè·Qò‚uSh\ˆmO'ri&ÏL4¹ö’ãÚ[hÚ-)´£göGAçÂLÙŸ•œÈD§ŠL?4…†ÅPœ¤ICÒÆç‡¨Ðv`P–+ƒ²\”åÊ ,WeÙ”QïJÊÏKÚ˜4*¿Gørª5ýÕòøB¢«B7¢…ñ¦:×Ö”ñ¦:×_-/4I-(R£„—lºÐ$µ H´¢»É—«M¾\mòåj“/W›|¹ÚäËÕ&_”M~3õ6ùzåÿ¨;ÿGrJ9ÿП?e¢‹BW¢ÛžÎ´s¨M'Ú%š ïD;h:Ñf ]‰Vچ̂Ý"Œ˜c`_~æ-«[oYfj¥­W~b¡©ßÞ‰¶^ù}ê•ß§^ù}ê•ß§î¡ßí‰[eÝo•I¡qËpú½Ï$ñ4òO>+éµèêµIÓ]bOjƒ¦Ò6Ùó`Lš^¹ðÌ“ISƹ§h4JÛÓFIxæ%ºNšŽº¥Kt>ðg·+v»òg·+½Ö®ôZ»Òkm¯×š@y¤'Mý6¥ßFý6¥ßFý6e¶[ÅKÁŸt¢8E…¦8%…¦~'¥ßôŽWIuÒ•Æ»*_^I;TåË+}¹¢©Nyw:ºxÃÛØé…~;Fa•4²‘›ç>Üg‚z»;Ñs°õý>&µˆÎ ]ˆ® ݈îÍ;°"µNRëŠÔ:I­+Rë$µ®H­“Ôº 5zLÒ·<ú•åѯ,~eyô+Ë£_YýêD5é“Hz¿²[vªSWj¡+ÑM¡Éùø<{ú,.;铸lßž$cQè—m¿rÙö+—m¿rÙö+—mw\¶?ªûkÎ6]®X&×eí[Ú¨ôÂWêº]ú$.;èLI)^Ù‡…îä²}šR;rPÚ¦Ôϵ1iRúžkc¡éË£òåì.VÚ6êwRdN‡6Ïô‘[eÒ'n•…>p« úȸYèãfÒ'ÆÍB7 }`Ü,ô[eÒ'æÉ õÛÛ¦š6Z¤æ*k¸ÚpÂ~ËH }§[èƒ8ÝBwÚp†»7n”oЙ&EŽ¦Ð¨ô³BDú Â8é“ãBŸla·e¸Š7\)Þp¥xÕâ WŠ7\)Þpsª\èƒSå¤Ôv¸9›-ôÁÙl¡Îf }p6[胳٤OÎf }p6[胳ÙB;2^m•qs6‹ÙIÚt¦+²ÙI?Ÿ4U3uÏ(ƒÆ—E¼¥w!P÷L¯L„¸5œŠ9“&7fvÜ;ƒ>;UÆ«SeÜŸ*© ã~“Ï Mæ‰ ³Óˆ¼ré“Î$µ¢ŒX!“°D…6¢•£PAîI¡3ÑBÛ…F¬XUh (ã]0m, 2/”dX²0S¿¹нð…ÆðŒ0׎‚;ƒ>3(ã•A¯ ʸ5(Mùò“$……>HRXèƒ$…Is’BQh r$AŸ% ,ôA¢ÀBc¢€Òoõ;_¾¯ÃàY{v剷+«Ç®#ve· : c$*´¸U&MöZd~æ±+Lj]9FìÊf²ÍäúÒmïK7…>HíXèƒÔŽ…>Hí˜ôIjÇB¤v,ôÉî?iºöëûÌv°+ÛÁ®l»rF š\Þ#1“îx+M¹“t&ôÛum¤«Í.í6»àmv¿i ¤‚·Ù šbðä ÑU¡aX£wHÿ¡#Ò£·”MK)zÆÍ¤3Ñ‚Ì#yâcR¾<Ñ—{§A“i›0× êw}~ ]ˆ® R³*ôÛ &å燬ÐôåUùrÚpLY%©R¤­ _~–V’®ŒÙtå„KWN¸tå„K{ƒRiû(Ò–®#éÊ1’®L£teܤ+ã&]7éÊ1’cüI(‡f;úߨéÑîÔŸ˜4ø b÷N´ƒ¦2›½+mS™ÍîÅ&mD×-môB¸y/„׫Â^Õ+5þT®&Å(C9<^öHÃÚhRt¦·½ºw€›4MÈn &Ť1› oi'“Á©%5iŠ‹ ³åßDu¬’WǪ õÒŽþ^8àŸ]Ñ¡…Æ¢C¦ÐéÀ†™t#º ôQbí¬(pPðh¡Oòœ&}’çtUI¡^UR¨W•ê¾¢€—̦ µbH›BÓãÀžÚž4¨˜÷m§)ÿ)æ¬ÐØvUèFth:Çšú]”~êwQú]éLZ•#Ë/VåË+}y•¾œFÌÉL›4„StÂΓ†°ó燨ÐFtRèL´Òo¨©ôùa¯™’ÁËHŸ¢BÑI¡¡ßÞ¯ƒNä™M&̵~ü”’°¾yGS2…NDg….D+ýNØoA+¦ Z1eEj™¤¦èµDš)Ue¶ÔzàE°­A‘Z&©eEj™¤–•8g4â³B—3|Òè{Q¤F;pVvàLé\©Ñþ•ý;Óþ•yž I­(R«$µªHl‡¬Øg^£I“ÔÛ}N¹ R+3úü:m M~Ÿ'+4ùœžªÐè©S¤HjA‘Z ©Ej!xêlë© ŠÔI-(R‹$µ¨H"N®Ñö>FEjý›ŠÔŽ<”ƒ6’š)R3’š)R£8¼r‚Nx‚ö.ì·ýM!oKÃדˆÎ ]É9(W^Érå•,[¯dT¤v”s0铜ƒIŸä ú(ç`Ò'9“>É9˜ôIÎÁ¾òñ¨;ªë­{Ÿfhô+z¾½š¢Ñ: š*\e§òÏBS…«$Ð=Ñ£/žu?kÁ>Òžþü öPׇ=hÊ0uýÈ“nDw¦S¬ëGžt=ðˆÖ½W2 4˜ë«{ïœ óã¯gÐ)x-êÞï Èü,ƒ|ÒtnŠÌ;}¹ ¾:Ð)ð…Æ³¿2ÞxzBÛ™l¦²BS8T…Ƴ  sç4'Œ7Õ$K^M²…>9ÕL-ìý.øõø‡†/t&º)t'+×Yßûšd^®Å¨IÖ(gг[~賜ÁASîœyþ–6¼’˜5àŒw¿’Z¿’Z¿’Z¿’ZR#ìÅûðÎäíMºدL ЩÍÑ©}_eÊÉ0í?OÞÝŸt£\ Gæ }P¿vÐGešò¸»e¡1K¡O²À&Í%$”¶ùÞœmi§„DÉ}rj¡)7V˜-_Íþ¡ä²A‡«56ksÑsî2 :RN‘;SÃn¦š§[~h#ß}¾<%,Û!|ùÙmÃIŸÜ6\èƒÛ† æyØÍóbmOòa7ÇâtsŽ}_ùǹ’ØGå,’Òž‰Êv8®…¦T±ü4U Nýœ…¦R’Yé7mW!+ý&%ŠÒïBý.J¿¹ÐJèŠÀ Ð˜ž'|yCÛ×¼½ÿÒgåJ&}R®d¡©dH1>IÏ›ôI‚ÝB$ØMú¤tƠ陞ÏY¡ ÑU¡1ÑLhû(Ém¡’Ü&}’ä¶Ðä Ê—S-åË)•¢"óDýN¦Ð˜¦VšÌ²$Ìó”ÑešœŠ^KT UEj•ÚnʈÑ%nïݦƒ>r›.ôÛt¡ñË…£',\§ëB“!©Ñ ÍÊ ¥',’÷„ÅB·÷îâIŸ¸‹š¤fŠÔ(Ôì=§°Ð$5S¤F®jï9…I“NÍM¡)$ãlšdÞ™“íÛ!“íÛ!“í» µBa‘“BSx …¦â¾±)4ìhJrSÎgvš¤¦œ, %¹Åò( ]ÕÊl¡ÒWÅIèû2©uK»§÷(Ðx‚öÎÀ¶;‡æ¾oûkÖÆ?”©ñ_:Q ›ÖÐm{ôÎcvu&²«3Ñ(ñFéÖ^b¤Ñ>Ï—ŸÙ©ve§Ú•jWvª]Ù©ve§Nú ¼?é“ðþ¤ìµI„÷ºX=veõØ•Õc{«Gï³Èœhüi_m©méc"—mñŒÙºÐMrïîÿ¤)êS¼ÍnÒôåž³ù§¶‡ÑÑÇ„/ÿü ”@­{©¥J¹µ mWº‘U»ÐïFYô͹ÔóÕ\Ë»¹–{ÙÓõù: ÿ¦)¨â®±AS†oqª,4¾R¹ï·5hûóCRèJtÛÓ^³ï^”oÐô¢|fËçOè}Û‡ë;ïÖ·«™FMª_[¼ÀÆ 13ª¦Í®tShØä« 2ÿ¦üöz-_éµ|¥×ö•`<cTc¡<øÇ“ù¨Îa4õŽÙ“¦#Ÿ…¦ ©‡Ÿ4VŒ°I'¼sš¤V™Sí÷¸9iª#ãiÅIÓ‹ ^°¸ìén°xÒ”˜P•~wúò.|y¤7.ãš².Shª‡„™e£yù&û›I}KÿúU$õ½ãn¿+šÖ·“«:izA/˜Ò6½<ÿ õÛsþÐT!#z·]àˆo­îûýù¼®í½:o]é7­ÐÖ…¶;Y÷]Y¡‚ä=V…nD+_NN×nA¡#ѦÐ0[º·Jö7“¼ñþ¹DõL£ëðôɽ䅦{Éž^û¡;Ý=p½ƒ†5{7gó燬Ѕè½Ì­“ÝÒã#ÐcÝ sOšÚ6¥m#O‘E…6¢«B7¢™ÃNôùAi›<ƒÝ³&MÞ¹¼1oÎÍ{¨)4YMiûhkÎ>6þ´¿ž¸§»ÈµáVNB}}@yÅèÏáÅȈÏ[úcÌRùάДMÞ¢@7ŠO¶ô4•sl^hbÒdž¼7¬a7Ýô†uÐq ¡liϽó³iœv/^–Vú}`iÒ‰Jj¡m{à6Þç‡}¿ÓC÷Ê\™Û•ÌíÊÚž4Y~)4…㞪Ðdm?] õ;(ý>:'˜²”ÒÕ°¦+M‘6š"=ž‰–”îå«îå«îå]÷œ8ƒvî§whºsdA ±¬ˆÅ Ðt§ÐLiÛ0ùíÙÓî¤(W“bd’Êöö·ru 4\öŒÝÛ>~hr·|~Úî¤Êº§Ê&Mq ȼGŠkÄ´¥íŠŠ„~[ M×¹†>iÊ6çåŽA=áã©þošs¡%…&%„¶èþ#Ðô~••¤Ð™èªÐ¤€ŠÒoÈqKµìgËçO”›¯´í*?!¥«ïèS;nÒäߊBŸø\M (ShgÞm£Î®pÚÕ¾ÒöûJShrÖ}ÛŸ?Õe»rPš2ÎC3…>qo¶¡ã}¢@鸶×qE¡OÜ›íʽÙ÷«$ïèïš×÷i{€þ †ãØç‡²¥ÓCYc5†œñÏI¡)ÐÆùê?éÅÞˆqvÅý+2ô¼8…mÀ)rPwÒN Ò¢ÐpôEi›Þ=UZ¤š”±)4Õ}uÊt­4ÝVsÎåaÚÞg ¯t{>š48f½‚r+M;° ³¥ÀE~ËÂ*IB¡G…¦ä…^šÊ²¡m´5¡íˆ§ ǵ7h{ð%ËýlI)c ‚ Ðt5; _ž)7§¢ÐT-·d¦Ý? šéó'êwdž–ª ýþ*þBóUü¤Ð4bÊ;)4é“·ËVúýÛe+o³¥Ôyl¥ñ-+aÄNŠ­4¬’jˆUÊ1¬)*4ÝeU´C¥Â UÑŠ•ôZUæyÅ€²`¯}þDaø,̵F¥›`í¥FZ±Aj­¾¿—±Ð¤½´‹I“^kÝÙ ¶±b×>[û<÷=í¼GQúÄÂt£¶ïèB£}.ô»ÓMØ^£@SÛ½ _Þaûš‚ÿ…ƶ÷ýþœ¿8A?Q¡éüýìûmô¹',5i8˜s§s¥!ó~UUøü` ©‹¥ _^¨4Zqbe ý®a¿¾?": ã]i¼kfj5,ð½—ZŠüV]hŠ!¸g¢°=µýúæòd΋ë Íï¦e…¦Âj‚nùú¸ù?›wËWšJe=JÛüú·)4u« ý¾|ðBsùà¬ÐXŒV˜ç'ï9/4YØîI2\$ÃÕI2\$ÃÕI2\$ÃÕI2\$ÃÕI2\$ÃÕI2lO’I ÏNsawšk&Њtº§špuª W§šmЍwQ%Œ$σÊD“¦'6blY¡Á⊞_ñ'E4Â%¸¥šª½•¾—ÚçOdõä=èÅ·äÆj&m7…îd¯=](ѯD…¦k.E‘eŒ¸çÐù Ñ] íA;5ìéÔÐN­ ÝÉVTÚ¦xIæù×g|ÿ ̵Lï½æÇš..dæZ¦tV¤VÈF.°B‹á%WáËš+‚ÌßJÛ|)Jè·w‹'l³ëƒç6•×)GÝs›ÎÊëønš)4U ¯û/ÿü Ëøt&Üԡ…¦9i’ZU¤VIjUùr:‹Ç¦ÈœLáØ•/§]ïJîBSžlWú}ðtòJÓGè·‘ÇÊž¨ÐtÏåI MO” –ÇçOä^,d3²š¾\ÑÈð·òåÕõ.pOš(5SúMž:3a¦Ú,)sæ¹ë”)íBG¾'+4eNDa¥H‡Õ¨´Í‡ÕªÐôåY‘/ôn8/4}¹²$ºy(Ù© ÏcŠ>O¤ÏÝ\—ISæ„2S3¹óSšbA˜©9ÐC~ŠVÌäÊAЙVIŽQ¡)ï" «Äy‚П fª“µšÜIÊx;yY¡é1\e¼ñ^rQÎ%NÖ†Ò6?@l ýþ á¶—ô]_O½òõŒ7@tU m*YT<þ–FÞš.ÐpþþêˆùB“§È‹Gº“¯ÇÛKêð·<äo Ý<&õÊcR¯¼õÊk1^/ÁIYèw,˜ášüÈŚ΂Â*qr>Š"5ò¯Ee¶`nr¬ŠÔ*f«(t‹'èzu®Wgàzu®Wgàzu®ã\B6r Î%õê\R¯Î%õê\RsÉøÓ¾\Œ·Ùý”l‰!™hU¡éú’)mSXÄ-N0h.N“+“Bg¢‹BW¢›B“Ôº"520¼ºxƒ&·JtÝ*ƒ†ú埲B¢«BÃL5Oéï‹Íxsm›¡¹æPt§g>{’hx^%x×—~JÕPÑs/uN:]/Úµ=¡Ê—å]¶ž>ÞáèHg…Fçã³§é‰ ®Ë¤Ð´M?E¡É ”~Ê„ ¦Ð¬Bâs£âs£šn8ÎBSÉ;g˘t§ çèHÅoWkWš^KÝÒyK[€Wï\Õ9éչШ:M¡n/t!º*4H-?¤™gÈñ±‚BSå¥` Mñª¾×_÷•ß?T…¦NØë–ÏŸHm‡¢Ð´]YhÇêŒáJñ†+ÅûCg˜è]Ñ\èLtÙÓô¼ltÞóZér :ÕêœE¨T²=M:ÏfOúÈòt¯”#]³BÓƒ‚ÎI~Ò”.×ÛžöTHRh*ê\át¢À’0_èƒ[ MÔ'+tyo7ÆýõPç$ÇõPÒÞ»VƒFÓ¨:aÈAWzC­:©×?4"ÉÞ–1.¾Q¢_ŠM é¥Áäx&M¥z½ë‚Q¸6šž2ÎÎeâ…Æ" Ê—Ó윩eº½‘«0Þ™Þr7…>(s·×½Rž MW=™Û•v°±¾©°”s4•­ùºðÿ¦îÀ}KU¿×÷žþØ´—xklÒ´xGŸI—Ýb{Ý¢ô›V‰—F´Ð˜FTšŠ<‚Ìóƒ©í¤OD;hW´û ѹ½—Ɔhdt:6õ Âf© t£z°Íqù-t#º 4}ys~ Sª9åÚ&M/ൢô»PÛEé7½‘ÑšÒoòK5Ç/µÐ”Àáø¥ßÙ~öt§¼;ïï…¦¤ã Œw'c»aÄ:¾NƒBÓ áNpyÒtâî¶o{Œ^tËçOôª¨U†Ó¾=Iùrª÷ìUt…ð>?˜Bg¢‹BÓëåhzm±åËáµ´ŸkF¯TYkÂx7z¥5aÄh}~Úî”gÙÃ~…¦‡BvO”hr{h¢KÉ»T°ÐôÆtzšüqAX¡Ÿ?Ñ]OO;ìOøžÍ¯l¦8ŒÙt°Ç«8^íÀñjŽW;p¼ÚãÕ¯vàxµÇ«8^íÀñjŽW;p¼ÚãÕ¯vàxµÇ«8nv`7ˆW»A¼Ú âÕn¯v»Ú ¦Ç–ÒV=ç„íÃ6@ÓËÜÑ”/?ÚÇ&}pÙù‡Nt''ywrçyUhª!}yÂpUPè“yn»yŠÒoªQŠÒoªQáÚšú]•~S…èP…Ù µƒD—cÝòùÍ–˜™GzKÝ{á2í£AND&\ºnë6 M¹žÕ“®´bºÒŠ“&}îí¡“¦~›ÒoÞC÷2wBáN]…&íàÍÔAÓL û™úëO¤²)4i‡¬H-“Ô²"5ª–äUÝŸ4US E‘UK E‘ZÁ½D‘ZšE‘ÚÑN”®v¢tµ¥«(½„ªD™ÐoÞKœWèR¾Ú òÞÊ­ M¶¢“>i£œ'µi¡Ñc"|9ù£ëW4ef¶®´MÁC/cmÐk8'Ðß’š^Cw’t&M‰pÝ”¶iÿî¶oÛ ??4Nô{ÚÏT«Tå ZVèB“G úº@Wò·T¥ß•Ú®¦Ðä)ªŠÔ*ykš"5º¢\Û~¦~5êÐûBŸØkƒ¦×‚0b¼‡zYjIÈ’J;út'*ÛÈÛKÊn/qÏew6h]h»uÚÇœ‹B }²•«¨Œ¨ÒNÔºÓ^òôÑ>V®ö±AcÉ a¦z;Q裨Œ½„tª0Ï?ªD7…îûØ 9nº삃®7¨ŠÔ*I­*Rã}L˜kµá)v¿J¾³ñhý…¦¨Cn MûXyšÞòjz/4=âX©Ñ[C¡(R£÷~¾mÍ_húòª|¹gX yÊiG{îCo›4UqõKt£BïÍ›“¦»§]ÉDpª×Nš.¥µ®|ù‘‰0iÚ¦îtù²?B¿Ï6ùIã6-ŒX‡™úuÿþ/ýu/Çýû/úl›®WÛtÝoÓI 6Úºßh«BSÛMèwƒw½??D.D{.ÛIC¿ÝÄÝñ½ã˜º-ŒX§òÝ”/'Lj›3éJtSh˜ç= +´gúòœšê§eåËéþ<û/ÿü Œ'*tDº 4$&$7m©^…ƒêU8¨^…ƒê>¤|9›„Î*.^¥ýk»¢]ÐsF š®ï1h¨hiÁsüÐ!Pm'/ùgЕڮI¡©¹wäû¡©"–y¥„(50yi ƒ†ynÞ3“¦$7ï‘·AJÖöªÖL𯻄¤Ð0ÏKæZIôåIi›j×—¤ô›ÒëKV¾­e¼·kõLúÄniÃn©–Ç É çÚƒ¦ºq]ÑŠ’X{V¾œ-Sh´<íÐi{„¹öùS:pFµ½;© 4§T(m¹UšâVî §}êVéWn•ŸG$:@5´s’ÏB­¼£S¯'}’z½ÐWJÝ:E^zVèƒèÇB$H ºº¢BD?ú ÅaÒdPzŠwÒ'©z ]ßÇN~è¯yÛÄ Þú ám¡Þº¼,4ÅNª"5zÙ{Jz¡IjM‘Z#©5Ej¤Ö©azEÙÓgÉò“>I–_èƒdù…>H–´suJ¢éÚ–s&‡«=tV,ïÙ“æ$ô§kŽÏ)‡}|2*4 ’BÓÑÇIˆÉ³„ ¡ßG%<šÌp§îëBÓÁ)d…&#>T…nï=”“>ñP.ô‡r¡IjY‘Ú‰s¡IjY‘Z!©Ejd;ôº—šÕ}¢@SÂú“Š@£_׳×fÁ:0¦¨Ðä™MI O’íúÀ+¼Ð sïúqŽWûX¼:ÍÅÍNÝÝ`›)Tг4g©*s缋1鎉úM¡1aÝö4íÑÝ &}ržgÑ•ƒ¤ñ<‹ôƒsI¼:—Ä«sÉ eµýxÚLñÊfŠW6Ó ¡òº›O6èž\—“¦ˆrÏQ¡í½ãs¡)ª›‹B×÷nÓ…&©Ej4×zU¤F;ÑóìÇû«‰ðÿ?º%Qøïk²×ß4•ðx¬4ZUè÷Ù8^…ÒD[útÿ¶ÝIÒ ØþП?Qù¯œšìóÇÛ aÞˆýÐ4b&Œ˜—å Mg/x¸Ð ó’„~ {–”º]º-H­Ð9´ä Ð$µ¬HΡE™çg¶ƒ]Ùve;ØÕîoW»¿]íþvµûÛÕîoW»¿]íþvµûÛv÷d~x‚¶«´9'èñ'¡VVÙÑßwDÜÿ¦i1H½ž4å6=U¢ëÁ6vÛtô¦ó¡Šþç‡&ÐÔvÞϵ_*DW…nDw¦\nE¡IjM‘Z£gÒ»0Ïs·ã&]™'ikžda®éÊDHW&Bº2Ò•«z_¯Ê¶ô÷XÙ?ÛT’ùØ=úâ­ïY3ê$eÖm¢ŠÏ^2Ȭ¼tPézÒô~RJÛ˜á›ö#æT|ÎÍ5›‹B74nÚ–þü 2ÂϨ4¦œ{®Q‰ç¤fóB÷ƒ J¾ ªÌB”˜à%ƒ šF,4¥íFYxM¹W:ï‹yQüQ¾… K=- t§Ì(/~ñCJÎýª…&ÿG¾ ç£ÏQ¡Ì² Ð ia¦æN¦°·ÙMŸŒÆû,kc”1áBÞQ¡O”ßío÷%T¼aA!%à\ÁΣ0EÄ M¹Ç³üMw^§&ߤéœðô¤Ðt¢í{™{·”L¡Qñf….DW¦¥¼¥4ij; ýÆ[JQéw¢™šL˜-‰ÂIXcVèË‹òåå¡ËÄAøòè:pP¾<Ðuà(¬’é\˜„ñ>*¡²Ðt¢Í—;·”©9÷Œ”¶ñ¦PÚwzÙêyÿåNaŠš+e…v>p_ÂÎþZ¬—¹2.¶&ʸõ¦ó¤)cÇ›?4æ>ÎõÐÜw‘Χ?{:ÓRÊ^ìjДŸ›@ÃX¥ðå\ AùòFQ˜VömæPþÐÏ©Ô$ÐŽÿ©<7‹¡<7‹a¡q1<{šÂ‚ÑKê]hJ~s¼8 Mi{Eùrò³z˸<7Çý…¦¶oÆB×÷*dҾܹ6·ÐËÈB¿õ•:-H-Ó[§Y‘Z&©•(Ì–Bo1¡íB±ÊbQ¡) c‚Ì‹s².û»7{ú»–BÍôÀÈŠ) t¡Œç¢|9UŠÞ]ŒAÓ]ŒèÝÅXèøÞ†™t!ÅëÜo+ã±åŒ™bI¡ÉYà8þ'Mµ…ǰ]hR5 4…Ÿš¬/W釽ÒWF Õ¶0Ï?"µ-¬ÐÏŸHñ:Ž©IÓÑÓÝpÂÕ–1iò{Æ ) œ‹Òö‰wzÒ'Þé…¦ñ®Êˆ‘307åË)Ã=÷ ÐÏŠþÐÉàVòÊÁšn4$ïi‘IS€Ë»Ñ0éN´SÍ ìï9©eÜ9¢gMRÚ¶ýù=C—¼]pÒ‘ú]öt…¨Û燦ÐàÞiN9•bW2·Ìct"_“¦~»#fW#f»KÞþ=hzÄ.•½ÔÇÛþãýëOŽh÷9ÞV9ò­"¹wŸþB“‰·_þѯ]ýwrûš^'zL¡Ié;>ý…¦þ¥ßú”~êwPú¨ßAèwÃêë ý‹vç|¾šÎ#!¬Ó³QžnŸ4œ -l¿ÜÓRžý4hÊ~NŽÇpЖRó¦T¹’ùxðŠ*2E'7`¡©Ü¤“‡2h£¥äU‹ù¡Õ{I^½—ICú«a5èz%óz¥ü&M·ÍZR“ö4…èé;úó§BÞiï¸?èJJÀ3ªMFutŠFüÐ)Ò[CÑ;ÀMŒèàM×/’ç_þ¡3<ò#ÑFthˆ4~( ]‰n{ºPŽaõŽýjž "¹ó¼—ßšo®]¨í¢´]Èëdœ/4ØO®ké'+_N×/<¿ú¤éúEv Ê…¦¶«ÒïZ¦ó *¿,ÐðœpòRM©‹©a¦Ròaò^Q™4½-UbThZ1A攵”¼Çi]3žÅ©5’Z‹Â—SiøÔ”Ú¨dvsªZLšÞñ®0.4œÅ[dÞ¨z‹÷çBÆӚ ›¢Ïé5Ï使¹Ð$5Ç;]÷ño¼íæ±ÐGü…>10lc`ÄX”~Wê·ãç[h:8y{‰m]Þ<Ÿ4= Ó”/oöÞ­²Ðhõ4…¦zõN"Ö¤éÅÜ®Œw§ñî5(4åÜTShJ´tRDš2vjUhºd\©5¢›BwÊ’êI¡©â|/ MÕî{ShÊTzö3Õ(ëØ¼¬ã…¦Ñg/5 ¯÷T…†~ú(]1XThªfJ¿é"ïjöBSyk MIžMZ¡„â"èóÏŸ(ÉSÐçŸ?Qn~+ M—¢„Ýàó'’ZW¤†i¹]‘Ý„-=+4(éU¡©@IßëT«½Ë„«ô&f JÛt!«Æ¬ÐÔvTÚ6Ê=æùçO™è¢Ð”5#ÌóÏŸà,˜„yþù…ƒ„yžE7SW¤F¹e©+RÃ\£®Hrn²°Ÿ…Áú ¶ÐôåAùrÊDÌAùò@_”/äÛtËçOä! M¡IjQ‘ù™rT¤F~¦©„=ú ì9i£¶Mi› Òd“Ú¦KʈÑ^ðpÒ ½±Ê—“FΊF¦âf)+:5“NÍŠNͤS³¢S3éÔ¢èÔB:µ(:•^ÿüК¾\Ñ©ôŽøçåËI§E§ÒÕÿTZÀâJE°¸>*DW…nDw&ÍTÍTœ¬ºÏ™õŸéÊñ™®Ÿ“>‰Ë¦+·iÚ¸M¿jäÿÒ¾vÞgÖ-ý݇.¼¿iôÔyÚyÐËâ•-}è{É{ïIRhô`ô=3ú ž>;Mç͹0żïwŠT,û1éN7XÚþË¿ñÀø…ƶ»@w:÷ ÐI‚Ô2¥ŸçºÕ©ÐVlÖA“Ì]ë+oí§ È¼„“½|дJÜý4+ûé>ÜS3BöÔ=mÒž6šæîi?)à‰RZ’—Ò2irs8•,šœC^BÌ )O9yÁúI“s¨ìÇ;52èÛ#Ñn÷ êÕLÕöN®—,4^Àë{Úº(ád~èo‹áÿÍO…Ôí*±.ÐøÄ«—Ò2®‹%Æ$Дýé=Ž3è³õ]¯Ö÷ +^'2…N´Jöãýu)ý³»NT÷w?<£nÜ¿  Aî*ic•\áš4>Ñîí%¿é¯Ki¿JÚf•ø;ѸûA®Dïe‹…&CÚs%NºÓ{úh…¶«UÒv«$Õ¬ÐdÄ×ýlñ—R¿ZJãšÞgt®©ƒyžñAƒÚŽÕ‹lÿеÑU‡®Ðé¨Ðô垉0iPn¼pÔ¬£g?š@§H&a,@ãÕµª´M9”f{©}þêËRèD9ñN1»…NDg…%`Î3“¦òøÞáA;w†³B“7 #FµSIM¡é<œ…ñ.t¯AZ%¯|UVI¥U"èóS§£O™wÚ¦{ìMm·¨Ðüm{·Î÷N{Ɔ‰w^²Ä )Y¡m£B@ÓsqÁ™R“¦÷wªãÎt¥âGÕqç ºQ-sï,>é@5ž…¸Ð‰è¢Ð´UƽÌñûüàÈ<\Íó°›çæ¨ÎIÓáälvƒ&×qô\ǃnôBÖ#ôÛôAý>{?o¡)ÉSÚW%°_ßa·¾½˜Ý ©&€ÅÒ´¢WQ`ÒôòŸgÚ¨ò½=—Ô¹ùü ´ i=f&ôÛ é.ÐøÆ•°ÆõyØêó Ðé¤Ðt{™jäí•\ï°ÚâÍauÐG‡ÕIŸVú఺Фóžþü‰hO3 š4“å}¿ÍèUQ«BÛÒ‘›ã-[hh»9±²6.pÓ#÷æ1'MÉo–¢BÑI¡ñ¾—Z¢‡Ç“÷ðøB“vH] ©n™wÝ`Е.¶V'ßgÐGG¾fWzÍvzÍK3tBÍäiE»ÒŠv¥íJ+ÚF+ÆæéµºA¦ØjTh#Zj¾M±UFe²”–…¦³gõ š¬žGï³×Àúà5°AzŸÀÝCm»‡f¥mÈÈûº¹þMWz ̹Ø:i*MœKó M'*A3}þDýtËçOdÝg6*do¹)4Y=Ei›Êƒ[‰ mD'…Îdq)mSyp«JÛÛ® ³Å­htÉÒšÒoºdiMé7]²´Všlä¦ÌTò§š¢‘4²)ÙH#›¢‘­£}.èµF_Þ”/otIÃâ^#'£«Š&|ùçO3Sè“sɤ) fU¡1x¨Hò‹¼àáBú x¸Ð!¸A*4äÑ&MA´þýv/Ûk·ô¯?Q›“¿Ð”ûà-¥:a(ʹ‘¸Ðô¾š´‘ƒ_úroµæ«ÉC´¿p²…æÙÓ©ã#DyOwò¥‡´oûó'ºfáù^ò>˜:Ä''ýn M¥=²"5ŠÛ„¢HlÖP©ôPV…>9] šžÓ)Y±Bå’›BSŒ"ŒX¡SFQF¬ÐˆeÄ XñΤ³ˆ¾#œ²W~yGŸîJ“nÊoÐÞ°Íp7'Í£,s(¥];nÒ°bº·ñÍW›ÑQ¡è¤Ð™è¢Ðôæ³)ý¦hc7¥ßTüÈÍØ™4õÛ”~ÓžÖ“Ò6íi=ImƒŽëY¡I¿z¯È.4¤¯=i¿JÒC±ŒÇ‹e š¬~7bÒFô~Ä’W߸µ½J;úcàaͺ'îi ¶|~( MWÉœ|éIªè…Þ'M·CRhªxW•¶}ySè“j{m\šxè}Ì:Ý÷#fá!ÃVi;[1T¥m¹¥¸ïÏŸ(Ë<…†/wO˜ƒ¦šuÉ;D š’cR¾¼Ñ-û¦Œw§ hýúÝC?0nM­uïÐÖÇ5 J NÀc¡ÑY¡)ÝÁ)q1é@‰!4Y!*ý®hiö=M±ŒÏQ¡è¤ÐôåŽkc¡+ÑM¡läIS !%Ej¤‘SÊ ]ˆfjÊt²ÈÊlDKkI˜© ÷’(Ì–#àB8'}â\èàB8'}²Oúd^èþÞöC{n4Gjû `NÂBß_Vð´CÜyÈš“4èIž±9Iž m7†$ÏØœ«- ‰6…¦~w¥ßô&„÷ÎΠ{Eï\Qh|ICïN¯¶t'í‡>{b¡)-7˜@ÓKáÙ¯’ÏŸ(ìü$…F{­ 4¥ &¥íDgÁ¤´èJn Q¡i÷] #ú4•¶1€÷³…OÐA˜-êüZÞØçOT ¡ìû(`ž¼€ù¤+^mÙ÷û³•`-§m»ÚÇÆå°r£W)eÐgû˜íw¢¨ÐtI£'…¦ÝÀ[cã}¡Hq¢(ôûl7˜ï EÚ L¡éz‰SnÒG»íwƒ&ÐT¨ …æÝ îé”)^Rö3Õ(j=d¦Ý '¡ß¿z6…v>pŸ`êVGŠh¢dï1hªÃ`M¡I™g O:m ª397ëh#3ÜÍ_hgXóÕ°ŽS:“ºçŸ4:šçß\hÒqÞyx&Z‚h£Åt¬H›B'¢«BƒßÇ»®9hº®iÞuÍ^®fKÙÌ–Ïú¶=(ɳ9Ñ®Ú:¥Jzï3þÐéÞSPè@1ÂèD³{½’yÝÉ&ÌúÜž½?×ý=Ñï÷x·=)ÝÝ)l¾ÒTš+*mS±éÈW&W4ræ<ÙI;…دæÇéM8FçÆ•ÎD+m“ƒ&G¡í†!ïÚ·ôç@Kt«M58œ‡aV:m ]iJ={:S-ȩш™2b–é馫BÓ—›Òoš-΃8 M•,r6…†í*³cj¡IéçRš\j¹)mÓ*ÉMoª\’•5F8šóŒÐ¤éa=sÖ[hJÆ)šîõYShº‘˜„y^hÃqª-4¹tJVI!­XzRhªí„ÙRI¯UE¯UÒLUÑ-•Æ»&a¶Ô„´ µJ+´y³e–JÞ^²õ)§wôwê?TQà MÕy½ñt¤Â1(t$ÚšœQ‘]ªMQ‘]ªMQ‘ÚA¹…•&©™"5#©™"5s¶Œ­/=™#ÚrE×+º]Ñý†Ïö4o•!^ÑvEï•çüпü>Nû éX~a?!ÙÕðC³cÊsþúÈù;éHÕ‘‡ûO¥øÓ~W§ßãOûõ¶§Ï¼v }àw›ô‰ßmÒè½râ ú•Ôú•Ôú•Ôú•Ô¶þÆü_î‰6î•0§øüÐÿÆL%œ²ãœ[hQ9OÖOšl%_N×T£sm¡¥ø‰¦ )ôûë]˜èË_4_Kvì¸IùŸÌ/‹(m“;Õ¹°±ÐŸb÷ÆFë;Ú©§•Ÿ¶§3½¶˜½ñ4½FŸ9d1éBm¥íBÛ•Úˆn í ÌÞ ìÏŽþ7V0Ubud“¦,Áæ8ßÝàÐç‡.Ð…23½Å0iúrÇ~]h*í¶qä«S4èi@s9åý—þDŠ·íenF™™öd…KÀ‚ÐozeÒ̱aš¾ò`´+FÛx0>?…&Å[•¶±.EU¤vðtÙ ¿ºX~ÿšîµö,П¹í{Ú¨¶“… ÐäÖ˜ÑCÔf1 ô‘ÿ£íýU¡Û÷¤m½'IéwBZ‘9ÝËpnN­4õ;+4p¬ kŒŸðRV¨QÚ¤5åËù1*¥mJMvž“´çsRh~”©*4UòôÆ{›Î­íèÏŸè Îî”?toTå îøÀ³¥¿üú‡Š|ýMSšl· ÐTç7™@;*Ķqñâœ*m¾rñýÐé[Æß?´=ͪÓ6ZJf Mvc*ÍÛth\ÆEéw¡¶kh*÷’»ÒvGZoxí$çºÍ  ͖⸵&Í H˜-”b’¼“”®4SºÚhÓÕF›ö­òå'ш…ÆhDèŸþBøôúÀ§Ÿ®‚È?ôábÐôrv. -ôÉñ#í@—xpxIW:5ítª«×Ò•^tèG€AGÒk1*4½ñfÂ\sUç6ÝÁ‹F¤¼F8>¿…>hNú$4·Ð'J ;¡¹ßfÙžN‰N•Îv+}bN¦³W fÒtk.õ¨ÐFtRh’ZW¤F†•w—x¡I}=‚Ô¨®|ÊOTh:>‚Ô¨BòJ!,4m8¡(4³¡)4É<*2'Å›£"sR¼^m÷…&©EEj‘¤©Å~päËû#Ÿ"5#©™"5#©™"5ã®"5ö9)RKùà¨;éF¦‘Ò6Õ&ÍU±jfÙ¤©ßUé7”«2bôYn] ¡:ûçShrm8ék MΉ^šfKú]à¨ëÒ“.DW…¦BHòåÄ,!(t$Úš¤©’š²—”ˆˆ¢ÐtôQö’B{IQö’3—Τñè£Hö’¢ì%ÅóAlsw›w6bè¾ß·mÿzJ~xþASŠÉ“‚BÓ—;ÉPƒŽkW…¦’Aèw¤ U1…¦R'ž§nÒøîVQèJtShzoÌ[ƃ6zoÌ”¶é—˜”¶)­ç){™þ”ˆî •¹>?(mCZIzªÒv£¶[Ph’ZS¾œò}/ 9iz]VXß)P±{¯†Ü¤éÐbRèLtQh*ò/¬ÐÏŸè¾~¾¼Ò!½†¢Ð•háËé6Eª‚VL¿HÝ„¹Öjcš0׺·Ùm³ë›gÃüä {×òÓ6=¸{²ïiûüìé¶£ý "úÝ)™6iˆ„|~0…NDg…†èS/Ê—S…ÏîTø\h,¶ôçOd} RóÞ™Ï Meêœä˜I²:‹ÒoªÑéY Mý.J¿ –ç« ÝˆV¤FõA½â~ •É‹BÓ)£)mcu¬¦´Ý°í¦Ðtq¡+_Þ±®—2ÞžæLÂxgzt0+Ú!gz57…©eA+Õ=¶¬¬Pª{lYY¡™J`æ¢ô»P¿«Òoªƒë9`šú]ÿ¯µ»×‘5ͳëîó*è[ïÞÿçˤ@~Ü€$C– ÉÑå‹#NW9½ò,tËktŃ“¹3NœXoDÆÏ|ß$ù¬sÌiº§sO¥ÏÎ[æÑáoâPÿtš¾òk¾r¢9×3?1úµ¦õ˘: È?}(ñï§ÿ&ÈõÓ„ÕütQìO§Ç6üÞþ5§‡N›¯|è+õ•Ak‘7=_ÛæùÚþáMAë—ïì?ü*þúÕ{ÔûÓ't¯ßù‘ßèÚÞÔûÇiB<~ûáªüŸNÓ“ºÏ|åô;~¿å×_ùÐ%ÔùéêŸNÓš©9Mhf™ÓÍ?æÇï§éík?æÇ§¸Cö—wÈŸþ®ÿóûHû!ýæ×§é¿&¿þÊÿéFpõê'xnýñNïM§9ö§éåÐùéùò§éö*½ÛÏœþÞ4ð§Ó?ü0×r~u‡üér9=¡wLåÝ_Ÿþá•æ÷ëÓô‘ˆõåÐyš~¬?½uqýôÖÅ_¾~÷§ÓpIóþpy­_þ¼z„\¿_$éßÍ¿Ÿ&Áü'Gñ÷ÓßoxzÌixJþÓ¥û?NÓKs?]|ÿã4R$?=ø2¡g‹ÕŸÐoñ}ÿmñøûiú¾zÿͧé÷õ×9MöOhÖ¯Ÿ’/sŸT‹Õ.] üéÃî?ýà}(}Ÿø³ßGÔû‰ïû-ú€âõëûù_}‚÷_^?š_åóÁ¥†ÿü~ý•O~xMeí¿ë¡sÿ]×¶÷ßum{ÿòÚö_9?øñ•È ü&þì¡ën?>øí¿ëÁoÿþàG×a~º¶ýûiº¶ýãƒß§¾â4?tnsš¾ïÞDÿûéMÀž1§7›ÓÇ õ'eä÷Ó?<ðÖœž¿á¡sÿþÀ{è¡SlþÃoÌiø‰ýøzáï¯îÓ›l¿Ÿîç¿z º?>èÿ…9úèºÛ÷Ó÷ýûiú¾¿5æ4ÝSømµßOïè™u=Î/Oÿuð¿<ðþ€jü~:ôRMx;ÙúãS¢èÁï§&ýË'ñÛl~êÂ÷ËÕ~øÌ›õlࣇÎï§Ëœ>túŠÓôÒÜ÷SÑþåt~£Ÿ÷ï)ýã4¶ùé¾öÇiz ß\sšÞF·ÄO,ôÄ*?=±úã4==Yâç]zjÔOüÄš¿åïØ§ pÉ˜Óø9nbsþ,µŸÚìӈ是œXïŸ>!éO§á'6WlN¿_ØŸ~¿ð÷Ó«øâ¹ø³7½ ¼÷5§ù¹ûõCç/OÿÓ£i¯?\gýÓiÒÚøÈ?¦ÞþÉøýt£¿J?|ŸNÿ RüŸN“õïüé4=ý&~b“³ö§Ó´Úg¾oº¬õÓG"þqºxÚ¬F[³Úßò!–:M«¹¯Ñ…©Ÿ>åñO§éAÌßüøÍ:áÓTòý¡äÿtšþÉøá¢ØŸNÓ?{›Ó´Ú6«müÐR³½ÿ¦Ç|å…8s_{t_{â¾6ôšŸ^/üÓiºè}9MÿКG‡û]EøMÜS/½ô~øÔšý«·;üÕ9ÿ›Óý9Ì?ÿ‡˜Óô2ÅOËþtzÑémN:}Íé¿áiÙ§ÉÕûñÞòý=Oê~?ý·Ý×þ8½èô6§¾æ4ÝÏ?±ù¥7ÇÜÏ|ß$¼ÞoÌiú¾?ó}óßoóó&V<:üÓ.~â4]”ùéw:ÿtú‡»Ô/ßoµ~¸Ø¿ÿò®¥EOÃ×OOÃ?MOf×'þ쟮ÚíþúÛûá~÷Ë·Züdï_¾p¿z&ðË×®îOuõ««´óÛúåéÿmBŸŽ•ÞåÿÇiúmÁüôoÚ§éã”øh›ßO—>[«?üÞÛ§éÍŽXmè#ã§â+úóÙâ+úíÐùáÅÔý«ËÖ“^Ú¹øû~ºÑ¯®ñNxÑáüöÿÃéú nú,ÿ.’ü~zè“{æ‡'¿Ÿ¾ô™$÷‡¿ œþáyûùþ®q¾¿kœï—ãüðÖ¦?îß0íï§éoë=ë×§/ýV2nþ?ý›ÿ?þöÛ?ý³øÿô?ÿÝ¿ÿ‡±û?üÿøÿÝ?þÛøWÿþ¿ÿÿß™ÿëÿø¿ÿù?ýoß¿†ŸSþÚøoO—N9½èô6§¾æô£Óÿò_ÿ¿rúûètÌéÒé1§Þæô¡Óל~to1«…V‹Y-´ZÌj¡ÕbV ­³ZhµšÕJ«Õ¬Öâ•szá³Esúà³Esúá³Eqz>|ö`NÓjcVZmÌjC«YmhµeV[´Ú2«-Zm™Õ­¶Ìj‹V[fµE«m³Ú¦Õ¶YmÓjÛ¬¶iµmVÛ´Ú6«mZí˜Õ­vÌj‡V;fµC«³Ú¡ÕŽYíÐj׬viµkV»´Ú5«]ZíšÕ.­vÍj—V{fµG«=³Ú£ÕžYíÑjϬöhµgV{Ÿåþ&žíýË‹m9sºtzÌéE§·9}èô5§œþÌj­ö™Õ>Zí3«}´ÚgVûhµÏ¬öÑj1«…V‹Y-´ZÌj¡ÕbV ­³ZhµšÕJ«Õ¬VZ­fµÒj5«•V«Y­´Ú˜Õ†V³ÚÐjcVZmÌjC«YmhµeV[´Ú2«-Zm™Õ­¶Ìj‹V[fµE«m³Ú¦Õ¶YmÓjÛ¬¶iµmVÛ´Ú6«mZí˜Õ­vÌj‡V;fµC«³Ú¡ÕŽYíÐj׬viµkV»´Ú5«]ZíšÕ.­vÍj—V{fµG«=³Ú£ÕžYíÑjϬöhµgV{®åŠÕBmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6x¦ µÁ3m𨠞iƒGmðL:sºtzÌéE§·9}èô5§œþÌj­ö™Õ>Zí3«}´ÚgVûhµÏ¬öÑj1«…V‹Y-´ZÌj¡ÕbV ­³ZhµšÕJ«Õ¬VZ­fµÒj5«•V«Y­´Ú˜Õ†V³ÚÐjcVZmÌjC«YmhµeV[´Ú2«-Zm™Õ­¶Ìj‹V[fµE«m³Ú¦Õ¶YmÓjÛ¬¶iµmVÛ´Ú6«mZí˜Õ­vÌj‡V;fµC«³Ú¡ÕŽYíÐj׬viµkV»´Ú5«]ZíšÕ.­vÍj—V{fµG«=³Ú£ÕžYíÑjϬöhµgV{°ÚgÚà£6øL|ÔŸiƒÚà3mðQ|¦ >jƒÏ´ÁGmð™6ø¨ >ÓµÁgÚà£6øL|ÔŸiƒÚà3mðQ|¦ >jƒÏ´ÁGmð™6ø¨ >ÓµÁgÚà£6øL|ÔŸiƒÚà3mðQ|¦ >jƒÏ´ÁGmð™6ø¨ >ÓµÁgÚà£6øL|ÔŸiƒÚà3mðQ|¦ >jƒÏ´ÁGmð™6ø¨ >ÓµÁgÚà£6øL|ÔŸiƒÚà3mðQ|¦ >jƒÏ´ÁGmð™6ø¨ >ÓµÁgÚà£6øL|ÔŸiƒÚà3mðQ|¦ >jƒÏ´ÁGmð™6ø¨ >ÓµÁgÚà£6øL|Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAL„Ú ¦ BmÓ¡6ˆiƒPÄ´A¨ bÚ Ô1mjƒ˜6µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ JmPÓ¥6¨iƒRÔ´A© jÚ Ô5mPjƒš6(µAM”Ú ¦ Jm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ˜6jƒ1m0ÔcÚ`¨ Æ´ÁPŒiƒ¡6ÓCm0¦ †Ú`L µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°L,jƒeÚ`Q,Ó‹Ú`™6XÔË´Á¢6X¦ µÁ2m°¨ –iƒEm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SlÓ›Ú`›6ØÔÛ´Á¦6ئ 6µÁ6m°© ¶iƒMm°MljƒmÚ`SÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68ÔÇ´Á¡68¦ µÁ1mp¨ ŽiƒCmpLjƒcÚàPÓ‡Úà˜68Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ5mp© ®iƒKmpM\jƒkÚàR\Ó—Úàš6¸Ô×´Á¥6¸¦ .µÁ3m𨠞iƒGmðLfñ1‹Y|Ìâc³ø˜ÅÇ,>fñe_fñe_fñe_fñe_fñe_fñmßfñmßfñmßfñmßfñmßfñc?fñc?fñc?fñc?fñc?fñk¿fñk¿fñk¿fñk¿fñk¿fñgfñgfñgfñgfñgfñ¿Bšþµ}æF17ª¹Ñ˜-s£mntÌ®¹Ñ39iÿÌâŸYü3‹fñÏ,þ™Å?³øgÿÌâ1‹Ç,³xÌâ1‹Ç,³xÌâ1‹Ç,^³xÍâ5‹×,^³xÍâ5‹×,^³xÍâc³ø˜ÅÇ,>fñ1‹Y|Ìâc³ø2‹/³ø2‹/³ø2‹/³ø2‹/³ø2‹/³ø6‹o³ø6‹o³ø6‹o³ø6‹o³ø6‹o³ø1‹³ø1‹³ø1‹³ø1‹³ø1‹³ø5‹_³ø5‹_³ø5‹_³ø5‹_³ø5‹_³ø3‹?³ø3‹?³ø3‹?³ø3‹?³ø3‹?±xLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gLsÆ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4gMsÖ4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLsŽiÎ1Í9¦9Ç4ç˜æÓœcšsLs.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹Ls.ÓœË4ç2͹LsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsnÓœÛ4ç6͹MsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLsÓœÇ4ç1ÍyLs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs^Óœ×4ç5ÍyMs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs>ÓœÏ4ç3ÍùLs~¿ýËèük7úÌbnTs£17ZæFÛÜè˜]s£'nô™Å?³øgÿÌâŸYü3‹fñÏ,þ™Å?³xÌâ1‹Ç,³xÌâ1‹Ç,³xÌâ1‹×,^³xÍâ5‹×,^³xÍâ5‹×,^³ø˜ÅÇ,>fñ1‹Y|Ìâc³ø˜ÅÇ,¾ÌâË,¾ÌâË,¾ÌâË,¾ÌâË,¾ÌâË,¾ÍâÛ,¾ÍâÛ,¾ÍâÛ,¾ÍâÛ,¾ÍâÛ,~ÌâÇ,~ÌâÇ,~ÌâÇ,~ÌâÇ,~ÌâÇ,~Íâ×,~Íâ×,~Íâ×,~Íâ×,~Íâ×,þÌâÏ,þÌâÏ,þÌâÏ,þÌâÏ,þÌâO,þ™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?ÓœŸiÎÏ4çgšó3Íù™æüLs~¦9?Óœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ1ÍÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍYÓœ5ÍÙ¿Öœÿîÿí¿ùÿæ_ý¿ð–?Aí­Vol-1.5.4/Vol/examples/Volume-LP/lpc.cpp0000644000175000017500000000456511511202647016744 0ustar sudipsudip// $Id$ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include #include #include "VolVolume.hpp" #include "lpc.h" using std::cout; using std::endl; VOL_lp::VOL_lp(): mrow(), mcstrt(), dels(), dcost(), dloc(), dupc(), dlor(), dupr(), intnums() {} void VOL_lp::set_nrows(const int n) { nels=0; nrows=n; ncols=0; nints=0; dlor.allocate(n); dupr.allocate(n); check_col.allocate(n); } void VOL_lp::intcol(int j){ intnums[nints++]=j; } void VOL_lp::ub(const int i, const double x){ dupc[i]=x; } void VOL_lp::lb(const int i, const double x){ dloc[i]=x; } void VOL_lp::addobj( double xx){ if ( cost[ncols-1]!= 0.0 ){ cout << "duplicate element in objective for col " << ncols << endl; abort(); } cost[ncols-1]=xx; } void VOL_lp::addel(int row, double el){ if ( el == 0.0 ) return; if(row < 0 || row >= nrows){ cout << " error in addel " << row << " " << nrows << endl; abort(); } if ( check_col[row] > 0 ){ cout << "duplicate element " << endl; abort(); } els.push_back(el); mr.push_back(row); check_col[row]=1; ++nels; } void VOL_lp::startcol(){ mc.push_back(nels); cost.push_back(0.0); check_col=0; ++ncols; } void VOL_lp::rhs(int row, double lb, double ub){ if ( lb > ub ){ cout << "Error in lp.rhs " << row << " " << lb << " " << ub << endl; abort(); } dlor[row]=lb; dupr[row]=ub; } void VOL_lp::finish_up(){ mrow.allocate(nels); dels.allocate(nels); int i; for ( i=0; i tmp=els; els.swap(tmp); mr.resize(0); vector tmp1=mr; mr.swap(tmp1); mcstrt.allocate(ncols+1); dcost.allocate(ncols); for ( int j=0; j tmp2=mc; mc.swap(tmp2); cost.resize(0); vector tmp3=cost; cost.swap(tmp3); mcstrt[ncols]=nels; // Fortran indexing //for (i=0; i < nels; i++) mrow[i]++; //for (i=0; i < nints; i++) intnums[i]++; //for (i=0; i <= ncols; i++) mcstrt[i]++; // } void VOL_lp::init_bounds( const int n ){ dupc.allocate(n); dloc.allocate(n); dloc=0.0; dupc=1.e31; } Vol-1.5.4/Vol/examples/Volume-LP/README0000644000175000017500000000104410435426173016335 0ustar sudipsudipTo build type: make The build process creates two subdirectories, "dep" and one whose name combines the operating system name with the optimization level (e.g., Linux-O6). "dep" contains dependency files that describe how the source files depend on each other. "Linux-O6" contains the compiled object files and the final executable named "volume-lp". Also a link is created in the current directory to the final executable. To run the code first you need to uncompress the input file: gunzip data.mps.gz Then run the code as: ./volume-lp Vol-1.5.4/Vol/examples/Volume-LP/reader.cpp0000644000175000017500000001035511511202647017422 0ustar sudipsudip// $Id$ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include #include "lp.h" #include "lpc.h" #include "reader.h" using namespace std; int reader(const LP_parms &lp_par, VOL_lp *lp_pb) { VOL_lp &lp=*lp_pb; const int length=300; char line[length]; const double inf=1.e31; const double big=1.e20; int nrow=0, ncol=0; ifstream file(lp_par.fdata.c_str()); if (!file){ std::cout << " couldn't open " << lp_par.fdata << std::endl; abort(); } // read ROWS section std::string s, objname; int ifobj=0; Rname rownames; while (1){ file.getline(line,length,'\n'); s=line; if( s.find("ROWS")== 0 ) break; } while(file.getline(line,length,'\n')) { s=line; s+=" "; if( s.find("COLUMNS")!=std::string::npos ) break; istrstream ll(s.c_str()); std::string sign; std::string name; ll >> sign >> name; if ( !ifobj && sign=="N" ){ ifobj=1; objname=name; continue; } rownames.add(name, sign); ++nrow; } //--------------------------------------- // read COLUMNS section lp.set_nrows(nrow); Cname colnames; std::cout << line << std::endl; std::string col; col="1"; ncol=0; std::string row; double xx; int j; while(1) { file.getline(line,length,'\n'); s=line; s+=" "; istrstream ll(s.c_str()); std::string ss; ll >> ss; //std::cout << "--" << ss << "--\n"; if(ss=="RHS")break; if( ss.find("MARK")!=std::string::npos ) continue; if( ss!=col ){ lp.startcol(); colnames.add(ss); col=ss; ++ncol; if ( ncol % 50 == 0 ) std::cout << ncol << std::endl; } while ( ll >> row ){ if ( row==objname ){ ll >> xx; lp.addobj(xx); } else { j=rownames.original_index(row); ll >> xx; lp.addel(j,xx); } } } // read RHS std::cout << line << std::endl; int nrows=rownames.nrows; VOL_dvector rhs(nrows); rhs=0.0; std::string ss,rr; while(1) { file.getline(line,length,'\n'); s=line; s+=" "; istrstream ll(s.c_str()); ll >> ss; //if( ss=="BOUNDS" || ss=="ENDATA" )break; if ( ss.find("BOUNDS")!=std::string::npos || ss.find("ENDATA")!=std::string::npos ) break; while ( 1 ){ if ( !(ll >> rr) ) break; if ( rr.length()==0 ) break; if ( !(ll >> xx) ) break; j=rownames.original_index(rr); rhs[j]=xx; //std::cout << icont++ << std::endl; } } for (j=0; j> ss; if(ss=="ENDATA")break; ll >> aux >> col >> xx; j=colnames.original_index(col); if ( ss=="UP" ) lp.ub(j,xx); else if ( ss=="LO" ) lp.lb(j,xx); else if ( ss=="FX" ){ lp.ub(j,xx); lp.lb(j,xx);} else if ( ss=="FR" ){ lp.ub(j,inf); lp.lb(j,-inf);} else{ std::cout << " Variable " << j << " " << ss << std::endl; abort(); } } } lp.finish_up(); // change bounds for primal variables int i; // int cont=0,contm=0; if ( 1 ) { const double ub=lp_par.var_ub; std::cout << " \n Setting upper bounds to: " << ub << std::endl << std::endl; for ( i=0; i< lp.ncols; ++i){ if ( lp.dupc[i]==lp.dloc[i] ) continue; if ( lp.dupc[i] > ub ) { lp.dupc[i]=ub; cont++; } if ( lp.dloc[i] < -ub ) { lp.dloc[i]=-ub; contm++; } } std::cout << cont << " bounds have been changed to " << ub << std::endl; std::cout << contm << " bounds have been changed to " << -ub << std::endl; } return 0; } Vol-1.5.4/Vol/examples/VolUfl/0000755000175000017500000000000013434204224015076 5ustar sudipsudipVol-1.5.4/Vol/examples/VolUfl/data.gz0000644000175000017500000025671310435426173016376 0ustar sudipsudip‹y¼é9dataìYÒ%«Ž¬ßs9‚mAóŸØÅýsVVÍ î9¶Í~eÄ"h„j\åûþ–ñýùþ«ÿÿ¿ÿCÿ•¿åï÷ßÚßüæ%ê%ÆÞ»‰h—˜c±.Ñ/qê§]bü-ÿ}ç›ûþ=ïƒRç\úɺDŸ}›Øny~§_â\b·5Š+—þ+­Œ"B=(k÷¦æŠº°OÏ‹êÃ)sW}¶¨{•ÚŽ¨¡þµ5«ßT?Ú^½»Íeª¶Ïmª'cÔ3D¸'³ì­ë§Gý;S¬žŒuø@UWêý•»YÕ•ñ±4kµkõ+j¿ª'u·_Õ‘zWÜâòôÔÞÔɺ=œ^§[TOFi­èkM=™kMw¹©'ó[_Q›M=YsŽ­6›z²¾s'I”&å«¥—Ï=+_oŸugÎ^Õ¯ª3»ÜU±MÔR¼ÖGKZÊÖ¯º»òÝùSW:²ëÔÀ»ºrG·»~ÖÕ•^÷hj²kR¾;Xÿ̹kå'ÓC=÷‡¢ÔUö43uOJÕÖ5)§²õ»ñ¹“ßñâ%¨w)EyRÊZž°áIi§›)‡{Ò¶çk¨'£¶é‘Ž©G_ëfdõd´YiÑSrÚµXãxÒGw/§¥öã^NólmÝË3Õ5å9u6ÿ®›¥jõÌNºòm}`N3ð.P˓׼¨S=iU¥žÌ=îÌj}nñnýl´{ƒ,/Î:—KEyóÔzY]”7ÏÝJþ•úq€¥Z3³ðù™æäŒR‡Ÿmoé3·÷·7O?ÓßÞž“Rš?°Í²ãN¥ær«+wkNo¬Ý¼s3´='—ý3w¥Ýið#oãÚÖÒx¶çäJÍÂöœ\¶ùü¢{rçÇõ¤÷»–5êÉýÑŤÜèwÇ“²F7ÿõdÎÚÌ¥gdÂ,‰ÎôÈWñ÷Ž÷N=6wXjùMxö+ áf¦m—9,¦¾bÓ&”y¥·3¦I3˾R²#s·÷Éý²¶ïºâÙ’úS¾]Î<´eq{7ŸÝl¸K›ô޾ýuÖ¸ßY^áb‘{Ú¼bäûtN[ݤ%Ý\à \ºW 7žo´>½eŠå“w=Km·Ê»ÞÚóîKÞ¢.Ý~Ò ‹ÞËJ÷e“ž¦ÖYùbá+ a¶(–¾û»½€ôwôÞ’¥³|5´HÞ½BËä=æð!Szçí|¨ëì¾+‘Ÿúôî­VÈ‚ùì+iÜGKæÊÐ-—ç•óDZ`¾Û蜪uˆzé+{«uˆ;ÎË€—ð õ+XÖ%º÷v_åþmAx{uåVµqϬ±õ“åÃô¬®×ÌÓ÷ï¡ßÿ¾ˆCªtˆ»Êë2­Þ3G‹†ûã“ûëešjüNg|E‰¨÷DÜþO©óÝ%«Ñ!ÆÔlTtˆ%iêg,ÐmÃÔáÛ$œ\ësQêÊ£{6*gÖ]LQÞîw›7ÿ®[Á™‰çÝe~2‘/£©“æàyEòç-‘G«ž”ˆËÝKí›}ïš\ŽÑXÑ"î›U͘{ï±Ñ<çfÞ±Ö…(‹ä»6ºY·\ÐüÌûé͘÷SwµDm‹¤½Zó½Dý]”ÙöêH÷4å3óʺc^0Ó~u«ŸfÙ{òÝ“]”ùäŠ'?>[ïLësæ×;Ïejf׫z6L˾åm}×À\dn½‚ z­Fô1çô3uäîÿ}Ï#‘0‹O×*=Bz䙿+õ»§šÖhxZ¾¯›°žw¾Í÷P8/kš2³|sùM‰rŦȊÄ WäˆB‘¨ ʛ绻Ñ{$Êï•(¢èJÿŠº99® õà§µ K¿ê‰¹™ùѺÄ×.‹xHV&®|®ÞÇËâîª']?\(XW²è‡Ö&ê=Œ¡:û¦ õÍêĸj€'m±HW—ñX¤Køw¾èƒ~fvÑ^Ñï¬N´{¼{=­N4gêêDßÛÂêÄíγnêr…[ñ>º’sè ›³àP"|^^>ðÞa˜15Ù†aV¬N´ËœG=±:q/ÃÜcuâÎ¥YÕÚ„Ô´ÏTg÷Ý;æÏêD9—¯Ü¦…ËôÞ¶V'´ÒîóÙ‘lnÅ=™ h÷ükȲ-}EO+L¸Ì˨w",–Ð&n¿ßO‡|%O';Pºu}ÊD[u"]-ûT“ÜUβˆ/…kÓÕk-R-}ëéëã©§èªQt#ò÷Jgžz¹îÍcð”õê­!ǽ`õ Zö<ÝÍå}uµÏZ±¾;üðÔbøN›Y}â~l2žès›Ð'îW/7˜ô¡0úý¿Iô®6ö(_Gâ¢P4]Í<ËcɤÆo=SG:q>ñIÉçLA¡¸ìÒËwåIámÏÔ½öq¦Y(ß3`u^v¯Êª>JP(–Ä«Gߢ .&Ý‚ùj’ƒcÁ¼/£˜Ì ïê^¦,ušq@z¯ÝÍåÝŒ>qmô‰+:Çb‡©¦Ô÷…B²®Ñ2LÕ·E Å=r¾¼lYt§*Z„Åô½vH)hV*.SHQoV*®8¿ ø%Øt]Çm³RÑ¥ÖKpçÜWu½Äää¸]½DŽŠUôš·ÛôYÞþ"ËjÍŒ}7°V ¡U\.ÞÕÐ*f½:ª~f®¾#]ìZÅ]È;ᢛ箆¨™½Î›æž+¬õ·;rá®.Âηýæ{‹+ÕJ…öŸy:®¼ÿ4Nóòwõ´Ë8"{DåT§aå{˜SØÊöï¸ü^NýB­¸ã{ê‹6°—Â\|•Õ]5+æá«,Oy£/ã¸Msð]BZE¿;’esWîaG+ÞTW„ð;«8ícŽÌ¼ý^HL°¡¾ÕÕ$:Æ–†NÑÎMØÑµ.³k¬Ø&î^žš2³­¶Có3¬$E¶£†VQnGª­â¾è/pÿmËKiŽÕeíè{æ×«{ÝîˆR_¾+ß%šzE¿‹ ÕÒè4å%úîUN]³ZÑdƒò³Ѻ4/Ö+®|XþžÙE× óú­ŽÇnµâÝ >9Èï^£µZ!ñì}vî¡3¢¡U\-ZšJC«¸gË×Ô“‰:|×Á˜[î•«ªÏ(õΑwÒåÜ;‡¶š WëôB§¸ª¿`Bg W}¡áÜC^_X([¬åBﻺ¿™Yî-]mB-z<Ö(nŸ—?MG®­_aŸ¸ªªçkcg¼'›)Ïɬ«Š.C£ºµÓ‘îF³ ›]‹}âŠóð¦'Ÿîö- Å=¦?à ÓÝk^4 ™÷ôk÷tï$¢Ì)÷ðW“Ö(ÆmÂÜw¸2]ýP£;pí=µÜ$'¥,¢|[¹GØÖ¤6PµÜ:œÝ—¿-¬P\‰y¥´I¶Ð*æÓØ'ÖÇä¢Pܳ¥B™oïÄxç£P´^hÇ|{õØI;‹-üy¿¡N]EhˆÉ¹RпEê«à-êÄÕSòÌwÙ<[¨EûÚ§’w|–»¼{ñÈ‹õ3æ\£N´ã9º+Ryê.­{ q¿Erͤ»Ô®às«“á ’ûËN—r¯Ë†C›¸:™LŽ-ÚÄwnÇ™ÔÊL•ÓÝ­ÊESú‘I 2JúÌAÅÙW™4KßS­Bz¢ênóÄ=’ $½êæc” íííô~ï žî•Ïn$Ô„ƒÈ—닻عþŽAËhcÝÚ$ eK‹6Ñ®tÙéc‰Ë6øšt¯ŽïJ-ÚÄ]“’#—ËWæmâj1>îÑ%îX¯<ìè_•nÔÿb¼ªß¾·•UBW±u Ïl刟}îéÛ­J´zÏýÆ3ó]T-[•h² ê›îÁ½WN=*èXM–æUâž~ÅÏZróŽ*Ñt‹p+æè¾o‡EÑ‘ï2€¨ØîE]”§CV®Ž*qÿ]W¢Ž*q/)—¹EùøÞºÊ‰âÊù] 'ʪĔ²çše޲Ž*!ÃßÒÀ+’ðr„‰âhŸ:]1Õ¶+£EY—(:Ï5á{åx–áàóIéÑ%îñ'Õ”©´£KÜóg먧7O{ÃZre—>‡*1e‚ìh2œT·hƽóÞõ UBµUâ W5‰*!©>‡*q÷$T¶÷=kEa·±ÎÙc ¨’]¢_8|Úßô3T‰1ü;T ê'ªÄÝÔ}@Œ{ùa޽ëçY“¸ëßÍhWg3k¢IÜ®x&FØvy|#†ÕÝæAlÊFØQ%> Æ­WÑ%îâ SðKßæq”‰sokþ¡7ÐUÝ™ˇ€.qÏ1ó€u‰¾o¯5èçž"ØÅw³ªET‰-Í_TáEYÅ:ªD—R Ywe¡)o¡"›µ(_Q®bdQ€*±÷ðl®èÀsùwÌJÛž#”‰{õ&B™¸£éw(6Ôôèwaú….qU;31ºÄ=k½¡¬LÜ3»zÓ`œ¸gïÒÈQ&¾XÁ‚tµ@±½.ïQ|WU^êÈy0Ï<'ë~f]bß]¢öÑ%îÃ¥^F—XÕ2]bßÙt+Ö%æúÌb'ÞS™ê:ÊĕՓò”‰r¼‡¢LÜË-r ëDgõž.qoüÔ&ÇžQÅ:q9¾ 䉺»!ß}|Ó”—MÂa‘ï^mùLâZ¨²yöhW÷¨Èy âû÷Ý>&½Í¯`AâʇéûË›Wô‰QØO1OÈTè`ž¸[›i¶4¾ûÝa& K´yy¬S¿?uâ*äæ‘¨wpÝ_>q—Ü_Åñ¼ä0é>ÝëêÇËLT™—ÍSó^WLZ.ß³£°|è:ÉÝTç2cÁmâ®;ó‚6Që]“ž¦Ûðç[6ß»|9üÖ}Z²hšŒöÎ/Ý#ùp=-Hç+¯&5¬LÜ¥ÐFx;®é'öA—À-óðpÀÄÕZŠ~ᙹ`«—0[¯u†žØý|ÚݮúÄU %Øõ^‡ô¬m­·pÙÙ>Òª]f–ùª©"ðGB¨VS‚h H é-¦0Œ^‰ÙDÙt$sµŸ¹#WóP%î$ ŸÝ:òg¨÷öåß/!«¬MÆ]Ðã6|0|ºcˆÂãû]5O”OÌÏÙ!=Bc“Ú6âé¸[ êg“AÚ([EåhÔpÓõqÜáëÎ¥&Ål{eÀýQö^FñZb’øÖñ„™gÏåᡘeu¡¢Íƒmë‘ùõÞ+CyNî´O5I¸Ä‡SÚýBHx æed±‘UÛ¡¨Ïó÷ihÝ3"ñ>¤AÜ¿» (âÈ ©þ)±ç¥Ey>šÜ‹¢ì¼¼ä‘8RBF6„Ô(*DÔ´»võÉꃴY?Á¯Ûäíh[†nÿ†l7ú´•‡{4Vóôäx²â”‡!°gÿÆw¥£=éIg)¬=\F¼¹<ùÛ ‰òp»ì)±ö°ÎUEY{Ø÷ºÐ4GJ\qhöYÑ4Wõ.ô¶i°8÷†ïá`‡¸ûË{×ÊüWŸî7ž`kûH „t(SÙ¾wics¿½7ýlãOv)ÊdßkªŸ9>çV«Q‹Â|†'ü`¯ÚÕ½'JBqMQ§ÁÇ"C»BXšì}CŠƒçªø‘ÅÈ=ZyÑ;ændï4ë —ÉªEÌ9Dä KP« çMjÃýöòŠÚpûé]§Æ¨é‹Þ ã5O£ó ÚÄH\ÉÝ'mqg¼¬„µZÌcÊÛø:ETÚiæi Ú]Õ’¥¡_yú+…³pÏJÃÕ‚Çä§ÞÍ÷jM-kïyZ€Œ.ÞÐ $B¢Þ“Ê_AØ^1éˆÆpäs;·Gj J„Ľç,Ôý]DºeînrØ™$« !¥2ÜNÈDdj#~«a¹Û¾¶¼‹ÐîG‡ $PmÎùC§¾ÁX‘½²/ºåæ3q×EKá$æøˆ‰èy Ã]fH+1WSfQ‰V»ª•)¢#¶¢ìLzáêá#ÀW;½=4éýÕæ¢÷=‡tªCW!£ X…ïö¨žÁî9Ú+Ih{}aÉ â†Æ—wçŸiuAñ>ãþ]9´®nz /ؽ±V;§¶÷ċћ¼Õ“ØÇê\³Ì’Ev¢.,ù±/á;v?wµôIà+¡EXÜÜ)(~ä}~Wñó3œí*Ú¢Ð}ïÉégf™«<©ãŠ˜BÔÊ£îgž‹Ë§ÃÃ=œWµÐ€1X]µ]MVìžýò°(üL6ìÏè Kk,Š@¨#3èDc¸·$9ï&ÃÕòÄraI­3EÔS0 ×4ß¾ï/EùœþºŒI•A–†ª~¶WÉñ 4N&)Ž¢,oîq\Õ³˜û%jYø(,ͯÆèÙ<»h¹­Ë¡3QÚ¢ŸØ®â+»‹GƒÙeX5‚íá ½ÇÏ$cíDm¸×éëµá^èŽy­3/Ws+q1ë6>Qî*ô«ºŠô޾Ën޵îpUÚ;‡¢‚½‘ùÔür×hšrg®‚ÐõyŒWö{ì#nÜÊ3 aiénÓ sïžÕìŽN÷1Qæ]…äˆà6©h«‰ò ÏR7Õ‘¢ìŽì;X}l¢oËñåA¸ Tþ1Í€óE‚=[0KÑÕnby¸mûk }êÞ}´@ H=Þ hÒ³õñ…é×Ѭ3W‰ïnÓs2l™¨r›Ñ&·lÄqÃû‰öàX Sîʽ xm®CŠ¥…ûxJ‡šh÷…¸AƒXsz°˜îÀ¢$*Ä=¨ÜŠ´—£‹ÙGÆ2âJH÷Ú:„ +߉Ûÿª=¢ì6^_¥B#¼’F\©³ü„@š;InóêøÌ¶¶=4ErZ>Y‰P$’?—8ËïxΞa‡ïŒq•=mgtˆ»Í¨wžù¸–‡¯¬ÈïICøϸá;.{>7ÆÖ>6·ú°èF…Øs!bP!®JP8$°ú–ËÑˤ…¯b©y™99=Lz’îÀó]ï'¹¨xê‹RõÑ?_XÄ•efƒÄEH ÷ËÕ×G´¦³¼R×]®„jHó6éUëŠ 5‰§ò&wò¯æÑ×CÖ„ôTÝÞ@VÛg´1Y¤ñÝŠÞ³hWUoŸå½?zô±_-Ôjh[gÓ ‰¹*ݰH¾¤ô‚ù< fwSÜävÑ}vÆò0$¦ÜÉÎé]º÷ªÄªã;¼ì¹º Þ<“{Ƚbð[÷ê®ç,×~ÅO™$îütÌÒù¶´a£ñ½=°þ,B-ïEñÜ¿ñ¥6]P×߸ îýøÞlŠàï—@._Y¢ßø&uï%G¯%úý+j€­vt/Ò5î™p÷ÀJ¨å½‰Ü­µ¢O(‚aˆòR)|ÛÏpÿ­„Z*ÄÊobà«âž…Bqª¬‘ …⪜”-ŽWRÍÍ—!̶Ð'îa$_ÚBŸ({Š{Wô‰iÖBŸÐÜLu¬²½dâe±<ÅR¢èŠ”ª…:qeÂÇê„FZÜ1Tá£0"Í8ÓrûbÊgøÕ‹æ¯‘&±åM\‰Š°ÇiE¸»³jV³ÒʶP'Ö¡~”T™W<w§~^mÝmy¢{¼ËÅ6q¯|Ÿ)‹«yõlQHÏÞÆO+‡(ïž{íhjM⻪žß¤'«xÃl.(§©#›Ø™…|²"¡Ià8Øg÷ì ‰ýøs‡Â2¼]N®IÓ]>¹£4Ë¿C Õ=¥ÝŠ×g4v5 ]ÕW4‰{ × jE•P|b‡Tte/4å.}ß6¾Ëâî¢LȪlNG™¸÷­tª$lX<£LL}†§^®Â"D—¸Â´»a| ¿tŸ ÁÂuÁªÉÙÐ%éîí}OqDPÚ•Þ(k·fÆþ…ElÏœ3ƒ…Þí ŸÁ Qm„\/gCW%Ú%ÙFÝ2‰¼Q~€É0*[èwŽwe|wýäð]/;ªÄe”WT‰­¨VDzX¦–aÜk[ü‡ÁV$úŠ*!mºrÔaJ:9#-‘oþè„íNdfyÁïRrWT‰‚ÓxE•ø”ÂáíŒ.1vÍKŒ¥4wžúXõ4ÚÂdîÌÇõ”‰ï{OÉ(“n üu[Ž;ÊÄÒ´nB,åÝŸ— \íȹ³ÉÛXŠÌ¾„wܧàäMXÄ*аÜDX9å.AÀÈÕ}õÿrãÖ7ñto-íNXÄŠqß(cݹtï8Á﹩aê+¬ü±2rtm·ëD£M¤á”Ée¿Ë©ì¿ÀˆíĽoF­ŠaØ Œø,Ðw¼Ûi;W/Ðùµ™w¢¼>Ÿè;ó5õ“¸íL¿˜8ïÖ4-ÄEœ¦PÆý¬«{–‰±œßws'.â›ßP_Ð&ê÷yìøáî¡äï¡ _Q½õ¬ÅÂi£O(Nó3…á\>sQ 3ÒA¾Ñ'ô³¥UAŸ(ŽšØè³ø$݉Œ­ªÓ#ÖVàð~  KAûÅXÊJ$Êg§’†5 Î53KƒY¶þ•âS=Ät/F>X¡#™±£RÈhl.Å4Ñå„ß/ÂrW/׈õ\·§ý",•p$*Î E@×Žß ±!ÝÉÜûVß#,Bóà}Á…¥ o,Â"Î=Žý&ö£»5¾ï×ñF#.¢Y/Ýω­°;zŽx®Häh¥zmŸf¡¤_“Þã—Íé—ºe©Z¡„AÄ!,Ž!B#†2ÎLr(¬LERè²—£WœºùÊO3–ÅWÈ•ñ‹"%öKÝØUîëý‹µ²î±: 'PíN¤g‰\ìÙ/4â@Þ𠎨#çQK:Àî&amåíky…­Ù>ЦH“¤%•ʼqÑ;S‹^¿+î™A2¿3;¡–²Ls`z¢v–¢‡G0O,é±& p¤ì~¡÷2ž§ì·±YžN—œÀ³_pDý®pÿs¬RÈ«Ácâ^åÛ?¹fi_ÂÖ’¯ÉJs°P\]hë ÷‰«t©:rwþºV%]‚]Ô‰ƒR¡ðÕ;i'ŠZ,}Öñ›äzW_6C_î·îP+†â«OB$”çc f¶íD©8w3‹àĺ*˜^D§¸ÝÑ`*ÒP‰½ž³²¢§Ô &Šqw¹„‰BIgþ!& )Ö' °™"Éú^EÀÂsVŽháqÄx¢Rè&£yhDÏ)IPa4G`•â.©$ꉅ¢ØÄ|¢R\¥¨¨—qÓ­Ýý;îãvITŠJäÛA¥¨eËQrl)?‰ž¡“ |b¢˜ v<‰‘ÕC}ÉFV'…¼nƒeéö¢¬Q|GûñÄF±‹vOÜWZzÉÇ3 xűRìÃr¡R|Ò­DY¥¸·ö¥6­R\µgh8•O‚FTHºg‡<Çn„KžÑG…°üñ™Äa&ÌÅ•MWµ…Ô›ÛÓG¬Ä½í¹@%îŽãwÖ(¶'Nüg(´ø Q躣9š8vÏôºâïX[ ÅA¡˜G+$ÊÂî.‚»‚âýžM+­9?æ PÈ¥75Gø;îEÅã…Z(î)ey½AF÷¡[ÁÉÐ)x.!k ÞÄHQÎ*úúÎaÐ-8HU ±ïåÝÌa¤žsNQÄ)´ai±±Üèº)Šž åï´‰{Ø+éD›¸»Ä'i ÅÂè)š‡s’÷´ý9´‰ÖXkŠ2®¦+Í»÷p=葆Ýsʆ{P&î„<ÞŽ{}.TIÛ¸z‚eÜÇÍ©ÊØv~°ÒÎÓ%ÊÞ³qwœöy‹ÅFñÙ·u¢Lxdòòfökái˜¦yúc¤¸Wàé>ås‡s,21R,…5›|—J3Nò@[¸ ]⮪rÎÓ%öè‰nç^Ÿ?H’~œ¢x¢M\¾.'‰›°P4ïjenb&®›ó F%…½¢NÜSeCb`ú¦Åʃ–ØkÑè>†Q9Q'š¢½<@¼Ï²úÜaª&[u⊿N§Z[ªYò!KÜ£Ö½ hí †BS­ÉÙÇ-oɉÆ5O"¼l3Å×3¯Ä>Á2ùøC¡8Óï™):gKŠ;WžGô‰s2ËXÇ™ƒ§x]•‹l’­3XlÄóZ\#ÅVªÜy…”a®ÂG¢OA9æôªÔ‚KaϹGª@g¾¿çWçœ~7«'!}©—*/Ö '^ ­ëª½~—]·/l™ïð}âû¶N‘që}BÌúP/Ä㇧µ]ùÁo“žjÔýBˆOŸû€ŠQeù6i ) žr·X}¸Sq„ô»=îÕP~IÒå¥7š$§lKåi9y%KȤˆ¶ü–ëq3×÷7Lî*{5$&¹*ˆ ‘“|¬×H^gR“ø±|BæÇç|dmÒÕu]7iG—ü3‰O}d_’üÑg¸wâM:FõúÐJ„ÏB'ñÜd/ZHÕÃM<_c&lТ¾„qÞ+ÐòH(½¬Ë’¢ë¡I¼²tÅA| ܇½C‚Ÿz¦Î2’Ö‡‚2%àøŽe‚pŽ<¼•»ýæ³è(çmé{JÊc[KQГÁó>ôÇþ»C™‚qDa…¹G$BÁÞ0‘ˆs%Ô™Ü,ÉbDûžu¿L„çÕ«;IrH3ÜŒHÌóƒÝf•åêÒÇʼ"ÈèQY’zN±}ñ­\Õ„Å=hlUN…²Ÿd>8Ô4hÊS®a†’÷êwëáp™~9b 9v®›&,÷Šè|€°OᦉPStÒO ™÷½ÀÏYÿ¦ ‚hô<LjÕ?™h2­?ë‹*3š}g¦ÁÏi›yOÚˆt¬Ð¸¦JC4$qD¨LyNÜÚè‡(4WÖÁ0h4câ(C¥¹§xGîÄD¢€–¼Ï}árŒóå £™#Œ´–Ýó}B9ªƒ°LoÄ\ÝyŸùKo€R³|Èü»ºåË Iàðl¢Bïu‰ã'©$kõ’`^ñ–Ï7ò[êÎ™Š†Sg^L&w”3¿7ÿÝÙÊô"ÿ›~}IH Ф¹¬ÿ½¾œáž¾»«Â>WÒ…=ûs^|þ Â4U¾[™ŽñkF à,8B—ûS@ä”OJÌ$ç]w%˜09‹à_¦(â5½­Êߨ,/^€å¼bÛS .gú_æ¬'ò›æµ»6ZÍ’¬Õ: QpΫu+–®sÞÐÝ7b˜BÇ_ÞüñG±–¡|ÑR^Êɧ„øò :µ¡Щ<ÂWÐt¦BQJ0:¯0èLnš+z—[cF=2If€(%Žy Q)”‚UÕyÕÅk•`uÊO•§0½rL¢8™gJà:¯Þ"d ^gq¬[ ^çee”vÞM¿YÑúƒå{;ïUVéÄΫŒ(د²SÓß=v‚@îa¾iç^ÏbacÙ½ÒT§æ#qÜ(窔—Šâ|–RWZd46™|ëÑ﬊Ká;¤µ¢ ÀS·„ÅS¤¿B'Í– b—¾”§è8Lªij+•Äã#¹µ(ÆÝ$6KQšÌA¹è~ehÓL^>X»Ëlár¶¦-ÿCÉ™[–£0Ïa4Ϫú›(9º;ÓùœW”Bɰ3;çþþ¢åLEĘ< ³ˆ–s¯Ã°.YÜÔóé0+×C˜—@{Viî2h\W7wj%Loäi2^;SLÊ+è›Á÷l²¼ø§(9³}ìž$½ â³(ß›ƒ-Š¥¼Ä׫Kò[ÏÔ^‰ÛI@ÈŽÇ¿£`xêünŒÈ‘cŒ»òÀ>¥- ¿ž[!/Ï8äÀT§ðSyKp#Y°uê6\ùyµÝ+ å”iqpYž¹H¬‚Á›qT6[t¡¬ ¿Ä?ßõ–©(’ò€?÷Ýç ±û½éÚK4áÐå} Gñ’»‡ÍX b0^ŸjëJy }•'€IŠ6—‡zÇ-Vh|ýæ^òJhˇO~hK­«)·´F8ÀìýdÆVÒÊC½GUá KT‰yhõæø8~X Ò óëwª åæŒ5ôÌq7s„-ö¬  è%s¦¾HUÀE$hï{¦·¿ÙL=WZI4‹v£T¡Ð˜ªâbËÃBúdòH•µfxh7wÞËáX¾°JòÖAr—Hýv28…®¶ÁÏQn®4[yÝu–¼Íì¾ÄÆ^ê@›[}ïs´c¢<ŒPyIræÇ}[èápÈ?ô§€zB5RhS$È…3¤¦¬ÐÚŒÆRjBX‡A­ ½¼¨|“^hWø¯©\o­÷€ª«ügÊ› É`åz¬Oq†%˜¡Wjœáo”È}ÏËC ½œ8y9ÉêBì+ÒX¤7çeÄÅw‘¯BQ$¡/8…ØWÅŸyâFû-£2z»âúKPF•%Âþ™I¢?¬¾¥y|»Ш¶ k@ì*=d\Å,îŒyIÞÔ¬Q…+OZJ¾†‘KÀFeÕþøldÕð»¨8÷VÄàq2}NE+nô¾Ë–'nåÊm¯%q+_),Á°ßí¢WhXÅòtÁp•y#vaÙ•€ŽaÔú)±²6!?ˆÎ-Ê-õ;#]â±ì?X¦ï;AUØ>ri¿„Æi¥Yv+Hj‡‡vÒ#>>Ktì½e±e¢â´ דðkÝ d…ºáõBŹçÙñÜËR 'TC:»Ä€I‚?±ˆôòªUÇ@‘6x æÐR ²ÿÀH«n2‘¯–VW.ï ÍýPæÐ$GuØ•‡H:uAn⊪w 4@$ŸBÊ”t¼ÝóBfç´ÇÝBå‡Kº lY0éTsž¿‰ô?1†­ 1ߢÈÅÐíJOtЈƒå”Þ3ðã€Kô¬¿sƘلMÎûDºœbäø‡Rzþ!;¢ê4§‚”‡S*×Çb‚k¬t{3AÜh÷˜ß›éy—ïÌ$ÀDhR÷‡ðµKýé:çƒÑL{ßO‰¦Õüä(;[ ´å!–V¥"Ñߘðw C´XJlx ¥WD7$vPKO™ðĬžù#0q* :Ç“ù!®V‘}´ß¹y¦<ðÒ;Ú–3ŸÈÚ; ޵x­¬‘ö‘n[¹æå`z‰§[µWÖ›ðZ(LoW,Ѐ0tägŠ\«:Q1›OdWW@ ŠiY ß/À˜¥_QÄ´OaÕ€L{ut ’éÝæÊx+2½:í×!AbXù$^«c£CÀL¯¨«4ÓyÏÆÁ&hµ+!©ÐT ˆZ“`šþMb^¢¤LPM¯Z%¯y ¬©ÀË—¿®i›ùCÛ²†ÇW–’aËiŠZ2Éai”òpSU‹`nÈ ¾3Ńª·”ðX¾©°‡Ü+@zϱ¡<§³ }âtVCé–‡qª\Ö•¸fCPN•‰ÊÁÕS`ry(§ÊÅöxpZ]­â˜D­0§˜ÓZ§O8­TÛÃM@ÞælÚ u¾Í€ÈVØ7܆¹÷Û´ŒF¿³Úd o <ÄÓ^' FðÌ1JS æiÊ¥óTv×#c˜…õÃmu¦ë‘öôò²oKpO•˜÷ñ!ÆÖA‚|zõð ˆê÷C„Ñ\±X=W¨JÐOUCDiI%¨W ;ªUV˜ñÐvÖˆhš;Ú|Éò~”ÃfôÂîñPs:Rƒ äQ ªJø4w{Žb#xŠ×Ø %H¨K¨Æž‹5²-ºûdmÇø'4EhDµ)!x¨S<ÅÖ\*ë· ëc›Àa㌕öж§Ó$!²ËÕ}ÚóZ BΤÕúñM¦ÙêÎw¦1K°Q¯(ŸLäF,LÅã” £ òÍk}ç«2w¹›‡P(C—‡z(SñÃH¥:F@R«B>ÝôSx!Öw>ƒ°*'Ñ–1a…çKvE=¨ÔÕ//hOž¢ï,]YC›µ”‰úåP¤ñd=ÀTÙÓNh2hûïxE›=!5µèòƒäý0­îÕ"ÓÁ·#²ÖB~Ësˆ°-H®Öv„¾ÅÄüR#yB‚' ? Oaßs©ä÷ø’±ô>U19 Èö{œtHµJ…f¬Tz¹+S€åé—¥zo;MG8Öìªä Ëè»ÉÌÄÆ¨ÓjN½„IŽ· Cl`SʃT½’Ó¥|¦ª©³¤"÷QÙÆh:sÌ•þ‘Œ|92'6Î\ì‡WõN}ŽÝ¸¬~CqY]µ*ÃëìÖïc³Ð!íÉëm†æÎ»‡ï:à«Þ™õ½€U‰êc “Å÷ž|ßdõ*ãs=xív²*@£ ¬Þ¹æe̪PÁ|¿é@£}Æx*ýa£ŸšÁY=Š^&Io·Ð Ðêš8SÒª|YÅ$¬ÿy‚µú) €†ñx·ògnõtĦó 4£qUð|ôsæ½ûHÒœö¦,!A9›œƒö´?ÔÕqO/f[aäG îª6k~ ÇSâ­ÿ*Ìmˆxö-ÌÒ_m˜cwV W¥ÔÐE ìêh†þjÌMûgüêr¾v þê!;£u÷ö±T6ô‚{ÜÉûlW ërȨIÏTµ¦VÙÂÜ.u®j½¬JCü2þ϶ùL,rÕŒÖs÷ –’sVµÌ“^¼ít·,Ö&#…_¦êœP¤Mqmû‚Æêzîpj•rJÁcBxŸt¬Ï‚ ²j™ $Ú|‡g‚nQ$«PìÜRB…US(ëŠé+AeUA5Ödµ’¯RƒîÎ[õüOBËÏf±ðX­UªG ºšRüÒšïãáYÃq0ÿ„µêœá€Ö£Ð<¶79QøDkÃŒV9Äa*Òé`€L~Ë—M°ˆ–˜Vžú3è¼§¨8r®#I÷žS˜N©¥¼Œ§¿+ɰ®µ ¢‰– Ýí6ÚT)¢×‘9aH ×|öZf%Ädð2±Ä÷&¹¼5Ÿ–-D‘ºî\ÒäV…'tOeê„IðË´JgðVÉÞ†¹":¯¶½uÏñ1Ü”ª«®íQ~ëÕÆ—çæ¬«.Ì<Ç1úB(’ý¬û523n«êx«‡âªpÒçI úžì&ıö¼ÎNÜ…zsʲ9å!¹ni¤¡­]%±‡&U¼Žt§àUSÑNhܵ»æ8@Æ6†”+ßÌÇ1eî–¶©éx½‡æº„½M×…y—0©/{rd•”½»Ÿær™•Úòë²iÉûôÝ„r³ëg÷ýƒuU€Ç—ïsO+ÙniSe.ú“„Ò&ÔÄò ]ç½ È’ýd8êÍ=>Ø5Åì8‘æâ´šð`œV])Ð(_÷¡{ûr ä9hZÏ‘ˆzsÅjùB£¸Ö–•CöÊ2„æ”ÜŽLìnS(€–¾•Á¡Ù nXÖ«|£9ùokrÞë=ìì2)‘[•äZ@|½«¾ °ãTߘFªäªŒAôU–;¿ç;› ÛЍ¸»6 îëšA~ÝÓ&É¿e•¿ÞÁØH<¢ÜEƒ§Å…%诂ØvÇP쯪ù/aZw“Ä­NK£À*ä0}`í–ÒK `…¶3ürjænÕ9)ã™pŽÒJP`M)›[l® ¬”ºâï ÏWeâ” Áyýyw›·…^À`Uàb± DP}¾0vlÎûàÁêÖ^=pŽÜÊxtàín Ý¨t?&Ä÷²šG@ ]Ì´eíæjŸGŸ2º¾É‹…_€aïÕPˆ%Ȱ*<àòãeRŸÊ<¦–® IKðaМ¦Õ-ß$@1G•nÊxu-ãG´›«Ða´›»è0œó}ðÚü‹-dç· ¬uÆYÕ±¿WWw0k(7µ<€±Ôí*ã™o޲¬ÊCŒý–ÈŒ-‰ï flsñÌX]¹!ò ÚdVÖB´k@cçànÔØÌ åu°÷Pc?—¨+6öJ`ædO²²sñ|~Y&Ôš^…ìØu*»Máx x¬À昴E”ðUòñgfÒ›®»¼e ‚ìÕ +N­]%~úeì6‚?çeËò횉%@²[º0$v·µLT´ì îǯ?,YÝ1ùŠ»´ñÎMVøÙÌ>&›íjAåáÉ6ù¡Lzž¶kg•ñ4šá[ÍxKJPe]ƒÂ“Šj^ñì±~ùB9^ñÝ="#Qi”²W²ìî?’«W]LEì53›!õmΚ!Iiißû5&®oÙ†ë«Ö|š¡â 僗ý>ø²Ÿë(”e樀­’mZIë0 ñÐA£}ÿPf G䃙U^&ó’ ãõõüÜRa”™b¼ÅŒ‡5;Z+ˆ‰è3*Nºr?ƚݳ»žgªgÓüð]”eUâìÝ'Ž7_UÞÒ2zô™:{3î®ýíÞò+Ž@yöšÒ‘¦)Í zcyȳòJ³§Sœwe3žBÓ\Á°<øÙq¸šðT,q¶t,qãï«ÐÛ'ó@h·‚C—¨9ŒÝ=Ùhù0µGµy¦IœŸÊ)4‰„ýÁr þƒª&²_®˜Ûj§”ü 5W‚V«ˆD>„.??Ç<¯VxJ ÒûRVHy_yb­ñ< l”{Xäþìþ%*¼0²¶öI;°»Ì‘ü[ý©,+ÖIÕgÍI‚/¶¶*~Ý$V¤¾ø!8§ÙŠèZÕ©<5œ¤J¬š{äÛ¬%ƒò.{Šq¾nŒ×¾v¸<üZ¹=ÄÐß„YKéH!÷›¦Âï=ÆøÒHâ’m8±U=Ò§–úJ—à·ð”@Mâ^>ˆdÛ(V‚d{u+GÈÊVþèJËdðÀlÏQæi š­Î@¶f›¹àdçUGµ=DÛVXø™T8Ç >LÛ3•P[}”á‘æÝ¶íð×V&·ÔpÅß2_Éßãkn m…è{•OXS먡Iß89Ñsîd9§ð¡â ³¸ä9“÷©:^y¸¸‚„ßÐ?ò d\"Ëó€í¬U‹[3™í°!zN‘ù7´meìÓ"p>•G榶ÎkŸ°ÐRÙz1Üc|•‡‘Û‡a©Ê$·ŒýÎkŸ”Wæg|Ûv9’7>¤ù€reòÛiíYï{–"Wõ 3ö‡b}À[C¦»¼+uÿŠŠã”ËM÷J˜+44Þ$¯cYÙ2WÎ?u Ì\EkH€æéÑK”¹MÀ«~¯Ù¦¶ÒicÁÍUYÄæO ÑÃäÜ+—|è:· ôˆ—A>9%O àXgñ!’ŠÃWŸ+ì^çƒA÷Þlm „îmÚÙhÁÐU¢qók?|§y(º}XFw;Þ£;ŒÅCTüi9$Ý;ii—ó›”Îõp¦­Ò•¡dø«±ß|‡©‚ç¿í䇠éúä•Ã[òø]ÛÕƒm‰ë Mg)@Ϥ5#³ªI‚¦#+èûî–ûÿÀ!)ÁÕ2ºS„ÕßÛ] o‘alÝ«Eo>XxË©Ä\÷.ü¦%B6”@ì^íêc’ÁF¸Â’™G`<€õÆ/AÙuv:OéÓÙÝ [Ï1,O §¤ÝOÀ¥‹·ƒM"XͬÝ{½*°8£Ûá´]áÁ±G¨?<*s”MkÂþ*ÁÛ5"—û<é•Ôt~K´™¦çæ*†M‘Xò9)'°»Ÿ»Ù/§¸©õ|.<ûEuù§ Ú\©Óy—‹€JÀwû½Î^&!µ1 •«bµƒlÓNúàõ»w1d `þ÷|9~yã]\áOÐm®ÂôyZ7ñ©«1­(:*ñä^ìº æCΕ³‹–±1/g‹·É&ÊSÄæa—XÏè>ãæ2¬p¸gÜ ç–Àõ_•ýf=GeµD^ÇŒÀzN-Â3™Óp!OB4Øå‘¥A¼QÁ&ĘÕÕ»FÊ}ÐâKï˜÷Ô'_‰½ìb~ÊÅ'L•ò°yU¿}#S¿€7d{¼`ãuØiI©R´Ý#S6Â.ø¼ËPŠåЫ¬ÈÐ^J9ŽC:N€ÛégFØ å(@jçð wÃ×®Ó{%q4€z²“BhyÚwB[z ¿ŽÞÇž3r=gÞI[¡QÂ\y¡<¼^åHÃ?ñO).5§Y¢K+¸dëÄø£fµ,ñeghõtTŽ hà:Ôúå¹ÙN€×t¸Ë{ŽÁJ%uYêF¬¼œn‡ÝCï½o¤ƒ¤ÒŽþ}ùž;xUò ãý\l‚(:2wæ96×oçûÁ-3ÊPy¾‚íç¬ âÞ´м}B„”Ú|í£YÜæ}€Vjiá?B1Uûù®X¾:{Åí;¥ [@ó½Ò:dà|?NÀó½Ú›`òK}h_‚è+P¢& ÅuØ>¦¯* UGåüUG§þ ÁÆBË­&I¯ŸöU,FeIòuº^ }ï6P›l_'‰¹‡”$»»$¾éôáÀû ¸†^‘Zu'LGØøUeC·Lâ¸,îL TÝieâWˆ¸/ªÎ§ “(`•WIA›Á“Wug‘Éo¹»™-‚óÛŽ*+™)¡||ž¿›`»OÑtzc¶]öÁþÞcµð!+Ï·ÇÝ s\î$ªŽ¢ÔüÝ0ø8<%ǡMG¸=njŒFÕ‡ÊÃÿU?S‰î4„NØl{Ý/Ò¸¿vñ ]ÅÎ GÈ!~™@œm¤ÒòX˜öå¡ß“…Õ´¦ÓTŒ½Õá’Ãx?‡@€•ÂÛ;^±0>,à{xÁ ØtJiìÚõlirÇåíöÔ,î=Ä XµÜ O‰êmƒõ $ðjtÒšŽ‚¡»7É«Y4ÓágÀdÀ˼å¦6"«6û%ã.°LŒMç|ÙÈÖtT0•Å%yü£¹Xd“Ž 1@nNg¸+„¹• ÂÊ#§îÎT‘<~Õé¼Ì¥lDDX×)º:ó2F9Uû6Iüâi°úáúó-d&ú…“YuÏ_ºÎ’¿šXÙf+Ý ¾§{El ì(^hå¹ÅÕ!ëá §àѶAõ‹Üü`Ò3x¨°Æâàûm›âƒ v`^h®Ë—@ãÂÍ8X0°Fô» 9­ ,xØÁµãÁàÁ£Íûðƒ» ÿù}*²}Gž<ö@ÿt5ÍT³ù2Áý«¶6?á»ß ŒP"ðÖx@Â/Ëû‡$,î|o#è2=„ã¨dŸO½£“Þ"ö{[yŠ,ûvωElÎ÷:Ö€½ØJÑudgÈûA¨ï€]<#ïs¥«¦=ìÍÊÚƒÖiÝxN^­‚ø=q˜§¯pG€}“Ðß×LVOÊè—ѯp•¥L8i«‡7Rœ®ï0ϯ<]†KVÕ‡'ô$­ênÙ) Ó>þ0†‹tÂ* \¡i{4(Ãã4k:'IäÕ6p†]k£‰òfPðó4IéR³^•œÀ` «Êiá©m›ÂŒ9&ñá:J*`ãckذp—)wHŽH’}ëÊWQCì¦*¾jÏsP‡;’´Ìe_üƒ–-ÉÓ›ÎvÌÿyFã0ù=¬Û9/üµÉôá»G+ó+ZÝK|¶÷ÒÀË„ )ÞÕÝ`w²P ˆ/g0ÞF …@;Mfíì™ñ*¶ûHı§ ‰§©'8ĺ· ÷‘ˆãæ’_%HÄ÷&Ú(báû±b¸i¿ùÑ Òªî°ù­}È»5V.‘¸O($îò€Ór`—œêPbáW·ŒYg'N–xu@›DvíÎ’W¥ð,wÐ;¬à*ö@÷,ëÊÿ¦=ôˆn`‹‡o¬Dàžß[PÉ»|XÕîLƒ‡q¬Bz!‰9^5G·[Õ²e6,òÏ©#d¢’Åjx—Ë7BÇ–X³Ö`£Ý³7“ß’Añ¥·AGs ¾ò°Že Ê‘‹N±–óÐŽìŸÑŤÿ}é~½ ¾â!K!E…ˆEGUó=Ï^•m‹Î=Kè/G€ÐÛ¢xgHg*°Ç*Åy{W=w¤wlÔãY]h¯z¬KʽÌ×ÏaÇH*˜ÇÅUM*Ç ¨âW>%»§ äñó·~ ;ˆ›)²ìUžÍ$Žïuhµ$²]™[ƒx|7»b§kx’†Ía÷¢’1ZÄ*Yƒx|é•5ˆÇ[Åcü˜(%úCa~ŸN5ˆÇJ%k¼L¼ýž™>«@)3Ùd’`våuš´ÝërYç©=Ž—¼ZLýžçj+£»ïøj)RkðŽA‘õ{‘Ç*ÜbÉ/ÜǸãoË­ïÉìåTÄsýžëÊnöÀã«yU!~Z!ã˜´Žª{»‚™Z¬H'™V›¼îøŠ™êƒ;þlت_ÂŽ»A¤2ÑÇW]-mG«RéF­âX·‚žÇœÍ»¦ïÜ\·Ò¯¡½:;ó°£{êÐY®¯*†š‰[«ä÷H‡Q’ðã¶ósLõ»eèD ††3o•"\s¡¬:°®þŽ\À׈Àül¨à¸_n_yß½»úxFb£ä^–†èãc€üú Ž¥à²/Ÿ³ª¯wÒ¿:sŸhÌ9s5K0áUA¢w©R)4ö&Bd¸#ë_ðñ‘¾>€c¥4®¹ >ŽLOð±nWõÁ+X.“‘Øã¡Km}ðÆG;t–Øã»—BØÁEÁ+ðÆLãLð± èyL:fà—Z# ­Xå ¸ñ½ÉXKjN÷·n¬^6SÈ3¡|ˆ"=®§b2ï&í¢,õ›òúD!`¥Eˆ::ïý ß/H…¬A7VhÅ2e½Fºÿ6 96jÀU÷0äk9Ú¼Üx*rÚd²Å¬95ÇB´.<ŽŸª0ÒštqkP8vUJ÷#éâ,gy9Í’<ÇW,FDºø^Þ(A8¾J£î?5ÇC!¦[ªŠÈ¬8V”!D—º³›ÌT y¨áX0KŸçGÕFáø^³}4âxl×J«âø–…ßz/6—@¬8ÞÕEk Žï•EH65Çw—~t’œ*AÙ¸WØ)…UçiNÂøü`ô÷%ŒI®´[á5ÇŠ—hîÊ»°”=W¤ŒWcOÔ`ß^)ø§ãXªfõ4c½DdÒÏté¬Á8D¼@Îø·lQƒq¬B6Ò÷ÙÞ3í(8Je3㔣¤}^&Vo fµ个ð©G4é+ìºúpŽÏdüg|DÒxWÝp“hñÒ Lâ[·¸ ̱°káõWÌv0¾Í0oRÆ¥hÒb^(ÀžFRÆû(8­¤K8ªTÞŸÁQÕ]ËKÿK°H~1†a ÊñÝ›{DbØ(±]x¥çxõ 2Ƨ2ŽLºWWü±µI®*ªembù-á _æ-ãÊV2Iò`ŸÌF2Æ·ìÞ50ÇG þm2Æ¿lÙ Ý­{{X:ãÂU©çXÖ«šŒq£Õ@Ç®jSб ®~ÎdŒO•Ú«èXà¹iÎÝ“^]ÞðEî’]¢Â0øÜ~¾õd>œ;¾´˜’úù©N$wýhˆÅè9 ¨M€Ïª#çBá¨þ"s_Þx-_èäY}™/òƇ]?õËH±øyãW5HÐt¶(êC;n*+Ê©e‘¿Êšç;b®äûIz…%Ÿ G©Ð\‹Î<9Q÷¯ÍûÞÈyõ¡«'ªÎUð RhÇ”1«?´cÕLe<$Ž+l!ß?œÇªŽ$;‰ãŠk`ýŒ&Û+´¥í½Oú“D«µ¿œêØðÇyí*ä´¦úðŽUN›C2©ã“Hû\*óEª•êÖÞïw|%˜,¿ÀãEQç à±Ì?ÝoÚ·|\G¯ðX±iþc¢)–Y<¾;±T@4ÀcÅîŠ;x\U[MZ-4­/ùÔ¼ËFUý_“¶ß+}¿îxë:‰ù^°–&9À·¬õÁcæåØ0×Sw¼„ ‰›Ö¥/jàŽÔÜá”v*/è«3¬— µ‡Ä(-#µIRY­¥íØRŒï°jCÍúÀŽGï%æ~™v<æ—wݧ!CŒÉ—§Í’'Ú•IUu¼åBð£Ö+"ÍÃÕÇT&C Ôñ'äjÞÆ){§|ùm¯’}Ü ­„‰oŠlGÕR6if’нŒ³¾ž—-ÂÊHŸqÆNÅ{š$PÔ¡\5XÇ¥:ïªëX6† ›¢Î«”Ië_Ýwÿ@»V‚`EGñ,“§V)ô†½ï¾Âf ËêΪêxÈ» y"£—“,«í¼¾j¨c_Oªû—jä£Ö—e5äý«A:xñdŸ¹O²1¸O@.ñ]u|¯êXp8îõ¹%Gü”œé0¶¬cB67EšÕ=ßÊÞûè3¦œ«l2q h£Å][bVt>—3×$ËJøñ&¹ÈöŠXAÑùTeÚ$®ô©ê"5`Ç÷ºSèÆŽ3}"„ˆ>VI SÞ|E.ü¬c9*>w¬cUõŠ€u¼UµÊ$a^ßbðè9Õ˜O5XǪyç.³¹5HÇŸ‚ÐC[KU&ÂÏ—Ÿ³²Eu\”àYu<ŒªhåKuàMšÏKgk&ç3Rq}HÇS®™í©ªm""’bÕ×Ée±í/͑äb‰ÐÓÆ˜Ã{8ÇN«ç¸+ü Îñ}û‹÷.”Õ04À Žm­çøÈYÀç’aµ»+¥7÷lêÀþÁ”àãî]õÁ Cºå{ˆx¬–æ¸4Ýs¬Pgök‚Öžs|ä‰à÷525“Mìåp ¢úPޝޙ—+ÅÖ0œì‡mSåx†”é¬87f!•½•Èœ“/ùs-Ãár«ò­L_Dþð5ë¡—‰²ýPŽKùrr"õï^ÿBc'/ 1¨äXµá2»$ØÖ¶3¼`¢¹ŒR} Ç­Ú§>cI–œ·É²Ý%ÌÐýÕ(s°wŒ®µ¼oub_•=í')æ ïž²:ÏÒÆŠrÒ;Ÿ‚@°ÀäX¸„, ÇÒ­»)oŠ©d/QO³®"°€u!|Õ€ ±«‹r*! ÇÛ¤5ÇǺ5ǪæÇïÀ8îB 4T e@Ô`¯ÉçQó«#kk Ž×2H] ÄqQ/ƒ×䡯A8V`}çå ÚY+ ÂñU…&_5ëK•îöŽ×V”y ±ä­[–s>Ëîp¼ÖÊOIúE™ÀqUH$)÷2ø›ô÷^ Aô^_L ¥êòwñR-e#˜d¢\€°àX „ŸçG 5ðÆ217–?õÀ“_p<¨]p¼øï§è7B†,¬ÖîbÇÀt2€¼=‰+ÖêÃ7Ø&Mqn_•Øß øŸRÉMn¶§*ÆÖßä£åT³_ö¤àX1=Õs‘b™0Á`;WŽ·Ó‚jðï!>–œ1¼ËÛ+îGµ=€œ9yäÓØ5Ç÷ð°A)Çu ™Åd©”Uƒo¬Âä0/*Ž¢kx9˜&¶\ßXðèŸ{eç(#ÇscçÛÒjxÛÛot!ºÖ‡p\z8Ò:ÎQØ¡çˆãÕ8Rq<Å ìqÜÄ2t™$º‡uœ*P‰XœîÁú Ž÷x$7 ׊©âXYRîªÏÅ…j ޝzaÿN ާ|€njõV±ÑbjŽeÏ»ÀÒˆÆ$AƒS‰{¦É˜Ê‹ªí¥X¹dd ÀñQ2¨_À±€¦M¢M¨*½IB´WZ¦hÕeºíy>øø¿†<àXÑ`žvŽ]0 ßX ï¬ jŽ `x¬Žë Öp,Æy o9©¦>|c©—¬DðU–7íÃ^{ÔüÞÚª¬ ÑêÊ€hP'5²5ûQsØP³GÑŠynÖäi:†­àøª þFÓ¹úý㶺«pPÉÅcÕМղ@ã…¬*‡^ÇÝÅãëÃ8¾Jf+9‚È&?=¯c-1>D}Ǫ>À>O6¹<­t÷¥Ô®ÚŒcᯯ<¿ ·\È}ùçÌ}­…Ä2žù9Þµæó- …}„Æé'¼GhÏÞr$[}(Çrw·9`xÚçPÝ aâ™TkÝÞa7Ç•ªiCcåÌ 4˜> F•õš»Nc¶ ǯ}0)\ ¹>c%è°äXp cIw?#°£xwr|ßSî_丩š­ß„áî9îVšˆ´`Ž—\mM½Q„aíAÍQ®Ì4$˜åï j`Ž+÷ÔÀßÎ80&0ÇKy äo“’îkÁðëæXh¯âÚS¥‡”ã1§ÝVA9VÈñ‚$àþø¬èðóu+(ÇòŒ3œW6#‚š”ã{Æ*°å¸éì )à²ðºË$X"Á˜cEmVÿ68ÇÓö‹àËKW<ðû=uO“óhSBpŽ5¢êYNBaµ¶œceàœ´å­xFšN•¶£Œ c%t7ݹ° þ£èXaâù)©¢ªh`’àzAð˜ÄÅ7mÆë/™|~ kή#/'AÚ Z Žï<˜I”»ÜÇ#"›|}‚é«Á:¾7à÷[Òö>ÂÁ:nªxÊS̨Å!UÁ:¾ÓX™º‘¼¡l¥æŒ†‰¨0aÇ:ÞýrÀŽ—];žòg¼i%dNð_›Óì- Øq—놆q¦íà Y×¹'—R6jÀŽ/ãØž°cIúh]gÀØ$q—¾^ëXû FYøÖT4ç3q Ö± äLà í6¾è¸RH­è88+5@ÇŠeìà(]´èX>ºÊ¼‘a¥sËKOíªX•Ò±Áak€Ž?xÁmuNØ“TrÐhj€Ží¦óx’KŽC,@ÇrðMÿö$@uü€æ|‚r©Á9¾¢qæ§àCÙ騣æ\ r<‹AÌùûkNûNd§ï¬wu|g}8ÇSÙDWª0´™JN¡MˆvµÓàÁšÒœoÔwðƒ9[:846Uç ׇslÔÚ#¹ê ÷ü{ÎrݬúpŽ÷UhÙ)ãp\*­>œcMT/i€PÂj¿ÿ:¾ZÛÊIV’ TOhÔ°oÎt(fÙ ê«jtCƒšs÷`fØÒ~ ò>®÷ÖYØ(:ŠKÈû(:µ¼ ›´ã¸ëƒ;¾j]i¡ÉÊœï±%†´Fš#½ê¾UC£çÔ–ñ`Ñùt߇FªÈ&4&“ò½öŒB1ÎÈ„FÓiï÷ø`\Hº>¸ã¥`H6jŒz¥Ô‡vÜÚŽtŒÓêw8Ä¢S[›yîÍz·jf3p"Ÿƒ&æmÐäWµ¶slšù}-Ë™j#¢<¨9ŸÐ§ÿÔEç*}K6}tDðŽÓ%‰Þ±à޵­ŠÎs]xAúƒïv©@œI¢– ¶k@åaà§ÞªÍÌ»™¡î‡èŒéà‚@ß³K8Ì5ÇÊè踔n©Ñye óGÎ;‹—ÑtúÊËä+,´z|Ùr  Ç—G]zܾã§/§p»Ë-!…Ylñ0¦©ŽW¡óøøÏmuo%üÖK·­ñx¡³W¼¤‡$’WÀ×  Ù…O)Ú³™ÔÔç¬>Rƒx|Õ‹ò%9zbÓ}>ñXÉDiÉâAHºfBЮN×ÌyÔ¬ª‚÷«A<žWYÜL“„·Io½FÐ}ï9¡4Ï: x¦=Zòxéºj ÂäÇsZƤbNî6î| ™Ú>¶ÉU½*±Ž—\…#4¨ÇNõ7E¤¨`¾LZyÞ‡.ã´_˜‹‘§ê«4› ÿv°¦îÎ7 Î)Z.“ærÕt÷Sž³Ûàc¡¡ø3T ¿¿Á»Ö&®¦ÁŽ&6Gµ©ùNÜ Õ"‰|T•Q¨>Væ({xo¢tµÜã{h°:çìŸ5îÀw‹“^»Vßˤŭ‰¨P)­4¼"×äÎWá¾ýR«ÇƒÇJ‚þîÁ»ñv^ªsÖ…° XÕ÷eÿcË‘»•— Öþ‚|,U‘>ƒ|,dr¾Ëêa¬ ò±³r#7É·ÿ˙̪vl5|àÇ‚}eº’Z¥BhšÐÛÖúñ6;­YÇ©;2;©Uªwž_[¦ À?ÏÉpïÊè¯ãù¬¾6^I ‹ É ßD¡>øcU'^ù=[±~žÔæ¬s¤9[¢Ílp“­\„þñmµíü[æùÚ Ì^1ïcÉ‘‘T2 Y]ò½ 46ZBÛüØÏ@ðó)§ã}È—Ifæ SNÁòw¿óÈü6ÒvÍa†¸® W²‚ŧR"sd Iì‡]CÆ»ðοS]–\ÀS­n?üãy¦UÞñSqÖS€Q=¬›Òœš^ºCvUYù}*ꚣ;à&5Ü :ì0>_}ÈKe ÓGIy­qLצ­Yµ•õ>È÷–h*ÈWÛ•ù*6Ìx­ðEθ­ª™ä©Sù¾Íç¾ UýA`ÞäZ Ò òº[Aù3µýnÐr| Ÿ/ Y—“ä|>rŒŒ{܈–_šòàEÄSLÍdžዑ=J옻ۜôã+iTÁ»ýx~•v+Áí«3“fü{f¨Rz}àÇ^?žwoH³Õ•"Å4¿4Ç ׫Àz}B¬>Vévw×Ì~‡V ¤—l:wµüX¡Ú…õ$ªCH&“ Ð9€**I|\á…ƒ0oQä×a^â³"KhF¿Qua/]O¤öªž§þRaX:¼²Ò<¾@$fÍ$ÛoyåPßïÞ JýrFòØYä%Ç rt æ9P€B§¹JÞs« |T— Yo)6:SvNŠMn׌¥’a2wŽ‘ú³Õççè]ee©ÆQ¢Yè\ÎÞÜq‹mÎú®ðxŸ •Ä*U…`l-–Õ Ÿ—à„̳ò¾•Vá*AN [&c!<áÊ·œžA !Žê°cýüä(Æ=¥ R^ï NK_,ï2˜Pq„Î׸Ò.Å!A“2×v¸¸¿ ßGHÁ†uÜTsƒ™ãb+«á›`ßËôQ°ŽU{W<¬ãÛ´`+oPüÖñXúëXœewm¹Û@]ر 1üŒá… ß •ýA;¾Ú«ƒ‚v¬:pÕ •xƒº{`ö—LY Äb£—´‹×}Û½¬cÕ­ú<´újãPŽ…yG»•+öðú!/ã˜× ß§z)5HÇ!ǨÉëp I Žï¹øUH2Æßè~yì6Öñè²¶›dݦä‚uìZ–†Ì®úYuý«:MÅPYm¬ã.@~Kd×L±õª ÃS÷JÐij-ÌF‹~¬zÛõ¯¦Àr#£$QõÇÆ€ë>Ý2ÅfÏ×ò[œ.Åv‡v¬Jr¶É2íÂ~hÇÒ¨Í6›]AXü”pcÅšy€@nîl;® %wË8¨š_[¨~¨Ê;ë ,Î:*ÙQpÇ­9ÞèÁ¯š^Ž„S56¶›áìÓ  ¸xÚ'–·ú1"l7_«°óLl¯ qîx+Áƒ·=Y{Ù´cynÓô†u„Rw,ûö€ ÇÙëC,lào Ç¡´j Þq_¿ßr}°Ñ8WRå!ꃹ¡àø'¼.“ñ¢˜d£}Zdà÷$<ùá+¹”§8ó®æŽ|‰‡†1àÜYžšWo¼z ÆYF0®ëáâ¬ÎYéXz×+6®–[fõ ,@ÐŽ_°jÐŽ»Q±kÀŽ…ÑŽÜÂAu— র^$yd;–“n‚S³òN'âé¡»hBÕ§chÐI0Ö=¸c™Z[h K#›P¥æ÷¤¢q°>¸ã?øƒ;¾TG`¤È (yŽ|ß_ ûà±rÙvž„Ð ÒöÙo„üý‚z™ös|ïÁi8&%øA“Þ>÷ÌûÈúiŸØðXh¸ H{· õ™åFhƒª¥~€ÇŠŒâüBâ¯îàÕx¬œUät°qîQøÞǾT¾/ýA«þJÖ7.*U™ƒæ€ì¾ÿðŽ‹íõU¬ßk€Ç¹ªo]?ûM-™²j•šç¨×dÂ=¼ã;}å}âÓÚ[àc¯{xÇÂDAÇGEù?¸ãñ…]xÿf;)'ÛiÉíX°-_c¿^iœæˆ(ßo5ðP Ž7*Ö€bÍ-`ÇrgTQIùr€ `ǃBeu'­J¥¨Dáu”UOñÕ$ÐŽU(wøwÈ•rå½:§“ƒv,µøó€D©bOm•þ\&¦íøJtGíøN‡Í”ûÁã”ÃH‚úmPê´ceæTž"Õ†JÝÕ UñËøh‡0MW˾¹ jƒý|TF#¯ûEãÈHm•SØ‚u,-¯ºÇæû5šJÔ‡v¬h–¥°[Úñe‘f+AàŽUT®¸i¡Èè.·b8®5pÇk – ºÎœ¬k ÖéÕs5·´c• žf¦q…‡—º‹1ŸßóÇZ{ÀŽu}ß¡8Š´å©…Xmõºjš´þÕËd’;n.²ZØñ•ÛƒßÂá# ®ƒ¬ËH¯=™·„âP»îŸ—j0„â¨ÔO“<8`"Bqdéà©å~sõ·¸cCMxžZl%Ê:4 ‚v¬LYx;Nál⎯8¼ìÕS $*Åî¬zŽ2ðhŠ´R™uBqîu#FbÑ‘üÍû¹©ZGýáo…ªïø^ƒ:{-8€’£iŸ4coÖw|%Xi>È ¾O@ÎÕIÚ¶0uýjh¢?[‡É¢ì¨4|Þ' gŸQœÿº Íëîø*™;4ÆÕÚWÜìãg×w,ä ÌGÂ/kX9ñ8W "ãw,SFÚaeÛböàŽuÕ`¿¢í(7ç1A˜÷—’(ÌõY}€Çý¸nKý!oâ?ˆÇ_³Áø!WCy@cu”æ!ßi¾ö1 |yê:Nôƒ8«ÍÔÃ|ׇwìÀºÐ±žd28¾93Ù9TxÚj…‚BÛ°S ¿[Üq=£ÍÐÉmÑ8 „•Íà9 zâiïxÈøßDÅÇà¸7ðŽ½ª3?xÇW¥ë~†¾ÚdñðŽ¿­>œÄ‡x€w¬ð5IceçÎÌ\4ƒâï‚a5xÇÛ(iA;–÷ù‡ßw6íƒ;.@ðîXH5ù-n˜« óÔ¦üo|ù(Þd—ªÁ;>ªÒçÞcØÑUÆ}Š«¶~™!rz¡Ç„¢5Ì;V™W†Ž»êÊ‹ÉoÉ>ïw¬ôæ°âu9θã+ÿleܱpš[Æ)&òw‰µ¿2{ºe¼³w¿ÈDÚ[íÞ±àÞéÊŽnçž+3û§‚Ì‰ä •áñA›]ÏË#W8¢ÉÜ‹óNä±Ê ùKø¬î|4 1;}ÉšGÏø¨Ñ,(s:@¦Žú<'Õ}–Œ¿%dµ±»ÑsŽ¡â “Ý÷`ÈceV2½/îø­Q ’Ìô& £"Bž¢Ó&[0%¬”jÜÿ4?Õí½j[òX¥î ¢y|…¸. È㢜S^ÍAòxª´º_$Ð]UâDy5kj50]4ÝVÚuô·ïÅË4c’òÖîBµ€«dmá·x˜Ëiô!.¬O±-¨ÇÃ¥´Lzš¦ÝEíûÕ%òNû8 jky$r'Õ¤'i6׉n=–Žñ¹_1ì¸*Rû|,œhÚ"sÔÕ ZpÇ1Ð~ îñ®%iÁ=¾§¹\íᫌ¡›JAÝ7Z`eꞬU …èо:`ÏOû;‚ý²¬îU­Ðþd¹±L¢Øoù`[`«’}=ú@'ÌŇH²’¥ÀüDZõ‘Õ¾_ø±ŽóöÛâ³pºÊÙó.'¥ª´ #Rd >¨ù¸œ¡³äc{OÜ‹”±*õIJsöòËh:wx| ËŽªUCfÿÕü/äKZÑ) ÷¤'Ç*lC«¯L& »N 3Ï$n(TúïÀ,B·h߯\çïRÄêé±úøÞâ”)Ó}\· ¶/ÑÇÊ«ÄÜUl©û¸ÎËÈ^s¶ÃàÚ—ðãIŸV®³Wr›4C©0$¶gK¹èc%ñ5$€5Š¥²-ÈÇ÷æ/´£ö½b÷Hò`wŸ!ËŒåFqÃÜ´ï…¾C «sªÐ¾W•¼ ¦›Î]:yŒŸÝÖ²ö½ «ÝuS“ ¹¶ï!ž¼‹KÍÖŠècAæ!kT]÷êÄgóÙ…ðð8°ÎÇDR­SU/àÇW\0s嫦î¼@í4E®qå³A̹úŒžcD d{r¬ønì9«‡±˜£Î<'ÈjËÄÞöñ¾¼ŽÀ,àUbfh :sµü>Áö9ø¢Ï¡AÌÑ¥š´WRhßÏ ³"g‚˜sõ”÷>(J‚ŽßVŠv{ðÇC€@œ¯²Ãî¡}úÖ„±‚˜£"5Âìû(w´YÕ ›GÛ“EQé”#Ò”àÏ¢Í_Vkn‰,Âo)ʰ=üã©c&³ {Z¡Öä­jÁ?¾ðÀo°¸âýïìU'Ž—cNµ²ÿXh]adÂt¶ >Zy°€N›oÿxºD þ±/%Zu\o!Å:Äl’ÛÙ‘½ù^.ø¸€Î+j?º7Çjô‘¢ärWó2ÅQIÉøc˜÷ÑZÎôž |Õ VŸh^ŠøñNõ…L©º¦HÑ©rÆ5 ³²ñßã\p2®«µL´»p¾M þñjS¹A-øÇW‡n°=‰äÊý¦)ìá5ËGŽÕª<¨€÷Jˆ ‘|+À$y9‡3É ã-ß®—r¡Zð·#Me¥,,šöýP9&|˜(+!`XrÅ4±ù0zÎTÉ“ž+›¥[ðïyÊwH²Ú3ÓJ˜Ž41Ú%½ñD“du£º”¯R]J¾JŒÕ‰L”ÎRò@{ðÇ])™Ak9»Pd8j“AÛ'%qû±«¼@­îÓI£­¾RL¡6ä“n>Öäm·LxÎq9ÈàãËJØh>VõÇÃS²k;nÒ91E±!-¸ÇMð(4ìMùMeÌ´ú÷ñ¼÷´•J :­>XÀ"€¦Ücg‡§~w}9“ØKöbRTFS(Céš-ÀÇŠtçUâ(>e¦·úJW ÕllÁ=–ýcÒujC% MÊ4¼Á4ïàŠ çjþ¡mõ¯ò%±R»ª”™g(.~Øz|•â?kwüram‹mC;¬ùMj;hÝÜ!0rŽ ¢-€Ç[®8Þ%åÒò¢R¶ª4¦½æ^PáeÊVÙ´cûñ3K… رB¤`Atš2|¹¨Øn„ï=ý[l7}ÂE1Ý({¤•šî4¬°ã©"î‘•¡{.]´ªØÑ×u,3=œñ{.7‹FSåí1é|!›²y«#4 tìÄ–¼ XOLm¢Ž.f’û*[qÏ»WdAÇÍõ)Z`Žž DѲªzXü¿+Õo’9¸ÛrU él8¾lÐa(à¶“´ éþ`¬iXFo¬Ðx6$ÆšK7¾Oú‡sdF®Y2<;éUª:Î îßj=±ÖŒï=&4ÛEZµæŠôÕ^{„·ŒÖòHg $•ªŒrÑ@7.Š\~Ò»$‰¦’I²7Â0¹TÓðía‡9·m¼eñÊck¤÷"Sòsî©]±­¾\ª±j>~œøÁfÁÁ¹·nX FÅ!ØÕ6îIЧ…K¢ÀÈ€˜ç>_®?X,òWÿô¶Âôýý<7{ëKظªÒ=4ò¼®³=`ã) ~ßÐÿúÌ…™ædÿ¥JÕ*ˆ©/¾œül‚œ_¯FÕIOf¿íÔXó8ÓHÇ~®¦±u½ÇàŸµ/'•Ê8í!«t<û€ Uµ”¬æù2fNt Tí–Y¢dÃ=ÒsÂcÛ¯çÔ§š¾tg, q6pÆõ6ηÊ oÀ÷n¬žñUv´ŸZòÂá±è›­äœ±ÊŽSOoÙ~“P…­º‹U½¨ÍxÉ(F?}9¼"fBÁ[|:Ïønï™véÐJ ž±œšOÍUŸ!ºZðŒïòúžñ=}šÙÚ³ÍT¥ ´öÜOÓ΂à+¿xX%¯)þ  ñhlh4Âñãe 0ÁñÔ«¶Mׂg\ãã^`š9ÅJcðŒ‹ÜºþŽÙ\ôä4¾«XN`qi´5˜ Ù@+ߟ™Dw)¢j4ž8§ÚË¡:•w±ÍÜûmƒAȳ„–ÓׂdÜUkgÍMâWùòÝžÈOKì@+n«yÚÑrtèð-Çùm-PÆ Š¶ ßÏøÛŸ’#×$A6UÕ;[ŒUmuò2J΄áVÑÞ˜8 5wpÅ_ãïT¡·ëVg€ñ§B3á-(ãó$HÆ*ঀøSõwŠ<ñ{.6H÷JÅ¿Ü Œ5ň"-@Æ‚™7A>Ð áú¾×\­ûcõR“P¦à ýhºO‰³Q"’IŸÜëÀ¨8ÔmÁ1V&_á]P[‰-8Æ‚í竘k¾÷¢3Gí¸&K‹Š³l8 ޱ"7>H\ok¢áGþ<ãöU©îœ²3ÁøÛ]Iü-0Æ{(ÅÚ$Ð<*»c‘Cm¶À—»3&ÁøŽ~ б@ü*$ª|÷Å90ÆŠgf(8ÂV†¨ùÐÞ§“§hŸÅd¬L{ çÒ>Ó’ñå‹åýaüP4œK±)Lu …&ÞÔq•ÈXØ'4ÈABlÈøž*ÙÞ±ÜÑ5¢Ý¡ý¿»µ˜©h8WZnºÇ5V í‘öS#˜¢à(D"4Ö›mÃäÃ1¾ŠMKsæ}*ƒ´c¼…kÛˆ±ñ¬8 °Á÷5Khb<—ã:†±ªÕfrPqÆè°H‚l¶Ú¡Ío£½Á¢â(¦ Ò†]y+ÒþŠNø>÷’Ë>NŒÍì4œóUÆhÂXeTóØ×¢©ÒÐ$t-)JÕŸ|I ñwÅOž“p¶j¾ßÕtw gJ±+¡­â¨jTÖ"%’&*ÎaÕk@ËZf3Û~ ÆÕõÛ1v± –ã]s?N‹è8 ÆW‹ñqˆñe+«{€+Çw˜B5¼ózDqq[ö‰bìò0U j¿øˆêøV †qiÎ,oÁ0Vñö«¨8WmÙþ iS*ÎË„6wß×bÜU¨ŽßÂegä·^Ç{élü¢U‚€«ÔÔ¢%¬KB]öà Û…¡á|u]0Œ¤¶üQüOŠ¢æU} ÄÓ·ëI;äÛ”)…'Ææ­|§Xµ%*ÆK\ëßW¶I „ñÝÊrlÁ0^zc0ŒåÙý!3üÚW&ùC8[‹‹v¶`+ŠzÑ”#”Œ¶øñ,£/úüÕ‡Û Œñg‘ý`Œk³6ÿ`Œ>jãÁüßc¬Ø´â^&eJÎ&q"”FD§4[ ŽñTèJc…û‚Ò­â•&-¾ í’ ®ø@¯< S‚7ç—œHÇaž1VØp£!L&üÆøžGž²Š£3•iÆ%ö‡7ÒÚü!¦¾Ÿà JŒ.Œî…¦¾ÞÙä‡oß4‰ëwÂŽ3ñm½zt3RÂwk1®BZöÓ…ii8¾(0ÆR©+$ùý ·R2ÙÄ¥R±Z–ìð+c »O i…D(˳–›±ÙR—ϧ¿J¶”€´v"v9HLÒ§S‘@DØT—xnÇXAþ,:Žÿ2/ ”Í@9 …Gê²Rž:Xä*,…U&Wªá †±Jµ"VÈ•Òàüc¢kî6d‹D,dšÂOv6L˜¿òÁ{ùÛ•y"YJh‡ý°àÌD_»FŽ›¾N$Ž©{d|ynžrúM{Æ÷Htåý š´ð%ŒŒö@Œ]¬:¿'ÝgÅ€à(má[bKm‹÷£ßE —ùh54i×ãûr$ˬžÐî÷Á–N¾T‰B½FèÉç±¶òº¹ì* 0h²¥îBÈ¡áÒÔÛH¶Ô'Ì6H²}Ž>¸ÜÞÃxú+£¿æâqüZÞdza€óöƒ0þJÍhm r[œs䌌ƒ<u7/æÌ5meµpŠÕ€ÆþE&Ń0nòBâÚç«‹°ßÏ={ªìžç à|‘¨8ë`ÜÆRê9BÐpÖ¹Â;´y¯ —ÚÛâWÈ–(8«”ðvðþ Éä*» ¼?…Ȧ?˜(JáØy6CRcCªQl‹f[.Æ÷ õ¹‚ñ=œäÔ‚`|†L@0.Â_Ù¢˜°í×IñUíu a¼}ègöÑ~Þv0¾¢£»çA0V°~÷ Q»Ñ9 ŒñåMÔqdÚTâ8æ$ÆUî2^N‚UÈ™rT÷´éî1ô•ù`ÏóY´ø–ž`Ä9Ky’ma#§i‚ Ý" ÆEJ‹§0„]fžráVn‡Éq¼)ƒc¬² ‰^ú1>8þj¼“uCíöuÇø.»«‡c¬ˆ ÷~±»Çx7Ãà/™ky™‰mÓôÃ1îéIsVJq Œq©.ŸÛcl3Ï ¾Ø>TµÆX¶±b.y)á‹%!!Pùƒ|È3¥ë ;ÕÑO¿Î´ió©ÆL›§–~  –“wm™èŽ= Œñ¹rš㧺Çlbý樚‡‡ GBŠýà‰*Po21¨LùL¸§5à×µÙ-“´kv1®›ÀLžÔ‡í?8Æ2[¸÷1?+¬ ŒñUÏØ/‰¶1`O Žñ=m ñ}³ÑCpŒUŸÝ/[½ù”xQýÝÅ-± G¡ÍÀü 3”§>¹¯®Ê‡©,®*ÐHÜÛ±E2v±~ëÍ'(/µWú€Ž3Œ©ßd¼ 쯜ÄïOx‘JT •‡|÷Uzhçîxe*· +N5Ma¨T¼˜IÂ4–cºƒd|WÀ7ù õDËAr~Oü}3sÐîW•KP,gJ=0c¹Ò>„)±7ýjfyν§´‘Ÿ£9× ËFŹ·À…D%!\yîMxS?,ãa€ŠsÌ ›£âÈP^"û3[±D¼—‘M ñNï|`Æ ¸jùýâ`)&#|Í–ß;„˜ÕfdgÁ<0cÅÃ¥/ø{—•·Ñ÷ëÙy1_k6F«þuËïá¼U3(8÷®6B{îZpˆ‚£7DÁ‘>:ýûvhõÎìD}ÉÚÏ\dyOÊÜYü«ÔîÞù&œ3^h8GÙþ÷ +Cp˜Â:×·¢±Ó±›(R#\°h|Ï«Ê︵< ¢± ŠG”÷BÙ‚•i+úº¸Mtýµ|¯ q#]CUµ¢8c%ñóÅßÜ»¹»ŠŠSæGÏ~º‚T«@ã{5´¿h=àB¬ñW@ã.¤|f„ *6и¨>”G“%W²xà¸gU#É£«ˆ~A±šD\ŽW ±´ÉÂSÏÓ=Nó”ô‘cEz=Ü×o4nw§¿ÛPMqB?@ã»Í¿%õŽ0Ê ˆ‰ï¶ä]OúÜâÑóm-€ÆCùÂü–s²Ûž@cÝ$›Ÿâ¦ºsGŸ •¿ÊÑ„;¿å˜4öe  ±c>HÏÕÝdðPv ,Ú4¾Z ‹?•XάIŠ’M‚+6ìW^¯Xƒ`RÚÃ3¾çãNg¼gc@qf·Á7xÆWp8c=”¿zpÆw£4…ub;‘9pÆU’Ä-Oœgkñ2xÆ”€à[9ô¬ç !<ša1ãt†·À+€ñaÇqÂöÐŒ¥zAZ˜ZeõF,Í®ÁŒ£H$¯ßÂ+Ô3U‚ÞuI•j¯œñ•"€N©vIwêž³ìóEJ™Ò>L‚ÆP 8ã®Òžn8ãïËá«Úoâ«jçÀúøª.ÃN÷™ðâ†.€ÆBëŠdJ£ÂTTl订Òh,ó2Ÿ=°zÍÚƒñ'(sO†UFrãÌùõPof‰Îƒ÷`Þ°ä|¹5I— ÛÜZNS(ÞERõÓÄS¥²ëHÈ/]muhÔÏCs×_N’}pÆòEÞg, ›íð)àÛü¶ëçg,mÚKÔç‚‹cÉé_›‘îîŸOô¿$*â‘î^´¬‡f|ÅVGÆËSŸæÜ½û!ˆ–ã²yNa·Eó¡kòCÎé9O8kuÃÀÉF¢j?,cA§0™„$ £åµ‡e<” Ï×,íÓÞõ¦½sèÍNÞ»‹„ë‡e,`¤K¢q¤c…FÝÿàì€û•Ó5GU Ó;îµ§.v\ôœ«ÁFg±¯,]Žª„+ ¹Gð Ì‘öS¤g÷EûØqìY‚¶¯ã„3ï“g¤çö Œï%hå1ârˆÝƒ2®äã>$cÅÒžüùQ2ömX=x@ÆBecd,P-@ÆrÈnñRIS$_w'Â< cÇ,ƒc¬ †ãG¸¦ÀÑ8Æ«wtÇøŽVx8Æ*áæf¢éƒVSTÜpn-8Æ2tB¥;u`Œ×Vì¸I.’®FÓc¬2¾›ß"9àýÀß.:4+0ÆW…4”Ìþo,Aã©$^Æ×ñ ÕlLZJav=OE6&s½íLMŒ—½Ð+l—ªŸì¦0]º¸žIîlû£©¶…kµàÛãñ¢Ö×ÏQ„2n÷l4Ehh-¬WÃëù9’ë!_94…Ipš›‚dìø'X„ …j3\ ŒÏ)véÊxt"G”ñ½ÉÐ Œ•=l™xãb\ýj6l§ƒ<$cit´d×½ÀÚê(ãrf…­È˜Úýcb¼)§2í(9WAªð5|5+K6P?k^?(ãš© èpî~JNµÞ(ã{ÛÌž*Õ/÷RoÓÃ-XÆWÏ´©-XÆ¥£ÏTWÁGw’¢Tоó‡z3‹’²â+Ýôf”PI'¶›èA <27ž|_É[ Œ• ßàöEÌàl xcx6€½¹'ó¼H½>.ZÙf¬Ø=ø,9}ÀßXs®þ´Ü‘0ŽÆö&‡J.Aÿ–Òâºò³(-®7Ožõœ]\­Ìøò†µ“˜ñôø½™¤ÊX…5‡Ÿ’G%t07öœý±Ë¬æ¨PÊâewê^wÛ,cUƒ,¼=˜§Œì|3ŒEåNò2×DÕ“6éM(ó"âŒêâJ_zÿ@`I-ÈŽ„ƒ¶Ú˜ñÜk²Žè:󛈸Djà ¬ð«÷¼Íã "ía÷/’é…äL~ü Œ]ùºýŒ§ÐK ‰×ÛssŽÒ i๎! f:']`½k¶Žñ‡ýôá ¸èËÃ’÷úpŒus/¡ì=Ç# UªJÀ÷bÎ3' šNåä}F)+ïǤY3|L÷½g©v\âç…»ÐK{8ÆÕxÐq*f+—[WYn?ã:ÃÀ1¾Í#ÎRW\‰7=ÿ`Ÿ•ðöè_ã2âšPí!ßók!ÕÅ[Æ‹®sæÇÏw|eQh̆ynÉxtŒwɸøî­° ­Þ’±‚Çòºn#ºìßÃødv°Ð9ÊÐu„…hµàùæóɱ’I´Rk·j^2¾RÑù<_–q24@Æ2â·{ŽCi2žŠVóï§Öä19ºè-“$Wm[e,Ù꘶•±a2fŠ/!HèxCÊXe$>~Ë-ä«@ªÀ¼Ü+ôY䙆ĈZ+ –qkŠT7‰E`8Î=XÆMÑ~îÆL¥C¾‰šžRâÑîZ~4tÊL16¤{ü˜’e;k°Œ/[|(XƳàå –ñ ªt –±<Š¿u¯: öÁ2V¨{w7ZÒhmÀ –ñÕî„tÜΫÜPXÀ„Ù»(S ’q‘{ÒïVz¦ ëåš§-’æxšƒ}ðU–Œ§O)«&É üJHwêà§ ’ñP¨5Ý»Kþ@s§{u¨ùC#g¸`[Œ…·ï›` Œå°¶»%”d¯>EªOG[D×Éä €fl² ’±âÛ‡ºÃ4@ÆW Ö`âÊ>*òÖ‚d|µWk¤A2²Êv—É¿êlá·#_eš­íÜ™ù>6à$ì¤;f&XÆm€,cxr#`ÆmW+û3B\b3[\u×_hÌX¡Ì<zD¶€ËùÓÝMŠT%t#`Æ@Ö`_¡æXÊ`·{]aÀDç$5XÆRIY"ðo.7 Œ6 ­ÀHVvªêìy‰6jôj¬>î«æºZ-hÆ}“o4ã¶ðUÎøÞk !4ã*8HÔµø-9VW ‘¡S+kFå†(χf¬À:^ÆÔ´+³q˜ª«9ñ¡D¸ù-Ùh½ÀX‰ÐQ}ÖÐ(;@ˆ={vY`–Dè(a›çT©:$><ã"d¢ˆÐÞB“dÛ{ÚCã¹Ë•õBã ÒÜÑxé+‰“D+¡üæ9ÞÓ«DpÁìynù¦[e&” ƒÂüé@%ø Q/ããêÚDcUa½û¬ àÖ@Ä¿¦šàÒ»åíO§˜ˆ"‡A¡6¢pån¶ûœ%صþ=‰uÓž?MtbèÖ fì¼ÿÉÈϰaZ ¬žµN`æ‘%¢ÃXX«†»•ÀËFœ1ÐQ†ñ’ #Ýw)¤¡Äxß¼xêyZYI p|IìA0>2wù+ <–€ï0¾—_åÕõ+ßš•g+º¿X% ™ƒà("ËßGÈžB`p„gBCöe+;ƒ=A¬W ]„±!ž ÑO]™·?ãzdÍê0¾çîœ=ÆòCtÏ88ª<ân„£lS@°ÝÛ›»<Áæi'·ª»A™ªfÖa|÷-» œ­âä=ÆûÞ…ØÖl>ø¹ƒI—íÆäžá#¨ñBéÁ/>W D:x–¦+n÷À«à6Ü‚bs§xyq¶»$H[S1y¦gÕ\EU˜} pú¦Ô£’vaÊœ¤*QPw•!Óƒ\|  f’^ÛúÎåt†rH¾Q-<“=¸0…MIÖ›Øâ#è¾¹a:Äû$œ%ËV°Å6±hpf„¨ÅŸñ¸ûÃ-¾Waö‡[¼?Û‘úÃ-îý+¯9k˂ˎ¤ý¥½F^HPjŸ¡ 8S…äÚ¿`áÈM²À6ù1 ãmÃ×è2ëû2õÂ9óâêÒfñ)®ó×f±°ñJhDBÿòóƒηçCŠt`vfæYnòv€p›!¹TŸªÔ@ê²kú’¢ƒûc»gïÌY%wU¯Ø¦Ÿ9ÏM8ߣq‰ª®4x3JÛì7Öf±å4Èþ=$œ•³):ŒP,ók”‡Tõ‡W\]ß„³òåxuì짬–þ=(œ™ÃàAá8;º?°âs·0P¤g±ý…3{–‹l/{gÚ"ÞRqUöMÞ¶ü*Â07m(œbîPñ”ƒº‹òÁ³ä¾娒+Öuæ‚T, Mç3HÅûNA_è ŸêÁ)¾‚x¸¦éS*IP±Æe­#8Å À•€ N±Rªu<§XÑÂöÒñy—<3Åß™$ˆýÈqÕS,(èáž`¬úN¼ >ÈÒM°¦XÐ\Çc!I¼¹h]L±|iWõí)V¯™èÏßßeæðwR\ÖÁ8= ÅŠÉ›)TUp/&IÇvàb//ú¦dJ‰9;Í*@PŠËt¸]JñÕ~¼1‚R,¨¶ÊSìGßd‰ø ‚×5ù2zY­æ-h—”â­²ƒž©F¨™ê›!ˆU“¥Œ÷’jâ’n˜03•&6å™’çÁ “">Ðj2úç½q™ ÊÊwâk©¬ñÅJ6…/½|eL>D€q3¸G/?(?™zPŠå™ÙîÕl²,ö _UZy¸=(ÅK‰ìþîH „¢T{@Š Ìo½~ÂŽðþ N·é^’?%·›IŠxÙ‚„Þ»õ{@Šï>“K¸?âí¸Ò^þáù-žÂSE¨2½< &u&ø€iZOg3ÊMUcH÷òªˆ0áÅ£ œ°¢¸}öíô@ß{ÿaO¯hV“Fxñ=•a¨^0€Lx7›Ÿ¢ø|ìµ@vüN„Òdƒì¤wú°B±JÇÑ),4åI$ÜQK6“ž¦«¿"æ@Á9>Ó‚O¬óq{jH—åKƒÎzIqÙç–Bãp[äE|QºG,'!¶—´rÄ7á²Döoô‡Q¬TÛ)„Ý8Úìuõ‚Bw]\ËÉûvGM#‹÷‡P¼î)1s.D/‘ßÜO…‘ÈpÊÒ‹;꾞Éɵ5¤å(–¯:^â’cˆ$’i„øþŠ•¯™Ù«DÈ^ÁÚë*€ž´»ìÛ;ôBÄ®L7Fy£Ïöò¼Q÷þŒlø~k¦»ÄÝË’÷±ËUŽ…6Ó­þš½ÇÊcŸÔË]ýáW3­9ñFéÂp9…ª5Ö>ñRj´¥¾Š?wfÏb_èÂ|>1—Næïž¸+ž1ÏÉâPµ,hOžJGçýNîLžËMöíæ*· 3é Xcì¢]|7ìíŰæ@±LÇϼ)®ò¨y®D+åÚÏýSVøD±°Å@»ŽÛ–ÍhÕˆb{Mp±b©ý&Æ™+g ¤]Ã…½&¼ø2­æ=ÅŠ~Òž Fñí¬ Ëô‡QÜ»Bz0Š]¬‚¦À P,—I‚ª‚`ËÜÝTâ‹2ÚFñ'8“Ö… ८¦ò¯L’Ú}çþw!½ô€_å½¥)¤Æþ˜·ŠÓ ¢/ÔWˆA|mÒ*ÎÝÅÛ«ƒŠCrsLñ=öFV˜Æá³!8ÅM¥Ü­†¸Þ†Is”RÝ­†1w©NW¯è8 °mnªg`¶¤b;íÝÌ޲܃T¬z>¬(!fvº÷@+·©¸Ë}æ.N×-0'“xÔ[V¿§Sv$¼LŰý2ñÅ&­ÀéÞ½¾Ø›3Áà ”{¥°X=T¨òU"ob’dñå8†3ð»Öß[Ñboe)ÅBm;l /ß’ÅΤã6.³«hWhñ}ÖÐÕ¨äÇØ!P`kâ‹«Ý{ýÕÕüÒ\œ® ßn±ØÛSµrEôM ÀÅÍö™¬?¥^Bâ V¾I‚ñvëîYTͰé½&¼øjPlÔœãê,=ÀÅýê‘Ó,¶cÖ: 2‹m‚ž£tGÄ AϾºXu»Ç¾ÁÆ* ©€Á¦½5!º¸ ÖÈ$ÇNÿX] p"ˆàÊö;,ØApÚù݃_Üúù`…CBöF~‚±jIÐÜÌ ¾°Ánõa|oy¬õI$=:dg õa¬xºñÓs„ÀÑÆýC¼£ç|uº>yÿa+ Á ÜhVÑè,ý!+"ê4hÜP}²[_ü-åDôúÜPª>Ês (dÚŒqÙÊE‡F›oxù{ËoiÈŒ6zèà¹|%¿÷ܹX=4V¸ºv¾ÏaXêÈ óÂ,3]û4ÓWâüi:mqÐ%j@¯ÿŒï 5òœ$‰^3¾„×g£é(ö´æ}6§B‰8òöRshç+µ>hn¶KÚýa/GÈ÷ú‚Œ»ðr  \ÂèûÐŒë=rNš‹£L^íþÃ3>. Þë/ÈXàlœÁÞª|IÿÿÒ÷ù~OßdëFÙ(BÎð¤ñ팟3À ½¾ŠFÍ÷½‘#1aÆcgy(ÆÐ]µ×è:÷°âÙf<…ÒA5îr(-Qî˜ ±w@«òý"š…@÷0¢bo±äTÅáv@–"ù¨±NŠígÁ„ªÖÁj¬*JÇ_Oá5Cá÷À+i¶ó”¨½iIXcEá^”–2“{`v9x™üuG˜L û¡©þ e>ôÀW¬&A5våÞEQ›.›õµ1Bâfqu÷TcåÎt÷Ã¥Ôº@«ürKz@e|óGÑr–7{0¥L7žâ>ht¯kë6Ðø ¦?@ã㚆=€ÆŠNdqÐqîØ–û€¿µåmô «”ýçïÀå‚FòÓN>ãPz¢±0[ÆŽ³¡A4¾òKÅ^ûC4Vœ3$š—ÐðL:³¬#Ñø»êqƒaï«iMÿ-Gª¨ß™*Ñôö´lôÒX8¼ìÃû^1«W/pÃ~Ž`W0!úÃ4^ýƒwÁ4®“Y‰¦Wæl¤ñ]¿t™rSŸr{WÑqeĸÉ~L•ÀoLrÐ3éÑØîŒ ß  ²Ü=ˆÆJ‡‰ÐqPìáà‘RK¹)cFšL°2õz•7±ý!´‡9›ôú]-Žõ{õ¦:{Úá—Ø™+>—Ï£%¸øÊ>¾óÊM)â½ÑØ(ž RÅïþ9nx#7Û`@€ápêÐx7#ˆ÷ `áAh±ÒÝ ðþî†-Pr.7cNÅìDcÙD#»(l¢ÑX…ïÁ+75'¸»$Æ'ôöê4àBlð¯Wøh›YìyÆÝтЅ1)O³?Dc¥¨Žý\#Ï-T2 á Þ_Œ„íÅß ± Tz^'U£-6ZÊj~¯5ª ª\(ò˜` £÷h¼®ÆÞaÍ)FhéÐøjΣ„ÆñyÞÏ'Íû²öÃ3îs×|Ž|b¹‘øÈøÑû¬9eåsìeÄÍÑs ‚§ P,ÑÇ‚Câ£*ÿ~Nlq‰¼Klq±'ñ!+æû}¡ÀqÒYÃQ¬XhðØÎÊïÛƒôš9q¡}åýžH–½‘zh8]‰êyŽ mœ Á¯À+º‹_c¬}c—Þ³ÿÃ4^B’èÓXˆb=4¦:ùF¡m²&@ã\h_ÔB.§ eBs.7ý”›º¡Œ‡à⯵šþIÛâçsŸ¶˜Æ[)­CÁÅWˆøAãB/Õ‘‰ö‘u N)åQ„N0ÊM”…ÿggˆÆrw?Íç½iSôÕh\–Óè{ï…n¤Ÿ¶É©˜¯?öãZHã)DSÜÚŠ`Ÿ{¯þk9Dã»U•0Ûƒh|Áõ q‡Æ’ù19X1±\ÏX5ÚiÖÁ6EQ=hÆ÷>*Å4ãªzl,™mK3VÉ]ÏBú+nYŒåªSe’èëåÅ–ñ’º[zº|¥ƒæôOˆËߟÊ”`7@ÚûÃ2ÛþüTE‘Ÿ½kóuße|ï”á˜Ã¯/°‘(ão ©Âê±°lóÂgÁÁܨûÏO5YL•Âå÷€`máJBZ2Ü¿g8½ªËx(ßœ§Ø—²z°Œ‰o‚ ²Ã ƒsu›î>Prªy»? cÅsx0Ölö1äsï/w*šd)¹îCŒ±@X‹ßI¥ßî-0Æ£z;AøÝÞc¬ÄÀfç~gó”j7ƒÝ7«$üã«]1Ý):å ½j#ÈBFrvö#N*:{`Œ·òÓxŠ¡r+i¡ÆX^Çý_Ä’ –|of"-NÏËyæ’¦ÆfÒ6 ëØéú‹"^ÄTŸpqŸZùØu€à\5Ž9 ÎvhN'ÜæJñîƒsgŸ}«þJ…s1 Šñ¹ç*ûèà7kŠ}í=¥§ 7ÖûóPí⡚:Lb¹©…­R³0>Åx(!‚ßš¿§³¼úC1VÁÄ ´{Ʋ§• í´¶å«>ÕÍøudTbnfÿlìz(Æ.hŠý¸.ëñ=17W»8ß–æõCb Ôh³FÖ——äÏXSDS€7´V‘ŒtB§Q²Üáã RŒX~ŽÊ¥«;4Áçc»¹'K¥7ˆõÞ&ì•SMûÃ0Þó‰°Ä݃ìö‡a¬(Ót–Ë«.Íyž´z‡ž= cá—Ï|>ª“©{P ßÊá†Ùk¯¼ß‚ŠR£ˆÐŒ–TÙm¼ÇÞxó}6ï>cyŒ‘&‰¼)ÎfëŸ-aÑB“>2VÌF<ÜÉ®K*!ÿò¼¿h¯°žE¾îaY{‹|¥ÌüÝaîœÀ޾)X{ÆwˆQ©CeÌ€þŒe{¯[¡¹§yô Q©èÞŸ>RˆJEÊEá´möK‚_Œ« ôâª" M”óËêÀˆ|ñ¾°£:ðÅrhrÁ/¾—NG€_¼~üâ"¸¿Ê¸{ ¹P¼Ññúx™áÕjÉx6¹oL~¥Àõà«\îá)Ðgš“܇Cj`,|ËL·Ùc×öx©RvàÁøªÇR/€ØEƒzŒåç±[!ÆWWQ&F†ñ¹“½Ü+ª„{0~U­W%ÜÙž}¼" +£AÄþêûfA’}gwË D¸‘}zЋ¥“æ‡îŠ.{0¨î2îºó-À7¾Ø¼¸vÕQ4CpZ«¤“Il6Ób¤Bx·‘"ØÅ[ùþl'¢dz·ŽWžaÛÈìb•¾«|'> ð „,¤y»+Ñï{#5.M‚lg!c°i‹Ïâ–r9ƒìââ‚l}¼À›2øê`Ç_0]œ=ÐÅ­Oe¼õ@OÅåù33Œ6“ ì5×Q ‹µùà@mõ‘âúUV+‘7c±#1Ølô·ñ 6… ‰Žü}ìÈÏ4%€‰0ž¹†_R¼:1ÀÅÝbÒ¤é$™àâ»Í#ÅV³äÀ2IÊJÍž{ÈŶL¹X&.Øg#1áhS[aáRœxÞ\,3¤¿ƒ­F0ÄBÌHið-ì\“ä¶”£½øžíKeð;ý ﹫aô€yÝ2•ÁGf*™Qk :)Îp¯0Ýã¡4¸SyêNÕe«}°‹¯4bu0Õ)ÒµˆÈ´®Õä2NŒR–:¥ÁÅQ±\rfã[1Õlyz¡c0=ù¹ƒå æ}ÈÅ÷\k‰»Qj.4˜ bzGmð®Ë¿ ä@AÛñ¾¦~Q­&1?äâq„ÛÜrñЬ?äbÉÓŒµF¥ÇCã/›kç÷N¢¿S‰XB¯9Ÿ“Uûƒ.'ÿx¸~m:Öùa û¡cÍiYõWYShzÐÁa õa+,½æ{>y¾½F~OýÊžæ‘ò oÓƒ.žÚ4toT+ÏX£ïC#ÅvØ.iQBæ +Ã%ïúÃ.ÚÑ{îý°.ò ‹K|º¸Ýágö°Õl…ïC'agt[¿œÑ]Ñç@*ƒßÞ¤2x›;ͱYï!šHñùZÃUkè®þ.ÞCÉÝäâr– i:ÈÅõN¤N^‹¯îÙŵ +‡S<r±Ü¼™` JA.®B6t›Ü»ju‹ï¡ðñ=ÒÀåa‚ÄêÖ„ÞÖ],øn(Ü,: ‚[|w£H.¾bѦè+Mçãe܉[Pn=ÀÅM±Îü–Ó±úÎ<_iðm5!ÀÅÒà·›Ì(l.²?“B‰Mj{¬à(’ØxU×JH #n·øíæ °+ÀÅÂqoîÐÊÔt¯ZB”Tf¼¹XåÇMu½3ÈÅC»‘¦ÌN§³þ º™‹N52"TôÖ$à2«²\äÿíŽûÀ÷p{ð“ljr±“'!qmVß‚\,°öASdË+íÆ$¶?鏸îÒ³ám½ KZr§æ§rÊ=ÀÅŠOj^?aàyÖnT5d¸)k7¥Ùj;_þ÷*°ÕÇ2ÁñfòÒY[0ýú¬ù)«7œ àâ+¬‡¹X‰¥Å Ï`Â…"fCð™&_,=œ‰/+¬%~*æÕ ÚKöô`wÀz°‹•Àýyì`ú}sÃ4`ú•ÁwÓŠê“÷` ‚ÀzΨÞ¨5?x5ÉßÇêf‹»,<´D§œTÚƒ\|¯Ìö¹øjg•݇ÙF.&ÈÎçKþÒN>³“9æÓqì›/û{Uzeç ]açö€ß¹qÌ@À‹o'?&MjÀº@ú Ç-QžÁ‘óEÜ,ß ƒ\¬;5\Ž3J‰n g˜Bh–l®“øÓB÷Ob“›ø/%tx“dɯ‰@Ái.›Ön± í3¦¬Ò"g ÄÛ>qpñeÞ¶“Oô\,dÞ•Ï#X:}EÅùº¢¢_ ¤›#Hh²»U”‡\¬–÷$ïÖÊ ¸†GA´&ææœ…°yå5w‡`ú gÙ(yWìÊñ”¯$J>äâîºmÐ=Fï¹X0›N€—m¹X·¦/'Þ²uZÞ'qÞ%HúC..J}Í÷Ü?žèg,þp‹«êÎ31{í>ÍEöÌïËsK±Ïµ¡ú.Vá$HŠOí+§ó<;!ÔF8¥§Vá܉nsOì|Œ mûNÆM¤¼Éyn¾»ÞŒÝ°Ó>_ÊwÇžþ`‹‡,À|>ñ–Gýý¡¥>¦½“þ,Öé¯ú÷û+µ5$Û-V½aq Åëž"ÚÖ€»¼¡)B[ª U: Å*§3%¬Ø†úŠ'ª à©Z,ýéø{ànp'-VXíò»Þß’ª¦ÍbʆwàÿKgp‹¯<*!-;&YÁ-¾cžùú½PëM‚£4{¦9êβpñÕ]+ÃÔ¯^²¯ç•Á÷¿a€‹×ÝÕÓMõ©ÞÍ.vA>„DÛ¾S­êWg–(‹©ê?=ÀÅK° /Áôç­–ʉ:àâ»U?¾àâ{EuŸQqŽ©‚[,\ùiYqàO€‹ë1¤Apqœ0$êòg±àâSmš n±jnÖ¬®Šƒw‘°]`]=¸ÅWØuÚõè™=°Å²C|<ãlÙ™ØâO• ›»ŒOêng~Lõ)UjóbÀ9§ÃuDÜÏ݈Žãpíà;‚–b›PÏÜâys> W-߉×KŸ Î yŠIÄ)%t?·ƒýæžùyJTD™°ãŒž‰ ìÌø6Ò·ÝÁ¸OÁ€ë°QÍçEZ& u>›…&ÞFp†n <¿]i jñº»>›¢KÞ÷jñÎ^]´ŽX‚øØÜ†Ì¿µøž=dz‘ì©é»yP‹—ÒyÙ êÔId}ssP‹U«— ¶žû£¨8W½ ‰+®Î‡lqQ¶¼Wç”ÑüÔZÎíña* ¹Y™[\ïˢ½ÛGËó“¶á£çÜóiÂM2Itñ0drqd’ËjNqòþ€‹eqd£¿Œð³Øžó[ƒˆ–ÓU»AsJßínñÕÇ -§ ´:ן/­ø6&2 G5‹"±±â¬íø…[|Y,[/7ª¨Dw€óÛ†üï·X…Õ"Ôò·-ù±WÍlßæ„íq³W$9JŽ4®|Ï’^!+HÍd…+!˜ïWRÖÛjyŸ#èËA|jjö‡\|φÓC¿Œ›Ek"Q#“Aõ} ¢£ø<ç´,û»àöÀÛ«&º¸)>’éçb{uñ÷óØ¿,wÛrrX¥Õþ>äPT;½i€„{²/Úëhþå îêxÐųDü£ê¨€ÎÊùÎ  ÜÇ´OÿÞyx›†ùó K©‡ÆJ÷•| XgÅîCЋç8ÖÐA/ÖuAêèÅ}º¿ƒ^¬Þég˜§]ë½_\¦áÔzà‹«Í }•­"ŠœÌ› !¶USf´+Äí¶ zñ½ð}|ƒq¶|ЋUéW\ôbߊxÊe²BÕÂ6ôb™tA¥p™½þЋ«C.^|%ç#¸¡Ú$–éî”°€«d(”%šo¸üí¾Ù–ðbÝJ§Âl¿t Aš­jq@À‹U7Š.·dJØßþÀ‹ï¥jºå€uogt¼¸È. 98Ñײ_ ªÍZ’Aãké”÷R°‹|à_â¥*¯rñݦv±¹ø²Y¨~ àƒ|‚—§Ø¿œqú‹¥ó”´ƒayäâ«IVFþŠWzÚšWJdü‹Ž€p±RG»‡C*%m¹“” ªD׸x|À\¬²î^ œAø{p‹×çj=¸Å e©n85ÄKe@gxó†!g´¬ûLîÛa=f¼Bš±lf*n*üƒZìö$ÇÐì0ÅLòMg¢ˆ¾iFqí-–m›õ¢ÕpI Ó@õ n;@™*/Ñ[|o:‚0í-Öå ¦I’¸ Sš dDD5¨Šk‹ô‡Z¼‰j± qè%Åf„D"t+å-V==抜bõ¾_N3ÂG@‹¯=ìUBp¦Aàz`‹·RM¢æ ÒZlñ·é2U¨„k´qø ve«žØQ7Rô°Û|5 j±Š?.~Ë~ÖEj±J:ó2J \AzšÙ'æ„hñê‘7/ ç@v ÅõÔÊ:½:TµÏü ·5NÚ·-gkh@RÚzí'9Ïq1·ø‡ç €ŒZZä;y#wÃ!ýI RíoúMg~ï}d<¡¹X|Uó{ÞHf~ÈÅ*ÝÁÂ¤Öæ•W5Ïíú¾œ.fµÙVzcI/wÍ£+G£/q?Üâ¢XihŒad!<ÜbAÂ"˜Ðsêùòq®µÜ ~¨ÅBÝKk`4Ö‚IÎ=ÒÛ”_0FÊP âãjñUq{ŽÃ° 5<Ôâ­x«¼v}¾œ¦‰Â)-S÷.¸û›ù¼‡åí¡ k¬2ZÄ¿¼7ô5g¨HN¨Å þrza5Z–ºžGè@¤±×+~Ç+Gh[ÂÊ—ç¬V"QüU$°ÅŸËýôÀ_q¤¹¶X¶c Øâ^aI`‹.±ý [ðö5ØâûÎßàß»µn±¾ôàßvT£·Xµ>èÑhÆ1™t‰ÍCìgBbÂ.ŒØbñö ßCÕªçC-^òËy0ÑsœÎ÷@‹få±Õ¤p|ôÕ½RЋW?™$XŸ\Ú`ß‹zet8¬º‚µMr;:Ö ÏÏœã`„`˾~X |CÃP[Á,¶M¡Ù/ l³Øzt‹C¶Ý.(Ý*~Ìê å4 ”,VˆööÌíIµjLºSkÛ¼ø0‹ëp4ÎÃ,Vá·‡•áûÃ,¾Òö‡žåÒ¦’‡Y,e–­c;=ÈbÉ3Þ%`VúˆÍR¾¯¼¼n§\±¸U€ƒX\–8û,þõ)¥ÄÇIKž*YㆿK-ñ¯ ³±ø+ÍnÁYÜ•¥k’}7ÞÌâvlyÅW¯^ªP©Š'äÃŽèþlŒDŽO¬é\ „´™‡Y|[Þìl:ëcÀÔ¡: ª²¸¨¡‹Ig€{ôC,‹ñâ³êƱXÕ^˜,TÙÁiŠ ×è±xÛ0ÎK¡:#MŸ4Ã?Èbë¦ÿ ‹}ÞqÎÚ*Èb¥ ‡L¶`gf±èÈžÊS ë¦@¦{ ‹U7¿å[z¾L‹B'7¶ðVyÙªÎÝç67²X¨ËÒ½ZyƒÛJÀínÄâ²GHâ#–öA,†}21zNßìítîÌèS áìŒ>I$ç ¯Õuû,.%Ý!Qöç«=ÀbÝ™>ÚÇx?ŸÔEÑ2çÉûØZ‹1Ô`ñ}vHðŠ…èÅlã´*Ø“^±ªA°ïËéϱš$*Eäó¹¥Î<'}Œ ÏÕìã=ßÕt—€ã{1Í \ý(#‡&¾«]ìoøÁ+ƒñpͽÓnÁ ãô[hVWJ;4°cå ·ô¸½k¸ çÕ=-ßó™²ä{±V—,'¬©´,_G¸µnÆyU R:€+–â&³ÿø’(n,ì^ql‡)BE«rMÆG=ª{¹8~†Of)¦f€X|§|S9˜4¡Ä⻵äkßK_BÓ,VØçVQu®’]yùáÏÜ©ºŽÂ×¾¾/‰?‚[,³l~ûð/–©MïW’¹d«Óx¸ÅE˜9&=GËb#¸Å£[Á-nU5ŠL¢€}JIA.ªqu „Óß j;Pi|/ìx+ÂmºX–\&Æ¿»Š—“—û¬awÇÃ3V>òÎï7¸×<§{šiŽ——¿—ÓUgåëXt„qÂבb—·qü]MÞs±=ªf ÷½—u Ë ÅÔ"îïÔæL"Vá,Y`ǃ4V„n–*šNÛì™Äè|òåAƒæ0:Ìœtq!áC’ö¨ZQÐÞ ãóÏsuÞó gÔ™æñ Ù–Ç÷¢tvtCÑ©‚‡­§(¸kî1Ø< ˜2«R7ÆÃ6Þ»óYB¯&¶ØÆW\Ï0îÚ¢¸Íhcé¶! ¨Êœ6–ÍŽcļšòpKÑqäD2‰‚úe]±`"˜ *Î]Õl4æ¥ÀT“øàkÖ/œ>|¾Û¸eßÛx;¬Ø$ú Êv›ÕKç„I6á§ò#àÆý“S¤5/7ó[¦Ê‘2#àÆ*­Íb›Ãï.<´L†Uµ‡bܸlÇjޏ±˜Ð¤{uÅx÷½Êâ –7Vœ7¬M„ŽªVó2;o rÜØ‰t&‰Ð¹ÓQü!¢©h>o|bñøˆÑ¹WQºxu>n¡¡Êj<‚n\]/×äÊñÀà’d%<4“ë’ÁtÝX5sØ8®îÞ¼Öp¤UÂR‰@ž–¼7î;A7V^ ¯?"3 êßwoï<%s\p&S®A7¾[`ñ”Ôq…ãú;DçÔ!¸¹tc)C|—èùŠÇ]íÂãü@$£ à\ YcNW%’xc•E¸Äš£‚(¦ ½fr^rùØCɲªO~ؾdp€&ÿK ?4ŠË†Æµ±•—9¾ñÝù#Í^rr@¼ªâeçõd—|eDÖ#ú“$Ëêîx¦"ÆœÛÀ m_ ‡6¼±%3bîÙžÙ‰Óêø|øÆB§ÍìÄšcWÉxøÆÒÃ[ŸJ-‚“d7÷o¬¤ÿüú{[R4Ý÷ ÉìØ·•"ÞÈÂÄ¥wÈûZ{zG@¦ê5ç,DATTåxèÆE%'h+¾¬ž|™/ÈÈ<÷ÚŒ‡n,ùùhOžb¥Bc [_j þ»²ýÅÈØùºè@ ýírÎû=ÜÖ8 Prä„J’æBr¾ºâ}DèDø¹läxèÆEúfTRÀX;Я|—n€n|êRêÁÝøîU¹©èÆÊvÐ)º±ò¯µ@7^EÑK£¦°øhnÃ_½òš“ ÷4øäxàÆ[•Mâ¹í“/`Æ8ƒ*-ߗ踱€f$®½¶Üƒàá4+Á6¾Ëo±lcáùÓ)¶ŠvA6®ëÜã²± Ä:A6ž `w» JŒ®IÜÝ7è 領`cÇÿx4ØpŠÜÔ&ÁX*²ÆŽß»Öùü[ÿ®’ÍgÍî¨âQ_ý©¡°à\ã#°oí‡Ä ®±À–'/à¤ô\cE…— ’›Vw‚k|§Ü‚?¸Æ£@y<\ã¢l!“f¥»u?žâð0úü®±@ZoÒ—Mr6ÖÅSwÜþ®±¢_Ç6dfõy¬? “Ÿ’auY3Î'äÄñƒ5^ª 1‚k¬¬ØÒ Êìâe< N­6ö9ÆSЃ| °ñfIÆ‚ó¹ðá®q?ªj1k¬Ï‹u›b<ªLcU­g÷LbªT“À$q õ°²I°ú*œK‚y¢#˜ÆßÕû3NdIa# ÆJè™<åÔv)ÆaXc® @0ਜ*ï0l¿í‡W=KJOð(Ýp„ŽeIgã¢Ç;ñ/²x`+4¾»‡CW¸k'€©°ˆ=V4,-™É¢ÈËÞzWmb*ÐnTÿ›ßå«ât–X(ñ—I<‚ãäÅä›J¢O6ÄA[^öíObÜÃ#Ãê¬IØ}±˜Vn4§ª4‚i\×ÈjÎçI“r) ¡Þè*w=~ ÆWuÝÈÎüTÔ¸ì–)‰ý¦Ë5êÏ|cïÆx ÆŠÇþ"·Ý[+—ê S&?ùÇ Ú9Gj¬âšèÞµÒ}d{ 4÷i§8j|”žö¼õy†c/íjf€ãÈHI3Qž?ˆ~s¬=Tã{SéõífúkAùÿ ‰]nÚâë.mMk¹ò¿á¥NÏçÇQíf†›jƒmçX$ËÊ8ÐÄÍ9tùTñÃá|ŽÝ^K¡I̼íå} &\1À±* !Ap,‹F~Ï®7AAFshÔxÇJoÌ÷‰È¼ EÍs:>Õ«áXX;ï;Ô…<±`g¾Ð˜' T1±fkæ¹·ª ÒC'W:lŸàœ.¤^h>Úî9¨}bÊâÁï°Ð&"§,ÍB £- íþ©ârÞÇIT3ÝÜx›c ¾ñe/Û:Ú/×j9 |ce ÈÓS®Êq±|c…¾ø$àøŽj~~ȦhV7@8:ܨwÄ×|åâXiÓ”uÿS”5z¼VW(Jà ƱÀ 4ô` ÇU3Œã®òÌüÝbùNŒã21ÙäX¶‰4åI:“‘±TIÀèÕCà[;ŽI!õ(‘uæX±QÛŸ% ¹;fyô¤•«’:Mqˆ ÒÔ$¦ŠbKS ÞÓ 7E Ñr²ä¸¨ce»lÇ»²9SwêX¼[6Ϫ-»Y”ü«ÔLO%†») d`¬:_&ãêîxæ#«vž€Ô,)öéí¸QbíXð‹§ËÍ#$ä~8è§Çm%ÄAH,`Ývà`7™¦Ü ¸¼Nï²`K>“|98Ã<~¯è¾bêXi¬É }Giî?^«â‡v<”ó0z¼VwùØ/ãeŸ4ÏÛ (ST&Q-®Zâ>‚£417…§:n xǺnwcÆEÔÙ^‰Ædµf®ßYk2®Ú=QhÈ}R­ ÖêÎ\Ù}Al¾ ïXG £í\í–ˆB¾r™‰¢\Õå¶îâ¯üm§¨Îúàñ¼—x‹aGÀ‚îòøh„µ“W~Óßµ¶#`Aä‘9B¶uË”«ª¾ñxL§²Ž  “ÍIUNá ò2Aµ"ùsæÝâñ½@|Nø{g†]O‰ñ»Á¦¿sèÓò¡Èã¡øFOÍ͉ë¯Ã8°#Õª„jâNQe\X´lëó½Qä»x¾ŒËŽ»‘c¹i*`Mì˶/kVhR¶-=ôX×À4‡*a€·ñ0…ðx64ưo¼çÕ¥0 É+'ílô—W®Lf>‡|¯•I|˜Çšh¶âhÈŽgØ1¶Ìx ÇŸ?jþa²³'Rí¡_Þ¡Øî•µ™ “ýŠªsç&ø•«:YåæÜ®{2î±")[Î'²ÁF†ŸRBõXññ=_ÃÕqV†‡¼?ef¶SÐËïSÊ¡µÌ^Š0÷ìÇÄæ¨¸½°»¼ÜèÏs%ƒAh¶èñmíÁWUõxÞËëÈë\”ziéAÈk!½Ñsî™,ôÁºÒé¶÷;σµ0²XõSœö‚L¡¬õñp…ó9é …=ÜcÅ[fƒ#à3ÊèQt„¯£+ñHÙñêÈ!€…Q©¡|¼Usº‰J¤ ÎÐÇw»(p}€|<Š2ÀÇ÷DRÑËðñ(6WÃâãÖ(† Á=¾÷5 ©àëŽY qUÿMà\7ÿôXÂzøp¿Ð,ùHÌ'_¾IQóèñQê­iÎ÷ »'§üÞ’Ü4uÚnÓî0þùòê“Ó“‡MçÞò˜´û%˜c“œÓ<Ðã­R:<%0g(WeôXÇÏ´!Sa”,ÚaÖ`öV¬¥ 8­-øXéÝŸ…Ó·ª˜Ä¦ãà’à÷{3ïžì—å^üjUMƒœŒñêqʸ`²Â,ö ðq‘øð,ÂáË5$F€¯ê°|/©\E½LrFvNŒŸçjæeò·ëáiü²ªyh“¹ÁšÇxà€DòñÔ$ó¦Ó`ârœ;0‚}¼”µÄw¸\|vpûX1f,6q9rG™$.çTAކ#åbx®fµàârªç¹!.g.X9CÆ@»$ï’‘| F¢•â²M£Fxi#ØÇ*ŒÉÞÆsu„´c’èË^;¥ª>×?>²ð2ðcÍÆŸÀß½×ò[üŽÓÂ÷Á7&1®«®’Á#àÇ pÈO©éÐ&³F\NwfÏOÁÁã7žïа©  ̇Ÿb#,ýƒëêtaYŒ€WÝÄø*ÕéðãêT?“.}a„1Ðoæ™…åA¿Qt“?‹~#ÜQZ°;9V«~ÐC¦ËM«7ß9„ýx RI‰çêÚž+ºå¹À»€yI\ájüøSYœ•ç/vHšÕ0;íƒÊÑŸhþbÿš¯AÑp]=ücyžd'@Þh|/_ŽDæŒq çêÌ“öz)c´w£JC“ àÒ=ãá_õ$KŒ‚£x¶}ļ"sØIlDG¸®dgã÷¸®¤ßqÂà»r™Eh\ïõ9\hËÈŽ‰ïêÞç3¿I)çÚ9^Jù ™/|W}YŸÄæôgÅw5ˆ¸}È j­ ¶|éL|çÕ®ûý€èœžá¶äR(±k<d%¡~é…ÿ½é#À㼪®;ò•ßa|W²ßç±¥¹Oz6¬rÜsœsÅ-™÷Á~MFy1û/þXé ÌFâkv€ŠóáxYÝ>ç+=.Fù2›xȹ“ƒ¼šžÆŒ§Zÿþx*§®ˆ"_¹”¢ˆYâϘ?ýÆF¦‡~|¯Åé—gIîg÷ítÍÑ1_hŽMú¼7-;k‚€¼>¦1ÉÑ}ì, ²÷»»XðƬJÓ d~y´r2?˜ápGÌ›s/tšý=Q—{…GN"¶Φ@^ŠÚ¦)çe!ð@ï‚¢0TqÞ¤•ú‚q¾«í¸í€|9bx@Xqô O’öG¯æ Å »þ“çæùi0dU6k FËÁõ=ÈWÉY +Žjˆ¸)BÐTkÌÝ@ÍÆ,ÜS9¬Ir '‹LBÅ&˜Äw÷£G`ߊ öÌ™¿·‚Ü©AâPs$SUâšwmTÈ¿Š’sH ò=D }1ñæ3Ýö×¹öwÿ¸H'óP­áÔ+ßø%6¡9zp“Ûö^ŒÎí„9® £SÞAF7¢UÇEâGuGøxŠq¢}iÙbJ-“˘UÊÿXŽ%¨ Kd‡¬øãé·†sU#xŽó M¢ ÁŒ ïï«0ÌŠ­K¹FШc¾bœ§±åqX òÖ¿Å„ó8q¿mÄœ¾l‚˜OÁ¾qûX–p¶ÇN\œs~|yÔv¿€_~hîÕ¦€ü²gæùÐËcŸ“+á‚'¨Z%$kHs¸ê ¹”✤ þØ‚ìQÊ;tr‚~¼ä¹DÚ—sW¶„†ÇUÉl<ôcA[Gtb¿i͹s KMë¯5¯ P‡Øo®zÙJ!NÕÇNsæõ±ÃÝ <¾š(Àã{êÂ.¨7K!Èf"¶¼SÐxÿÇ¡‚–£ÂÄyõa æ&i䮇 Rm=ÇaѵGاa)ì¾W‰³n¶AªV š÷+è.¯0öñU>2ú°÷¹ÊNÎ)‡¾Ô‹§JÈW¡½)'©]ûØ(‹Lwö°á‹’ê„Æ\ùr}Ë÷ SP®1ý'sŽHÎ(7ò%æàľ´mxÈŸL¿- ’ÓPñÃ@>.2ò½©W$èK¯Rýmh@ úÎɯ*ÆHY‘w)\UNÎyÔg•r«»æm÷N¥€é-Â_9ÿié+ûi‘n È*`¦í òüŒm3€@žr<û™{Õ¦#º¥8?{A@–ÛYg"È÷V¦ÚŸä+àTh€€¼¯d”|XÀ§hÿøÙfûàï³ó=Jq^Ô&üñ–†Ë(0—Tßý|¯”‡qÄMµg7¬:ËbÀÀoù Ü9m fþX ýÇv©škî36œ{únŠrœ®›9‚~ìÔ#ØÇ÷‚á`eð”xª±Q9 ¼ ö±<Óô!a9ű_ëWS8’#ØÇ«;l¬WsL:ke±ìãz¦5°€ï"-Ã$’<µvZ?~ üåe€å>ÊI~A>.Š5pC8c«K»•jœÄªùX |%šÆc’¸½mÝ ÐÇg(ËÇ$¦’Òh Þ–FI8ôpDaåR„ù'¤ LQ»hت°rݘT‡ó SŽS@ \Êqa˜Œ‡{¼uŽykÀN[Øš#¸ÇÅ#ÈÇM˜Ön)@9«æ] *• wÃ8¨ªk%@ÛéÑP³9x8ÈÇBubN¼çÕð»‹ãñŠœ‚œâ0…xo0šÍ=ùàb’ªZ±y#°ÇôX :] ç=R'ß|É8ìnÊq¬ÃB‚¡Óà-l7³;Óg½Pœê|Ö€K¼·L=Îo6 h€*<íI PµOx™2'ïÆßé\‚`oÁ*ú;¤ ïÂOɪ²š`²fì°Ï!<µ6&Ýæ±7˜Æ¬,‘8·‹ô0@It³iã „47!Á"3q¤;,èñV Pž'Âþ …^IÎyœ¼ñA¤ÈC=ÖiqHIÎÕ\‹}<Øceò dm"ŸdKIίÁð)Éùm&"%9{_‘ãæï!˜îc¼*2‚É>êéyî«tß»ç¹mŸ!õÇC=V%®ö-!\‘n¬@Þ¥s„áœñ¥5”ÅFäÐñ©³Iêz˜Ç²ß§÷5÷êlö` :‘¹ˆr3iü0U|ÞD·ÙïK4‚'âñ”JLo¹š$ìú*rº*ÎxˆÇS84ga/sö\Jr6Çrñ³F"¨œsÌc `yš±Ý(Fœ†Éö³ÌcUa‡Ä=åbÙc?(@r©è±\P¼Œq&c¢Nì C&q|ð@€CE‰L×UKZ&^аÍ#¨Ç“’ #¨Çvð@r áᎀ²ÙR€ãlÒ´‚y|·×Xî#ÇJµæiÂ?x-GÕ)xšŒ/'ÅóX˜£Œ€ãÔ,'Å«>ç5ÙèÌVcyÜT˜ÃØx\ÖdžÃE%Z"x–¤Ñ@븧;ØF‡>â¢r•j“™)çÂó¸+ÖGzUu$Ì~õ«Øx¨®xfÓ\õqXðx~k2«'iŽ;ŠÕ‹‡J¾Õ®rvë<¾÷#˜,_z¡qíÊTFÅ™ãûÒ<–f²ÞñUxökÏáåÙ÷9Ÿ4B™ =¤ûå¶é^è~dZBpTý˜îö-¸/™ãÇEÐǃ;VZÚ¡{%!.%Ýg7çÕ?¸cÕXBÈ#Œ_hÄü=dg¼S«ç1öTR£ܱ‚`€€ãTáUBŽSÞ™RѯšŸóª&w‰¹°¸—„‹@ `ui¯ñïÔŽL&¬T…÷[ÜìáÀD+Ó*´÷[°)`µkå +"4‘Ð#-ç*ñ3³Iν|ô‡Ø„;¼Âü{©ZJ¡‰â5r*ž/«õês¾æ0M|NGËQëC4„éx€Ç2ŸÔ¼orW3Ë7r¡T¥Ëà±°§ÅÙ¯fÓ8xÇJ×ñÞq™ p€w\»ëáðŽn€G”;„ÄíxÝÖ»%[ÈÖƒ  mtú Ñô—sèÚqÛôŒ-°Š·ìy‰Uʧ0i5Z`Á˜íÄ´c«v>ƒëØ~°ã¥ ÏG‚ÏŠ­“í¸p¹ ÚñŽù¼œõyN©ø“±G{Wíøª]Ž=”¿Óž¯rÊrìx)áÍŸÁ; ׬ã;½ÌR‹*¸†‰F”ÕuÝñ;¶E¬ X:¾º·“—u¬s©òÔªà.ÎxÔñ' ÞááÀå £õ€ê®B1•ÇïØ”;µµ>&I}YG:–5}z±ßÜ]Ì,a<\¤eëØñE^èž4“UÝñ7ª “ÂQ}Ù Øq³À$Êà±±'`ÇW$Ö  Nw5š°ã" $·ÐØñÕþvúqX¢Î3ÉT=TÿŠÁÅv<ÚㆉÀÙä©ìXÆ”øwöÄDt{8ÏCÿ[ì^œS[µöL¢JÏp^uNWŠç‡þ·iÉúÍÙà A:®÷+ôŸŒª»ºû´€‘h–[É:èð®OëæÇ¾^—‘§Öº¦ËÎ »P²›¢vÕœ¾~éXi^‘,ɘýX‚Ô®މ Ò±²cØÇ›ÔÿcM*HÇEn>¾‹‘™‹jŽ;ˆO¿¸©é0ïR€¼8c*@ÇEÅݧCšlûØ`ã }çxÊdË»øõkc—2RÇÌËfô¼Ðбҭ:4>‚átÐt¼"0?¿÷ñ¤wç?¤ã @Dzz”™ÖlDÝÙ8ÏAÕ¿HÐ4É+ä8™Ùoß%™êÜ줎×ÏG؃9Ö5…µz…«FÍÏSÑ?˜ã¶ïA³ïs¤¹ Ûüž3wßÈçñÕeÝÆæx·’ßdžSg¾G=Åwä}’Jøðç¼dh,«}À!ýϨêãá_esŸœs ³Í†GÁQ¨9Ì™ðeÊñ>*Ú‚Dº¶ÏSŧ~=oûRÔ×%öæ*%¯Tàî¿}ûòqOÞ&*îrÜ¢úO&~ÎÝvü0ŽåN‡5Ȧ§ç±;÷ØÌ¢_¥±‘ÀùOŠ/´hr(¢Ø\åae äPÝi¼zàÞ¸º¨Êg!5A7V’² ïÑ»Öü Uz¨šé ¸ñv¡è ¸ñÀ677vm7S˜~4þpãüÜX59ŠIâS—03àÆMY?üÖREcHr{‹4pã«*˜Üx(yÂ=L Õnó º±jMÿÏìPÅpcþŸ{Z/oÙ|ÐÆŸ+ÕÍï%ŒlÚø~Eúhc%™ðîâ#îYƒßL'fŸÒú¼ AÀU8 6C1— tŸ^AªB²Mâܘ²1Ìà÷VÛ9¿t#%Ý$AØ•¥"„~Ù0kÜ}ê†{²ý'+‰ö.Aë— -¾²kð”½wVá)ó4„Á1k¼¯Œý gŽ•îNÁÝË[óáwïÓ\ã!§„{5Ÿ$=`׸¯›$'ÈÙE3¸Æ—'t@Ïàw}’ÕÓjš$£ËA,ó{ÉS[±‚3¸ÆŠ‰—ÍoØø6ýÿª:·lÛQþßQôÌæ?±&3’}VÕý){Ûc!„:\çÍ:Ob²Õ?UEzl<ìÇ›á·;»ßØ$>Uu,bn'böÆ@ž$@‡¡‹ms4KþT­évò§îL7±m;¿]ì蔲ñtÎ=IþÔ]»1˜ ¾¹v]GþÔò^ø Ùx|ª3d‘•—*$X$ÛÀ¬»²±|ÓÛç¢,¢ 4C6µ”á½Yï3"Y|NÆÑN£òQ‘+¾WEÕ‘@µ¡œá/!é|L›¦&[ gƒQ×øS˜Ã ÖX¥ èT¢‹‡kàÎ`u!Æ#¦Í^ï‡ý©«Øé²§úµünñݨä|T'éIæ¼Ì‡5̳D±~£PìƒL.öµ)Ù%ð™t/+ÇÉï›ÿŒ›%PÌ|\㪛ÜkP,at9áwßMU©rd¼»ŽmŸ?²ñQ-2ä …Æ»û#Z!…ǵџãèÓ±kîGħT2Ù]SƒùÈÆŠæÈã“C¢º,œOÁžû&¿'¡XÝ•ÉÉšUÌü`0p+Š)[Trûç$#Ì…>yä¿5P˜7r¢‹“@Uíiߟÿf¤ÿIšmß{ÝI r:Ê|pcmhìÌž¬‰F;9n…¦¥N®oÃZ+|:ˆèb›KóÁﯿ̯øî™?¶ñÕ4L,8zÔæ£ßÑajå|xã ‘~>¾ñPe&ž‡øâóiÍ3߸‰YƒHðì–wl>¼ñ{‹῱©ñoo<”(#É¢ÿóA^­¶ø»DìÖå†A8ž r³ÄŽòQ° á¸+×ñqÕ+¿K°ý±@,Ú}—28n׿TbplÕNygÇZ¬Ë àX%´Äa™!¥,¸IÄ˯g‰œózlgPÎŽ$ɳáÀ¼’Q±ØÕ—"þìó´ôÇW5·±Æ{¯`°À±_ËKèÙµ`Π¨¦Àñµ]§B¬gÇCñ­>ìqÿ‰¸Ð|+mv„p¬ìÚå6¦hÕC¼WØ•B`1YõÊŸ˜å•æÜƒ1Áx_'o,™TZüzL||M•7F¬™¢¾TwÉsgǪijÝ*Fú];L?æŽÖ%ˆ/öb‘(ø]kÇ­J˜Y™tQfí¨TÈ áX!Ý—ɱü|ÛzNú?β³e–‡T©)‹#ƒ¬2èg&*ºkGy„Ü6» <¶ÎW剚áAh|[øÆŠDnä¦À±ÊzrЫž«”ø‰Äù‘18vÆ=_"ÞzB[$£r‰0C8b}ZŒ­ã¢Ä3„ãq¼Ù;ËÛ§úß¹â F³ôˆ¼LÇ¢×ra:ª ,1ƒ8¾KÜÇ[ìô_¥Ío=EnWîœå¹qòábéÜž¡/vhýž¬ÕåÎ •ª©€—Eìz‚±8ó6''#>¢}(â |INöÄSµ©2Ã8¾Óž©fǪîÁ›gŸJŠ Ñ=u»¦ø>”æ,*Ujg K‘0޵ºç;N®¸”3Œc)V†'¹TÃùÇ·Ér[ÍÇ8n·ŸGŽ“ñU¾ŒÍ‹†cîl° óG¾Ñ¿šU9ì.»me„¤¹6Ð£Ï F …ŽïÒ Ïù(ÇZ¿ãÖZúýAf‡Ö›GóQާ‹ìκ‹ë3 V×`ŽïBMiDÌñ¬CÁ‹•$EPŸ¡£$Ž æø^B̈ æØ(ý# Ûõؘ«ÿcgoˆ38!ï»þñ! Ê,œã«ÔN¥i¸¦žõ:bKÎ`ޝºóS¼ÀUÌ”ù8Çe*\g†s|MÃA‹þCN‹ì….UÉš!ß[ŸSWzˆ<JfHÇr~ËÀ7X`†t\AýÏ Ž«J„ð[VºG´Ôñ(Óãª>CG©[¿Î²+¬c…À-Ž&”Êf^XÇõ¾ŸÏ—ƺ¿óæñS£íä3ëØ©u3¨ãeà éxê¹›±sî|U-2ÔµËên~¤cåqÏŽ» g·‰-YE®»Ø9»È¥:ë«B>üÕ„tl÷1co¡èÌœQx8¸¢}§Îµ§šo3XèÎöÆ-ð§f}fÎWœ1s¶ø3¤ã®â©œ/¡]!+|lñÛDT‰(5+vŽjúJ6s>‘J§k;'EpgPÇ‚Ä4wœíœ«loÇqv¼:Ê}™Á‹©°|'6¬®éö¹çfR¼”×9îx¬£øåŽ—Áï"/žÅ˜_žöB;VãâßbéTÃ÷fÅԹäðü©Íùñy®¸š”}0C;ÖúŽÛàÀ“Cgç³'ìø8Çnw\`›¡ äÁÎQ,bçé*-$ G¤=7ÜñÇ8ÀʹŸ/úßµÐg¸tÚÒ.VÕಶrúrEÈØqSâçÂ*ôwXÇŽ®œa_#´¢| 9ÞÆùΰŽw9‚€Í Ž¯qux8ŒœææùPÇ&‘-dÕàzuL7˜t,¼]Bu,w9ßrƧS÷çcß,ú_W¹tä6~v>ÖñºÓaã8Êý[|ß±q„cãò)?î ¦ùPǵ:°~þPÇzChô¸ì×ÓáI'YQbØ8K,nÄd¦*¯`þ@Ç[+GæVü¥ðÆ£ÓŨAféñÍ\çýÄ*~¨caX¹;þ¹+r9›ªù—Ÿ‡xÑ3ëâÃWÆJnÇ703þ²]%O<"›}5ÏfÕˆ>ÌnÕÑÖ%2¡‚‚ ãÛì $˜4áEféòÌóqŽ«Lr9x3cf^(䬌„¬o}ÙÓ¼Lù Æ©l|<ÐñÒVQdLœ5øÚ0qT’©.ÙT÷¶#×Sk¤ó{‚ç&“_LœÛR>-à?môM8ǵ9ÛwÂ9¾kŒÝ,…¨åÇçxU¿‚pŽëý–hï±€9„Ÿ»‘ÐìC æx ¢Ö-2ʆ*ëÌ`ŽõàTá+5G™µ»XáW¥ë"Ò¢yh{IÌã’ƒ7œc•¯h\™ÝZÇÌpŽï¬­hÊÎqS”i1±hƒK1ò¥ 9ŠŽÝ‡fdÛêó/œcÕÚý8 ¿D…ì-fÔw7Š cí¹«âÂ,gú¶x0ïãøÂì\míûÊà„oÇl®Š3Ÿ!kÇ…×ÀÖ•iݬ»¤ÝÌ6Á:¾f¦êSÍ€ŽUÝØÐ3s«„Á æø„—Oº¸êó¹D)©”ß¼T”£4Ã9ä‘Vnɤÿ8DzÛÝÁþiÔ{pâË©•£ÉßþÂÂ9VÝš1â-·3¸½jUw}ãf0Þ*=:–â›~"br†Ö Â,ö¾t\›ô¥Ø¹Ú._=:VIm?ߤQØžáËôâK„û§²îœL¾ÿVÖà çxìkôprL¯Ê—ÁÎÕ\Å-Æ™sG/ÊŒñ¯ó‰±ou­j¾ö­f>š8Ce=f ÇŸø4ŒüÅäm³3ã¥øß•m«­ȱ6ÀècbŽôÆ`Ïø*8Ÿ§/” 6ŽJØYÊÑdÀûw¼¡ûÇËÔíıšøqa\ÎŽ)™Aßï'+§ÈwmÅEB㩵•£Xíí¾ §ª:â ãxªÎ4"á•âT[¤§Nã[%k¼“O_Îú½~'Ôy@¸žP ?s°!Û ¿óðäKHTŽ’"ò¬;ô:Ùºº d†l¶®„ªD%?ÈñB›¿Ìñ>G48³1öóG9Ör‰û—·0ëÜòŸÐJhbr«6¾£åX6adúŽÙìAŽï@/eýÊrޝeqÿÝá]rRpú÷嬸›øóQŽ· ¢Ð@L™>\%­èN‘­ZKï™ÂÈ/=Š9Þœ¹êŽŒG‚-øG9VŒýƒ:uz>Èñí_enÏ9ç»l]i”æàÂg'ö1ŽÏ]£edm›‘Ç8¾væIw> š¹q¼Ê÷š“+Õ÷E&¦ò•gçJÛ4&íDÕpsÜó’^oϤ“ÚŒçùÇruåþɬm…Îeãj;`m>ÄqWÁ“\Oç·r>Èñú'íÉrw+,l9ãI–ã©ö" `îeÇZK„‹›)ahuÇ×´ÏƱ±@¾Aj^˜>ıT¯ÅâWÄ‹E<'ÃÊö!ŽïcuŽ’6ôu®›Ã.¼Ü âX5ºŸ[ßsnÇßYÆèÌ ŽKPѤ÷2ƒ8¾oçA+±ðóov¿&ÂSLªAß&ÚÄqï‚KyPekD<'U‰q3ˆã!^.ï‚PCUR›!ß÷ämœ޵—L±îçôþããߢÙ"|c|én#µÝ ×à«ÿÜ•p˜1*?Ånþ´¼±Ê‡ø§ ôj¬í ÝØL·éáÿV>ߨÄû¼±òðåܲòSò:ªh1‰«^Ëo¬ ®í&R¶ê[“.§žÃµdxê9ŒÃ¨…‹3Òè¿ìª$(âw¹H“\E„Ý ÝXù÷|D_+`úñ&!ÓtgèÆÓuŸ<Ùq$\§¿rò&[$ô¸Ú×¾±¢Übª9#h‘=v6Ý‚7n®<ƒ7Ò’÷±byy§3xc-_˜9Ã)z3xc%œ"ÅáœÛÀþkß—£N,Ùm(ÜvoÜì‚nHØ ƒOŽvªý®ú¾ÉAä±¾ÿ”ÈãOÕ’,Æ\ü”BâCݸ‰·hBB±‡ùáOY|[ÐÿÎTîô Þ¸*Ém´™s?éÂ'a3g«âúŒ@&‘U,²"ãÞøNE6 ‚7V2¯þߘùöÎ Eû±œ[EK¥,§‰¹óáo¯ï(¼ÞRÍ[yÉU¥ñ‰¥”Þ‹Çxu9]ml>¾ñm[)¹^æ™/§»qw„ÌfËeͨnv¬ÎÎÕðåÔ«ì"ã'üïÎ|?±q„Qå鿼³rÍ̀آÿJÂöás üo˜}7ÝXÔ%2;BÅ{.n\ÎF-$øXK.o-äËÊLÄ2­ ¦4,œï ÉÜøŸB!˜«àßåä“ߎл“³Z.HøUÛi/…nC{-¤d #áD‹[˜Êœå¤©ÌÙ£cR™ó¸êê||cÅ Ì\Ïý'Û>²½aû¬‘óÉòÓã_}d¦f‘»gÍã ü«*{"¡©IÙ¯·ÞOæõàµjn×ãøÐzqè|æâÍ8¾6YiàI@’m€•ã9·¿C8þ†²¡&„㪢]M[¥Jå‘„óóLÇZCûLfÊÏkJÇ}x4AËB÷Eà™4/ÞB8>ÃUNfÇ*ƒ4|.aøJéõu@«f8'³Á@ðêx.íY(”ã! GåÑš’Êf(ǚ놥$ÈÙȱj÷?(@;ÝqQ«èŽE‘‹c–C9ÞÇÅf(ÇwìOÅпᄌë³i5„ùœã•¯žYÆ+ä Ôöȱ¸6ݰoóp[œ˜×ð*ˆÑÿ6,C9VB].Eĉ`š3cöãàÍÙýCòXZrÂX„i"#Îã¦I·+4Œãk{íƱªŸ•8ûý¥=Ê÷tßÂWm–=Äñ5%3ðâ-'cQEÝÏ Ž…ú,‘îLǪÿ°Ü3 r>×ОãÕ—v°èVÝé«ù¾ Dþ”>Ã8ÞÊÓð#àÍQ4˜ûj´í­Í ŽU=ǿ룂ïþev¬>Á†gÇ]Q¹nÄ$EG%8-¢î‰ãXÑ—"xâ¹qäÊn¶ǽ@ƒ3ãkd¤ŒCÏÃS||WïÆr¬j<¨‚“FŒƒƱêJ2r±s>ç>Î0ŽíÿçÂ8Úælæ|r2ðvÁßAĉÍQåRDr{‹rOf0Çw¯  €«3ä€Nܸ¡«¾ãਕ\–ØúDϘ¡ÏÏ…¥f(Ç*õÄÚ3z>cRȯçœp%6¯ ªñ¹Å€r\­d†r¼·‹›Í`Žï I?ž …¦_9ªÔ‡ˆå¼xÖ 剂ûa·ìc_å2hFNQµ ÄηœW–Úã½´wy÷ÖU‚|7 Ëi­2„“bÕ»êY͇8¾«® ”êœCT?dFWk¨$¬œ;…ÏL±rF‰6G»·»à¥=…}ö{î‡~o}Μï®Sé\f5œöZ3æ~™xª +g* óáä|÷‘Ѩ‚ŒÍG8V5Ý’™‰ô4™p¼»K<ÌG8–ÝœIÖëèhïøqz9é-V´e/tr89}ˆh0àX‹K¾¨Ø8£}+3#Q9ÕVûãïkð9îæµºóöpäÔktл)VåÇ7¾#éë9ÝCo›6ßø*óžÉ6ÚןK’¬¨ý5àxôý^.Ú_ùhÜg~g³öŽ…Ûù½{oî(§×Œü8¢Zñs¦åŒßΟ‰@&À Àñ]Wè[p<‹S?'€ã!˼Iò”$·¹•sU•dkâ âX«‰ÏgS½ÁÆñUÀö1?Æq tq¬òÎqOO¨A_%é]› ޝ!èeEÇŸœÙÕB¢•jSù1‰Â¿Ã@ä váÞæ|Žœ¦šX3ŒcU>ns@9µDÄÉJðcïå/ý1Ž›=aA+»¸‘„ÞßÏ`qÿ`³w)ˆcí}^ëînmıꯟÌßK˜ıºn"ŽË«lèeü8ª7èVƒvÛ¿üº BÉgÍQè!w©Í}X +žŽë‡C¶ÕÕ[Í­` ·a÷mÇßýKıœx´ÃÃü*D¥*Î ŽµæRÙ8vðuÇSNŽ¢ \SvÎWÇA‹L‹ö/íéŒ ŽUØ’‘_ÎVe–ü]ЍvÓÒæ|9æÍ@Ž‹èEn2Î a:=ßHÒå:cn¦U³¾¿«&^Ø$è&µB¸“×ðumäܬO.„¶*“‡‘sµa.…3`ŸœLƶYôsbäƒÄ'†‘£>™øã¥Êñ£~ŽêçX¤I~ñúªwÙ:¾óœ°ª3 cy'³Â8“~\UM4gÜú‰0rp3ÀÞAÆ÷G®ÕRÅ7‹äðoÖu µt†t|5ÆWù)±B„œ…t\”'M+üý)Y ÅåÀª»Âv†u¼µ¾ò#À:þJA ¼|«C3pç(Ë˽qÂTqRQXÇŠ4²“a¦4gÝ=gó š,»V­F“ÁÊ)ç —ã΀5iKG©ç¼µð§Ë5ÍSG‹Ó•ó=ºØf~´cm,ïüÿ¥+ÍG;¾vKo‘Q¥Í¡?Úñ.™6²g¥:\|«ûõñ¬±tªQÕóюň~×CÏ›™7íX…!WΧïja>{þœqò¸¨z©,~?g}#ÓÊþk‡$ÙäÓ(¢ùpǪ˓ŸûÅV3îæ£_{|×Lax¤?çrþhÇßa2Œ7Çà¢ùXÇU ‡Ñù ¤â8J_Áõv:'áöÛÛÛ+¶Î`Çn½deëYd{o|ÛrÂö *Èã¯_í<9w\k<iÅýž:ä`=~ón Ç*žÅØÁØiÄ“zÜävòoS‡¼vFÐq-yVRí_)AÈÝÑu‹¥LORÏá¾ýÁÉlðmïy{¼´»‰Èò»oˆ«Æ +Øcm|3&Áÿ‚È[d®Ü‡Š«OZÌ"NÂe{¸ÇÚÍüÜ*¬ÍÒzÖÎl9}š¡²xƒw¶r#±vì_µˆµZlƒ­gí´ÃP}ü­'2®¾|Ïì]©Ü2­LŒN+´c%‡¯óH˜;ûxýøŽ”ÅpßO74ß sgoo€„~<Œrž+šg»cI·º“oa'4´ VRØ¡v¾}̶Ÿ¥«ŽA€3ôãOË)sgÏt4æŽÒ9ÿ%ÁAÁË+U}é˜;3*sGÉu|:6wîV­ëþñ5ØöÌ­’si¼ùÈò­ÐÐ<Çûæ ß©´ðåeÿêž]ËþÕmû8ȤN´§¨qìï]Ž9q~%·cR4Ük®çÚ1.ÍN ¡O€¬$Æï [îeåzD'Ü9=×ÃàQͺ¥ðÈW¿;¬ãïíœñÈr‹Õ´ƒ¬8áý!¿­Š4‹ç¶‹/9[XÝõæc káõÎïÌzŽŸx d¶; Dó8%<åœÏïÙ4ÅW¿~FÏ|/£ç.£Ph1z࣠«ÄZ¦Ãì`™:Y»â¹_Ìóøì_‰Ï’£~½Íøüù ÈŠ¹ÊëJu‡ê ©A¾_rÏë‰_læŒl`©à ¿Oœ&‰˜ëgó”Ê›GÕ¸ ˆ™ïíãÛA•·Û³½Öó1`òÔ_ó1y– È*5, äTŸ0§Ò£ª$v¯ŽcÐa ŸÖýÆ` ŠšÒ#AÖÆQó© <¼¹ Y›ÿÃ7·ý.$4#†\µ5ä‹f×eõf ÈK…ƒ—Å73ñ~ƒG(ùr‘/ËßtÈZð5Ž2/}Ù›Ï>™ø4-a}ŸšUxo4 ×ÎVÑÒ²@ 41å–3ÍÃ@¾ß0¡Ú «ü9®ìÕ‘=y—Œž¡ w¹ø,æAŽ[ Èڰ݈„yŒ— .êÎJǯ#Œ@RÚA. Ú@ Ȫ¦¸ø-1ŠË´H¸œƒ¤A~Р@µ‘Ú9j'Š*¡û>媯<8Ù“¥  î* Èw¦áá{rFó>Ù¿º“CçRè/£ŠgÈ«{ü¬b& ><;Ç\ßò°ê°ˆ¬4šÌöÕµW —"l¡ØKònD›…¬®øÜ(¬y§p?_<;[µ#æ~žÂfÈE<¾ÆÎ2ˆq¬5Õðm'žrOØ! _±Ð“¾ãìÔýJt²—¾ÿ<; “ä[ÍÂøG7…€¼”áŽcûêÞvúR„#7CJgÈwè¾0Û:š¯ù@ ßù·q#6Õ¾(‹WèA8Õ¹_•Î*îâ Y±"åÁ’l}tÆÆ†ž›Ç'åê‹òø'G¯o×…|ç†Éã³u¡»ëR¦óûhÕf«Eý,˜ç y+ßÓbÿJa:ˆ …bGȪVÜ‘„#·RxŸ'i˜‹F ª=#îû•\ʃêZçèÒ—Z¾>^wìœÛ%ê•´jÏÆ£ ÷Êæú£ Ë•Gñs>­ýh –ލjïÖìwÜŽÜ0á´íËqNæáå¥N§"²¢ài ¡šóa¯«=çÓÀ®RÙóqÅH,9éç8CøqïDnßÉã ß惡Ÿ5E'úUÓur=”½Ò<øýK¼ŠTùàUh>²ØPW#ûD5UimM`ØY9N´oŸ#óY8Dõ™Ôr‘Pó{,¨ *¿G篯f¶´Öï»FµÅÌ‘%A{á šóYl'å=ò’ë(çÛ’8.c6¹8bùçzÊœ|igÁퟡ³fîŸ*% 2†Ž\I9?Ì»FYÛEƒçÏ.Ö;ÇI ‹ZL™NÕ¬Éé$¥¬Ã¬\à,…‰<™W*Õq/YUÔµ,‚ƒ<*a»€¯ÖÝR|éÞz„|ö1 ò§(˜Ï§2`,<2:²ªhi…c²A½‰@5þf@ÈWcØ©²ì?9äCB^ЗB»;£$ ä{¦S€BBV2]å(Û¤Ë „|' . |¶C+üwtÒ ª¸i3“™•„õ·ØS&‡Þ´¥£âÝî•Ïþ¤?kÆ•qmç#_ÎY8?CÇ„– Ç]uw)–Žü/nE‹¿0o*åMÆ ÉX:V`YT.'‡†\‹ pÌÐDœ£P™ Ø ùÚ„ƒ+…øM`üùEêøC=±t¾áô÷À•ÁÖݨk['GAÃlïë†|'ûÅ$»pNš¥s'\Šhò«BÜU pe…ºoðë\õÄ@!ïJó '“$Ü&0äV@XÈ=ÿ?ýìØý!_3†ñ™#? "f1Ýç™9.$0Oìœ6§²¶s2 ³ð¬Ø9¢·¸Ë'-êŽ) y´â]ŽæFì·ooh…<Ì©ðGêiò”M3lèÕâ¨Ç¹â ýBVøNP9ÏÐ9“ï Cg7ºx‘l2Éòö.ªE>¾š|¡vE¥ÔƒK4χR˜Ü 윹Uýmž¦óÙÌ y,ÄåjŒ)"’k?<  û¡~¼ÁD$+èÝblŠÅ—lC§ ‹³¥Ó‹Ê.ÌKG¨97‹Hs,’Ë7ÐLDêÂØCVŠÝô#È{ñ@!õctzãÜ„êž8‘™h¦ŠŒÍÇB®Éƒy,d=jÚµC ²¥y-ùáóÝžˆ YÅÎ{)G.”Uîoí âçcæÜ¥ÎæzûðkO¶‹uõ™Ó™§ïWÂ媳ëÉéÉ^-rò}3®’]Þ]çy>òVZ®ï2|Ÿƒð ùN‚+½@GÅÄ2ùØÌ‰ôhÈËáßÈ ÉÖ›bjr4ÛÈïýfEϦ9äÙvœu†|¿ä’é 3g´7/£ñaÍ>²Š&½Ã${̞˸0”vˆLÌa{½›j«§yX9‚£2óŽ|m¶9aDz>ò†dðpÈ*ˆ”±Óy·Í4áóçÍYè‹9J{äå±Ð-¬"»P`쀔´Òê™øÑ5c ©ÓúÈÓáÚï;sBu¦_΂‰,÷Jµ”ürL+Läãn_@‘×qÝмÏTÛ¹¦€(òpmÃYlÈÛÞõQŽÜh§&òµ._[ˆÝ“Œ|í¦‰è~Úöî¬0‘•³C{ŒÜDXa"‰ÈɺÚO±V ÈSÁenáÈ×ΞI9,b÷[Ä£ã +Tä¦=9_:õÈ»J®p‘Å9ÿq«jŸE°wåh"¸ ûW‚Y´îÚÕ§¦ŽÛm£žÖWîJ4òÖJÍ"N&RX|çåQŠá y~J’±HTß§vŒ¼5ö¹’õþ Yu@§OÆœW²½ß.ñÈSIL±'®²HY^6¤Àû´Ã7ŠÏòê NNŽŒ2ÓWÀÈbè~K«†Š/¯ïU#?ò¤¬ïe—ksÓ"ŸŸ ÷¬€‘•ûÅ Çʹ*)ŠëðJðçô£ .òp=Y‹ÄŸH¯X$LE_ü…žv§B÷ É]x,zö..w»ÂE.*ñi‰äòÊÇ5ÉÀt}„*òóÇMÄŸs§öÏ5i“*OYrr”»¾—\¾ùh­¦îTÀ(7Gj·ª…6G,ßî Yµ†ªoCrùm/+gk]kÑ{1¢væÒ¸säæ[‰†2BW¨ÈŸX`Ç+³·¶‚EöÞgðÃ#aßïªpÂõ ÈÝÛ«¼"_ã=bêŒ*ïÏ*/ñj*;g…Šì¨qKP¾Á][2,”¨´ù“¹kŽxÃÑ6ÊzPä&ËbR ·ÅÔ)²"+¹ùøá1uDÏc€AÛJ?2Ìïën܇¼€qxøžð_yˆW˜ÈPNßÎ]·4D÷|¶õ È­(ìpŠ,ÔćˆöZ“Ñ‹?go:™8‘Üqxt®®Z~ø$^•ÂÀµ®ô#–Ž¡¾Ô$þ¾å 6¡Œ‹d^ÍÇ›ÚÞ¹’£y}WG§Åë#Lg´Â»¶©£=*á0öc®0‘ïj@Ɉ+Läk¼ zæÕ'×úw•çÐ/ß"Û1uÓ«kùøà@zGÐ";W.?ºy¨â·EØ&f0®@‘eU ?Ðfç±4¶Î6Ã}ƒG§Œè%<:wc$y¥={·*°À¡ýÏ(²¦Iž7¸@í¬ÇDÖrÙz ï>Õ¿LíNƒ:W˜Èµ°˜ ù~·‹·y’ç»ø¬þ>ëCÔïy—bç±+Ì…‰<®¤Ål\ui.ô'9€ZåÏÔÉ[x¼@{<Öc"k•Œ …xÕ'?÷KTÊvNÇ©Zzº&µCÜvd¢øœ¾ykÛ uN|Î{¯ÙµjŽZXˆ¬ðqFT’5UÒzTüRÄ22 Ò,Yø3TFˆÈЧŽÌrÖÖÖ#"Ÿ;QÒóI½ú¾Ì~qè4Bfª~Í‹¡s¾<´À«Þte¦2eôVM¶€¢ Ö#"k¨ÖÈ;*.3Xøee {|eá¬GD®âàg>¤yû5·Aºr9ÍõˆÈ*üÚè.¶­T#ÇÙ2­óÝoñ¶OÕ2W%ùJ¥Z¹^’¯êdÔ'>GH(ú'Õ›MVYŠ<Ä!Îù¨Z9+‘1ƒÌ>Ã#2®NðB¶¥s‡væt\:ª©ÎõG†_ÑóŠ,;äHòÐSBP—DºÌtA…y*ÅjKòÊRÇ&)YïJW\P‘uf·ä%Ü]fŠh±*N¢ÊVëa‘¥5f3¬`‘¯zTØæzXä#ß‹Å$„ip…‹,²yÏ¥YXV…á­€‘› ÷XÄÞ_¬€‘EÅûÜF¨×þàé’€e'â ù>bîW} XE9¤+`d-ï>º”y©lÎÅÕäÌ+\äÛ5žÒê¯Tùá‰âÕ¹CÒWz9æ¶ñYuHÝu°£®ÍÑ9Úx•_óµÄ3©Î÷ ùš×ÊïYÁ"/')X„º5½Øy¹üÜz\ä;EÓË ÷ò.S§NøËàû.²PŸ/•ú;·Í­FœEôX“§v…‹|»¼Ò©T.úÅ—}K¿f7_ŸŽ B \C‘C+\äk·Ñ$"’K·ò Y&|D†¹poç«äJìïA—ÛÒùÆýW|除¾FOA ”ÚELPa>’I"ÅgK(XdU¯ýܸuF>a¼:éĉ—лî+LäÛÿ¥ú¶¥3rà—‡OgÊ·½‚DVÖêà`R1†NwøÁ ¹(%Œ“³© €¹&òñXa"¯k\rn¶ˆѸÂDfr£-pÈÁ…±sú`iŠüÉÄó%Dg5nDõ±dÝæç%½¶³ÑqP)þ`窨ÂAqîÉ›?¬¯7ƒ>…®L>]Á"kò7‚}¼vYŒ:ô&†NW ‹àLZ~j§DWâ Y¥·¢8yy«ÓÙ·*®•·¹ª ùALa¬œï1u‡ãÎqŠû¾’ÀU° »e»÷ãHÌß凼{.P@á9_‘ò¾ù²‡<´IŒlë^e×Ù¯­³Gf%ë0çõ È*g‡Z}…«†ì®+ÊXŠ|íãïdb±‚¸F]æŽÔ2m™ ny^Š|WG‹áŽ™#»7·cE»\Éy=*²ˆyzˆiÕUÂÖŠ|װ̉ϡSù$°rVüAŠ<=ˆ­ìqLëa‘ï»8ù=¨ÀQQ= AVr2}‘ãÍÒõ¨È÷‘Z‰È\ËÍ7³p¾ÈWöA‘´Ì»ÖdrVG&Š®¾¹”ˆ…гéA‘U =Gö´öÕ}Xiš_º=×wß-e@#³¤ÜL©ñå(É‹Ÿ£ü¿£¸€Yk™@‘—¼–S’¿Ô; jŠŠ|g*ë0 È×fñCEwAadÓñ»Š|×NvÙEVaqõŃ"ïr¸ßÀt¬À Yp\û¦¤²ù°ƒ(²Ü³Åw%4G¤k޲ÀÝ37b-邼+Pdq-¤5EÖÇòokŒ@/öE¾‹8‘UW Èª ¡/¡½ºGñK+Pä«dØßWwÜÈúv="Kl”P‘…ˆF$îþZÖü6uÊ—7AÚ‹Í1;eŠì$@ä©<"N¯;œø!>µV€ÈENVpÈõìÎEÙþ¬þÈÛK¸ÂU²Syý¨lÍsEVxÈ.¨ÌXÂZÆ•rQÖ—‚WÀnPxÈ}´ÂC6‘+«q‚ÿjˆ{0c½‚D¾sƒ5fÈz¾Î•I˜S ë nz£ÑžSð¼$²"½éçðÊá3'ßJÅ ÜÈp½A#79ʉ´H´½Ql+Ld2å3xgÞ1ÈŹ¬+Läs€÷{žÑ<ÝuÀ» ­ö²ËË¢‘Xx)À¥!¹ò⾋±Ÿär/WƒD¾«%•[[‰¬`û°šw6ÎU€£p¾šãnÙ}å+× §æD§bäTËò­Ù;kž7ÂBVx ¦œ°…ÉÒ'Õ%°[†…| 0¿Ó°ççʆ+,äû±ÔÜWÜ´2 Y»Ã}±ð—‚wW`Èw¶³d†<¿#ì×ê¿L«©,²rÖÝB`Ž (»æ¬#lÁê/ÕjOÏ×Á!‹aÎp—¸^ìê¿d壬ÐûšÊ'Zý—j5hVR­ÊGg%ÕJ{­ÌT3ž“ð«ÑŠõéXÄ9¡H5‹íB[#âÇ_Þw鯊çr„V€È¢ÌN_*V S³Hd€á>+@ä;åx6Y'¼ÑX:CðÖÕ+p¦U òk¸1âbÉïÎ!—P©‡ˆlyôÉ•I¶ú梯›³'£«îÄä&r„ÔßÁ9š8ÙªAîK޾OÏ› äÕx½!+‰‘O†ÝÙc{+Hä2ªmçþ’­¦·ÆúK¶ÚýsW‘m•ž0‘…#nü¿}µw&LdíÍ~~ ‰2qÅël8Pd­Ÿx ÅîPQ2Ù Y5é›!«ú•E«y•qi¾1éVÕ•V¨ÈK¬1.M\Gm¼}6­¡Á"kSq»ï0u>9,’nµ¼ª yJä(ôQ`ç ¹ CÔW$âh«p‘Íís#I-?8YÂEžÝ‰x+\äz;šîH¾UFs…‹|­ÜÊû>‰¸ô¶p¸È}~iFÊ?”/bà…ž%ßê.ÒøRÈ·ªìŒ†‹¼¨²y¢m_²U[¨$[µZßñ$[Í–ý’–GL²Õ쮾ù.Ñw³z¯.˽ùN&‹I#QÈUœ1´:.ñ":ÿz\dm™ò¶’lÕðl?.òíò/÷GÓ_­0r>óá,3rP0ƒœd«öy×íq‘Å6I{Ù¶*¬]‹¬]µ9©µƒ—üÒ­þ¦%>‚Æ O¶•ÈjÀ„œLºRryvI뛋0vÚd”$ Y9+Ȩý¡sÈ$[™ã½Ù†"½E²Õýʼ¼š?“Ù,·in’­&ßJr­ªsK׃"WR;Öƒ"+¿ñóØ:_Igž3wúSçš}yw1uFt|R­>¢•Yf-Ê){V£xÏàA‘·ªQÅ óÆÉÓ“k%,Í#tÁåƒÿ-˜È·+}6Lä)U>%¡C¦×80‘'ÅYV˜Èר–^° ˜ÈŠ–Òh„‰¼–Ù (²JKßœ®rí¢&²Ú³ž´Ço<†N·*Pä¡PZF7@ïŠÁ¶Ûø1tjáÚ=œÚ†O­ñö«œ²BEVMgî‹£éãåAЃaJ£î¸ðm è\}5üØ9¥Û1=þÊ•3ŒƒÐiŽ!¡ó‰0³ÂD.'‡™sM³á§ÃιóQ·A§ïЬ4„ãÀÎQv©G#Šp¯@‘ïB«3,BÐùxötv¥‰3á&‡¯3çŽÕM+`s8A{…‰lœ…Cgo>h6¬¾Q訅ëk–%ªc+k…‰, ÛBĤ¯m2ÃϹêí€ã²fœ„Ÿ#emáï>Hòµaº£ÙóƒÏ)€®ñð9Kü§$r“ïÎO»ã¦÷‚z<|ŽCÇ£ç˜4½Æƒ:Ï DäÏÑkn&»† «z”u·‚DrÀñc®%¾ËA"ß7Ù];ç¨È“Eoö9äܰsvý¢¿ÌƒªQ¶ù>¿¸ãëa‘ï#:²ça‘‡B²—@WÖü>.ÌÊí-P 3Èç4Fb¬œkȬƒZáóyÁ9u2J~ð%K­ÇE– ž]«²¾ÇgߟÂÇ£óõ/÷ÇÊù2•“pGþ““þè¨ÝGE^ª=ÆÕÑòßÌ€(¯`óÑ90 ýÈ\DF´«J¯GEÖÞj5àœke*#¹¹þözTdꀮGE¾ Î)Š|¿x{W¹êSå8kÛõ¡1ž;ôA‘åÅNkâÅÚ)ØœnìäzPä{µ…Êy¬@çw¯GEV”ì—æ ùU…¹—Pe^­Ežª ÍéI'Ÿ›Ï+6Ny3j¸9Z}æ8¾:WœZЬÍÎ4'àœQÓ\6­(°Yä—¼K»›ð}¨ÈµAµ "«ŠµV(`‘[3BE®"¿WI`Á\0zE^š,p¯¥PµyËÙo‰Boµû3y)]Š£¨´êĤp‘k¶ÂEÖ6ND¼Í»qá"ßõ ®ù`Ä‹<®’žÜ×}4ÅcX¡"K%WÄ›Y^kBM@[м–MÐP‘µz:n»Vׂ”ÚYT ‘ô_•¥²hMû-'Ñ<,òç éP‘•¤[üŠox,òŸ‡ yècuÇQÊísÞ÷ ¹)|—!âVÉàöÉê{÷Ã@`¤«î'½ý™‡Š¼U…À÷}µ çÆG¨TÕ*²"r¥{ 5Td¥¶0ŠCEþ#ÕÊ?çs„Ь(†§ÍÅÜ-÷¥œ¾EÖþïæÂ‹ÛN®»™ Ûˆlk¾iºE&yv…‰,mÎÈNPΞ¼‚P‘Wc ØÊQJHÕa$l’é Y›X_ÆtÜM„k†õ“ÛÆ9'[A"ËmÇíl)^FÎvD\ˆÈ¢+N7±ëßDÙãyDdµqavÒz¡×ˆÊQÅ¥Œg×wkýT ã"rÍ÷B}+QQݨ¾‡7_ÏcIˆÈUe‚9™ œ–Ÿâ‰…„<+°,±¹¡Ze^ˆie‘xö¯ñ™¦VùväVpÈÊDí“S\örÍ||5="þ]W~]Á!«” g¥¼¹Œ®ŒÝõpÈ«Ðqqã\ëþ+È'D‹aß,U3ËqÓ†¼íÈ‹dýhÈ*DûyØWûhÈ2ô¢ áUr‹ gÏ¥ôœÏ\³FZÏŽ•*èDö|3†—†|ŸJL¨õhÈ»¹Þðz4äkþœÊÅÄéwˆÎÍÔBð†Â›‘qŸ12õgÕë;îM!ù¥x€„'Üu<Døñž¯ÁìY­Í#c^@J?|ŽpDd+_\ŸðcEâÐ^>a–ˆüé2Ð’h5¾ÂDŽ•ÓêÓÌåeD½båˆq"5<çÎa¶a¢Q±qD¤zS¯í~‘D—︧Y ?"ri¦Ó®GD¾Æ9FÜC"‹ëñå&¥1™g0s–œ4ˆ@Q[ôOèiÓ6çC"+V'ï3GY·ÿVŠxGiD¾‹®&%$rëÞ&_ ÎñþóJlÛVA"kãÒ±Yø ‡¡…‰\]df=&²·[ùÎ7Í· ¹¥-%™Ûö®›ã ‹‘•íX1'šmˆÈZ9ë£ZÏ‘CÆR€ÈŸbL¥‡CD¾K úùÇÄæhŽg@ãðäÈ„÷±rÄêð#0ø‡#'D¾ÓÕánüϹæ‡<\zy=²6@8 ˬ–ð¯¾|S<9w ^ýSîUÎÃ'çÛï¨ß›´!Gñ™–¿‚CY¥peÈãcp€CnäM‡,šØöoûƒ¦mwk¢s”Èn‘V5@ÖÃ!ÇsYö0¯Õ{ Á!W¸wëá‹ ®àïs FpÈ Õý¸`¨f_êÃ!{Šz0äû-U_ˆÊmf¤zÜ•„e‘6 o…†ü }œM4€A÷+8ä«îZ²&CgŽCËü…0)™Å´‚C¾FÜ`PáÌ‘ËWÆ™#S™£ ¶èŒLçq'[´ËÙÍÁ!Ï3:_Þœ³x^‡\LV]‡<ù¤ñå=°E¶°¿ÍÈX̓Υ yÉ¢óMWöÑ6 ^8RUŒ—KùûS¤&g»§zÙ´)áÇ£0Pðå¨Fꃨ•‚EœÍkÒH …Dñ[Â9æBƒ†¼Žñ`ÈK•-²ò9b¯õµñÙCXßjËj]Bè“ô{‡óýXÈë÷䉇Ðw%4G(sKhóÙxœÔ}¸òCö@ŸÏМªd‹ôTQõïõ8Èž¹Ñk)ü 2{¡óiEl3¬ô8ÈÚtÝQÇ`¾\@pý@È‹]ÙùÌ•ÃÙqyêûÅæl†^bsFͯ ͩ͞œYÐëÇÒií·Š=ýŸýª¶xׯÂU&¤òÒKöàápåÈ»Ag›³Izä2]K{=²Â‡#²D#(þ1lâÍ<òYyØÀ`&E&ºÖ/Ç ¡]sæz ·ÑÐa˜9MvÍKlÎ7s}|9÷ù˜š“e¥¢Œ‘É÷­i.Zeꎑ£LîFde$"sæûŒ#g:Ñà¯ýZ3/§èC|¡qä(Œ)Ç 8ûŠ>4GýýÈudÞH`ÎÙ_ÆU+·žë±©dwdJ笘Þê›-?ÇÀù–#ëqm„yžÏ›Ž! ÏéOÈrëo ä2É?á3mõß9Fc²vve0@¾ú¨ðC–HÛH U¢ÉÓ|ÈG4iÿ”ݪóùóYl²FÓ­:>*‹6º\â|‚¬rЇƒPÀ¬­Ã@¾Jå ^Êösãh³Ó"=D`NÈ[°¯Kð±êòð[ǤN„cÈG“‡í2¹µ>:#‹ž¾» ù¶¦²àbÍWЧ<6޶¿ÝÉ#Ÿölö<';‘b:çþ·9˜+d/ˆÚw÷ò5¼“riF£¯‡@Ži²êðr»Â÷Š«;¯—²‰ÝSÂPÓS¸q*ùA lË@À¹C|¸«È!üIJˆË¤ªÅ ùZ¤B`­0geHÛÂé‚Äú—ƒÔ¸Ã‰n’¦V†1ÉUõä—ÌÚ‡•UȆ·ðck{‘"âÜý*ãšðãûÐo×¾)2±¹Òijk þ y)ÎĽóf̰1g8´<d•iÌÉlŸÉË´y³•?åF%&Ç¥œWÈ[^SÿÖN‘‹¸‚Q+þéJ˜o‹HìKºb%Ô‘†á«`5ãmOÛŸ±Ç{ò%âÆQ™F·ag{cÓ©;‹ ¯Ž‚?TŠŽ²u#ºãhv|dðÇJÁæ l"ªª×ÉÁJÝçÝãÈQH€G§ÍeæÆdWÉgŒHøm ßžj5ÉbºKH²S,þ›ÅP_øpä\ƒzºQPM8²ˆ®u4À!s£©èÕzøcéÕUÊú°·Ùšê®)ø*0o–‚ª²–pÅ‘¡ƒÌòΟú|Gßè^<9ú~syfÁ½ŽyóíÞr=ëö; ~è$ œ;6¯º¤xìõSç¹éÍKxðãqÊàs|ùUe¤ù$˜¨Æed¢/BôØÇ·Ï"òØÇñ[}|õ˜‰~|¥/žoÄÜ=øñ¢<êzðc»þryHH#ÊûF¦ê¡9¤WùZã`¡ êÇ>}è±ï$9I¯j}§óRÀóû÷dýÕ7ɳ¬]мGfvTUwd^æ—æZíŸñ›=ÑûÅe×c÷º¾t>nœýÍÌÛ5{v~Cä›oäÙ8ª†‡LèöÓß}B?Êél¥-‡Á>¾GGÉÍV˜QzX8<ªsC>îËÁ «`Ã>–Ìh¿¥( kò¬É||uŸ·ŸàËe&¥ ÷¸+zÏgÂÚrüÉyLÀå%Âã+È—á ¨®Û´ÎcV#˜ø¸³TùX€hÅð± ÞZ ùx*˜ÃôPÿÒ¬<Šg¶óCÎê“AV Äå/<%ò¸:Ú(ècÕê(\™~*^Î}ÜÔ£ W±òñµ_¼_ò±8ÿÕ·› <8ß{þŽûÏ·%üL´*Žz¥Ö]Gm¿ìq7‚гºò’Iÿ nÏX9ÖÄ]Øø6$·á¸°€WY•nL‰‚=ίDùáõ –â¼åÝ d“JëpÆÁÑÑÁ/}ۈȦ*t¬`åø¢MIot¹ãŠiä\bŽgú4<Àa´D¨ÇÚÑ­n01ÇCü‹DBoÏø!Ë¢äÍŽ¸Å7O à¶ýòñ}¾¼éT(Ÿ^[ž¼‰/'§VÞ>ÕJ«HW5.Å~Âúø‚@ÖÝxÀ¤O¯Ï«Pî"š+äã;ûåû^d¢Í’“¡ Ö(àc}â¼=<8÷·ËMÆÂÑÄQ¦Æê(ñïó4Fc€F¤>¹f‹î©õôUr ¡Y¢Ö/´3ç4zJÎ5HoPr„õp¬÷HcSé¼äñ>yºÔ''}à<óæK›@¡-‚÷ õø"û¶C=UÅPÌ(ÃN‚¶ @ù܇q‘ åÍ䆇=–d ;‰dªA¼÷X£¹E·Ö¼#$¢þ¯þlÈ/‰÷ɸ–Z² %ç³?öQíÝÌÕ8uþ£—n£ýG=þLè^?êqeEöNKÛßÈ8Vwd¿N¿en Õ©{¬ ·#ÇÝy*f¹Ñ¦½¿¹{ítHJ”ÊP>;î%ä~‡+çc€•ÂŒG…?é0j”k½“óÑõ¤nþÀÇß—y0;Us¿ç‹Ï¾OÆBRÈÃÊ|äc¡çs=¹^lœÑ- ¸çG>¾_¦Ï€rJï¹>0²VWd|¿{e~MÊI)-Ó¯Û׺ãúXë½´¾öYsœ…Rßï­m’ãþ4®}žöàį_ËøHÐñÌWˆGégíëÑ#3Ï ,öö±(²C’mÁH,ù“U@²%±w¶¿Ÿèûx+IaÚ[Ì– û¸ÝµÊý¶7ìã£#ŸÉjdÊhØ«ÆÒý6wàÇK™¾Nàw=Œ£‹f¿¿Ç¼†ßB*P­+‹Éo~¼G×g¹Ã>¾¦‹ö·ÙÇZŠiÍ·ƒ>V•ÒMŸÜþ}´‘ñßš¶ªvÐÇWû+~?ôñçåôñ2ÐÀ"oo?ôñ6Jq~¼Íß°ÈšŠøeàÉQF´E–÷+áå4üKEšz~|§UÙ=;ðcMp9w¹Ìîú±‚{hsPß÷ƒu«xì;ô㉻¿Wãá“l‡~,>¬Ð¹müE_þüøNa×b±HfGQtÂüø.µ¿WâACé*Mžm¨Þ–'`¯J.oŸ<² ºÆ§E*gDì°¯:‹Ÿb={cd~|u¹jýìÀ×”£Îbö¤JvàǪM£‹³¡õÄüxÉêVJNìÛüXI` œ9Ç!Ûôã¢M±ƒDò·xAÀ'ÏÁ~ôã¥z”½žõs~ÜîãЋÀ˪r¹ûá˜ðã“£((Žz"Rê%²Ûw¥y%ïÝ.vËáéoχvèǪžYR'Wf«êê$ú|óù9z‡~,×î@$Bû¨ðÕýXÖKç·öz5…3Zd kÑeÑKÿ패úqS¨>¢»ŠØúñ}µ»¹#]qsÓd¢rî ‰ŽÃ¤? p²j]\˜Íª©°r‹î*aû,±i°>Þ[U÷yÐb rªó¿öƒ‹@ÍhÅÔ¹Öš–©ûÁ…O竉/Ç]ŒëR¬ldƒjÀ#{¼ß&¹JÁHˆl¬žÖ@ãê eî™æjFz¥H¹ û±U·çO&­’â÷cÛòãüW¢¼¥·œG^FžÝŠ^÷^ô-[UZ;Ó—YÒ~{æ8Û|ö ïú¸×V2·a(~_žþ¥‘WF2vÎýôD“Ù}¬ÍÑBk©ð ½\ß*ÿSDKº—ܪêÒ~ìã;ùð5cçܵÔÉLœ|“ùåy‚‚UP²{O¥¤3û~ü>ó`ìœãüàýÐÇŠ ŒØ¢[žLbÚ˜9[ù™´ž€œ&@02fâj#Ç=•/@&"¬5L—W°Ó•wÈÇ*nÝ%±°T­IÄ&î 5ÑøL·JŲ–¤dSÜ%ΖHŒ•Ñ(ö±@ÓüGþV‘çýc»òÎ~ìã£hµôñ”sÄþV'•íùXuZ-ú%ꥺAÐrDÕtØ­UÔGÑýŸv¢wÀÇN ôƒÖ Í•‰HS%+ºÈëBòò±Âr§ï;gËӸ˯ă"vÀÇ®o~¸&ÅUkˆ,A\Iv},éóµ0tB,ÑqË'?â·H|;èãÑml‘TrG›ï°Û~Ï@†ÕYÊñÝa+Ýså—J^üVïªê&ôx¯B30t–´-âÓQhE¶ºöö}l`Åûø.ÞyßA|Wq|vØÇ׆ýb©òpC%™äeò|„«x¨OÆ©s§d2ÉeEXÄ]<ïüØÇ5级Ĺ„Ãm+‡°ï, Èñö±rpBMh¼k"§ý½<“ÃÑ^kˆß–jVþfC>»’&%¼:†4òª "‹Yö((l—_DŽ"vy[V†\ì g“³Ò"kî]øâI#¯F‘îòÒÈÛäسҖG1S7jvØÇWëªdÄ~ìãÖ…YÝaß9£äÒt•êÓ[ci²…ÔÜa ÷»ÜèÍ.66nØÇSI—õä¸ë¢•¤‘—–—@PEIöcË1ÏQðPC›X»üªv6>íTídýXu”ùJ «½Ÿˆ4rÅ› €¾Yáœû‘ç²Ãn?òñR\šòqÍ„Ž?çÃçñ/sGö|¬µ;OC\æ¸v ç'‰ü“ÿj>.ÒtUtŸó6àcÅûŸiûu»Á†{Üît0}&ŽêO{²î±ãB-á¶p×ÿÑš&øæ÷X‘Èöá/=ù²¯CŠÇ¢ú[Þ‹‰RâÆ÷øŽXm\í`åIh\Š€Ìåi2Øc±ñ6"¡9crߊ£ú®‚}©JðxåÁñç\•å6%¿ÊQ¡;ÐãþyÁSP@_z<‡½*_c»Ðš”…I¯½ÐãÉÑ–”Ç•‰CMÕ-$.çsåôXÔžáF1Þèû6rEëû-뎭Т]_¹ Üì@µ•ÃÛkÉÖ+nEÏ‚H,‹è±“ŠÓÙ¡ËÜ})6g»¯w ÇÚVà…P°SÄ:Kã÷e~nb•àDzJ{ê;ÈcÁ€ã’¸ñ©pï]_ä±cvv Çe:z×—]µ¹î @¦,âËù&Kv•Ì KØò ±hu¯oÜOމC/̘§›L¦Ç%zâïø® µûºÃ;V•š (G¾vße’¨êH®]_̱ 0YÌ›;|„ìYiÿÎ/ÇŽª”#ÊqIïä±r0ù”päÇQÒõj‰ˆ%QÃOÎ9 M€}#¼÷ñ«“9ÀÉ,Ûáí,Þ®¨0ï Èɶod rå`rLßAG[´kb(…ƃ+箦ïĶÕ9Q4äW-9w ÇCÉ\ú ÀJTY„Ê„´øæÂe*4¢v‡z|?€Íû=¬ú "Ø¡×êìÚêñ6y¡‡­ƒµüDTëì«Ò(âr†·©ö×Ïá ûaµ¯B_¦ºƒ>hKRÈU 92¯q<]ûe¥øñX8Û»ºÈÙ¨]3ׇ¥" 2 `cð,X8ý^–—¸!8?«X©Nä¤Ïf~ÁÂ1Ýää8£>™ó½OG ‹™þ;çä|7PÈ n€–ÿ>ñŽöCyÈyÀØ8L¤}|5á—é‡\ÚÓ¢Þ°qºËaìùXîšÈq“÷w:FuQúÄ~èc![·Gã+ћۡò«J!ר'x*v~ =Bî 5¹öc‹xžñѲ¹ÜÓ}Ù·ª;ËòVuŽsœ8ŠV2Þ”¹µ¯½ýXéÏ™Ž‰Í¹WËõú#5åõ1ôµVηº_Þv®Ä/r l»9üø.Hf†þœª€eË̪8|»ú±Â²túqÓÖ„ÌàÚÞÀëíÆãŸ‘´] ?cþ¾/ÔǬnšu$±p+Þm~Ö<¹-Q«Ôçð±Í|DrÈ«w{…¾Á» ÒþZwÛWÊŽUQäîû¸æã>mys…æSµÍÅC,ÒQ вˆ{IÉŸÄöF“ A;óó¹ìX©Œ‹»‰1îÝ!‹Ä CŸbãÐGT¤Óš«:°ê¾ÈB§N› …í‡>¾“Ìôk'òøsÆôqUí/?,ûU²Åíç0Î-NùWs)ö†ºíâ°ï7'Òâ~ìã©â籚‡¶šwØÇŠ®sgÂáÒÇ“÷9Ù¯R†¬Eâ|UÔ¢ç"A ñ䨘¬ÅXƒ6Š‚>4º¸‰Ía×ù¡³Ð úX±Ó¿ÅÐQš®ûôñÕä•“QQÕ¾ ïP¼M æ8¦ôq¯Ž{ÝA߯íc,¯D >T kÐòcèLVëA*RÉwlKç® #d+h«„¹ηûx²ëöq_ò][Œ'îð~1t–¶d,²È%@«Ÿý$Ò„E÷Õýè»j;皌bçì‡>V”-G™ ß½ƒ>Vuåã6âÊQmhNv£äÂäFxæEíBy²“æÂµû±LýØÇ ÷蹸rÊS™6tîz ÑðlZ­Ñr¹ìѾïØ9*Ù™ãä©ÎèM윮2ÜþÙ9ª4²û¸®ýÕ({öÿ¥Am·Ö­Lüq[ÞO~ìc¹åv.oEá Jd÷Ý×”ï¸üXßoîæÖ©Œ›¥¬+öcß9¸unŸ>eæé†É¢úÑåj™ù=4šö&•ðgTB¬œÙ½ÑùàÇ*16s½x4k®XŽ˜«ÈnŸÁ\rÈ4k?ø±Ì&ÝEHæ×kº§¥û¼ãùèÇ]ŒÚ‹•³\@b?ú±jµ´˜I¥ûÑMæy°rúäÛÃȹú²ÅÊHȂʸ#gתe‚Æ•Ÿuî~lœ'2VÎ9=×'µž .&yÖ-¸p|²ÙW•øÚ’´Czú±ƒ%ª$öqÏv¤øãûêì¬Ôn‰ü.²£¦õU‡~,J±¥Äá7o¸|TKÃÁÈœ“=)íó9 &ü㢚³Z»r)ˆGÍû¶ÁË ¤…GðÇÊü”Dûê5}eÉ›ˆ;øãÚ<5†~,×Ïà{e_ì°ï ›¾ Qi}æÑ=ì×1€`÷dXY‹|¬x«\‡=øfuðqspS0ÀâI2Øãî’p;Ôcñ[6ç@q””ºõøZÃ탒s?ìîaá,ü·¡·1xl¢ì?gHì=v¢°Eâã\Ønw²«>UĵÄ^Gñ¾d˜ÇŸâÜ‹ŽèãùmZ”¨¸ܶýÂ<.ÔïÛa+Œnø\Lœ^¼åæ± 87ƒô*‘zÜo¸qTæß²r¼g3‚ @¾ å“aU”UáçÉ‹^\:]%rÙõX òt4À-ˆ÷îɯú¬kÂ<ö‚É}AHŽ’ôø¥·Ï´¼´„en}ÈcÎÞýeW©Œ—EV:ª h‘ùç*,·ÞκË|^Њ¯Ò†FˆÇ r›þ-éUr’øFxrîøú8Jfδsx<=ñó¬xÁ*ƒüª;føÜcà/×ú«HîÜàqÛ›OtcIŒ|…˜7¥zÞ± 9Œ‹Màà·çprF÷Î\xÇ"ŸgÄ”3óU_U¾ Ïr¾Îã€,;¢ûjî(S9õK×AÜ=ƒˆ«>7ïždÐYV¢ŠhwF_Ž-ð:zùŸ¨7¬TS° “·gnÆ~ÈãÙd½òXå–;úVÎmÙ;ß9.Û{ˆx¼…·Ïí=à ‚y¼ã;-çÓJzÕœ-W/,÷îù}I¦ªØWû< › bàÜÓøìãÆQ ôÈ/E›?ŽB´ò{·ïΩyœ’F™¥"¹É Ç`«ý€Çªù”™§f7èôÈ=£õ‡…£ Ù“Àkë“Ò'µ–?˜³×»¡ãøªÊ3ÕˆÙ¼·ö˜ÇšÒ,˜8uÏ“ñ@IŸ‘Ù G›[™z’duUe¦N’¬®<ó‡vCëbâÜooÔÈΠ“#1 ÎÀBîQ‹¶rœ¹{õ/s5“ºrA–¹Ô}Û{¬DÌôX'mûk´Ÿµî¹ÿbx&¸#êË€fÇJ•b‘qåtbGFJu~to°ÇE¤Ì)‰µîí}Ká_ý¼üÑÕ$1PüÖÁË –Š{¬hCµìñQy‹î»{¸ÝÁÁðå˜8l^Á(9kµz×öÇ=^ʦÚákÙ£ä×ò±ª,5?Ù Îé9Š)¨jBýÜ5"×¢R§:…^ÉÚÍ¡k+Ƹs”Øœ» t£ù¶°mYt ÝãÅ «ä†Ål7:@t¼Ræ î¯-nMö±¡Undc+ò´oüju*ydW«³ÛÉøñ\,%B?Bù»Œú>*Í"Ýꎸæfµä6‰>¶Ç+ÖùNNòT™‡úñ¼Š©ºUìÏöIç„ ¸x'¯T§- Ï]‹w?@ìa{-ÂúòN(Õyª*°í°u¥ãH¾•«PYŒ7µs_®-â(yŽ.»´Ç¯Zgç¾$”ß§Ùî¸TëÜ…¡>’ÆËÑ®Þ üX‹ÝÁ·†S§LÅÞÕòDö±*|ˆ /<«}\6NA ¯ÅUI¶ú¼UôñH@rÐÇÒ.›²Ìè¶wFju°òñx1+íúñrlìla„}Ó…=ß;­_„úŽÁ¶N.*¹Ã=¾V”½°á+#£ø=/Ü&§ðYÛØÙñ|Üä ò•mí|†IìpJpüp@ã0žœSxpêt®ÊN™Î6øüwÜß‹G'ÓêK¯œ8½†°}¶ôXõ&“ êé2Ðãa+È"&a+ŒYÉ›Kí‘25úŠ2ß¶£c¼2Å›ˆy|›«ò³û!ïx<fŽ»MúÅþÚ3ç›.ñ•¨?Êt¶9äqãŒþ»ñŸ§G|VÎÊÏݺa Á~Àã)"Š;U:«Aû[e9ø+Ù‚ë½²xÀcÕ}æOù·G®g}uŒZÝy¬Xâ“óÑE™Ôû!·JÑ^êt®ãÌÇ<.wH¢‡ÃÔ·šãÉbZ9ŒâÂmòCŸ]ï¿2½GNðñAS§NçtEžý˜ÇÚm­\Ÿ:J¤¹©ÓÙOšGNQÈh^ Çßê9nVËmº‡HLmnѽ„b®¾vŽïÿNïTgÉëÀs››îO©Î¾™ãRªS…h/&Îýd0Rªsæ»Ôã»üÉè GÄÐŽý¨Ç ü¨‘Éÿï7ç®öÕ û⬶CÂ=¾ª#Ã=Ö®Ûç+“fU]Zz‡{¼î2–máÔ†O-àã%æ";³‹^·…s-òFÏÌ”Œ„sÊÉžƒÐ½po§vš8¨'éž$Y}„G‡{\Aæ§#ÉJÙ î·±º?''ú8½œ,«:xC”ë˜Ø!Ëåt|[ö¬¾íP£G>V*›Ÿ`e¤óBÈ'Ć|,ô C™,+ƒ\vÀÇâ®ä®„#ì5üSÛ8ßܯªô}7:Šè¨ ïÈ>98¦ºéfÌœ»ˆ¦‘4”*ÀX$CuVôMÒ¬ xÙa &íÀïL•Ïñ%Ñ_å:ÏÕÜn${VUÛý›*.[$€c.>eèÇí›èYÊuj-ÃQª2z.å]¡ÙúÇhÆÚцùB…\Òjt;ï¯Q±Z¢æ ìpêh¸Td[«C€È„~݉¨!'j¯”œºD¾Xd&Äcâ ߯xf‚y¹V#Z{gé{Dfc{’9gôð.× isçñå¯Ïãá²WÞANG}uG<þñ]®ÖßP|Ö—Áí§v‹$ÞOƒ¶ñ&«M–à›âÚ;“–S½Ã?®ä¹¬WâáSe‰ýðÇwßü”ì¡!¬ÖýXI¬Ç'cîïîÏ9ôc®úü[j<ˆ1Èžms@úzÁ9ÛÆÖ™¬qˆK½ƒ?Va§ÅQ›`Åðøü±žW‘äQG\îå»BüØb¯Ÿ3G@óþ±–¼º0Ëæpæl£ wøÇ×–w6QøÇª™£‡ÑÉ…ã¼TæƒEë‰ÎþmðÇ[Þbßö3Qáïúqï®R±C?Þךé%¸Êôœ½Þ7+P„>šðø±^ýv‹_ž••ðÇwqõñêG'ž†‚?V]FΜûmñ¶ªk–íÐõáo¿Š<,mçs6î¸éœäàÛ5YŠÚÚQº/Ž””¯E•\ ¡wqÝfö¯4ßóíY!:bqå‹>~ 8tDU¤~Š;åKõL4G>ÿmð¡Rœ¼;*2üã©ÿø-³dñ23äuÕ_w›ñé|Ú¼°˜¨/›²á«®9¯l¡£ö¡øtD8ö¥EV&¤»1 ·£Â?Öǘ¾*t­y®íÄoiÕ×Q!舤è'bK¤+DÖÙÓšxýJ=DžD¬Š¾×+Nž§OR¹ŠÙZdX™l¾C@Öæ=_BJ=L¾Nø9•Éw=@`?ŒÈÔ&Ÿ¾ˆ©s?At -«•Û¦ëâØ9'ª-ñ9£8äýñ¯eòÑ{ñìܾf$ùl{ÍÿX%#£¾Épù¹ýøÇ*|Ç·‡¥Ó¶KAì@î*LÙ_c¿óݼZK»ßäv§õ8vúh™XÒ^ŸÞ :AlIž>õ Ï·rÜ£¿O•@Ù€|íº–ÙèeZÕwÜë¢k‹ðÍbê|*u1iPø9»~¹KnóvöC »v;ï‡Ê…cGƵ£Jc™ðÀ#õžþć/ÉùDè|õu:òýb‘ÏÊ}=ƺw°CBnŸ­ß€•¯( ä¢ ßµ†nåŒõ€(ˆìÊW[Bá <¶H.Ê2®$ d¤º»¢÷5}nTИգê 8€U“wJ±%긄Þw×hÞ„¬Â–~2¥¡ø->”ã¥ò~YåÝ€’w|$diF­"v}§@ùÀkr98yƒBÞ“}äÛ2i( ä—N»*P‰È «Nq YË—á‘’mÇÛ!+–µùRÉ*ß/ÇŽ* ºQò^p)"«C öcªÒŸEyŠEr3FÜMù”¨õ  _/8™åÌÍ~yåg2pRÒª8ùÁ›‹&ïýâ‘§ª íý ”‹¿ÃB¾Ó“óZÂB¾6± ÑíCÞus)ò®± !‹½ÅXX({ø,¡! ~ºýòX€Úx d–_ûÍ9Êá!7¹¬ÝwlaÝ”·B@²ø"nÖÂÍÛÞ Â<´ÂÆŽ–—Ùu^PhÈÊÊáñlëÈÏÏë´­#žÂ‡*ŠÛ^`è½,pÛI»_éN‡v†…|×Ϊ YÆß¥4‹r”‘Þ+*/›X¥ P°uÖ5±}夕ú ¹š‡dÑC]ä7rãB^¹¼B ý2À‰2ǯ#öDô+ñ»öœÏÀš¸~4ä®P4T,õÉ÷hí] oÑ^¨ÇCV˜ÜÌmb~Øã!™_håhø•Äò¹Ò­©O~p…?²6ðéœldÝÙþãþàîµ(à~¬j¯R™¹>ñÈßîù=Ñ&ßlù½Ûw‡4J{çKŽ*Û?{§E£¥xçÕ¬5SRcŒ†O@²ªîpýT÷9ýãõ;5÷Ã7QöŒ 7àô’ë±ã}ß*ç•(Ÿ…¼«ÞK8ª_p䬓N(+ݕ볓Ց=$ò}==ýKr¹Ca‘“¾­2 û!‘w!5ñ!‘EkÜ‘=oï¡"S¿ó´¨ÛÔïÜ#3|j7{ßî‘E«99›Ñ׳m<;Ú¶ÌÝÜ{÷®ŒBuš#IYª]ßÒIU+U*’”("«Èbvs oâ°o$òR‚*ÉŸ«ê‡úwisfHôl©¤GKžÂ5Ö|*¡:¢ãû ÆŽJ4‹D ,ƒaBE¾úѼP‘GœRçatŠ“íBE¾Cµ¹Ø:Êâ,ãÜÏ/öñø ùãÎY¡stXŒñ°ˆg`z3-LdEÞÐÄú,2XÂD."Í»˜ùÂûs#|(Š6²xПÍW©oÎm„§ `²ßCì-?çÕÝC"/c(BD®š¿ÙúʇÛ`N/¢ÏÛÃ*vÆ„‰¬½Àé»RÖªÉoñë2ÂDîã³9&r1ÒÞ"›Çûna"+>­ñ[2*ŽUr¨Èmi7Æ"#jl†{X×$¯>JXò]-n·j¼\åû†x6¯>Q:Ê”¶Hìc÷CET‚&¤£AŽl[½Cò¨È™ÎK/î*²¢ã"9N.°CEV9)UIÚÁ"+dñu¡pŸW£|™=w^êÕtúC°ÈSŽ\?ÛX"¡úyÙÆ*mò ˜:õðÔµR>€¯„¥³X䇊¬ø´î ÃÐsÑ:B9[d¿è8=XäÛbïT‹Ü…yóã/ÌzÕÖ³¾ˆ ¬.Ô¹D÷…‹¬ùí߯¯Ù'`d±ôò[vEÜù±uÙS#ÏѼ©0²ØY¼ý˜|ø¦ØÅê„?„Œ¬)†Kè…—Ï&–¾-‰W.˜`‘Õµ¢A-&ÍðäÂäp{¡.²ˆ¿Üv^Ýã"ßoõ‘_ÞûŽvµ²j_¤t&C#†ÎU7¼þtª¨Ȥ„ñîPa9Qçq‘ë:é¡”µê® ¿Y@ë™H°ÍðŠ™#¢'·#«VéÓ™ 0߬’¨do"Ê·jËåñÞïä|‘‚ÇÒ\âu¤ÏGEV½ÅÌ (ú93f_Trmï|¼uÝŒGE¾ßÊN÷bæ´/O²Wô·'^ç‹÷ Èe’‹ð ÈŠ1F1'íêZM ôW¾³×ãèü²ßñäk¾éx;ý3Q=§Î—É=`Íïc¥ñaåÜo£dîM¾t´N˜ÈÆÇDÃFÆmìõ1‘U´wÑ{l`ÅÅó˜È jh9>3 3#¤¶U¯ïò¸ÄjÁy¬@ÒççÑùäZ= ‘µS,‘}[õÕœ/ûWCVÅ Y1a>“@óÖ9FFÑ}!]’+Çü6Ôñï¾oì*´"òµïTö<"òµ~oOœ‘•f{¿øóˆÈM…Q-¢f]bù„ˆ,ÿrÓ ‹ïªI焈|…*·sBDÞª ÏQrŠä(u'8Jó.r|[Pͱ:'Dd™G'8äûš|‚C¾F–œ³'8d¥ l·ˆ¬«îÚ²vÐ+"Š¿©|ã ¹êNpÈW[LšÏî•LS7ŸHä£2§1¼š|Ž'8äk’ç¾ µå ù4ÓvŽqÈN˜:HDŸ89ㄆ¼®eu|Ÿ°¿›wOhÈ×Ìúr~N´Ñƒü(Ë ‘‰»ËÙsŒCVîC^!õŠOhÈWÕ*¿ø„†¡ÈR=¢TìÁO„‘sM+ÚL…rEásÔCj÷Î Ãs{ŽfŒ,Ы9 ÞSC‹DÉ›g‘9ò¤'mãœû±uNö Tr‹›áhä’ïge¥¸PtªgÈò]—iË섇,“”ï–Ü+M®n¢Má2"!1ÚV°ˆå\zçÎÜeáo¯~Œš@ïÌèŸfçJ(´òR°/³öŸ¹‰DU‘S'4d¥‘T·8NeœÛ¾Ñ¢ž—·m@u¤{£ÃÙ¶ºSîö{gÛê¾ZžÕöÍVd&¢GÔÕJ ] ?Ôî»zÉÇóެXu.K‹L ;A!kdF_}D\ÖÁkN8ò}!tqÊZÝ)õCUâȹJx óŽ\²ŠÈû“û ™œA¶®Ú[æù¡›¢Ó‘YýÔÃc&ù¶¢dTƒLdä,ÊzvgÐ̘¨Ü2ôúPÏ1o®1Ós9w]]#"N’y"ZAˆQEcÑîßÈŨø°_OcÛ|ד5q ¹œÛwù¡ÜZˆHÈ æÙi{@Èb3"{ y7õ<òUmßQÒ­îü‡~´Q`4iL›áPäó8È];ˆÍÙqª`tyŠhÆÍ©öPwOµÍ™È8Hî:-W÷îK±Ù{yÊßEëXÖj­9SãÇgô‘í{=ƒÜ”&Ùý¬´/õ~ì‘ÈŠþp7› Eivçaoס€6¹ŽõËQ¢«®‡&³§{ïÃÊ‹f•Áp²µ·éhÒ®ô-î[7xâEU Í YýÑŠÖVZ÷ dƒEE*-nÝøÌ‰¬?”¨G–ò¯QfìXésÈž­ïVLÕy(ä1\é<²<‘_~€çr~=2ġݩ#–ê|w Gt”wú´‹Er~,äÓ&º9˜sÒ ô:‘I0ÿäX<…¬læ(ot½¶AsœUGë™Uâ®ô™%Z-5÷'y¦µ„"ß‹o\9ˈõóXÈw”O&;VÛÅäÏc!_Ý´¾\ÝdaÛÙzïr Ÿ YÛç‘“¢¹ÞõíhæÝŸ‡CVÙ[>¥ä—ßQ‘ ­qI”¨°Wö¡,-* 3è“^NM”ó£!«,xäÄÉÑy~8dùvÙ°jJC¶%ÛÎk_™ ölX­ÚòúñåÜ%fº(ÍþµžëË=ÞL²Ô2|˜»òâuÄ™£àtË8sºbþxÈ*À¤Î„‡,Öº^•Û§ñ:È*omòÅbßhëŸÄžÙ\¹Èeî³K¥B@œìÏîªtkÌm dkƒíõú‚,GtN·wI¤I”yVwÉù¡ý¡ ­JìqS}7d6‹{‹Šþ@û˜³qY‰7ù}ÁS27*/ŽøoÜ-îù/W/IO¨ÑÓYÄî½#Ø(X ›­ܼ°´ÞãÍ”¯Ž^ǬQèGQíª…M[bÖÌÚr\cLŸWO~³œLF5û´ü:&m8G?–k>ýLN3÷ÿ<ú±PÎy4–³.»Éìæ±6kù"û›l[œ‘óèÇ÷sˆ:J†•y¶ÈÄʱ}ôca+]Ýf†I&SB”2zûx ˆ“ÃxIŠrìcu† ç¡õ–ÏfÚPå®ùØŠ4L@}*‘“vRbt²¿\ ä<òñ=½¼ß[åëc¢qÄ਀i¦~6¡w ßùAñ òñj*],ÉãMtC þÖò¢òq½sîôÏi¥q,»ÈöqA>ÖîWñ%ÙØv8Ò ùXY1˧táa‹ìº8×ë´WßaMóAWQˆñt¹fÈ úxª˜0Gá¿ /EÃ>VnçÊÉö¢7ìcU:ãÁ!F µm‰¤íå­„µ)®ÕOÈÇ×zÔÆè ùx«ô¿eÏ8Çö±ÈÇ<=†¼‚Txh²fÓ$ôã»VöNQèÇ«;+â„~<Œ¼³Ø¢>_¹áPUˆý ü¸‹pÇ…iTˆý~ÜÛ—Çmɺ÷ ø±b}*×JzÕQó ýXp6ÚÌ@ŸÞ ýX!‘䜑u¨4£11ÛïÔ°! GE],%\¼æ6Þ ºÏȉ÷ü±ƒE¸:¦¸å'øã¶ð÷\„#õ° (W‰{y.¡Å•EwÕÒ>´E¶ÍLÀ;Á«Ü{±H*ùtJì ÿø胈©Üså[ëý¯îöNXøÇÚŸcáÁÙ%éìmµ—\…"øãÛs…ïüñpœÉyøãk³} ñ®Ò 7ýl<î"Þ¿ØÕ~;T‡—½ ^lïšüYFE°mV•y}Â?V²`Geçr'ücïs“;»;W(wy‘Ç'¹ªìü” qLÞÁÆ-è"s'ðã6¥¬¸0àw¾0»o®=‰j:LÔ§ñ´‡’~:ƒ ÿM÷äøñUzupКªšÊq?¾Kã+¡8¹”7¢¿¿s?1Úœ2›åø£Où‘ÐlÐ?™œÈðª†òΣ¯šž°«@9rà€ïêĘ÷züø®´Tõí<øñ5Æ2¼’\Õ˜‚ì­½Z¼=ñàÇG Žg»xdZÁÂQœ[áiI*YŽê9~,_Mž† „oÏJûÐóGT0dkŠnÐÙyøc!5hnð¯çÍ! 6þ2Ô^+EÓ"Ç[¸Þ|…áÚ×Èåyµ®Úx~ôãâhÁóèÇWÉ >¿äVV\~܈P=~¬yüìU)" 9íS¼íyôãÒߌ•£Ðç–¹?Xص6 âÎr>SgüœþXÕ깡տv:òèÿ㢠çñï²v` $çN³L)ò RGd|‡…ù1d@m{FvÿÉU—ÓmÁš!|ÚÏÒQíxË#©_„ÐÀ?nÝ_øc¹µŽ¥Æ°÷Þ5øã6m0?]ÁC’HÚžß~|¿ëfŒ™Aúqí^³~ÜUq[$á^[Üí¾×þ©™ZnË~ã°›øžÕ"vŽƒqOàÇ÷ Í΃NàÇ÷¦ ±>oÀù'ðãîšÄÝ?»y)ôcíºre­BÔ,&"»saê’ šîV0îï²eò[RMäß°èy²:ëã<òú:o M‹Kñ·) ë„€¬mo^Mòª¦ ë ¯Q/êÒ ¹*7ÚÏÓ’„œÛ°Š¼«|7¢Áëˆë* d—í¾2;Uš¿|©˜9-A Îv€BÞB5Â@¾†Yã—vîN>°ÛÇi"VÎÜÄb ‹¾ÀÌÙì5¬NùóŒ²*yz©²TcŒ,òlÙ\åõã’EÞêÈoaCUºŠ`cŤs.~‰ao}ÈÚâ¢3RÎÊeOÈ]3?ÂÌ&±¢mOÈZ/?QÊYU:™jVû³Iòµ½}²èOŒ)ªYµ|¤hÑ>õ„ᬯ1hpßÜy´ú—9ÕÁ! +ùƒAƒûæêz‚@ãkÞÓÂí´ùœ ßIŸ&-âͧ²xs|0±p¾½ýp1qÊáí@@Vq~ˆK¥‰øo¾3øÖðßì^y›8I<áÕ äJÎÅþœð›èû¾”Mœ­xu‘] ³¶˜8ÏMýx0)â„|ç§Ïo …U[•Ð*ïŽRT‚?áß×>hE,œæ ‰óøÇJ‰¶L}GkýðÇwZ9œüâ52st;¼ˆ¸p–2r1êGûP™!2<ò5®•Ðtùê…–9†4%9主í~;¹>&ŽpÄ9Ÿ)°ØõøÇ‹êîçñ¯‚Qðxqò{ŽŠíÍqRnÌP=Ü?‡úžÇ?ööÛàÙŸ¯9ûS¡äd«Î–÷Q“Ä‘ç%ç.Ãßéì>*ŸyGÅåyŸº·GßßöD´ýº…Gf_43InÈÛ!¿d‹LÀÅó<ø±*²—ü>o·2âËÁzcùÁÍçz¸íå=äéÈ3Q~-í´ÌÍ,q…)âö¬qËßéx¥Gf™„ãœqjdüL_ŒT%Ÿ§|9Žýºò±}¬ ‚Û U2Kºô±ªÝW u*°²$uæ/Ñ+àcyª/÷’Ç/äcmånK;ï¶Yú…(ßœ9rÙ]òñ–m<,2so(OÈÇõZ8£|D)—Nåà·p«I?Üã% ÏLBNõVJ¸Çm9ø&Øã­ð'_û¾bµ{¼T±Ë ‡²'Øã«mÂÄY;ú`×´Ÿ`¤ÀÃgó'Ð㫟Øî õøÚNö™„z|—X_ÞŒ‡ÔQòÊyÌã¡|‹Ø‚ŸÊÞŸ0ÏUýÅ&gy»$ÌcFn?Ƽ6h8Šî/þTÂ9ZMq#9’ša#G÷µMªÎƒlfçJŸ°‚åþÏ&Õœ¨9 ûà.Ä}žJ Aä(P‘ooŒÍÉB¬x­õc«9Ú'ÎTV6²_Ÿbx2þÁ^£!ñâ$ÚzZtk9× Yù9Ø1ñ˜Yˆ YÞOyìc…¡gR Ý>}¸½8ÈDFÜæælúNåãÈôÎÁCk¶|2>œ=šxcõ&­!¡¶hÖä‹+£œë¿ V#­…3 Ã;}¬Ø½Œxï—íÁ‡>Ë•ÏC«L*sôÛ«Z¿‰’ÜÞyYD‹7Åõ©Ò|T?#`FZù~°qŠ=9N|Õùò€,qkýÒA=›CmŠs_çJ°_uûiÇ`«¯öŒÖ”úiþ(aKSk²}\fxIž$úL·ë?~`aÓ,awû½`_‹×›—3媷÷§³©>qYOÈÇ *ÕR$äcmiNÿg¦Bp8™¡V¸#ah«ª’Ø ù¸* —Ka§nG Ì? üAßó.e'°Â)4çÌdS´òñµh?ú#§9‘òÌgä8Cù„|ìŽnFª\ æ„||?ì’Ky¿j.o„|Ü]„û|ìŠïnÄï;h™/Ÿêsí|VNQ…òñµá•ßB>ÞÒ/î*öf¯…T}#ò©D:å(¦—]œßÛ(Mô<ðqqVè ùXîÈéV„3V¡/pãtVŠ!ßQê gV©3ùT]H·3_Î]²r7´‹œp5‚sÛ :o„˜ú½÷ÁÈ‘G”£d.ÍHÀ£å©oDθBO|£îZŒ)Ò©¾Úx¤S‰°èVP¬SÉe\˜t*GÉ…{ܶâÜ,ÚÆ^<{|Í¿ÁxK2Õ(|Ÿ“åâ÷ø„{|›;'3¢æ g&ësèFLœs• 7"'ç4F ÉTÃx°Ç2Ã>¿ødS/«ƒ=ÞÚ†õ‹·ó©J.Eâ™#PÃ=¾“[åû'›ªiÐ"ÁAeGÄîúømà¸ô·[¼ƒ!°çiþ²©jDVÖÎíôx*-Ðï#ÙTZ8[Œg~å§äi4' z,ø9¯`VÒ6oš|ªk? ?ÏaÅ_w¥oËñ,ºU§©Œú õxê;F$úÀ©¶'Ôã-æ%¿%/¨3†H©ÃÃO” kÒŒTx¸ö- VŽJWF·â_Úч<î^F!;’ê*ðƒ8øÒ=¯>â±Öé'—CYÍmÌV•€Æ9ÓŒšG<v²E·Ã;…×ó8€E™óçû53ßùàöÇ JJÕµá*<VI{Rõ힣6ÁîӔܡ_kdê÷\³„É,9Um8µm¾ú½ÙÜÄc©˜•ß³pìïéÉ©r&Âü³qJÚJº¸’¨r·Dãx›îñŽ }ü¾åÍv>‘äT ÄÅ\—ò˜Ÿù’ªFÏ«$©ê~$yÓ0q¨Pvïøšsíýœ`¡yJ.OR• È侬×|Lœ²øÚŸgG¹aà”5Ó•ÔèTy5ZCøåÉ矌ªvZ†).œ1[Æ º¿•–¾éñ0e2KFÕ·ÑöåÕõQªûy¬ãéQXÇ}jLJ‚6±ˆ ëXÕj¤ aϪ9S.­~`bðe ½Lï>;V¤½p`dz—RåÉ&¬ã^ðÙ„uÜÅØG´‘¼¯Ôñ]ÞØ¤ ëXi\zculDï êø~¯*¨}‚:žý«!Š’Jg="Nw$HPÇ @ö}~Œ„Á¹°Œp-u|§­Ù¹Ov޽è}¨cŒù·8-ïK£ŸpáȸD„>3l‡u|§ìÁ}©ëðÔqù¼Òq+Ý«Ž›@è‹Po€q^T¦â„t|;‚Ža‹j+SÇ¢µ×:¼ôž oÛ‡s|§èéöe‹ê~ôîˆN.Ü·m=ÎñUë ØìQ&Ðñ]GÚÕÐqkÜf$Ô¬}þ¥-e¯Ñü‘u™½bÁ‹¦ÏÙ¹Þƒ4p•˜&}Â9Vˆº½Þ_û9Ï0{AŸ¥š14cI~û’© w¼ú“‰—Ø6ã:þ¦‚ÏýüìRµm'THÇ÷LÆòZ2Å.•²øNq,5g€‡t¬jºÛ7N2U·³r½Zä£ðY@Äùjá§°C5òç„t\Î÷B6…jîKÄT³ÞFUCb£êöTA Áþô€Ž‡bÔü@qâ+£áJY‡»JÉ•­ÕUOK¡7Ûæù6CpÓ€ŽU…=u’cY¹ïI>£7s:VÆ/ßßy~]ÞïIÜYGÇÚÀéÆÕž€Ž«œæîR©Åoɯメs3Ö¿(À½9£ó>6OwÎÝè98JµÊïQéë9ŸŒ¸é}ò:Ö†|El|'Ž™ë¹yÊRÈV¤rñrå.ö9×C»«n÷KÆ,«ÛG:VÍ(./ŽbÈažÕ’Ë‘3¾í{¤ce•샜‰çi}ô¼‚58?Ç»dˆ¦ß]þ8mðɉÓÙy ãûa è¸Í/ß^˜8ªa•ëñn•£ƒLª£j›æ‚Œ¹ž 7;Uw霠õµOƒQûÊ”¡-.Íýå¸ßï±£éŽow®Ì˜8rfz“äEåf¤Qµ–§e£êêÆÅYÚª¼WÇÈÙ;Ó|"qD¬ËñDâĶHÔqU,2Eï|ö• x?ëgæ|_Þf*XÕ“·ý VÈÛÅ‹£½{þú¯ŠŠ} OÕЬ’ˆ:žèƒr,Ž~ñ™ U>|@9bB5IlŒÀ¾“9^g·4>9Ë÷3sœßʱà‚>“ ãþ c|9VLÏvkàBÝu×àä8Z½lä¸ÞöL޲SÕKîc;Ghm®Lи9±'”ã«<>.õ+h2üÛŠ)8=¿=ÌñÕÇσ“íõP޵Õ×|ßr0 ‹ìèíÅaÚß~jˆ|”ÛV¡×J|(ÇW½܈hÕúòˆÆÙDå†r<=ÊoÑf¤,sܶ‹EžýÂq–SB9¾ÓÓ‘.åXŽ ž¨GS8@*”ãk57ªÇ;áìß@ŽkÿÒSqVçsì_ÚxÉ•°¾¾/Cdöé ýЧòv;!Bª¢î‘‰v0bë„r¬ýÌå×9XŸ}•wg§'ìgììÁKû>B(Ç×8óY(ÇU¿Ý|±#ØÚ™”ñåò‹g?CGæ5ړܳ٣æˆÈ™æ_Ÿ9–ß›v%$§–ÃNƸb®:2ûA³”È8 ]’à쟡CŒãc_ Û1Ñq<7αÇ8^®úqâø~§)yˆãex+2þXyœ:}æqQòwEtrœïqýnGT¯kóœ‡8ÖfW¦ J:œÁÀŠÓj¾Ð—³syâq–ÊM#›z:/;ç;wáºó˜Õ”þóÇ]85Úƒ7§ÿöC—/Scr«¾ïËëÃÎÑÒ‹ß’#à ‘¥d«#§¿´€Ìì¬o¯ÕY2b‡Õ™îI¾É®¨$,»tžÌƒ)è q~ïæ©P%çwœM_>ò r®:äûJÂxÛß٣Ç#\AjÚƒ¥sU^?¾üuUf~ëõäÓCGõ)r=ïÆl-˜ip º âr|ϵÙyR¾Ên: Çb}7"uˆ]Q Çr†JMœ”#—wBóÒr=ŒcÑå)†q¼Zç;$ðøsúcÇCæ¾cIˆ¯»a×uúâ¨tþñM5ó[bpåDÞW®ÄŽÇqf Ç×®ö&@ Çb^Ÿì ÈWäû°][U Ø"›zn[$œv©(Ñ äXf¨1 ó¹SŒ¼x…Èñ]{§1c=nu«’`õy/%”cukóÉlÓ~P$B9."_ó"“EáPãpŽÅúÚn3Lo%!¸UT0éà ûÇ9¾¦)ƒ­S£zœãQè*LÏDO0Ç× RÍ÷̱fqGv¢:F¥op\ç.„r,Â'O˦lgW<”ã*ë1 ÑN|åXþù(~6+Êñ]©nkSGÀÉÊ0Jä1Áá÷îÒ'œc9xc#ù´•áK`Îm#cn0¬Ä&ñ7Œ`ÒqD‹2â y¬º5îôùbìGYš)cÇ">èç%X•+/^BõH˜X…ÛÞ“9>-ïz‘Ão^õ*×`:¡kA‰HTΗK­L“N¦ åx\Íq¸áìs2>±u®:Ü—Çê9-”cù°èVò«Vúͦη="-{úí<§N³Sç¼èc¹,¦UtÜfjl^Sr¬ÈWšl[çöùüüôæÈdö• š=Ûæ4¶Ç9–+—!>^¡·ºó:›Ó CîÐ*RÜC9vÉ?ß!ÃÊÅ!N0Çwõɧ›ÐœÛk#BØfT¦m§Š mõ™ßC”8ëËqÈ[¹ž7Ô>×ñ=s¬-ö¯!¿X´–ã8¢ÏÇÛxå«JËñPìó…<`Y¼­øtîéƒËc븺Äy˜c0´Èvþ*l®å|b ·ƒçø®êC)ÑÇ×4ÊœA‚Õ]CœL8 áÔý<α¶8r=´ýµ!Š;ÊÁKw²¶;½W¯Š’N‚•V‘ݼd7?αònø:“`uWÊOƽ‰ûïqŽïRk´•’-ܵùø|ÕuÉØc(&5=бŠ'gJ¥šµ³Ï+Hdä†$йjÒy¤cE-æqë+ë³wu†wkéXð‰ÅõBÇYL5‰?Þµ™á=3)X)?'2¿ª^Ây¤ãûÅæm&:s9”玻àÂûŸ¾[EuM-zCwÜåæ²è-yñú8™M‡ª'“HƒˆØm$ÞõÊ5"%²’sŒ‘D6š½c$јìñ;êÝŽ½ªËÙ-UŒ¢eV㪠‚ŒâmRZf‹ÆA–ï>¿·…Ýå›±Hr¹s[-ÇÀVǃ«)9CV«aËÌ[Uûô–½us_íJç'ã\s(2ÎWœñ¸!L.ÉZ“unÑ«§æR¼–Yßi…Û÷„a ;d™Ì'oÉX£°%‹þ^]çèVËD"~-PWò2Ž»VäflyµOKËlâº#ãòN”å‘ùsä|÷Ø¥Ü?摪ï!ýTaaÙO¡ù¨lxwm­#“¥µ2FÒV™f˼ÚùÞ•;¥ä+¢ìÕ0nÛ2Ûôë}E3 ²••-™ 1¿½?àO<ªNE’-'õOÑf– aVò2ž=WY±L¬ædÜ Zè!Ó}<ÝÉDV2ñõ‘rÈàj_>zÛPEáV‘Qy&XYNÌ|ÏÈÏæØwuøÌ€¢TEaðŸ“9ù„Ùú»Aáõ§WcLÍ×G "Ù‰?°Õyê¯ì ¯™†§pÄ5dž®/ùHjÆEüG{hÉÉÜ•µ÷ß¡r—5ùiIλå„Q]S#ŸDnÈû·_†;(–pËÂÀáYŒéÚŸüWR²@z ðäÄ4îwÍ$¹ÔïÝ5Î$-¸ó‡™qø;æÙor Xÿªðw)^Cž¦×8 2 ±šæ1ç{ăjåý3¦}3ÝǬ"Üûá_sžwMâ9‡Íت²uøýiœ>³¾k×Zš9ƒÑ;|Þ]zLšï½hRa®…sÞOp»Îß³Q.ô쯾»€FSA€üáùÞK Á§ÎLða^Mù:Ó7®]ûPX[vVol-1.5.4/Vol/examples/VolUfl/ufl.hpp0000644000175000017500000000630011511202647016375 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef __UFL_HPP__ #define __UFL_HPP__ #include #include #include #include #include "VolVolume.hpp" // parameters controlled by the user class UFL_parms { public: std::string fdata; // file with the data std::string dualfile; // file with an initial dual solution std::string dual_savefile; // file to save final dual solution std::string int_savefile; // file to save primal integer solution int h_iter; // number of times that the primal heuristic will be run // after termination of the volume algorithm UFL_parms(const char* filename); ~UFL_parms() {} }; class UFL : public VOL_user_hooks { public: // for all hooks: return value of -1 means that volume should quit // compute reduced costs int compute_rc(const VOL_dvector& u, VOL_dvector& rc); // solve relaxed problem int solve_subproblem(const VOL_dvector& u, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector&v, double& pcost); // primal heuristic // return DBL_MAX in heur_val if feas sol wasn't/was found int heuristics(const VOL_problem& p, const VOL_dvector& x, double& heur_val); // original data for uncapacitated facility location public: VOL_dvector fcost; // cost for opening facilities VOL_dvector dist; // cost for connecting a customer to a facility VOL_dvector fix; // vector saying if some variables should be fixed // if fix=-1 nothing is fixed int ncust, nloc; // number of customers, number of locations VOL_ivector ix; // best integer feasible solution so far double icost; // value of best integer feasible solution public: UFL() : icost(DBL_MAX) {} virtual ~UFL() {} }; //############################################################################# //######## Member functions ######################################### //############################################################################# //****** UFL_parms // reading parameters specific to facility location UFL_parms::UFL_parms(const char *filename) : fdata(""), h_iter(10) { char s[500]; FILE * file = fopen(filename, "r"); if (!file) { printf("Failure to open ufl datafile: %s\n ", filename); abort(); } while (fgets(s, 500, file)) { const int len = strlen(s) - 1; if (s[len] == '\n') s[len] = 0; std::string ss; ss = s; if (ss.find("fdata") == 0) { int j = ss.find("="); int j1 = ss.length() - j + 1; fdata = ss.substr(j+1, j1); } else if (ss.find("dualfile") == 0) { int j = ss.find("="); int j1 = ss.length() - j + 1; dualfile = ss.substr(j+1, j1); } else if (ss.find("dual_savefile") == 0) { int j = ss.find("="); int j1 = ss.length() - j + 1; dual_savefile = ss.substr(j+1, j1); } else if (ss.find("int_savefile") == 0) { int j = ss.find("="); int j1 = ss.length() - j + 1; int_savefile = ss.substr(j+1, j1); } else if (ss.find("h_iter") == 0) { int i = ss.find("="); h_iter = atoi(&s[i+1]); } } fclose(file); } #endif Vol-1.5.4/Vol/examples/VolUfl/Makefile.in0000644000175000017500000000612111576071355017157 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # $Id: Makefile.in 726 2006-04-17 04:16:00Z andreasw $ ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGEME entries below. # ########################################################################## # In this case we define DRIVER to be the name of the executable and filename # without extension DRIVER = ufl # CHANGEME: This should be the name of your executable EXE = $(DRIVER)@EXEEXT@ # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = $(DRIVER).@OBJEXT@ # CHANGEME: Additional libraries ADDLIBS = # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = # CHANGEME: Directory to the sources for the (example) problem definition # files SRCDIR = @srcdir@ VPATH = @srcdir@ ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile the # # package. # ########################################################################## COIN_HAS_PKGCONFIG = @COIN_HAS_PKGCONFIG_TRUE@TRUE COIN_CXX_IS_CL = @COIN_CXX_IS_CL_TRUE@TRUE # The following is necessary under cygwin, if native compilers are used CYGPATH_W = @CYGPATH_W@ # C++ Compiler command CXX = @CXX@ # C++ Compiler options CXXFLAGS = @CXXFLAGS@ # additional C++ Compiler options for linking CXXLINKFLAGS = @RPATH_FLAGS@ # Include directories (we use the CYGPATH_W variables to allow compilation with Windows compilers) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) INCL = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --cflags vol` else INCL = @VOLLIB_CFLAGS_INSTALLED@ endif INCL += $(ADDINCFLAGS) # Linker flags ifeq ($(COIN_HAS_PKGCONFIG), TRUE) LIBS = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --libs vol` else ifeq ($(COIN_CXX_IS_CL), TRUE) LIBS = -link -libpath:`$(CYGPATH_W) @abs_lib_dir@` libVol.lib @VOLLIB_LIBS_INSTALLED@ else LIBS = -L@abs_lib_dir@ -lVol @VOLLIB_LIBS_INSTALLED@ endif endif all: data $(EXE) .SUFFIXES: .cpp .c .o .obj $(EXE): $(OBJS) bla=;\ for file in $(OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \ $(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla $(LIBS) $(ADDLIBS) clean: rm -rf $(EXE) $(OBJS) data data: data.gz gzip -d -c $@.gz > $@ .cpp.o: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .cpp.obj: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` .c.o: $(CC) $(CFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .c.obj: $(CC) $(CFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` Vol-1.5.4/Vol/examples/VolUfl/INSTALL0000644000175000017500000000133310611730055016127 0ustar sudipsudipThe ufl example shows how to use the Volume Algorithm to find very good solutions for the uncapacitated facility location problem. For further details read the postscript documentatation in the doc subdirectory. Prerequisites for installation: - make - must use gnu make. To run ufl: - edit ufl.par (the file 'data' contains a sample problem) - type ufl Documentation on the ufl code can be found in the doc subdirectory. ufldoc.tex is a latex2e file, from which a postscript file can be created by running the following commands: latex ufldoc bibtex ufldoc latex ufldoc latex ufldoc dvips -o ufldoc.ps ufldoc However, this is unnecessary, as the ufldoc.ps file is provided at the same place... Vol-1.5.4/Vol/examples/VolUfl/ufl.cpp0000644000175000017500000002264711511202647016404 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). // This is an implementation of the Volume algorithm for uncapacitated // facility location problems. See the references // F. Barahona, R. Anbil, "The Volume algorithm: producing primal solutions // with a subgradient method," IBM report RC 21103, 1998. // F. Barahona, F. Chudak, "Solving large scale uncapacitated facility // location problems," IBM report RC 21515, 1999. //#include #include #include #include #include #include #ifndef WIN32 #include #endif #include "ufl.hpp" void UFL_read_data(const char* fname, UFL& data); int main(int argc, char* argv[]) { // read in problem specific parameters and initialize data structures UFL_parms ufl_par("ufl.par"); UFL ufl_data; // read data UFL_read_data(ufl_par.fdata.c_str(), ufl_data); // create the VOL_problem from the parameter file VOL_problem volp("ufl.par"); volp.psize = ufl_data.nloc + ufl_data.nloc*ufl_data.ncust; volp.dsize = ufl_data.ncust; bool ifdual = false; if (ufl_par.dualfile.length() > 0) { // read dual solution ifdual = true; VOL_dvector& dinit = volp.dsol; dinit.allocate(volp.dsize); // read from file FILE * file = fopen(ufl_par.dualfile.c_str(), "r"); if (!file) { printf("Failure to open file: %s\n ", ufl_par.dualfile.c_str()); abort(); } const int dsize = volp.dsize; int idummy; for (int i = 0; i < dsize; ++i) { fscanf(file, "%i%lf", &idummy, &dinit[i]); } fclose(file); } #if 0 // This would be the right place to set bounds on the dual variables // For UFL all the relaxed constraints are equalities, so the bounds are // -/+inf, which happens to be the Volume default, so we don't have to do // anything. // Otherwise the code to change the bounds would look something like this: // first the lower bounds to -inf, upper bounds to inf volp.dual_lb.allocate(volp.dsize); volp.dual_lb = -1e31; volp.dual_ub.allocate(volp.dsize); volp.dual_ub = 1e31; // now go through the relaxed constraints and change the lb of the ax >= b // constrains to 0, and change the ub of the ax <= b constrains to 0. for (i = 0; i < volp.dsize; ++i) { if ("constraint i is '<=' ") { volp.dual_ub[i] = 0; } if ("constraint i is '>=' ") { volp.dual_lb[i] = 0; } } #endif #ifndef WIN32 // start time measurement double t0; struct tms timearr; clock_t tres; tres = times(&timearr); t0 = timearr.tms_utime; #endif // invoke volume algorithm if (volp.solve(ufl_data, ifdual) < 0) { printf("solve failed...\n"); } else { // recompute the violation const int n = ufl_data.nloc; const int m = ufl_data.ncust; VOL_dvector v(volp.dsize); const VOL_dvector& psol = volp.psol; v = 1; int i,j,k=n; for (j = 0; j < n; ++j){ for (i = 0; i < m; ++i) { v[i] -= psol[k]; ++k; } } double vc = 0.0; for (i = 0; i < m; ++i) // MS Visual C++ has difficulty compiling // vc += std::abs(v[i]); // so just use standard fabs. vc += fabs(v[i]); vc /= m; printf(" Average violation of final solution: %f\n", vc); if (ufl_par.dual_savefile.length() > 0) { // save dual solution FILE* file = fopen(ufl_par.dual_savefile.c_str(), "w"); const VOL_dvector& u = volp.dsol; int n = u.size(); int i; for (i = 0; i < n; ++i) { fprintf(file, "%8i %f\n", i+1, u[i]); } fclose(file); } // run a couple more heuristics double heur_val; for (i = 0; i < ufl_par.h_iter; ++i) { heur_val = DBL_MAX; ufl_data.heuristics(volp, psol, heur_val); } // save integer solution if (ufl_par.int_savefile.length() > 0) { FILE* file = fopen(ufl_par.int_savefile.c_str(), "w"); const VOL_ivector& x = ufl_data.ix; const int n = ufl_data.nloc; const int m = ufl_data.ncust; int i,j,k=n; fprintf(file, "Open locations\n"); for (i = 0; i < n; ++i) { if ( x[i]==1 ) fprintf(file, "%8i\n", i+1); } fprintf(file, "Assignment of customers\n"); for (i = 0; i < n; ++i) { for (j = 0; j < m; ++j) { if ( x[k]==1 ) fprintf(file, "customer %i location %i\n", j+1, i+1); ++k; } } fclose(file); } } printf(" Best integer solution value: %f\n", ufl_data.icost); printf(" Lower bound: %f\n", volp.value); #ifndef WIN32 // end time measurement tres = times(&timearr); double t = (timearr.tms_utime-t0)/100.; printf(" Total Time: %f secs\n", t); #endif return 0; } //############################################################################ // void UFL_read_data(const char* fname, UFL& data) { FILE * file = fopen(fname, "r"); if (!file) { printf("Failure to open ufl datafile: %s\n ", fname); abort(); } VOL_dvector& fcost = data.fcost; VOL_dvector& dist = data.dist; int& nloc = data.nloc; int& ncust = data.ncust; int len; #if 1 char s[500]; fgets(s, 500, file); len = strlen(s) - 1; if (s[len] == '\n') s[len] = 0; // read number of locations and number of customers sscanf(s,"%d%d",&nloc,&ncust); fcost.allocate(nloc); dist.allocate(nloc*ncust); double cost; int i,j,k; // read location costs for (i = 0; i < nloc; ++i) { fgets(s, 500, file); len = strlen(s) - 1; if (s[len] == '\n') s[len] = 0; sscanf(s,"%lf",&cost); fcost[i]=cost; } dist=1.e7; while(fgets(s, 500, file)){ len = strlen(s) - 1; if (s[len] == '\n') s[len] = 0; // read cost of serving a customer from a partucular location k=sscanf(s,"%d%d%lf",&i,&j,&cost); if(k!=3) break; if(i==-1)break; dist[(i-1)*ncust + j-1]=cost; } #else fscanf(file, "%i%i", &ncust, &nloc); fcost.allocate(nloc); dist.allocate(nloc*ncust); int i,j; for ( j=0; j= 0. ) xi=0; else xi=1; sol[i]=xi; value+=(fcost[i]+sum)*xi; for ( j=0; j < ncust; ++j ) { if ( rdist[k1] < 0. ) sol[nloc+k1]=xi; else sol[nloc+k1]=0; ++k1; } } lcost += value; pcost = 0.0; x = 0.0; for (i = 0; i < nloc; ++i) { pcost += fcost[i] * sol[i]; x[i] = sol[i]; } k = 0; for ( i=0; i < nloc; i++){ for ( j=0; j < ncust; j++){ x[nloc+k]=sol[nloc+k]; pcost+= dist[k]*sol[nloc+k]; v[j]-=sol[nloc+k]; ++k; } } return 0; } // IN: fractional primal solution (x), // best feasible soln value so far (icost) // OUT: integral primal solution (ix) if better than best so far // and primal value (icost) // returns -1 if Volume should stop, 0/1 if feasible solution wasn't/was // found. // We use randomized rounding. We look at x[i] as the probability // of opening facility i. int UFL::heuristics(const VOL_problem& p, const VOL_dvector& x, double& new_icost) { VOL_ivector nsol(nloc + nloc*ncust); nsol=0; int i,j; double r,value=0; for ( i=0; i < nloc; ++i){ // open or close facilities #ifndef WIN32 r=drand48(); #else r=rand(); #endif if (r < x[i]) nsol[i]=1; else nsol[i]=0; value+=fcost[i]*nsol[i]; } double xmin; int imin; for ( j=0; j < ncust; ++j){ // assign customers to locations xmin=1.e31; imin=-1; for ( i=0; i < nloc; ++i){ if ( nsol[i]==0 ) continue; if ( dist[i*ncust+j] < xmin ){ xmin=dist[i*ncust+j]; imin=i; } } value+=xmin; if ( imin >=0 ) nsol[nloc+imin*ncust+j]=1; } new_icost = value; if (value < icost) { icost = value; ix = nsol; } printf("int sol %f\n", new_icost); return 0; } Vol-1.5.4/Vol/examples/VolUfl/ufl.par0000644000175000017500000000056710435426173016407 0ustar sudipsudipfdata=data *fdata=data *dualfile=dual.txt *dual_savefile=dual.txt *int_savefile=int_sol.txt h_iter=100 ifdual=0 printflag=3 printinvl=5 heurinvl=10 greentestinvl=1 yellowtestinvl=4 redtestinvl=10 lambdainit=0.1 alphainit=0.1 alphamin=0.0001 alphafactor=0.5 alphaint=50 maxsgriters=2000 primal_abs_precision=0.02 gap_abs_precision=0. gap_rel_precision=0.01 granularity=0. Vol-1.5.4/Vol/src/0000755000175000017500000000000013434204224012640 5ustar sudipsudipVol-1.5.4/Vol/src/VolVolume.cpp0000644000175000017500000004327211511202647015305 0ustar sudipsudip// $Id: VolVolume.cpp 281 2011-01-05 23:58:31Z lou $ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include #include "VolVolume.hpp" //############################################################################# /// Usage: v=w; where w is a VOL_dvector VOL_dvector& VOL_dvector::operator=(const VOL_dvector& w) { if (this == &w) return *this; delete[] v; const int wsz = w.size(); if (wsz == 0) { v = 0; sz = 0; } else { v = new double[sz = wsz]; for (int i = sz - 1; i >= 0; --i) v[i] = w[i]; } return *this; } /// Usage v=w; where w is a double. It copies w in every entry of v VOL_dvector& VOL_dvector::operator=(const double w) { for (int i = sz - 1; i >= 0; --i) v[i] = w; return *this; } //############################################################################# /// Usage: v=w; where w is a VOL_ivector VOL_ivector& VOL_ivector::operator=(const VOL_ivector& w) { if (this == &w) return *this; delete[] v; const int wsz = w.size(); if (wsz == 0) { v = 0; sz = 0; } else { v = new int[sz = wsz]; for (int i = sz - 1; i >= 0; --i) v[i] = w[i]; } return *this; } /// Usage v=w; where w is an int. It copies w in every entry of v VOL_ivector& VOL_ivector::operator=(const int w) { for (int i = sz - 1; i >= 0; --i) v[i] = w; return *this; } //############################################################################ /// find maximum absolute value of the primal violations void VOL_primal::find_max_viol(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub) { const int nc = v.size(); viol = 0; for ( int i = 0; i < nc; ++i ) { if ( (v[i] > 0.0 && dual_ub[i] != 0.0) || (v[i] < 0.0 && dual_lb[i] != 0.0) ) viol = VolMax(viol, VolAbs(v[i])); } } //############################################################################ /// Dual step. It takes a step in the direction v // lcost is a member of VOL_dual void VOL_dual::step(const double target, const double lambda, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v) { const int nc = u.size(); int i; double viol = 0.0; for (i = 0; i < nc; ++i) { if (( v[i] > 0.0 && u[i] < dual_ub[i] ) || ( v[i] < 0.0 && u[i] > dual_lb[i] )) { viol += v[i] * v[i]; } } const double stp = viol == 0.0 ? 0.0 : (target - lcost) / viol * lambda; for (i = 0; i < nc; ++i) { if (( v[i] > 0.0 && u[i] < dual_ub[i] ) || ( v[i] < 0.0 && u[i] > dual_lb[i] )) { u[i] += stp * v[i]; if (u[i] < dual_lb[i]) u[i] = dual_lb[i]; else if (u[i] > dual_ub[i]) u[i] = dual_ub[i]; } } } /// ascent = inner product(v, u - last_u) double VOL_dual::ascent(const VOL_dvector& v, const VOL_dvector& last_u) const { const int nc = u.size(); int i; double asc = 0.0; for (i = 0; i < nc; ++i) asc += v[i] * (u[i] - last_u[i]); return asc; } /** compute xrc. This is (c - u A) * ( xstar - x ). This is just miscellaneous information, it is not used in the algorithm. */ void VOL_dual::compute_xrc(const VOL_dvector& xstar, const VOL_dvector& x, const VOL_dvector& rc) { const int nc = x.size(); xrc = 0; for (int i = 0; i < nc; ++i) { xrc += rc[i] * (xstar[i] - x[i]); } } //############################################################################ /** Computing inner products. It computes v * ( alpha v + (1-alpha) h), v * h, v * v, h * h. Here v is the subgradient direction, and h is the conjugate direction. */ VOL_vh::VOL_vh(const double alpha, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v, const VOL_dvector& vstar, const VOL_dvector& u) : hh(0), norm(0), vh(0), asc(0) { int i; const int nc = vstar.size(); double vv; for (i = 0; i < nc; ++i) { const double vi = v[i]; const double vsi = vstar[i]; vv = alpha * vi + (1.0 - alpha) * vsi; if (u[i] == 0.0 && dual_lb[i] == 0.0 && vv <= 0.0) continue; if (u[i] == 0.0 && dual_ub[i] == 0.0 && vv >= 0.0) continue; asc += vi * vv; vh += vi * vsi; norm += vi * vi; hh += vsi * vsi; } } //############################################################################ /** Computes indicators for printing. They are v2=vstar * vstar, asc= v*v, vu= vstar * u, vabs = sum( abs(vstar[i]))/m, v2= sum( vstar[i]^2) / m. */ VOL_indc::VOL_indc(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) { v2 = vu = vabs = asc = 0.0; const VOL_dvector v = primal.v; const VOL_dvector vstar = pstar.v; const VOL_dvector u = dual.u; int i; const int nc = vstar.size(); for (i = 0; i < nc; ++i) { if (u[i] == 0.0 && dual_lb[i] == 0.0 && vstar[i] <= 0.0) continue; if (u[i] == 0.0 && dual_ub[i] == 0.0 && vstar[i] >= 0.0) continue; v2 += vstar[i] * vstar[i]; asc += v[i] * v[i]; vu -= vstar[i] * u[i]; vabs += VolAbs(vstar[i]); } v2 = sqrt(v2) / nc; vabs /= nc; } //############################################################################ // reading parameters that control the algorithm void VOL_problem::read_params(const char* filename) { char s[100]; FILE* infile = fopen(filename, "r"); if (!infile) { printf("Failure to open file: %s\n", filename); abort(); } while (fgets(s, 100, infile)) { const int len = strlen(s) - 1; if (s[len] == '\n') s[len] = 0; std::string ss(s); if (ss.find("temp_dualfile") == 0) { int i = ss.find("="); int i1 = ss.length()-i-1; std::string sss = ss.substr(i+1,i1); parm.temp_dualfile = new char[sss.length() + 1]; memcpy(parm.temp_dualfile, sss.c_str(), sss.length()); parm.temp_dualfile[sss.length()] = 0; } else if (ss.find("ubinit") == 0) { int i = ss.find("="); parm.ubinit = atof(&s[i+1]); } else if (ss.find("printflag") == 0) { int i = ss.find("="); parm.printflag = atoi(&s[i+1]); } else if (ss.find("printinvl") == 0) { int i = ss.find("="); parm.printinvl = atoi(&s[i+1]); } else if (ss.find("maxsgriters") == 0) { int i = ss.find("="); parm.maxsgriters = atoi(&s[i+1]); } else if (ss.find("heurinvl") == 0) { int i = ss.find("="); parm.heurinvl = atoi(&s[i+1]); } else if (ss.find("greentestinvl") == 0) { int i = ss.find("="); parm.greentestinvl = atoi(&s[i+1]); } else if (ss.find("yellowtestinvl") == 0) { int i = ss.find("="); parm.yellowtestinvl = atoi(&s[i+1]); } else if (ss.find("redtestinvl") == 0) { int i = ss.find("="); parm.redtestinvl = atoi(&s[i+1]); } else if (ss.find("lambdainit") == 0) { int i = ss.find("="); parm.lambdainit = atof(&s[i+1]); } else if (ss.find("alphainit") == 0) { int i = ss.find("="); parm.alphainit = atof(&s[i+1]); } else if (ss.find("alphamin") == 0) { int i = ss.find("="); parm.alphamin = atof(&s[i+1]); } else if (ss.find("alphafactor") == 0) { int i = ss.find("="); parm.alphafactor = atof(&s[i+1]); } else if (ss.find("alphaint") == 0) { int i = ss.find("="); parm.alphaint = atoi(&s[i+1]); } else if (ss.find("primal_abs_precision") == 0) { int i = ss.find("="); parm.primal_abs_precision = atof(&s[i+1]); // } else if (ss.find("primal_rel_precision") == 0) { // int i = ss.find("="); // parm.primal_rel_precision = atof(&s[i+1]); } else if (ss.find("gap_abs_precision") == 0) { int i = ss.find("="); parm.gap_abs_precision = atof(&s[i+1]); } else if (ss.find("gap_rel_precision") == 0) { int i = ss.find("="); parm.gap_rel_precision = atof(&s[i+1]); } else if (ss.find("ascent_check_invl") == 0) { int i = ss.find("="); parm.ascent_check_invl = atoi(&s[i+1]); } else if (ss.find("minimum_rel_ascent") == 0) { int i = ss.find("="); parm.minimum_rel_ascent = atoi(&s[i+1]); } else if (ss.find("granularity") == 0) { int i = ss.find("="); parm.granularity = atof(&s[i+1]); } } fclose(infile); } //############################################################################# void VOL_problem::set_default_parm() { parm.lambdainit = 0.1; parm.alphainit = 0.01; parm.alphamin = 0.001; parm.alphafactor = 0.5; parm.ubinit = DBL_MAX; parm.primal_abs_precision = 0.02; // parm.primal_rel_precision = 0.01; parm.gap_abs_precision = 0.0; parm.gap_rel_precision = 0.001; parm.granularity = 0.0; parm.minimum_rel_ascent = 0.0001; parm.ascent_first_check = 500; parm.ascent_check_invl = 100; parm.maxsgriters = 2000; parm.printflag = 3; parm.printinvl = 50; parm.heurinvl = 100000000; parm.greentestinvl = 1; parm.yellowtestinvl = 2; parm.redtestinvl = 10; parm.alphaint = 80; parm.temp_dualfile = 0; } //############################################################################# VOL_problem::VOL_problem() : alpha_(-1), lambda_(-1), iter_(0), value(-1), psize(-1), dsize(-1) { set_default_parm(); } // VOL_problem::VOL_problem(const char *filename) : alpha_(-1), lambda_(-1), iter_(0), value(-1), psize(-1), dsize(-1) { set_default_parm(); read_params(filename); } //###################################################################### VOL_problem::~VOL_problem() { delete[] parm.temp_dualfile; } //###################################################################### /// print information about the current iteration void VOL_problem::print_info(const int iter, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) { VOL_indc indc(dual_lb, dual_ub, primal, pstar, dual); printf("%i. L=%f P=%f vu=%f infeas=%f\n asc=%f vmax=%f P-vu=%f xrc =%f\n", iter, dual.lcost, pstar.value, indc.vu, indc.v2, indc.asc, pstar.viol, pstar.value - indc.vu, dual.xrc); } //###################################################################### /// this is the Volume Algorithm int VOL_problem::solve(VOL_user_hooks& hooks, const bool use_preset_dual) { if (initialize(use_preset_dual) < 0) // initialize several parameters return -1; double best_ub = parm.ubinit; // upper bound int retval = 0; VOL_dvector rc(psize); // reduced costs VOL_dual dual(dsize); // dual vector dual.u = dsol; VOL_primal primal(psize, dsize); // primal vector retval = hooks.compute_rc(dual.u, rc); // compute reduced costs if (retval < 0) return -1; // solve relaxed problem retval = hooks.solve_subproblem(dual.u, rc, dual.lcost, primal.x, primal.v, primal.value); if (retval < 0) return -1; // set target for the lagrangian value double target = readjust_target(-DBL_MAX/2, dual.lcost); // find primal violation primal.find_max_viol(dual_lb, dual_ub); // this may be left out for speed VOL_primal pstar(primal); // set pstar=primal pstar.find_max_viol(dual_lb, dual_ub); // set violation of pstar dual.compute_xrc(pstar.x, primal.x, rc); // compute xrc // VOL_dual dstar(dual); // dstar is the best dual solution so far VOL_dual dlast(dual); // set dlast=dual iter_ = 0; if (parm.printflag) print_info(iter_, primal, pstar, dual); VOL_swing swing; VOL_alpha_factor alpha_factor; double * lcost_sequence = new double[parm.ascent_check_invl]; const int ascent_first_check = VolMax(parm.ascent_first_check, parm.ascent_check_invl); for (iter_ = 1; iter_ <= parm.maxsgriters; ++iter_) { // main iteration dlast = dual; // take a dual step dual.step(target, lambda_, dual_lb, dual_ub, pstar.v); // compute reduced costs retval = hooks.compute_rc(dual.u, rc); if (retval < 0) break; // solve relaxed problem retval = hooks.solve_subproblem(dual.u, rc, dual.lcost, primal.x, primal.v, primal.value); if (retval < 0) break; // set the violation of primal primal.find_max_viol(dual_lb, dual_ub); // this may be left out for speed dual.compute_xrc(pstar.x, primal.x, rc); // compute xrc if (dual.lcost > dstar.lcost) { dstar = dual; // update dstar } // check if target should be updated target = readjust_target(target, dstar.lcost); // compute inner product between the new subgradient and the // last direction. This to decide among green, yellow, red const double ascent = dual.ascent(primal.v, dlast.u); // green, yellow, red swing.cond(dlast, dual.lcost, ascent, iter_); // change lambda if needed lambda_ *= swing.lfactor(parm, lambda_, iter_); if (iter_ % parm.alphaint == 0) { // change alpha if needed const double fact = alpha_factor.factor(parm, dstar.lcost, alpha_); if (fact != 1.0 && (parm.printflag & 2)) { printf(" ------------decreasing alpha to %f\n", alpha_*fact); } alpha_ *= fact; } // convex combination with new primal vector pstar.cc(power_heur(primal, pstar, dual), primal); pstar.find_max_viol(dual_lb, dual_ub); // find maximum violation of pstar if (swing.rd) dual = dstar; // if there is no improvement reset dual=dstar if ((iter_ % parm.printinvl == 0) && parm.printflag) { // printing iteration information print_info(iter_, primal, pstar, dual); swing.print(); } if (iter_ % parm.heurinvl == 0) { // run primal heuristic double ub = DBL_MAX; retval = hooks.heuristics(*this, pstar.x, ub); if (retval < 0) break; if (ub < best_ub) best_ub = ub; } // save dual solution every 500 iterations if (iter_ % 500 == 0 && parm.temp_dualfile != 0) { FILE* outfile = fopen(parm.temp_dualfile, "w"); const VOL_dvector& u = dstar.u; const int m = u.size(); for (int i = 0; i < m; ++i) { fprintf(outfile, "%i %f\n", i+1, u[i]); } fclose(outfile); } // test terminating criteria const bool primal_feas = (pstar.viol < parm.primal_abs_precision); //const double gap = VolAbs(pstar.value - dstar.lcost); const double gap = pstar.value - dstar.lcost; const bool small_gap = VolAbs(dstar.lcost) < 0.0001 ? (gap < parm.gap_abs_precision) : ( (gap < parm.gap_abs_precision) || (gap/VolAbs(dstar.lcost) < parm.gap_rel_precision) ); // test optimality if (primal_feas && small_gap){ if (parm.printflag) printf(" small lp gap \n"); break; } // test proving integer optimality if (best_ub - dstar.lcost < parm.granularity){ if (parm.printflag) printf(" small ip gap \n"); break; } // test for non-improvement const int k = iter_ % parm.ascent_check_invl; if (iter_ > ascent_first_check) { if (dstar.lcost - lcost_sequence[k] < VolAbs(lcost_sequence[k]) * parm.minimum_rel_ascent){ if (parm.printflag) printf(" small improvement \n"); break; } } lcost_sequence[k] = dstar.lcost; } delete[] lcost_sequence; if (parm.printflag) print_info(iter_, primal, pstar, dual); // set solution to return value = dstar.lcost; psol = pstar.x; dsol = dstar.u; viol = pstar.v; return retval; } /// A function to initialize a few variables int VOL_problem::initialize(const bool use_preset_dual) { // setting bounds for dual variables if (dual_lb.size() > 0) { if (dual_lb.size() != dsize) { printf("size inconsistent (dual_lb)\n"); return -1; } } else { // fill it with -infinity dual_lb.allocate(dsize); dual_lb = - DBL_MAX; } if (dual_ub.size() > 0) { if (dual_ub.size() != dsize) { printf("size inconsistent (dual_ub)\n"); return -1; } } else { // fill it with infinity dual_ub.allocate(dsize); dual_ub = DBL_MAX; } // setting initial values for parameters alpha_ = parm.alphainit; lambda_ = parm.lambdainit; // check if there is an initial dual solution if (use_preset_dual) { if (dsol.size() != dsize) { printf("size inconsistent (dsol)\n"); return -1; } } else { dsol.clear(); dsol.allocate(dsize); dsol = 0.0; } return 0; } /// Here we increase the target once we get within 5% of it double VOL_problem::readjust_target(const double oldtarget, const double lcost) const { double target = oldtarget; if (lcost >= target - VolAbs(target) * 0.05) { if (VolAbs(lcost) < 10.0) { target = 10.0; } else { target += 0.025 * VolAbs(target); target = VolMax(target, lcost + 0.05 * VolAbs(lcost)); } if (target != oldtarget && (parm.printflag & 2)) { printf(" **** readjusting target!!! new target = %f *****\n", target); } } return target; } /** Here we decide the value of alpha_fb to be used in the convex combination. More details of this are in doc.ps IN: alpha, primal, pstar, dual OUT: pstar = alpha_fb * pstar + (1 - alpha_fb) * primal */ double VOL_problem::power_heur(const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) const { const double alpha = alpha_; VOL_vh prod(alpha, dual_lb, dual_ub, primal.v, pstar.v, dual.u); double a_asc = (alpha * prod.norm - prod.vh) / (prod.norm - prod.vh); double alpha_fb; if (prod.norm + prod.hh - 2.0 * prod.vh > 0.0) alpha_fb = (prod.hh - prod.vh) / (prod.norm + prod.hh - 2.0 * prod.vh); else alpha_fb = alpha; if (alpha_fb > alpha) alpha_fb = alpha; if (alpha_fb < a_asc) alpha_fb = a_asc; if (alpha_fb > 1.0) alpha_fb = alpha; if (alpha_fb < 0.0) alpha_fb = alpha / 10.0; return alpha_fb; } Vol-1.5.4/Vol/src/Makefile.in0000644000175000017500000005223113434066267014725 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/inc/config_vol.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) libVol_la_LIBADD = am_libVol_la_OBJECTS = VolVolume.lo libVol_la_OBJECTS = $(am_libVol_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libVol_la_SOURCES) DIST_SOURCES = $(libVol_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSIVOLLIB_CFLAGS = @OSIVOLLIB_CFLAGS@ OSIVOLLIB_CFLAGS_INSTALLED = @OSIVOLLIB_CFLAGS_INSTALLED@ OSIVOLLIB_DEPENDENCIES = @OSIVOLLIB_DEPENDENCIES@ OSIVOLLIB_LIBS = @OSIVOLLIB_LIBS@ OSIVOLLIB_LIBS_INSTALLED = @OSIVOLLIB_LIBS_INSTALLED@ OSIVOLLIB_PCLIBS = @OSIVOLLIB_PCLIBS@ OSIVOLLIB_PCREQUIRES = @OSIVOLLIB_PCREQUIRES@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VOLLIB_CFLAGS = @VOLLIB_CFLAGS@ VOLLIB_CFLAGS_INSTALLED = @VOLLIB_CFLAGS_INSTALLED@ VOLLIB_DEPENDENCIES = @VOLLIB_DEPENDENCIES@ VOLLIB_LIBS = @VOLLIB_LIBS@ VOLLIB_LIBS_INSTALLED = @VOLLIB_LIBS_INSTALLED@ VOLLIB_PCLIBS = @VOLLIB_PCLIBS@ VOLLIB_PCREQUIRES = @VOLLIB_PCREQUIRES@ VOL_SVN_REV = @VOL_SVN_REV@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libVol # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in $libdir lib_LTLIBRARIES = libVol.la # List all source files for this library, including headers libVol_la_SOURCES = VolVolume.cpp VolVolume.hpp # This is for libtool (on Windows) libVol_la_LDFLAGS = $(LT_LDFLAGS) ######################################################################## # Additional flags # ######################################################################## # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. # "top_srcdir" refers to the basic directory for the main package that is # being compiled. AM_CPPFLAGS = ${COINUTILS_CFLAGS} # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/inc ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = VolVolume.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libVol.la: $(libVol_la_OBJECTS) $(libVol_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libVol_la_LDFLAGS) $(libVol_la_OBJECTS) $(libVol_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VolVolume.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Vol/src/VolVolume.hpp0000644000175000017500000005250312243676110015312 0ustar sudipsudip// $Id: VolVolume.hpp 375 2013-11-22 15:46:16Z tkr $ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef __VOLUME_HPP__ #define __VOLUME_HPP__ #include #include #include #include #include #include #ifndef VOL_DEBUG // When VOL_DEBUG is 1, we check vector indices #define VOL_DEBUG 0 #endif template static inline T VolMax(register const T x, register const T y) { return ((x) > (y)) ? (x) : (y); } template static inline T VolAbs(register const T x) { return ((x) > 0) ? (x) : -(x); } //############################################################################ #if defined(VOL_DEBUG) && (VOL_DEBUG != 0) #define VOL_TEST_INDEX(i, size) \ { \ if ((i) < 0 || (i) >= (size)) { \ printf("bad VOL_?vector index\n"); \ abort(); \ } \ } #define VOL_TEST_SIZE(size) \ { \ if (s <= 0) { \ printf("bad VOL_?vector size\n"); \ abort(); \ } \ } #else #define VOL_TEST_INDEX(i, size) #define VOL_TEST_SIZE(size) #endif //############################################################################ class VOL_dvector; class VOL_ivector; class VOL_primal; class VOL_dual; class VOL_swing; class VOL_alpha_factor; class VOL_vh; class VOL_indc; class VOL_user_hooks; class VOL_problem; //############################################################################ /** This class contains the parameters controlling the Volume Algorithm */ struct VOL_parms { /** initial value of lambda */ double lambdainit; /** initial value of alpha */ double alphainit; /** minimum value for alpha */ double alphamin; /** when little progress is being done, we multiply alpha by alphafactor */ double alphafactor; /** initial upper bound of the value of an integer solution */ double ubinit; /** accept if max abs viol is less than this */ double primal_abs_precision; /** accept if abs gap is less than this */ double gap_abs_precision; /** accept if rel gap is less than this */ double gap_rel_precision; /** terminate if best_ub - lcost < granularity */ double granularity; /** terminate if the relative increase in lcost through ascent_check_invl steps is less than this */ double minimum_rel_ascent; /** when to check for sufficient relative ascent the first time */ int ascent_first_check; /** through how many iterations does the relative ascent have to reach a minimum */ int ascent_check_invl; /** maximum number of iterations */ int maxsgriters; /** controls the level of printing. The flag should the the 'OR'-d value of the following options:
  • 0 - print nothing
  • 1 - print iteration information
  • 2 - add lambda information
  • 4 - add number of Red, Yellow, Green iterations
Default: 3 */ int printflag; /** controls how often do we print */ int printinvl; /** controls how often we run the primal heuristic */ int heurinvl; /** how many consecutive green iterations are allowed before changing lambda */ int greentestinvl; /** how many consecutive yellow iterations are allowed before changing lambda */ int yellowtestinvl; /** how many consecutive red iterations are allowed before changing lambda */ int redtestinvl; /** number of iterations before we check if alpha should be decreased */ int alphaint; /** name of file for saving dual solution */ char* temp_dualfile; }; //############################################################################ /** vector of doubles. It is used for most vector operations. Note: If VOL_DEBUG is #defined to be 1 then each time an entry is accessed in the vector the index of the entry is tested for nonnegativity and for being less than the size of the vector. It's good to turn this on while debugging, but in final runs it should be turned off (beause of the performance hit). */ class VOL_dvector { public: /** The array holding the vector */ double* v; /** The size of the vector */ int sz; public: /** Construct a vector of size s. The content of the vector is undefined. */ VOL_dvector(const int s) { VOL_TEST_SIZE(s); v = new double[sz = s]; } /** Default constructor creates a vector of size 0. */ VOL_dvector() : v(0), sz(0) {} /** Copy constructor makes a replica of x. */ VOL_dvector(const VOL_dvector& x) : v(0), sz(0) { sz = x.sz; if (sz > 0) { v = new double[sz]; std::memcpy(v, x.v, sz * sizeof(double)); } } /** The destructor deletes the data array. */ ~VOL_dvector() { delete[] v; } /** Return the size of the vector. */ inline int size() const {return sz;} /** Return a reference to the i-th entry. */ inline double& operator[](const int i) { VOL_TEST_INDEX(i, sz); return v[i]; } /** Return the i-th entry. */ inline double operator[](const int i) const { VOL_TEST_INDEX(i, sz); return v[i]; } /** Delete the content of the vector and replace it with a vector of length 0. */ inline void clear() { delete[] v; v = 0; sz = 0; } /** Convex combination. Replace the current vector v with v = (1-gamma) v + gamma w. */ inline void cc(const double gamma, const VOL_dvector& w) { if (sz != w.sz) { printf("bad VOL_dvector sizes\n"); abort(); } double * p_v = v - 1; const double * p_w = w.v - 1; const double * const p_e = v + sz; const double one_gamma = 1.0 - gamma; while ( ++p_v != p_e ){ *p_v = one_gamma * (*p_v) + gamma * (*++p_w); } } /** delete the current vector and allocate space for a vector of size s. */ inline void allocate(const int s) { VOL_TEST_SIZE(s); delete[] v; v = new double[sz = s]; } /** swaps the vector with w. */ inline void swap(VOL_dvector& w) { std::swap(v, w.v); std::swap(sz, w.sz); } /** Copy w into the vector. */ VOL_dvector& operator=(const VOL_dvector& w); /** Replace every entry in the vector with w. */ VOL_dvector& operator=(const double w); }; //----------------------------------------------------------------------------- /** vector of ints. It's used to store indices, it has similar functions as VOL_dvector. Note: If VOL_DEBUG is #defined to be 1 then each time an entry is accessed in the vector the index of the entry is tested for nonnegativity and for being less than the size of the vector. It's good to turn this on while debugging, but in final runs it should be turned off (beause of the performance hit). */ class VOL_ivector { public: /** The array holding the vector. */ int* v; /** The size of the vector. */ int sz; public: /** Construct a vector of size s. The content of the vector is undefined. */ VOL_ivector(const int s) { VOL_TEST_SIZE(s); v = new int[sz = s]; } /** Default constructor creates a vector of size 0. */ VOL_ivector() : v(0), sz(0) {} /** Copy constructor makes a replica of x. */ VOL_ivector(const VOL_ivector& x) { sz = x.sz; if (sz > 0) { v = new int[sz]; std::memcpy(v, x.v, sz * sizeof(int)); } } /** The destructor deletes the data array. */ ~VOL_ivector(){ delete [] v; } /** Return the size of the vector. */ inline int size() const { return sz; } /** Return a reference to the i-th entry. */ inline int& operator[](const int i) { VOL_TEST_INDEX(i, sz); return v[i]; } /** Return the i-th entry. */ inline int operator[](const int i) const { VOL_TEST_INDEX(i, sz); return v[i]; } /** Delete the content of the vector and replace it with a vector of length 0. */ inline void clear() { delete[] v; v = 0; sz = 0; } /** delete the current vector and allocate space for a vector of size s. */ inline void allocate(const int s) { VOL_TEST_SIZE(s); delete[] v; v = new int[sz = s]; } /** swaps the vector with w. */ inline void swap(VOL_ivector& w) { std::swap(v, w.v); std::swap(sz, w.sz); } /** Copy w into the vector. */ VOL_ivector& operator=(const VOL_ivector& v); /** Replace every entry in the vector with w. */ VOL_ivector& operator=(const int w); }; //############################################################################ // A class describing a primal solution. This class is used only internally class VOL_primal { public: // objective value of this primal solution double value; // the largest of the v[i]'s double viol; // primal solution VOL_dvector x; // v=b-Ax, for the relaxed constraints VOL_dvector v; VOL_primal(const int psize, const int dsize) : x(psize), v(dsize) {} VOL_primal(const VOL_primal& primal) : value(primal.value), viol(primal.viol), x(primal.x), v(primal.v) {} ~VOL_primal() {} inline VOL_primal& operator=(const VOL_primal& p) { if (this == &p) return *this; value = p.value; viol = p.viol; x = p.x; v = p.v; return *this; } // convex combination. data members in this will be overwritten // convex combination between two primal solutions // x <-- alpha x + (1 - alpha) p.x // v <-- alpha v + (1 - alpha) p.v inline void cc(const double alpha, const VOL_primal& p) { value = alpha * p.value + (1.0 - alpha) * value; x.cc(alpha, p.x); v.cc(alpha, p.v); } // find maximum of v[i] void find_max_viol(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub); }; //----------------------------------------------------------------------------- // A class describing a dual solution. This class is used only internally class VOL_dual { public: // lagrangian value double lcost; // reduced costs * (pstar-primal) double xrc; // this information is only printed // dual vector VOL_dvector u; VOL_dual(const int dsize) : u(dsize) { u = 0.0;} VOL_dual(const VOL_dual& dual) : lcost(dual.lcost), xrc(dual.xrc), u(dual.u) {} ~VOL_dual() {} inline VOL_dual& operator=(const VOL_dual& p) { if (this == &p) return *this; lcost = p.lcost; xrc = p.xrc; u = p.u; return *this; } // dual step void step(const double target, const double lambda, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v); double ascent(const VOL_dvector& v, const VOL_dvector& last_u) const; void compute_xrc(const VOL_dvector& pstarx, const VOL_dvector& primalx, const VOL_dvector& rc); }; //############################################################################ /* here we check whether an iteration is green, yellow or red. Also according to this information we decide whether lambda should be changed */ class VOL_swing { private: VOL_swing(const VOL_swing&); VOL_swing& operator=(const VOL_swing&); public: enum condition {green, yellow, red} lastswing; int lastgreeniter, lastyellowiter, lastrediter; int ngs, nrs, nys; int rd; VOL_swing() { lastgreeniter = lastyellowiter = lastrediter = 0; ngs = nrs = nys = 0; } ~VOL_swing(){} inline void cond(const VOL_dual& dual, const double lcost, const double ascent, const int iter) { double eps = 1.e-3; if (ascent > 0.0 && lcost > dual.lcost + eps) { lastswing = green; lastgreeniter = iter; ++ngs; rd = 0; } else { if (ascent <= 0 && lcost > dual.lcost) { lastswing = yellow; lastyellowiter = iter; ++nys; rd = 0; } else { lastswing = red; lastrediter = iter; ++nrs; rd = 1; } } } inline double lfactor(const VOL_parms& parm, const double lambda, const int iter) { double lambdafactor = 1.0; double eps = 5.e-4; int cons; switch (lastswing) { case green: cons = iter - VolMax(lastyellowiter, lastrediter); if (parm.printflag & 4) printf(" G: Consecutive Gs = %3d\n\n", cons); if (cons >= parm.greentestinvl && lambda < 2.0) { lastgreeniter = lastyellowiter = lastrediter = iter; lambdafactor = 2.0; if (parm.printflag & 2) printf("\n ---- increasing lamda to %g ----\n\n", lambda * lambdafactor); } break; case yellow: cons = iter - VolMax(lastgreeniter, lastrediter); if (parm.printflag & 4) printf(" Y: Consecutive Ys = %3d\n\n", cons); if (cons >= parm.yellowtestinvl) { lastgreeniter = lastyellowiter = lastrediter = iter; lambdafactor = 1.1; if (parm.printflag & 2) printf("\n **** increasing lamda to %g *****\n\n", lambda * lambdafactor); } break; case red: cons = iter - VolMax(lastgreeniter, lastyellowiter); if (parm.printflag & 4) printf(" R: Consecutive Rs = %3d\n\n", cons); if (cons >= parm.redtestinvl && lambda > eps) { lastgreeniter = lastyellowiter = lastrediter = iter; lambdafactor = 0.67; if (parm.printflag & 2) printf("\n **** decreasing lamda to %g *****\n\n", lambda * lambdafactor); } break; } return lambdafactor; } inline void print() { printf("**** G= %i, Y= %i, R= %i ****\n", ngs, nys, nrs); ngs = nrs = nys = 0; } }; //############################################################################ /* alpha should be decreased if after some number of iterations the objective has increased less that 1% */ class VOL_alpha_factor { private: VOL_alpha_factor(const VOL_alpha_factor&); VOL_alpha_factor& operator=(const VOL_alpha_factor&); public: double lastvalue; VOL_alpha_factor() {lastvalue = -DBL_MAX;} ~VOL_alpha_factor() {} inline double factor(const VOL_parms& parm, const double lcost, const double alpha) { if (alpha < parm.alphamin) return 1.0; register const double ll = VolAbs(lcost); const double x = ll > 10 ? (lcost-lastvalue)/ll : (lcost-lastvalue); lastvalue = lcost; return (x <= 0.01) ? parm.alphafactor : 1.0; } }; //############################################################################ /* here we compute the norm of the conjugate direction -hh-, the norm of the subgradient -norm-, the inner product between the subgradient and the last conjugate direction -vh-, and the inner product between the new conjugate direction and the subgradient */ class VOL_vh { private: VOL_vh(const VOL_vh&); VOL_vh& operator=(const VOL_vh&); public: double hh; double norm; double vh; double asc; VOL_vh(const double alpha, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v, const VOL_dvector& vstar, const VOL_dvector& u); ~VOL_vh(){} }; //############################################################################ /* here we compute different parameter to be printed. v2 is the square of the norm of the subgradient. vu is the inner product between the dual variables and the subgradient. vabs is the maximum absolute value of the violations of pstar. asc is the inner product between the conjugate direction and the subgradient */ class VOL_indc { private: VOL_indc(const VOL_indc&); VOL_indc& operator=(const VOL_indc&); public: double v2; double vu; double vabs; double asc; public: VOL_indc(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual); ~VOL_indc() {} }; //############################################################################# /** The user hooks should be overridden by the user to provide the problem specific routines for the volume algorithm. The user should derive a class ... for all hooks: return value of -1 means that volume should quit */ class VOL_user_hooks { public: virtual ~VOL_user_hooks() {} public: // for all hooks: return value of -1 means that volume should quit /** compute reduced costs @param u (IN) the dual variables @param rc (OUT) the reduced cost with respect to the dual values */ virtual int compute_rc(const VOL_dvector& u, VOL_dvector& rc) = 0; /** Solve the subproblem for the subgradient step. @param dual (IN) the dual variables @param rc (IN) the reduced cost with respect to the dual values @param lcost (OUT) the lagrangean cost with respect to the dual values @param x (OUT) the primal result of solving the subproblem @param v (OUT) b-Ax for the relaxed constraints @param pcost (OUT) the primal objective value of x */ virtual int solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost) = 0; /** Starting from the primal vector x, run a heuristic to produce an integer solution @param x (IN) the primal vector @param heur_val (OUT) the value of the integer solution (return DBL_MAX here if no feas sol was found */ virtual int heuristics(const VOL_problem& p, const VOL_dvector& x, double& heur_val) = 0; }; //############################################################################# /** This class holds every data for the Volume Algorithm and its solve method must be invoked to solve the problem. The INPUT fields must be filled out completely before solve is invoked. dsol have to be filled out if and only if the last argument to solve is true. */ class VOL_problem { private: VOL_problem(const VOL_problem&); VOL_problem& operator=(const VOL_problem&); void set_default_parm(); // ############ INPUT fields ######################## public: /**@name Constructors and destructor */ //@{ /** Default constructor. */ VOL_problem(); /** Create a a VOL_problem object and read in the parameters from filename. */ VOL_problem(const char *filename); /** Destruct the object. */ ~VOL_problem(); //@} /**@name Method to solve the problem. */ //@{ /** Solve the problem using the hooks. Any information needed in the hooks must be stored in the structure user_data points to. */ int solve(VOL_user_hooks& hooks, const bool use_preset_dual = false); //@} private: /**@name Internal data (may be inquired for) */ //@{ /** value of alpha */ double alpha_; /** value of lambda */ double lambda_; // This union is here for padding (so that data members would be // double-aligned on x86 CPU union { /** iteration number */ int iter_; double __pad0; }; //@} public: /**@name External data (containing the result after solve) */ //@{ /** final lagrangian value (OUTPUT) */ double value; /** final dual solution (INPUT/OUTPUT) */ VOL_dvector dsol; /** final primal solution (OUTPUT) */ VOL_dvector psol; /** violations (b-Ax) for the relaxed constraints */ VOL_dvector viol; //@} /**@name External data (may be changed by the user before calling solve) */ //@{ /** The parameters controlling the Volume Algorithm (INPUT) */ VOL_parms parm; /** length of primal solution (INPUT) */ int psize; /** length of dual solution (INPUT) */ int dsize; /** lower bounds for the duals (if 0 length, then filled with -inf) (INPUT) */ VOL_dvector dual_lb; /** upper bounds for the duals (if 0 length, then filled with +inf) (INPUT) */ VOL_dvector dual_ub; //@} public: /**@name Methods returning final data */ //@{ /** returns the iteration number */ int iter() const { return iter_; } /** returns the value of alpha */ double alpha() const { return alpha_; } /** returns the value of lambda */ double lambda() const { return lambda_; } //@} private: /**@name Private methods used internally */ //@{ /** Read in the parameters from the file filename. */ void read_params(const char* filename); /** initializes duals, bounds for the duals, alpha, lambda */ int initialize(const bool use_preset_dual); /** print volume info every parm.printinvl iterations */ void print_info(const int iter, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual); /** Checks if lcost is close to the target, if so it increases the target. Close means that we got within 5% of the target. */ double readjust_target(const double oldtarget, const double lcost) const; /** Here we decide the value of alpha1 to be used in the convex combination. The new pstar will be computed as
pstar = alpha1 * pstar + (1 - alpha1) * primal
More details of this are in doc.ps.
IN: alpha, primal, pstar, dual
@return alpha1 */ double power_heur(const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) const; //@} }; #endif Vol-1.5.4/Vol/src/Makefile.am0000644000175000017500000000350412243462613014703 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 374 2013-11-21 19:56:59Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libVol # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in $libdir lib_LTLIBRARIES = libVol.la # List all source files for this library, including headers libVol_la_SOURCES = VolVolume.cpp VolVolume.hpp # This is for libtool (on Windows) libVol_la_LDFLAGS = $(LT_LDFLAGS) ######################################################################## # Additional flags # ######################################################################## # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. # "top_srcdir" refers to the basic directory for the main package that is # being compiled. AM_CPPFLAGS = ${COINUTILS_CFLAGS} # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/inc ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = VolVolume.hpp Vol-1.5.4/Vol/src/OsiVol/0000755000175000017500000000000013434204224014053 5ustar sudipsudipVol-1.5.4/Vol/src/OsiVol/OsiVolSolverInterfaceIO.cpp0000644000175000017500000003061611511202647021245 0ustar sudipsudip// $Id$ // Copyright (C) 2001, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include #include #include "CoinHelperFunctions.hpp" #include "CoinMpsIO.hpp" #include "OsiVolSolverInterface.hpp" //############################################################################# void OsiVolSolverInterface::initFromRlbRub(const int rownum, const double* rowlb, const double* rowub) { if (maxNumrows_ > 0) { rowRimAllocator_(); if (rowub) { CoinDisjointCopyN(rowub, rownum, rowupper_); } else { CoinFillN(rowupper_, rownum, OsiVolInfinity); } if (rowlb) { CoinDisjointCopyN(rowlb, rownum, rowlower_); } else { CoinFillN(rowlower_, rownum, -OsiVolInfinity); } // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertBoundsToSenses_(); } } //############################################################################# void OsiVolSolverInterface::initFromRhsSenseRange(const int rownum, const char* rowsen, const double* rowrhs, const double* rowrng) { if (maxNumrows_ > 0) { rowRimAllocator_(); if (rowsen) { CoinDisjointCopyN(rowsen, rownum, rowsense_); } else { CoinFillN(rowsense_, rownum, 'G'); } if (rowrhs) { CoinDisjointCopyN(rowrhs, rownum, rhs_); } else { CoinFillN(rhs_, rownum, 0.0); } if (rowrng) { CoinDisjointCopyN(rowrng, rownum, rowrange_); } else { CoinFillN(rowrange_, rownum, 0.0); } // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertSensesToBounds_(); } } //############################################################################# void OsiVolSolverInterface::initFromClbCubObj(const int colnum, const double* collb, const double* colub, const double* obj) { if (maxNumcols_ > 0) { colRimAllocator_(); if (colub) { CoinDisjointCopyN(colub, colnum, colupper_); } else { CoinFillN(colupper_, colnum, OsiVolInfinity); } if (collb) { CoinDisjointCopyN(collb, colnum, collower_); } else { CoinFillN(collower_, colnum, 0.0); } CoinFillN(continuous_,colnum,true); if (obj) { CoinDisjointCopyN(obj, colnum, objcoeffs_); } else { CoinFillN(objcoeffs_, colnum, 0.0); } int c; for ( c=0; c((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); } else { rowMatrix_.setExtraGap(matrix.getExtraGap()); rowMatrix_.setExtraMajor(matrix.getExtraMajor()); rowMatrix_ = matrix; rowMatrixCurrent_ = true; colMatrixCurrent_ = false; maxNumcols_ = static_cast((1+rowMatrix_.getExtraGap()) * rowMatrix_.getMinorDim()); maxNumrows_ = rowMatrix_.getMaxMajorDim(); } initFromRlbRub(rownum, rowlb, rowub); initFromClbCubObj(colnum, collb, colub, obj); } //----------------------------------------------------------------------- void OsiVolSolverInterface::assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, double*& rowlb, double*& rowub) { gutsOfDestructor_(); const int rownum = matrix->getNumRows(); const int colnum = matrix->getNumCols(); maxNumcols_ = colnum; maxNumrows_ = rownum; if (matrix->isColOrdered()) { colMatrix_.swap(*matrix); colMatrixCurrent_ = true; rowMatrixCurrent_ = false; } else { rowMatrix_.swap(*matrix); rowMatrixCurrent_ = true; colMatrixCurrent_ = false; } delete matrix; matrix = 0; rowupper_ = rowub; rowub = 0; rowlower_ = rowlb; rowlb = 0; colupper_ = colub; colub = 0; collower_ = collb; collb = 0; objcoeffs_ = obj; obj = 0; if (maxNumrows_ > 0) { if (!rowupper_) { rowupper_ = new double[maxNumrows_]; CoinFillN(rowupper_, rownum, OsiVolInfinity); } if (!rowlower_) { rowlower_ = new double[maxNumrows_]; CoinFillN(rowlower_, rownum, -OsiVolInfinity); } rowsense_ = new char[maxNumrows_]; rhs_ = new double[maxNumrows_]; rowrange_ = new double[maxNumrows_]; rowprice_ = new double[maxNumrows_]; lhs_ = new double[maxNumrows_]; // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertBoundsToSenses_(); } if (maxNumcols_ > 0) { if (!colupper_) { colupper_ = new double[maxNumcols_]; CoinFillN(colupper_, colnum, OsiVolInfinity); } if (!collower_) { collower_ = new double[maxNumcols_]; CoinFillN(collower_, colnum, -OsiVolInfinity); } if (!objcoeffs_) { objcoeffs_ = new double[maxNumcols_]; CoinFillN(objcoeffs_, colnum, -OsiVolInfinity); } colsol_ = new double[maxNumcols_]; int c; for ( c=0; c((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); } else { rowMatrix_ = matrix; rowMatrixCurrent_ = true; colMatrixCurrent_ = false; maxNumcols_ = static_cast((1+rowMatrix_.getExtraGap()) * rowMatrix_.getMinorDim()); maxNumrows_ = rowMatrix_.getMaxMajorDim(); } initFromRhsSenseRange(rownum, rowsen, rowrhs, rowrng); initFromClbCubObj(colnum, collb, colub, obj); } //----------------------------------------------------------------------- void OsiVolSolverInterface::assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, char*& rowsen, double*& rowrhs, double*& rowrng) { gutsOfDestructor_(); const int rownum = matrix->getNumRows(); const int colnum = matrix->getNumCols(); maxNumcols_ = colnum; maxNumrows_ = rownum; if (matrix->isColOrdered()) { colMatrix_.swap(*matrix); colMatrixCurrent_ = true; rowMatrixCurrent_ = false; } else { rowMatrix_.swap(*matrix); rowMatrixCurrent_ = true; colMatrixCurrent_ = false; } delete matrix; matrix = 0; rowsense_ = rowsen; rowsen = 0; rhs_ = rowrhs; rowrhs = 0; rowrange_ = rowrng; rowrng = 0; colupper_ = colub; colub = 0; collower_ = collb; collb = 0; objcoeffs_ = obj; obj = 0; if (maxNumrows_ > 0) { if (!rowsense_) { rowsense_ = new char[maxNumrows_]; CoinFillN(rowsense_, rownum, 'G'); } if (!rhs_) { rhs_ = new double[maxNumrows_]; CoinFillN(rhs_, rownum, 0.0); } if (!rowrange_) { rowrange_ = new double[maxNumrows_]; CoinFillN(rowrange_, rownum, 0.0); } rowlower_ = new double[maxNumrows_]; rowupper_ = new double[maxNumrows_]; rowprice_ = new double[maxNumrows_]; lhs_ = new double[maxNumrows_]; // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertSensesToBounds_(); } if (maxNumcols_ > 0) { if (!colupper_) { colupper_ = new double[maxNumcols_]; CoinFillN(colupper_, colnum, OsiVolInfinity); } if (!collower_) { collower_ = new double[maxNumcols_]; CoinFillN(collower_, colnum, -OsiVolInfinity); } if (!objcoeffs_) { objcoeffs_ = new double[maxNumcols_]; CoinFillN(objcoeffs_, colnum, -OsiVolInfinity); } colsol_ = new double[maxNumcols_]; int c; for ( c=0; c((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); initFromRlbRub(numrows, rowlb, rowub); initFromClbCubObj(numcols, collb, colub, obj); } //----------------------------------------------------------------------- void OsiVolSolverInterface::loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng) { gutsOfDestructor_(); colMatrix_.copyOf(true, numrows, numcols, start[numcols], value, index, start, 0); colMatrixCurrent_ = true; rowMatrixCurrent_ = false; maxNumcols_ = colMatrix_.getMaxMajorDim(); maxNumrows_ = static_cast((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); initFromRhsSenseRange(numrows, rowsen, rowrhs, rowrng); initFromClbCubObj(numcols, collb, colub, obj); } //----------------------------------------------------------------------- int OsiVolSolverInterface::readMps(const char *filename, const char *extension) { CoinMpsIO reader; reader.setInfinity(getInfinity()); int retVal = reader.readMps(filename, extension); loadProblem(*reader.getMatrixByCol(), reader.getColLower(), reader.getColUpper(), reader.getObjCoefficients(), reader.getRowLower(), reader.getRowUpper()); int nc = getNumCols(); assert (continuous_); CoinFillN(continuous_, nc, true); return retVal; } //----------------------------------------------------------------------- void OsiVolSolverInterface::writeMps(const char *filename, const char *extension, double /*objSense*/) const { CoinMpsIO writer; writer.setMpsData(*getMatrixByCol(), getInfinity(), getColLower(), getColUpper(), getObjCoefficients(), reinterpret_cast (NULL) /*integrality*/, getRowLower(), getRowUpper(), reinterpret_cast (NULL) /*colnam*/, reinterpret_cast (NULL) /*rownam*/); std::string fname = filename; if (extension) { if (extension[0] != '\0' && extension[0] != '.') fname += "." ; } fname += extension; writer.writeMps(fname.c_str()); } Vol-1.5.4/Vol/src/OsiVol/osi-vol.pc.in0000644000175000017500000000050411510106500016362 0ustar sudipsudipprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiVol Description: COIN-OR Open Solver Interface for Vol URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiVol @OSIVOLLIB_PCLIBS@ Cflags: -I${includedir} Requires: vol @OSIVOLLIB_PCREQUIRES@ Vol-1.5.4/Vol/src/OsiVol/OsiVolSolverInterface.cpp0000644000175000017500000011361611511202647021017 0ustar sudipsudip// $Id$ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #include #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinWarmStartDual.hpp" #include "OsiVolSolverInterface.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" //####################################################################### // Private helper methods //####################################################################### void OsiVolSolverInterface::updateRowMatrix_() const { if (! rowMatrixCurrent_) { rowMatrix_.reverseOrderedCopyOf(colMatrix_); rowMatrixCurrent_ = true; } } void OsiVolSolverInterface::updateColMatrix_() const { if (! colMatrixCurrent_) { colMatrix_.reverseOrderedCopyOf(rowMatrix_); colMatrixCurrent_ = true; } } //----------------------------------------------------------------------------- void OsiVolSolverInterface::checkData_() const { int i; for (i = getNumRows() - 1; i >= 0; --i) { if (rowlower_[i] > -1.0e20 && rowupper_[i] < 1.0e20 && rowlower_[i] != rowupper_[i]) throw CoinError("Volume algorithm is unable to handle ranged rows", "checkData_", "OsiVolSolverInterface"); } for (i = getNumCols() - 1; i >= 0; --i) { if (collower_[i] < -1.0e20 || colupper_[i] > 1.0e20) throw CoinError("Volume algorithm is unable to handle infinite bounds", "checkData_", "OsiVolSolverInterface"); } } //----------------------------------------------------------------------------- void OsiVolSolverInterface::compute_rc_(const double* u, double* rc) const { if (isZeroOneMinusOne_) { rowMatrixOneMinusOne_->timesMajor(u, rc); } else { rowMatrix_.transposeTimes(u, rc); } const int psize = getNumCols(); std::transform(rc, rc+psize, objcoeffs_, rc, std::minus()); std::transform(rc, rc+psize, rc, std::negate()); } //############################################################################# bool OsiVolSolverInterface::test_zero_one_minusone_(const CoinPackedMatrix& m) const { const int vecnum = m.getMajorDim(); const double* elem = m.getElements(); const int* start = m.getVectorStarts(); const int* length = m.getVectorLengths(); int i, j; for (i = 0; i < vecnum; ++i) { for (j = start[i] + length[i] - 1; j >= start[i]; --j) { const double val = elem[j]; if (val != 1.0 && val != 0.0 && val != -1.0) { return false; } } } return true; } //----------------------------------------------------------------------------- OsiVolSolverInterface::OsiVolMatrixOneMinusOne_:: OsiVolMatrixOneMinusOne_(const CoinPackedMatrix& m) { const int major = m.getMajorDim(); const double* elem = m.getElements(); const int* ind = m.getIndices(); const int* start = m.getVectorStarts(); const int* length = m.getVectorLengths(); majorDim_ = major; minorDim_ = m.getMinorDim(); plusSize_ = 0; minusSize_ = 0; int i, j; for (i = 0; i < major; ++i) { for (j = start[i] + length[i] - 1; j >= start[i]; --j) { const double val = elem[j]; if (val == 1.0) { ++plusSize_; } else if (val == -1.0) { ++minusSize_; } } } if (plusSize_ > 0) { plusInd_ = new int[plusSize_]; } if (minusSize_ > 0) { minusInd_ = new int[minusSize_]; } plusStart_ = new int[major]; plusLength_ = new int[major]; minusStart_ = new int[major]; minusLength_ = new int[major]; plusSize_ = 0; minusSize_ = 0; for (i = 0; i < major; ++i) { plusStart_[i] = plusSize_; minusStart_[i] = minusSize_; const int last = start[i] + length[i]; for (j = start[i]; j < last; ++j) { const double val = elem[j]; if (val == 1.0) { plusInd_[plusSize_++] = ind[j]; } else if (val == -1.0) { minusInd_[minusSize_++] = ind[j]; } } plusLength_[i] = plusSize_ - plusStart_[i]; minusLength_[i] = minusSize_ - minusStart_[i]; } if (plusSize_ == 0) { delete[] plusStart_; plusStart_ = NULL; delete[] plusLength_; plusLength_ = NULL; } if (minusSize_ == 0) { delete[] minusStart_; minusStart_ = NULL; delete[] minusLength_; minusLength_ = NULL; } } //----------------------------------------------------------------------------- OsiVolSolverInterface::OsiVolMatrixOneMinusOne_:: ~OsiVolMatrixOneMinusOne_() { if (plusSize_ > 0) { delete[] plusInd_; plusInd_ = NULL; delete[] plusStart_; plusStart_ = NULL; delete[] plusLength_; plusLength_ = NULL; } if (minusSize_ > 0) { delete[] minusInd_; minusInd_ = NULL; delete[] minusStart_; minusStart_ = NULL; delete[] minusLength_; minusLength_ = NULL; } } //----------------------------------------------------------------------------- void OsiVolSolverInterface::OsiVolMatrixOneMinusOne_:: timesMajor(const double* x, double* y) const { memset(y, 0, minorDim_ * sizeof(double)); int i; if (plusSize_ > 0 && minusSize_ > 0) { for (i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const int* vecInd = plusInd_ + plusStart_[i]; int j; for ( j = plusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] += x_i; vecInd = minusInd_ + minusStart_[i]; for ( j = minusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] -= x_i; } } return; } if (plusSize_ > 0) { for (i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const int* vecInd = plusInd_ + plusStart_[i]; for (int j = plusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] += x_i; } } return; } if (minusSize_ > 0) { for (i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const int* vecInd = minusInd_ + minusStart_[i]; for (int j = minusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] -= x_i; } } return; } } //############################################################################# void OsiVolSolverInterface::gutsOfDestructor_() { rowMatrix_.clear(); colMatrix_.clear(); rowMatrixCurrent_ = true; colMatrixCurrent_ = true; delete[] colupper_; colupper_ = 0; delete[] collower_; collower_ = 0; delete[] continuous_; continuous_ = 0; delete[] rowupper_; rowupper_ = 0; delete[] rowlower_; rowlower_ = 0; delete[] rowsense_; rowsense_ = 0; delete[] rhs_; rhs_ = 0; delete[] rowrange_; rowrange_ = 0; delete[] objcoeffs_; objcoeffs_ = 0; delete[] colsol_; colsol_ = 0; delete[] rowprice_; rowprice_ = 0; delete[] rowpriceHotStart_; rowpriceHotStart_ = 0; delete[] rc_; rc_ = 0; delete[] lhs_; lhs_ = 0; lagrangeanCost_ = 0.0; maxNumrows_ = 0; maxNumcols_ = 0; } //############################################################################# void OsiVolSolverInterface::rowRimAllocator_() { rowupper_ = new double[maxNumrows_]; rowlower_ = new double[maxNumrows_]; rowsense_ = new char[maxNumrows_]; rhs_ = new double[maxNumrows_]; rowrange_ = new double[maxNumrows_]; rowprice_ = new double[maxNumrows_]; lhs_ = new double[maxNumrows_]; } //----------------------------------------------------------------------------- void OsiVolSolverInterface::colRimAllocator_() { colupper_ = new double[maxNumcols_]; collower_ = new double[maxNumcols_]; continuous_ = new bool[maxNumcols_]; objcoeffs_ = new double[maxNumcols_]; colsol_ = new double[maxNumcols_]; rc_ = new double[maxNumcols_]; } //----------------------------------------------------------------------------- void OsiVolSolverInterface::rowRimResize_(const int newSize) { if (newSize > maxNumrows_) { double* rub = rowupper_; double* rlb = rowlower_; char* sense = rowsense_; double* right = rhs_; double* range = rowrange_; double* dual = rowprice_; double* left = lhs_; maxNumrows_ = CoinMax(1000, (newSize * 5) / 4); rowRimAllocator_(); const int rownum = getNumRows(); CoinDisjointCopyN(rub , rownum, rowupper_); CoinDisjointCopyN(rlb , rownum, rowlower_); CoinDisjointCopyN(sense, rownum, rowsense_); CoinDisjointCopyN(right, rownum, rhs_); CoinDisjointCopyN(range, rownum, rowrange_); CoinDisjointCopyN(dual , rownum, rowprice_); CoinDisjointCopyN(left , rownum, lhs_); delete[] rub; delete[] rlb; delete[] sense; delete[] right; delete[] range; delete[] dual; delete[] left; } } //----------------------------------------------------------------------------- void OsiVolSolverInterface::colRimResize_(const int newSize) { if (newSize > maxNumcols_) { double* cub = colupper_; double* clb = collower_; bool* cont = continuous_; double* obj = objcoeffs_; double* sol = colsol_; double* rc = rc_; maxNumcols_ = CoinMax(1000, (newSize * 5) / 4); colRimAllocator_(); const int colnum = getNumCols(); CoinDisjointCopyN(cub , colnum, colupper_); CoinDisjointCopyN(clb , colnum, collower_); CoinDisjointCopyN(cont, colnum, continuous_); CoinDisjointCopyN(obj , colnum, objcoeffs_); CoinDisjointCopyN(sol , colnum, colsol_); CoinDisjointCopyN(rc , colnum, rc_); delete[] cub; delete[] clb; delete[] cont; delete[] obj; delete[] sol; delete[] rc; } } //############################################################################# void OsiVolSolverInterface::convertBoundsToSenses_() { for (int i = getNumRows() - 1; i >= 0; --i ) { convertBoundToSense(rowlower_[i], rowupper_[i], rowsense_[i], rhs_[i], rowrange_[i]); } } //----------------------------------------------------------------------------- void OsiVolSolverInterface::convertSensesToBounds_() { for (int i = getNumRows() - 1; i >= 0; --i) { convertSenseToBound(rowsense_[i], rhs_[i], rowrange_[i], rowlower_[i], rowupper_[i]); } } //############################################################################# // Here are the routines implementing the virtual methods inherited from // VOL_user_hooks. //############################################################################# int OsiVolSolverInterface::compute_rc(const VOL_dvector& u, VOL_dvector& rc) { compute_rc_(u.v, rc.v); return 0; } //----------------------------------------------------------------------- int OsiVolSolverInterface::solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost) { int i; const int psize = x.size(); for (i = 0; i < psize; ++i) { x[i] = (rc[i] >= 0.0) ? collower_[i] : colupper_[i]; } const int dsize = v.size(); lcost = (std::inner_product(rhs_, rhs_ + dsize, dual.v, 0.0) + std::inner_product(x.v, x.v + psize, rc.v, 0.0) ); if (isZeroOneMinusOne_) { colMatrixOneMinusOne_->timesMajor(x.v, v.v); } else { colMatrix_.times(x.v, v.v); } std::transform(v.v, v.v+dsize, rhs_, v.v, std::minus()); std::transform(v.v, v.v+dsize, v.v, std::negate()); pcost = std::inner_product(x.v, x.v + psize, objcoeffs_, 0.0); return 0; } //############################################################################# // Solve methods //############################################################################# void OsiVolSolverInterface::initialSolve() { // set every entry to 0.0 in the dual solution CoinFillN(rowprice_, getNumRows(), 0.0); resolve(); } //----------------------------------------------------------------------------- void OsiVolSolverInterface::resolve() { int i; checkData_(); // Only one of these can do any work updateRowMatrix_(); updateColMatrix_(); const int dsize = getNumRows(); const int psize = getNumCols(); // Negate the objective coefficients if necessary if (objsense_ < 0) { std::transform(objcoeffs_, objcoeffs_+psize, objcoeffs_, std::negate()); } // Set the lb/ub on the duals volprob_.dual_lb.allocate(dsize); volprob_.dual_ub.allocate(dsize); double * dlb = volprob_.dual_lb.v; double * dub = volprob_.dual_ub.v; for (i = 0; i < dsize; ++i) { dlb[i] = rowupper_[i] < OsiVolInfinity ? -1.0e31 : 0.0; dub[i] = rowlower_[i] > -OsiVolInfinity ? 1.0e31 : 0.0; } volprob_.dsize = dsize; volprob_.psize = psize; // Set the dual starting point VOL_dvector& dsol = volprob_.dsol; dsol.allocate(dsize); std::transform(rowprice_, rowprice_+dsize, dsol.v, std::bind2nd(std::multiplies(), objsense_)); // adjust the dual vector (if necessary) to be sure it's feasible double * dv = dsol.v; for (i = 0; i < dsize; ++i) { if (dv[i] < dlb[i]) { dv[i] = dlb[i]; } else if (dv[i] > dub[i]) { dv[i] = dub[i]; } } // If requested, check whether the matrix contains anything but 0/1/-1 #if 0 isZeroOneMinusOne_ = false; #else isZeroOneMinusOne_ = test_zero_one_minusone_(colMatrix_); if (isZeroOneMinusOne_) { colMatrixOneMinusOne_ = new OsiVolMatrixOneMinusOne_(colMatrix_); rowMatrixOneMinusOne_ = new OsiVolMatrixOneMinusOne_(rowMatrix_); } #endif volprob_.solve(*this, true); // extract the solution // the lower bound on the objective value lagrangeanCost_ = objsense_ * volprob_.value; // the primal solution CoinDisjointCopyN(volprob_.psol.v, psize, colsol_); // Reset the objective coefficients if necessary if (objsense_ < 0) { std::transform(objcoeffs_, objcoeffs_ + psize, objcoeffs_, std::negate()); // also, multiply the dual solution by -1 std::transform(volprob_.dsol.v, volprob_.dsol.v+dsize, rowprice_, std::negate()); } else { // now we just have to copy the dual CoinDisjointCopyN(volprob_.dsol.v, dsize, rowprice_); } // Compute the reduced costs compute_rc_(rowprice_, rc_); // Compute the left hand side (row activity levels) if (isZeroOneMinusOne_) { colMatrixOneMinusOne_->timesMajor(colsol_, lhs_); } else { colMatrix_.times(colsol_, lhs_); } if (isZeroOneMinusOne_) { delete colMatrixOneMinusOne_; colMatrixOneMinusOne_ = NULL; delete rowMatrixOneMinusOne_; rowMatrixOneMinusOne_ = NULL; } } //############################################################################# // Parameter related methods //############################################################################# bool OsiVolSolverInterface::setIntParam(OsiIntParam key, int value) { switch (key) { case OsiMaxNumIteration: if (value < 0) return false; volprob_.parm.maxsgriters = value; break; case OsiMaxNumIterationHotStart: if (value < 0) return false; OsiSolverInterface::setIntParam(key, value); break; case OsiLastIntParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiVolSolverInterface::setDblParam(OsiDblParam key, double value) { switch (key) { case OsiDualObjectiveLimit: volprob_.parm.ubinit = value; break; case OsiPrimalObjectiveLimit: // not applicable return false; case OsiDualTolerance: // only ~0 is applicable, so accept only 1e-50 ... return (value == 1e-50); case OsiPrimalTolerance: if (value < 1e-04 || value > 1e-1) return false; volprob_.parm.primal_abs_precision = value; break; case OsiObjOffset: return OsiSolverInterface::setDblParam(key, value); case OsiLastDblParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiVolSolverInterface::setStrParam(OsiStrParam key, const std::string & value) { bool retval=false; switch (key) { case OsiSolverName: return false; case OsiProbName: OsiSolverInterface::setStrParam(key,value); return retval = true; case OsiLastStrParam: return false; default: return false; } return false; } //----------------------------------------------------------------------------- bool OsiVolSolverInterface::getIntParam(OsiIntParam key, int& value) const { switch (key) { case OsiMaxNumIteration: value = volprob_.parm.maxsgriters; break; case OsiMaxNumIterationHotStart: OsiSolverInterface::getIntParam(key, value); break; case OsiLastIntParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiVolSolverInterface::getDblParam(OsiDblParam key, double& value) const { switch (key) { case OsiDualObjectiveLimit: value = volprob_.parm.ubinit; break; case OsiPrimalObjectiveLimit: // not applicable return false; case OsiDualTolerance: // not applicable, but must return almost 0 value = 1e-50; break; case OsiPrimalTolerance: value = volprob_.parm.primal_abs_precision; break; case OsiObjOffset: OsiSolverInterface::getDblParam(key, value); break; case OsiLastDblParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiVolSolverInterface::getStrParam(OsiStrParam key, std::string & value) const { switch (key) { case OsiProbName: OsiSolverInterface::getStrParam(key, value); return true; case OsiSolverName: value = "vol"; return true; case OsiLastStrParam: return false; default: return false; } return false; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiVolSolverInterface::isAbandoned() const { // *THINK*: see the *THINK* in isProvenOptimal() return false; } bool OsiVolSolverInterface::isProvenOptimal() const { // if exited before reaching the iteration limit it is declared optimal // *THINK*: Granted, it can exit because the dual value is not improving. // *THINK*: Should that be "abandoned"? But then it'll be abandoned way too // *THINK*: frequently... return (! isDualObjectiveLimitReached() && volprob_.iter() < volprob_.parm.maxsgriters); } bool OsiVolSolverInterface::isProvenPrimalInfeasible() const { // LL: *FIXME* : at the moment the volume can't detect primal infeasibility. // LL: *FIXME* : The dual will go to infinity. return false; } bool OsiVolSolverInterface::isProvenDualInfeasible() const { // LL: *FIXME* : at the moment the volume assumes dual feasibility... return false; } bool OsiVolSolverInterface::isPrimalObjectiveLimitReached() const { // The volume algorithm doesn't know anything about the primal; only the // dual is monotone return false; } bool OsiVolSolverInterface::isDualObjectiveLimitReached() const { return volprob_.parm.ubinit - volprob_.value < volprob_.parm.granularity; } bool OsiVolSolverInterface::isIterationLimitReached() const { return volprob_.iter() >= volprob_.parm.maxsgriters; } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart* OsiVolSolverInterface::getEmptyWarmStart () const { return (dynamic_cast(new CoinWarmStartDual())) ; } CoinWarmStart* OsiVolSolverInterface::getWarmStart() const { return new CoinWarmStartDual(getNumRows(), rowprice_); } //----------------------------------------------------------------------------- bool OsiVolSolverInterface::setWarmStart(const CoinWarmStart* warmstart) { const CoinWarmStartDual* ws = dynamic_cast(warmstart); if (! ws) return false; const int ws_size = ws->size(); if (ws_size != getNumRows() && ws_size != 0) { throw CoinError("wrong dual warmstart size", "setWarmStart", "OsiVolSolverInterface"); } CoinDisjointCopyN(ws->dual(), ws_size, rowprice_); return true; } //############################################################################# // HotStart related methods //############################################################################# void OsiVolSolverInterface::markHotStart() { delete[] rowpriceHotStart_; rowpriceHotStart_ = new double[getNumRows()]; CoinDisjointCopyN(rowprice_, getNumRows(), rowpriceHotStart_); } void OsiVolSolverInterface::solveFromHotStart() { int itlimOrig = volprob_.parm.maxsgriters; getIntParam(OsiMaxNumIterationHotStart, volprob_.parm.maxsgriters); CoinDisjointCopyN(rowpriceHotStart_, getNumRows(), rowprice_); resolve(); volprob_.parm.maxsgriters = itlimOrig; } void OsiVolSolverInterface::unmarkHotStart() { delete[] rowpriceHotStart_; rowpriceHotStart_ = NULL; } //############################################################################# // Problem information methods (original data) //############################################################################# bool OsiVolSolverInterface::isContinuous(int colNumber) const { assert( continuous_!=NULL ); if ( continuous_[colNumber] ) return true; return false; } //----------------------------------------------------------------------------- const CoinPackedMatrix * OsiVolSolverInterface::getMatrixByRow() const { updateRowMatrix_(); return &rowMatrix_; } //----------------------------------------------------------------------- const CoinPackedMatrix * OsiVolSolverInterface::getMatrixByCol() const { updateColMatrix_(); return &colMatrix_; } //############################################################################# // Problem information methods (results) //############################################################################# std::vector OsiVolSolverInterface::getDualRays(int /*maxNumRays*/, bool /*fullRay*/) const { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "getDualRays", "OsiVolSolverInterface"); return std::vector(); } //------------------------------------------------------------------ std::vector OsiVolSolverInterface::getPrimalRays(int /*maxNumRays*/) const { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "getPrimalRays", "OsiVolSolverInterface"); return std::vector(); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# //----------------------------------------------------------------------------- void OsiVolSolverInterface::setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList) { while (indexFirst < indexLast) { const int ind = *indexFirst; collower_[ind] = boundList[0]; colupper_[ind] = boundList[1]; ++indexFirst; boundList += 2; } } //----------------------------------------------------------------------------- void OsiVolSolverInterface::setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList) { if (indexLast - indexFirst < getNumRows() / 3) { while (indexFirst < indexLast) { setRowBounds(*indexFirst, boundList[0], boundList[1]); ++indexFirst; boundList += 2; } } else { // it's better to convert everything at once while (indexFirst < indexLast) { const int ind = *indexFirst; rowlower_[ind] = boundList[0]; rowupper_[ind] = boundList[1]; ++indexFirst; boundList += 2; } convertBoundsToSenses_(); } } //----------------------------------------------------------------------------- void OsiVolSolverInterface::setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList) { if (indexLast - indexFirst < getNumRows() / 3) { while (indexFirst < indexLast) { setRowType(*indexFirst++, *senseList++, *rhsList++, *rangeList++); } } else { // it's better to convert everything at once while (indexFirst < indexLast) { const int ind = *indexFirst++; rowsense_[ind] = *senseList++; rhs_[ind] = *rhsList++; rowrange_[ind] = *rangeList++; } convertSensesToBounds_(); } } //############################################################################# void OsiVolSolverInterface::setContinuous(int index) { assert(continuous_ != NULL); if (index < 0 || index > getNumCols()) { throw CoinError("Index out of bound.", "setContinuous", "OsiVolSolverInterface"); } continuous_[index] = true; } //----------------------------------------------------------------------- void OsiVolSolverInterface::setInteger(int index) { assert(continuous_ != NULL); if (index < 0 || index > getNumCols()) { throw CoinError("Index out of bound.", "setContinuous", "OsiVolSolverInterface"); } continuous_[index] = false; } //----------------------------------------------------------------------- void OsiVolSolverInterface::setContinuous(const int* indices, int len) { assert(continuous_ != NULL); const int colnum = getNumCols(); int i; for (i = len - 1; i >= 0; --i) { if (indices[i] < 0 || indices[i] > colnum) { throw CoinError("Index out of bound.", "setContinuous", "OsiVolSolverInterface"); } } for (i = len - 1; i >= 0; --i) { continuous_[indices[i]] = true; } } //----------------------------------------------------------------------- void OsiVolSolverInterface::setInteger(const int* indices, int len) { assert(continuous_ != NULL); const int colnum = getNumCols(); int i; for (i = len - 1; i >= 0; --i) { if (indices[i] < 0 || indices[i] > colnum) { throw CoinError("Index out of bound.", "setContinuous", "OsiVolSolverInterface"); } } for (i = len - 1; i >= 0; --i) { continuous_[indices[i]] = false; } } //############################################################################# void OsiVolSolverInterface::setColSolution(const double *colsol) { CoinDisjointCopyN(colsol, getNumCols(), colsol_); // Compute the left hand side (row activity levels) if (isZeroOneMinusOne_) { colMatrixOneMinusOne_->timesMajor(colsol_, lhs_); } else { colMatrix_.times(colsol_, lhs_); } } //----------------------------------------------------------------------- void OsiVolSolverInterface::setRowPrice(const double *rowprice) { CoinDisjointCopyN(rowprice, getNumRows(), rowprice_); compute_rc_(rowprice_, rc_); } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiVolSolverInterface::addCol(const CoinPackedVectorBase& vec, const double collb, const double colub, const double obj) { const int colnum = getNumCols(); colRimResize_(colnum + 1); collower_[colnum] = collb; colupper_[colnum] = colub; objcoeffs_[colnum] = obj; continuous_[colnum] = true; colsol_[colnum] = fabs(collb) 0) { const int colnum = getNumCols(); colRimResize_(colnum + numcols); CoinDisjointCopyN(collb, numcols, collower_ + colnum); CoinDisjointCopyN(colub, numcols, colupper_ + colnum); CoinDisjointCopyN(obj, numcols, objcoeffs_ + colnum); CoinFillN(continuous_ + colnum, numcols, true); int c; for ( c=0; c 0) { int * delPos = new int[num]; CoinDisjointCopyN(columnIndices, num, delPos); std::sort(delPos, delPos + num); const int delNum = std::unique(delPos, delPos + num) - delPos; const int colnum = getNumCols(); CoinDeleteEntriesFromArray(collower_, collower_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(colupper_, colupper_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(objcoeffs_, objcoeffs_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(continuous_, continuous_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(colsol_, colsol_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rc_, rc_ + colnum, delPos, delPos + delNum); updateColMatrix_(); colMatrix_.deleteCols(delNum, delPos); rowMatrixCurrent_ = false; } } //----------------------------------------------------------------------------- void OsiVolSolverInterface::addRow(const CoinPackedVectorBase& vec, const double rowlb, const double rowub) { const int rownum = getNumRows(); rowRimResize_(rownum + 1); rowlower_[rownum] = rowlb; rowupper_[rownum] = rowub; convertBoundToSense(rowlb, rowub, rowsense_[rownum], rhs_[rownum], rowrange_[rownum]); rowprice_[rownum] = 0.0; lhs_[rownum] = 0.0; updateRowMatrix_(); rowMatrix_.appendRow(vec); colMatrixCurrent_ = false; } //----------------------------------------------------------------------------- void OsiVolSolverInterface::addRow(const CoinPackedVectorBase& vec, const char rowsen, const double rowrhs, const double rowrng) { const int rownum = getNumRows(); rowRimResize_(rownum + 1); rowsense_[rownum] = rowsen; rhs_[rownum] = rowrhs; rowrange_[rownum] = rowrng; convertSenseToBound(rowsen, rowrhs, rowrng, rowlower_[rownum], rowupper_[rownum]); rowprice_[rownum] = 0.0; lhs_[rownum] = 0.0; updateRowMatrix_(); rowMatrix_.appendRow(vec); colMatrixCurrent_ = false; } //----------------------------------------------------------------------------- void OsiVolSolverInterface::addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub) { if (numrows > 0) { const int rownum = getNumRows(); rowRimResize_(rownum + numrows); CoinDisjointCopyN(rowlb, numrows, rowlower_ + rownum); CoinDisjointCopyN(rowub, numrows, rowupper_ + rownum); for (int i = rownum + numrows - 1; i >= rownum; --i) { convertBoundToSense(rowlower_[i], rowupper_[i], rowsense_[i], rhs_[i], rowrange_[i]); } CoinFillN(rowprice_ + rownum, numrows, 0.0); CoinFillN(lhs_ + rownum, numrows, 0.0); updateRowMatrix_(); rowMatrix_.appendRows(numrows, rows); colMatrixCurrent_ = false; } } //----------------------------------------------------------------------------- void OsiVolSolverInterface::addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng) { if (numrows > 0) { const int rownum = getNumRows(); rowRimResize_(rownum + numrows); CoinDisjointCopyN(rowsen, numrows, rowsense_ + rownum); CoinDisjointCopyN(rowrhs, numrows, rhs_ + rownum); CoinDisjointCopyN(rowrng, numrows, rowrange_ + rownum); for (int i = rownum + numrows - 1; i >= rownum; --i) { convertSenseToBound(rowsense_[i], rhs_[i], rowrange_[i], rowlower_[i], rowupper_[i]); } CoinFillN(rowprice_ + rownum, numrows, 0.0); CoinFillN(lhs_ + rownum, numrows, 0.0); updateRowMatrix_(); rowMatrix_.appendRows(numrows, rows); colMatrixCurrent_ = false; } } //----------------------------------------------------------------------------- void OsiVolSolverInterface::deleteRows(const int num, const int * rowIndices) { if (num > 0) { int * delPos = new int[num]; CoinDisjointCopyN(rowIndices, num, delPos); std::sort(delPos, delPos + num); const int delNum = std::unique(delPos, delPos + num) - delPos; const int rownum = getNumRows(); CoinDeleteEntriesFromArray(rowlower_, rowlower_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowupper_, rowupper_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowsense_, rowsense_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowrange_, rowrange_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rhs_, rhs_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowprice_, rowprice_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(lhs_, lhs_ + rownum, delPos, delPos + delNum); updateRowMatrix_(); rowMatrix_.deleteRows(delNum, delPos); colMatrixCurrent_ = false; delete[] delPos; } } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# OsiVolSolverInterface::OsiVolSolverInterface () : rowMatrixCurrent_(true), rowMatrix_(), colMatrixCurrent_(true), colMatrix_(), isZeroOneMinusOne_(false), colupper_(0), collower_(0), continuous_(0), rowupper_(0), rowlower_(0), rowsense_(0), rhs_(0), rowrange_(0), objcoeffs_(0), objsense_(1.0), colsol_(0), rowprice_(0), rc_(0), lhs_(0), lagrangeanCost_(0.0), rowpriceHotStart_(0), maxNumrows_(0), maxNumcols_(0), volprob_() { volprob_.parm.granularity = 0.0; } //----------------------------------------------------------------------- OsiSolverInterface * OsiVolSolverInterface::clone(bool copyData) const { return copyData ? new OsiVolSolverInterface(*this) : new OsiVolSolverInterface(); } //----------------------------------------------------------------------- OsiVolSolverInterface::OsiVolSolverInterface(const OsiVolSolverInterface& x) : OsiSolverInterface(x), rowMatrixCurrent_(true), rowMatrix_(), colMatrixCurrent_(true), colMatrix_(), isZeroOneMinusOne_(false), colupper_(0), collower_(0), continuous_(0), rowupper_(0), rowlower_(0), rowsense_(0), rhs_(0), rowrange_(0), objcoeffs_(0), objsense_(1.0), colsol_(0), rowprice_(0), rc_(0), lhs_(0), lagrangeanCost_(0.0), rowpriceHotStart_(0), maxNumrows_(0), maxNumcols_(0), volprob_() { operator=(x); volprob_.parm.granularity = 0.0; } //----------------------------------------------------------------------- OsiVolSolverInterface& OsiVolSolverInterface::operator=(const OsiVolSolverInterface& rhs) { if (&rhs == this) return *this; OsiSolverInterface::operator=(rhs); gutsOfDestructor_(); rowMatrixCurrent_ = rhs.rowMatrixCurrent_; if (rowMatrixCurrent_) rowMatrix_ = rhs.rowMatrix_; colMatrixCurrent_ = rhs.colMatrixCurrent_; if (colMatrixCurrent_) colMatrix_ = rhs.colMatrix_; if (rhs.maxNumrows_) { maxNumrows_ = rhs.maxNumrows_; rowRimAllocator_(); const int rownum = getNumRows(); CoinDisjointCopyN(rhs.rowupper_, rownum, rowupper_); CoinDisjointCopyN(rhs.rowlower_, rownum, rowlower_); CoinDisjointCopyN(rhs.rowsense_, rownum, rowsense_); CoinDisjointCopyN(rhs.rhs_, rownum, rhs_); CoinDisjointCopyN(rhs.rowrange_, rownum, rowrange_); CoinDisjointCopyN(rhs.rowprice_, rownum, rowprice_); CoinDisjointCopyN(rhs.lhs_, rownum, lhs_); } if (rhs.maxNumcols_) { maxNumcols_ = rhs.maxNumcols_; colRimAllocator_(); const int colnum = getNumCols(); CoinDisjointCopyN(rhs.colupper_, colnum, colupper_); CoinDisjointCopyN(rhs.collower_, colnum, collower_); CoinDisjointCopyN(rhs.continuous_, colnum, continuous_); CoinDisjointCopyN(rhs.objcoeffs_, colnum, objcoeffs_); CoinDisjointCopyN(rhs.colsol_, colnum, colsol_); CoinDisjointCopyN(rhs.rc_, colnum, rc_); } volprob_.parm.granularity = 0.0; return *this; } //----------------------------------------------------------------------- OsiVolSolverInterface::~OsiVolSolverInterface () { gutsOfDestructor_(); } //############################################################################# // Applying cuts //############################################################################# void OsiVolSolverInterface::applyRowCut(const OsiRowCut& rc) { const int rownum = getNumRows(); const double lb = rc.lb(); const double ub = rc.ub(); rowRimResize_(rownum + 1); rowprice_[rownum] = 0.0; rowlower_[rownum] = lb; rowupper_[rownum] = ub; convertBoundToSense(lb, ub, rowsense_[rownum], rhs_[rownum], rowrange_[rownum]); updateRowMatrix_(); rowMatrix_.appendRow(rc.row()); colMatrixCurrent_ = false; } //----------------------------------------------------------------------- void OsiVolSolverInterface::applyColCut(const OsiColCut& cc) { int i; const double* lb_elem = cc.lbs().getElements(); const int* lb_ind = cc.lbs().getIndices(); for (i = cc.lbs().getNumElements() - 1; i >= 0; --i) { collower_[lb_ind[i]] = CoinMax(collower_[lb_ind[i]], lb_elem[i]); } const double* ub_elem = cc.ubs().getElements(); const int* ub_ind = cc.ubs().getIndices(); for (i = cc.ubs().getNumElements() - 1; i >= 0; --i) { colupper_[ub_ind[i]] = CoinMin(colupper_[ub_ind[i]], ub_elem[i]); } } //############################################################################# Vol-1.5.4/Vol/src/OsiVol/Makefile.in0000644000175000017500000005255713434066267016153 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/OsiVol DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/inc/config_vol.h CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiVol_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) ../libVol.la am_libOsiVol_la_OBJECTS = OsiVolSolverInterface.lo \ OsiVolSolverInterfaceIO.lo libOsiVol_la_OBJECTS = $(am_libOsiVol_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiVol_la_SOURCES) DIST_SOURCES = $(libOsiVol_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSIVOLLIB_CFLAGS = @OSIVOLLIB_CFLAGS@ OSIVOLLIB_CFLAGS_INSTALLED = @OSIVOLLIB_CFLAGS_INSTALLED@ OSIVOLLIB_DEPENDENCIES = @OSIVOLLIB_DEPENDENCIES@ OSIVOLLIB_LIBS = @OSIVOLLIB_LIBS@ OSIVOLLIB_LIBS_INSTALLED = @OSIVOLLIB_LIBS_INSTALLED@ OSIVOLLIB_PCLIBS = @OSIVOLLIB_PCLIBS@ OSIVOLLIB_PCREQUIRES = @OSIVOLLIB_PCREQUIRES@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VOLLIB_CFLAGS = @VOLLIB_CFLAGS@ VOLLIB_CFLAGS_INSTALLED = @VOLLIB_CFLAGS_INSTALLED@ VOLLIB_DEPENDENCIES = @VOLLIB_DEPENDENCIES@ VOLLIB_LIBS = @VOLLIB_LIBS@ VOLLIB_LIBS_INSTALLED = @VOLLIB_LIBS_INSTALLED@ VOLLIB_PCLIBS = @VOLLIB_PCLIBS@ VOLLIB_PCREQUIRES = @VOLLIB_PCREQUIRES@ VOL_SVN_REV = @VOL_SVN_REV@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiVol # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiVol.la # List all source files for this library, including headers libOsiVol_la_SOURCES = \ OsiVolSolverInterface.cpp OsiVolSolverInterface.hpp \ OsiVolSolverInterfaceIO.cpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiVol_la_LIBADD = $(OSIVOLLIB_LIBS) ../libVol.la # This is for libtool (on Windows) libOsiVol_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/..` ${COINUTILS_CFLAGS} ${OSI_CFLAGS} # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/inc ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'includedir/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiVolSolverInterface.hpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiVol/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiVol/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiVol.la: $(libOsiVol_la_OBJECTS) $(libOsiVol_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiVol_la_LDFLAGS) $(libOsiVol_la_OBJECTS) $(libOsiVol_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiVolSolverInterface.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiVolSolverInterfaceIO.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Vol/src/OsiVol/OsiVolSolverInterface.hpp0000644000175000017500000010164011575424216021026 0ustar sudipsudip// $Id$ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiVolSolverInterface_H #define OsiVolSolverInterface_H #include #include "VolVolume.hpp" #include "CoinPackedMatrix.hpp" #include "OsiSolverInterface.hpp" static const double OsiVolInfinity = 1.0e31; //############################################################################# /** Vol(ume) Solver Interface Instantiation of OsiVolSolverInterface for the Volume Algorithm */ class OsiVolSolverInterface : virtual public OsiSolverInterface, public VOL_user_hooks { friend void OsiVolSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); private: class OsiVolMatrixOneMinusOne_ { int majorDim_; int minorDim_; int plusSize_; int * plusInd_; int * plusStart_; int * plusLength_; int minusSize_; int * minusInd_; int * minusStart_; int * minusLength_; public: OsiVolMatrixOneMinusOne_(const CoinPackedMatrix& m); ~OsiVolMatrixOneMinusOne_(); void timesMajor(const double* x, double* y) const; }; public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound() { throw CoinError("Sorry, the Volume Algorithm doesn't implement B&B", "branchAndBound", "OsiVolSolverInterface"); } //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string & value); // Get an integer parameter bool getIntParam(OsiIntParam key, int& value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double& value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string& value) const; //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /*! \brief Get an empty warm start object This routine returns an empty warm start object. Its purpose is to provide a way to give a client a warm start object of the appropriate type, which can resized and modified as desired. */ virtual CoinWarmStart *getEmptyWarmStart () const ; /// Get warmstarting information virtual CoinWarmStart* getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart* warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const { return rowMatrixCurrent_? rowMatrix_.getNumCols() : colMatrix_.getNumCols(); } /// Get number of rows virtual int getNumRows() const { return rowMatrixCurrent_? rowMatrix_.getNumRows() : colMatrix_.getNumRows(); } /// Get number of nonzero elements virtual int getNumElements() const { return rowMatrixCurrent_? rowMatrix_.getNumElements() : colMatrix_.getNumElements(); } /// Get pointer to array[getNumCols()] of column lower bounds virtual const double * getColLower() const { return collower_; } /// Get pointer to array[getNumCols()] of column upper bounds virtual const double * getColUpper() const { return colupper_; } /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L' <= constraint
  • 'E' = constraint
  • 'G' >= constraint
  • 'R' ranged constraint
  • 'N' free constraint
*/ virtual const char * getRowSense() const { return rowsense_; } /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double * getRightHandSide() const { return rhs_; } /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is undefined
*/ virtual const double * getRowRange() const { return rowrange_; } /// Get pointer to array[getNumRows()] of row lower bounds virtual const double * getRowLower() const { return rowlower_; } /// Get pointer to array[getNumRows()] of row upper bounds virtual const double * getRowUpper() const { return rowupper_; } /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double * getObjCoefficients() const { return objcoeffs_; } /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const { return objsense_; } /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int colNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int colNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int colNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int colNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix * getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix * getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const { return OsiVolInfinity; } //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double * getColSolution() const { return colsol_; } /// Get pointer to array[getNumRows()] of dual prices virtual const double * getRowPrice() const { return rowprice_; } /// Get a pointer to array[getNumCols()] of reduced costs virtual const double * getReducedCost() const { return rc_; } /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double * getRowActivity() const { return lhs_; } /// Get objective function value virtual double getObjValue() const { #if 1 // This does not pass unitTest if getObjValue is called before solve return lagrangeanCost_; #else return OsiSolverInterface::getObjValue(); #endif } /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const { return volprob_.iter(); } /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector getPrimalRays(int maxNumRays) const; #if 0 /** Get indices of solution vector which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff( int elementIndex, double elementValue ) { objcoeffs_[elementIndex] = elementValue; } using OsiSolverInterface::setColLower ; /** Set a single column lower bound
Use -DBL_MAX for -infinity. */ virtual void setColLower( int elementIndex, double elementValue ) { collower_[elementIndex] = elementValue; } using OsiSolverInterface::setColUpper ; /** Set a single column upper bound
Use DBL_MAX for infinity. */ virtual void setColUpper( int elementIndex, double elementValue ) { colupper_[elementIndex] = elementValue; } /** Set a single column lower and upper bound */ virtual void setColBounds( int elementIndex, double lower, double upper ) { collower_[elementIndex] = lower; colupper_[elementIndex] = upper; } /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setColLower() and setColUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the variables whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set a single row lower bound
Use -DBL_MAX for -infinity. */ virtual void setRowLower( int elementIndex, double elementValue ) { rowlower_[elementIndex] = elementValue; convertBoundToSense(elementValue, rowupper_[elementIndex], rowsense_[elementIndex], rhs_[elementIndex], rowrange_[elementIndex]); } /** Set a single row upper bound
Use DBL_MAX for infinity. */ virtual void setRowUpper( int elementIndex, double elementValue ) { rowupper_[elementIndex] = elementValue; convertBoundToSense(rowlower_[elementIndex], elementValue, rowsense_[elementIndex], rhs_[elementIndex], rowrange_[elementIndex]); } /** Set a single row lower and upper bound */ virtual void setRowBounds( int elementIndex, double lower, double upper ) { rowlower_[elementIndex] = lower; rowupper_[elementIndex] = upper; convertBoundToSense(lower, upper, rowsense_[elementIndex], rhs_[elementIndex], rowrange_[elementIndex]); } /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range) { rowsense_[index] = sense; rhs_[index] = rightHandSide; rowrange_[index] = range; convertSenseToBound(sense, rightHandSide, range, rowlower_[index], rowupper_[index]); } /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose any characteristics changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int* indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int* indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s ) { objsense_ = s < 0 ? -1.0 : 1.0; } /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double * colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double * rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ using OsiSolverInterface::addCol ; /** */ virtual void addCol(const CoinPackedVectorBase& vec, const double collb, const double colub, const double obj); using OsiSolverInterface::addCols ; /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase * const * cols, const double* collb, const double* colub, const double* obj); #if 0 /** */ virtual void addCols(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj); #endif /** */ virtual void deleteCols(const int num, const int * colIndices); using OsiSolverInterface::addRow ; /** */ virtual void addRow(const CoinPackedVectorBase& vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase& vec, const char rowsen, const double rowrhs, const double rowrng); using OsiSolverInterface::addRows ; /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng); #if 0 /** */ virtual void addRows(const CoinPackedMatrix& matrix, const double* rowlb, const double* rowub); /** */ virtual void addRows(const CoinPackedMatrix& matrix, const char* rowsen, const double* rowrhs, const double* rowrng); #endif /** */ virtual void deleteRows(const int num, const int * rowIndices); //----------------------------------------------------------------------- #if 0 /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- protected: /**@name Helper methods for problem input */ void initFromRlbRub(const int rownum, const double* rowlb, const double* rowub); void initFromRhsSenseRange(const int rownum, const char* rowsen, const double* rowrhs, const double* rowrng); void initFromClbCubObj(const int colnum, const double* collb, const double* colub, const double* obj); public: /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, double*& rowlb, double*& rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, char*& rowsen, double*& rowrhs, double*& rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng); using OsiSolverInterface::readMps ; /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense=0.0) const; //@} //--------------------------------------------------------------------------- /**@name OSL specific public interfaces */ //@{ /// Get pointer to Vol model VOL_problem* volprob() { return &volprob_; } //@} //--------------------------------------------------------------------------- /**@name Constructors and destructors */ //@{ /// Default Constructor OsiVolSolverInterface (); /// Clone virtual OsiSolverInterface * clone(bool copyData = true) const; /// Copy constructor OsiVolSolverInterface (const OsiVolSolverInterface &); /// Assignment operator OsiVolSolverInterface & operator=(const OsiVolSolverInterface& rhs); /// Destructor virtual ~OsiVolSolverInterface (); //@} //--------------------------------------------------------------------------- protected: ///@name Protected methods //@{ /** Apply a row cut (append to constraint matrix). */ virtual void applyRowCut(const OsiRowCut& rc); /** Apply a column cut (adjust one or more bounds). */ virtual void applyColCut(const OsiColCut& cc); //@} //--------------------------------------------------------------------------- private: /**@name Methods of VOL_user_hooks */ //@{ /// compute reduced costs virtual int compute_rc(const VOL_dvector& u, VOL_dvector& rc); /// Solve the subproblem for the subgradient step. virtual int solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost); /** Starting from the primal vector x, run a heuristic to produce an integer solution. This is not done in LP solving. */ virtual int heuristics(const VOL_problem& /*p*/, const VOL_dvector& /*x*/, double& heur_val) { heur_val = DBL_MAX; return 0; } //@} //--------------------------------------------------------------------------- private: /**@name Private helper methods */ //@{ /** Update the row ordered matrix from the column ordered one */ void updateRowMatrix_() const; /** Update the column ordered matrix from the row ordered one */ void updateColMatrix_() const; /** Test whether the Volume Algorithm can be applied to the given problem. */ void checkData_() const; /** Compute the reduced costs (rc) with respect to the dual values given in u. */ void compute_rc_(const double* u, double* rc) const; /** A method deleting every member data */ void gutsOfDestructor_(); /** A method allocating sufficient space for the rim vectors corresponding to the rows. */ void rowRimAllocator_(); /** A method allocating sufficient space for the rim vectors corresponding to the columns. */ void colRimAllocator_(); /** Reallocate the rim arrays corresponding to the rows. */ void rowRimResize_(const int newSize); /** Reallocate the rim arrays corresponding to the columns. */ void colRimResize_(const int newSize); /** For each row convert LB/UB style row constraints to sense/rhs style. */ void convertBoundsToSenses_(); /** For each row convert sense/rhs style row constraints to LB/UB style. */ void convertSensesToBounds_(); /** test whether the given matrix is 0/1/-1 entries only. */ bool test_zero_one_minusone_(const CoinPackedMatrix& m) const; //@} //--------------------------------------------------------------------------- private: //--------------------------------------------------------------------------- /**@name The problem matrix in row and column ordered forms
Note that at least one of the matrices is always current. */ //@{ /// A flag indicating whether the row ordered matrix is up-to-date mutable bool rowMatrixCurrent_; /// The problem matrix in a row ordered form mutable CoinPackedMatrix rowMatrix_; /// A flag indicating whether the column ordered matrix is up-to-date mutable bool colMatrixCurrent_; /// The problem matrix in a column ordered form mutable CoinPackedMatrix colMatrix_; //@} //--------------------------------------------------------------------------- /**@name Data members used when 0/1/-1 matrix is detected */ //@{ /// An indicator whether the matrix is 0/1/-1 bool isZeroOneMinusOne_; /// The row ordered matrix without the elements OsiVolMatrixOneMinusOne_* rowMatrixOneMinusOne_; /// The column ordered matrix without the elements OsiVolMatrixOneMinusOne_* colMatrixOneMinusOne_; //@} //--------------------------------------------------------------------------- /**@name The rim vectors */ //@{ /// Pointer to dense vector of structural variable upper bounds double *colupper_; /// Pointer to dense vector of structural variable lower bounds double *collower_; /// Pointer to dense vector of bool to indicate if column is continuous bool *continuous_; /// Pointer to dense vector of slack variable upper bounds double *rowupper_; /// Pointer to dense vector of slack variable lower bounds double *rowlower_; /// Pointer to dense vector of row sense indicators char *rowsense_; /// Pointer to dense vector of row right-hand side values double *rhs_; /** Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows). */ double *rowrange_; /// Pointer to dense vector of objective coefficients double *objcoeffs_; //@} //--------------------------------------------------------------------------- /// Sense of objective (1 for min; -1 for max) double objsense_; //--------------------------------------------------------------------------- /**@name The solution */ //@{ /// Pointer to dense vector of primal structural variable values double *colsol_; /// Pointer to dense vector of dual row variable values double *rowprice_; /// Pointer to dense vector of reduced costs double *rc_; /// Pointer to dense vector of left hand sides (row activity levels) double *lhs_; /// The Lagrangean cost, a lower bound on the objective value double lagrangeanCost_; //@} //--------------------------------------------------------------------------- /** An array to store the hotstart information between solveHotStart() calls */ double *rowpriceHotStart_; /// allocated size of the row related rim vectors int maxNumrows_; /// allocated size of the column related rim vectors int maxNumcols_; /// The volume solver VOL_problem volprob_; }; //############################################################################# /** A function that tests the methods in the OsiVolSolverInterface class. */ void OsiVolSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); #endif Vol-1.5.4/Vol/src/OsiVol/osi-vol-uninstalled.pc.in0000644000175000017500000000045511507672605020733 0ustar sudipsudipprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiVol Name: OsiVol Description: COIN-OR Open Solver Interface for Vol URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiVol.la @OSIVOLLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src/OsiVol Requires: vol @OSIVOLLIB_PCREQUIRES@ Vol-1.5.4/Vol/src/OsiVol/Makefile.am0000644000175000017500000000334012243462613016114 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1152 2007-12-28 03:59:07Z andreasw $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiVol # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiVol.la # List all source files for this library, including headers libOsiVol_la_SOURCES = \ OsiVolSolverInterface.cpp OsiVolSolverInterface.hpp \ OsiVolSolverInterfaceIO.cpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiVol_la_LIBADD = $(OSIVOLLIB_LIBS) ../libVol.la endif # This is for libtool (on Windows) libOsiVol_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/..` ${COINUTILS_CFLAGS} ${OSI_CFLAGS} # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/inc ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'includedir/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiVolSolverInterface.hpp Vol-1.5.4/Vol/Makefile.in0000644000175000017500000010573013434066267014141 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ # Don't do src/OsiVol recursively, since src/OsiVol/libOsiVol depends on src/libVol @COIN_HAS_OSI_TRUE@am__append_1 = src/OsiVol @COIN_HAS_OSI_TRUE@am__append_2 = osi-vol.pc DIST_COMMON = README $(am__configure_deps) \ $(srcdir)/BuildTools/Makemain.inc $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/vol-uninstalled.pc.in \ $(srcdir)/vol.pc.in $(top_srcdir)/configure \ $(top_srcdir)/doxydoc/doxygen.conf.in \ $(top_srcdir)/examples/VolLp/Makefile.in \ $(top_srcdir)/examples/VolUfl/Makefile.in \ $(top_srcdir)/examples/Volume-LP/Makefile.in \ $(top_srcdir)/inc/config_vol.h.in \ $(top_srcdir)/src/OsiVol/osi-vol-uninstalled.pc.in \ $(top_srcdir)/src/OsiVol/osi-vol.pc.in AUTHORS INSTALL \ config.guess config.sub depcomp install-sh ltmain.sh missing @HAVE_EXTERNALS_TRUE@am__append_3 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_4 = .Dependencies-stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/inc/config_vol.h CONFIG_CLEAN_FILES = examples/VolLp/Makefile examples/VolUfl/Makefile \ examples/Volume-LP/Makefile doxydoc/doxygen.conf vol.pc \ vol-uninstalled.pc osi-vol.pc osi-vol-uninstalled.pc SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(pkgconfiglibdir)" pkgconfiglibDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfiglib_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = src src/OsiVol DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSIVOLLIB_CFLAGS = @OSIVOLLIB_CFLAGS@ OSIVOLLIB_CFLAGS_INSTALLED = @OSIVOLLIB_CFLAGS_INSTALLED@ OSIVOLLIB_DEPENDENCIES = @OSIVOLLIB_DEPENDENCIES@ OSIVOLLIB_LIBS = @OSIVOLLIB_LIBS@ OSIVOLLIB_LIBS_INSTALLED = @OSIVOLLIB_LIBS_INSTALLED@ OSIVOLLIB_PCLIBS = @OSIVOLLIB_PCLIBS@ OSIVOLLIB_PCREQUIRES = @OSIVOLLIB_PCREQUIRES@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VOLLIB_CFLAGS = @VOLLIB_CFLAGS@ VOLLIB_CFLAGS_INSTALLED = @VOLLIB_CFLAGS_INSTALLED@ VOLLIB_DEPENDENCIES = @VOLLIB_DEPENDENCIES@ VOLLIB_LIBS = @VOLLIB_LIBS@ VOLLIB_LIBS_INSTALLED = @VOLLIB_LIBS_INSTALLED@ VOLLIB_PCLIBS = @VOLLIB_PCLIBS@ VOLLIB_PCREQUIRES = @VOLLIB_PCREQUIRES@ VOL_SVN_REV = @VOL_SVN_REV@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories # ######################################################################## SUBDIRS = src $(am__append_1) ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = doc/ufldoc.bib doc/ufldoc.ps doc/ufldoc.tex \ examples/Volume-LP/lpc.cpp examples/Volume-LP/lp.h \ examples/Volume-LP/Makefile.in examples/Volume-LP/reader.cpp \ examples/Volume-LP/lpc.h examples/Volume-LP/Doc \ examples/Volume-LP/Doc/doc.bib \ examples/Volume-LP/Doc/doc_latex.tex \ examples/Volume-LP/Doc/doc_latex.ps \ examples/Volume-LP/Doc/doc_latex.dvi \ examples/Volume-LP/data.mps.gz examples/Volume-LP/reader.h \ examples/Volume-LP/lp.cpp examples/Volume-LP/lp.par \ examples/Volume-LP/README examples/VolUfl/Makefile.in \ examples/VolUfl/doc examples/VolUfl/doc/ufldoc.bib \ examples/VolUfl/doc/ufldoc.tex examples/VolUfl/doc/ufldoc.ps \ examples/VolUfl/INSTALL examples/VolUfl/ufl.cpp \ examples/VolUfl/ufl.par examples/VolUfl/data.gz \ examples/VolUfl/ufl.hpp examples/VolLp/Makefile.in \ examples/VolLp/INSTALL examples/VolLp/vollp.cpp \ $(am__append_3) ######################################################################## # Installation of the addlibs file # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = vol.pc $(am__append_2) addlibsdir = $(DESTDIR)$(datadir)/coin/doc/Vol ######################################################################## # Maintainer Stuff # ######################################################################## # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = $(am__append_4) $(VPATH_DISTCLEANFILES) DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/BuildTools/Makemain.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) inc/config_vol.h: inc/stamp-h1 @if test ! -f $@; then \ rm -f inc/stamp-h1; \ $(MAKE) inc/stamp-h1; \ else :; fi inc/stamp-h1: $(top_srcdir)/inc/config_vol.h.in $(top_builddir)/config.status @rm -f inc/stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status inc/config_vol.h $(top_srcdir)/inc/config_vol.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f inc/stamp-h1 touch $@ distclean-hdr: -rm -f inc/config_vol.h inc/stamp-h1 examples/VolLp/Makefile: $(top_builddir)/config.status $(top_srcdir)/examples/VolLp/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ examples/VolUfl/Makefile: $(top_builddir)/config.status $(top_srcdir)/examples/VolUfl/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ examples/Volume-LP/Makefile: $(top_builddir)/config.status $(top_srcdir)/examples/Volume-LP/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ doxydoc/doxygen.conf: $(top_builddir)/config.status $(top_srcdir)/doxydoc/doxygen.conf.in cd $(top_builddir) && $(SHELL) ./config.status $@ vol.pc: $(top_builddir)/config.status $(srcdir)/vol.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ vol-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/vol-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-vol.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiVol/osi-vol.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-vol-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiVol/osi-vol-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-pkgconfiglibDATA: $(pkgconfiglib_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfiglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfiglibdir)" @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkgconfiglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ $(pkgconfiglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done uninstall-pkgconfiglibDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/. $(distdir)/BuildTools $(distdir)/doc $(distdir)/doxydoc $(distdir)/examples/VolLp $(distdir)/examples/VolUfl $(distdir)/examples/VolUfl/doc $(distdir)/examples/Volume-LP $(distdir)/examples/Volume-LP/Doc $(distdir)/inc $(distdir)/src/OsiVol @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfiglibdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-pkgconfiglibDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-exec-am: install-exec-local install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-local \ uninstall-pkgconfiglibDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-libtool clean-local \ clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-recursive distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-exec install-exec-am \ install-exec-local install-info install-info-am install-man \ install-pkgconfiglibDATA install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-generic mostlyclean-libtool \ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-hook uninstall-info-am \ uninstall-local uninstall-pkgconfiglibDATA ######################################################################## # Extra Targets # ######################################################################## test: all cd test; $(MAKE) test unitTest: test # Doxygen documentation doxydoc: doxygen doxydoc/doxygen.conf clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) clean-local: clean-doxydoc .PHONY: doxydoc install-data-hook: @$(mkdir_p) "$(addlibsdir)" @COIN_HAS_PKGCONFIG_TRUE@ PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \ @COIN_HAS_PKGCONFIG_TRUE@ $(PKG_CONFIG) --libs vol > $(addlibsdir)/vol_addlibs.txt @COIN_CXX_IS_CL_TRUE@@COIN_HAS_PKGCONFIG_FALSE@ echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libVol.lib @VOLLIB_LIBS_INSTALLED@" > $(addlibsdir)/vol_addlibs.txt @COIN_CXX_IS_CL_FALSE@@COIN_HAS_PKGCONFIG_FALSE@ echo -L@abs_lib_dir@ -lVol @VOLLIB_LIBS_INSTALLED@ > $(addlibsdir)/vol_addlibs.txt uninstall-hook: rm -f $(addlibsdir)/vol_addlibs.txt install-exec-local: install-doc uninstall-local: uninstall-doc doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## # Make sure acinclude is using most recent coin.m4 @MAINTAINER_MODE_TRUE@$(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 @MAINTAINER_MODE_TRUE@ cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date @MAINTAINER_MODE_TRUE@$(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh @MAINTAINER_MODE_TRUE@ cp $< $@ # Take care of updating externals (if Dependencies file exists) @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@$(top_builddir)/Makefile: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@.Dependencies-stamp: $(srcdir)/Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); BuildTools/set_externals Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ touch .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@update-externals: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); svn update .PHONY: install-doc uninstall-doc update-externals # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Vol/INSTALL0000644000175000017500000000637413434065343013123 0ustar sudipsudipThese instructions are for UNIX-like systems (including Linux, Cygwin and MSys) only. If Microsoft Developer Studio projects are maintained for this package, you can find instructions at https://projects.coin-or.org/MSVisualStudio ********************************************************************** *** DOWNLOAD *** ********************************************************************** You can obtain the source code for the Vol package in two ways: 1. Obtain the source directly from the COIN-OR subversion repository (recommended). For this you needs the program 'svn' installed on your machine, and output of "svn --version" must contain "handles 'https' scheme". Assuming that you want to download the 'trunk' (where the development happens) version of the code into a subdirectory named "Vol", you type svn co https://projects.coin-or.org/svn/Vol/trunk Vol To download stable/1.1 you'd type: svn co https://projects.coin-or.org/svn/Vol/stable/1.1 Vol etc. 2. Download the tarball from http://www.coin-or.org/download/source/Vol and extract it. For example, for the release 1.1.0 you type gunzip CoinUtils-1.1.0.tgz tar xvf CoinUtils-1.1.0.tar More detailed download instructions can be found at https://projects.coin-or.org/BuildTools/wiki/user-download ********************************************************************** *** CONFIGURATION *** ********************************************************************** Go into the directory that you just downloaded or extracted (e.g., Vol or Vol-1.1.0). Then create a build directory and configure the package by typing mkdir build cd build ../configure Note that you might have to specify additional options, in case you don't want to use the default choices that configure makes (e.g., compilers). Please visit https://projects.coin-or.org/BuildTools/wiki/user-configure and the Vol Trac page https://projects.coin-or.org/Vol for more information. If everything went fine, you will see at the end of the output "Main configuration of Vol successful" ********************************************************************** *** COMPILATION AND INSTALLATION *** ********************************************************************** In the directory where you ran the configure script: 1. Compile the code by typing make 2. To test if the code works, you can type make test 3. To install the code, you type make install After this, you will find the executables, libraries and header files in the "bin", "lib" and "include" subdirectory, respectively. More information on the compilation and installation can be found at https://projects.coin-or.org/BuildTools/wiki/user-compile ********************************************************************** *** USING THE LIBRARIES *** ********************************************************************** Now you can link your own code with the installed libraries. You can find examples in the Vol/examples/ subdirectory, see also the information at https://projects.coin-or.org/BuildTools/wiki/user-examples Vol-1.5.4/Vol/vol-uninstalled.pc.in0000644000175000017500000000041611507672605016136 0ustar sudipsudipprefix=@prefix@ libdir=@ABSBUILDDIR@/src Name: Vol Description: Volume Algorithm URL: https://projects.coin-or.org/Vol Version: @PACKAGE_VERSION@ Libs: ${libdir}/libVol.la @VOLLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src -I@ABSBUILDDIR@/inc Requires: @VOLLIB_PCREQUIRES@ Vol-1.5.4/Vol/configure.ac0000644000175000017500000001007613434066267014360 0ustar sudipsudip# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 430 2019-02-22 21:42:15Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([Vol],[1.5.4],[coin-vol@list.coin-or.org]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License.]) # List one file in the package so that the configure script can test # whether the package is actually there AC_CONFIG_SRCDIR(src/VolVolume.cpp) # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) ############################################################################# # Standard build tool stuff # ############################################################################# # Get the system type AC_CANONICAL_BUILD # If this project depends on external projects, the Externals file in # the source root directory contains definition of where to find those # externals. The following macro ensures that those externals are # retrieved by svn if they are not there yet. AC_COIN_PROJECTDIR_INIT(Vol,6:4:5) # Check if user wants to produce debugging code AC_COIN_DEBUG_COMPILE(Vol) # Get the name of the C++ compiler and appropriate compiler options AC_COIN_PROG_CXX # Initialize automake and libtool AC_COIN_INIT_AUTO_TOOLS ############################################################################# # COIN components # ############################################################################# AC_COIN_CHECK_PACKAGE(CoinUtils, [coinutils], [VolLib]) AC_COIN_CHECK_PACKAGE(Osi, [osi], [OsiVolLib]) AC_COIN_CHECK_PACKAGE(OsiTests, [osi-unittests]) AC_COIN_CHECK_PACKAGE(Sample, [coindatasample]) ############################################################################## # VPATH links for example input files # ############################################################################## # In case this is a VPATH configuration we need to make sure that the # input files for the examples are available in the VPATH directory. AC_COIN_VPATH_LINK(examples/VolUfl/ufl.par) AC_COIN_VPATH_LINK(examples/VolUfl/data.gz) AC_COIN_VPATH_LINK(examples/Volume-LP/data.mps.gz) AC_COIN_VPATH_LINK(examples/Volume-LP/lp.par) # Setup doxygen AC_COIN_DOXYGEN(CoinUtils Osi) ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) AC_CONFIG_FILES([Makefile examples/VolLp/Makefile examples/VolUfl/Makefile examples/Volume-LP/Makefile src/Makefile src/OsiVol/Makefile test/Makefile doxydoc/doxygen.conf vol.pc vol-uninstalled.pc]) if test $coin_has_osi = yes ; then AC_CONFIG_FILES([osi-vol.pc:src/OsiVol/osi-vol.pc.in osi-vol-uninstalled.pc:src/OsiVol/osi-vol-uninstalled.pc.in]) fi # even though we do not use the config_vol.h file, we config a header file here # this is for the compilation of OsiVol, which works much better with -DHAVE_CONFIG_H # instead of a list of single defines (-DPACKAGE_NAME=...) in the compiler flags AC_CONFIG_HEADER([inc/config_vol.h]) # Finally, we let configure write all the output... AC_COIN_FINALIZE Vol-1.5.4/Vol/LICENSE0000644000175000017500000002622711511202647013070 0ustar sudipsudipEclipse Public License - v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. Vol-1.5.4/Vol/config.sub0000755000175000017500000007772611420636474014070 0ustar sudipsudip#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Vol-1.5.4/Vol/doc/0000755000175000017500000000000013434204224012616 5ustar sudipsudipVol-1.5.4/Vol/doc/volDoc.ps0000644000175000017500000061175610611734503014432 0ustar sudipsudip%!PS-Adobe-2.0 %%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software %%Title: volDoc.dvi %%Pages: 10 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR12 CMR10 CMTT10 CMTT12 CMTI10 CMEX10 CMMI10 %%+ CMMI7 CMSY10 CMR7 CMCSC10 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o -t letter volDoc %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2007.04.19:1446 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: f7b6d320.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10 % cmdunh10 cmr10 cmr12 cmr17cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8 % cmsl9 cmss10cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10 % cmssi12 cmssi17 cmssi8cmssi9 cmssq8 cmssqi8 cmvtt10 % /TeXf7b6d320Encoding [ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: 09fbbfac.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmsltt10 cmtt10 cmtt12 cmtt8 cmtt9 /TeX09fbbfacEncoding [ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /dieresis /visiblespace /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /dieresis /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: 74afc74c.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmbxti10 cmff10 cmfi10 cmfib8 cmti10 cmti12 cmti7 cmti8cmti9 cmu10 % /TeX74afc74cEncoding [ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright /numbersign /sterling /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: aae443f0.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmmi10 cmmi12 cmmi5 cmmi6 cmmi7 cmmi8 cmmi9 cmmib10 % /TeXaae443f0Encoding [ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi /omega /epsilon /theta1 /pi1 /rho1 /sigma1 /phi1 /arrowlefttophalf /arrowleftbothalf /arrowrighttophalf /arrowrightbothalf /arrowhookleft /arrowhookright /triangleright /triangleleft /zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle /eightoldstyle /nineoldstyle /period /comma /less /slash /greater /star /partialdiff /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /flat /natural /sharp /slurbelow /slurabove /lscript /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /dotlessi /dotlessj /weierstrass /vector /tie /psi /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /alpha /beta /gamma /delta /epsilon1 /zeta /eta /theta /iota /kappa /lambda /mu /nu /xi /pi /rho /sigma /tau /upsilon /phi /chi /psi /tie /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: bbad153f.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmsy10 cmsy5 cmsy6 cmsy7 cmsy8 cmsy9 % /TeXbbad153fEncoding [ /minus /periodcentered /multiply /asteriskmath /divide /diamondmath /plusminus /minusplus /circleplus /circleminus /circlemultiply /circledivide /circledot /circlecopyrt /openbullet /bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal /greaterequal /precedesequal /followsequal /similar /approxequal /propersubset /propersuperset /lessmuch /greatermuch /precedes /follows /arrowleft /arrowright /arrowup /arrowdown /arrowboth /arrownortheast /arrowsoutheast /similarequal /arrowdblleft /arrowdblright /arrowdblup /arrowdbldown /arrowdblboth /arrownorthwest /arrowsouthwest /proportional /prime /infinity /element /owner /triangle /triangleinv /negationslash /mapsto /universal /existential /logicalnot /emptyset /Rfractur /Ifractur /latticetop /perpendicular /aleph /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /union /intersection /unionmulti /logicaland /logicalor /turnstileleft /turnstileright /floorleft /floorright /ceilingleft /ceilingright /braceleft /braceright /angbracketleft /angbracketright /bar /bardbl /arrowbothv /arrowdblbothv /backslash /wreathproduct /radical /coproduct /nabla /integral /unionsq /intersectionsq /subsetsqequal /supersetsqequal /section /dagger /daggerdbl /paragraph /club /diamond /heart /spade /arrowleft /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /minus /periodcentered /multiply /asteriskmath /divide /diamondmath /plusminus /minusplus /circleplus /circleminus /.notdef /.notdef /circlemultiply /circledivide /circledot /circlecopyrt /openbullet /bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal /greaterequal /precedesequal /followsequal /similar /approxequal /propersubset /propersuperset /lessmuch /greatermuch /precedes /follows /arrowleft /spade /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: 0ef0afca.enc % Thomas Esser, Dec 2002. public domain % % Encoding for: % cmr5 % /TeX0ef0afcaEncoding [ /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def %%EndProcSet %%BeginProcSet: texps.pro %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMCSC10 %!PS-AdobeFont-1.1: CMCSC10 1.0 %%CreationDate: 1991 Aug 18 17:46:49 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMCSC10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{14 -250 1077 750}readonly def /UniqueID 5000772 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337 900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA 87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98 076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518 9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9 CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30 40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B 7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5 FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC 81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D 5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90 CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6AD4B2482A 0E7D070D7497892E9E942DF58E88CAF0C8221BF36BF7C435BF2C683A4A2EF4CB E85820A8AD3486155A40143011BA9D76297F46DEF69ECA4596D6E4CAABF84091 22A96A4BC78A8DD072FEB759A68A44BE1164638B6D952147EE3C628F9A022060 1D1941E73310943FA782532ABCCC88593FD63E7E2CECF6665C04DB48D641ABD3 AE1BB468638681E96394B9E7BED1D13E534B897DB90EA6EC706BAAE06BE2FEFF 1DFA5258113E9B4CD2D36655973864574E0E8D6291E48A8C62203F679B7ED838 6F7CBD523C2943ECA994CACE63DBE3C3FC80F475ABF6BD5EDEADE08D828E6B17 5214BD5F21630E27E724B35363A18CF0B48D51668918485C95E62ECAF9B074F0 964A96B6DDF52898A1A1E87062D11057BE9118F188054B2F9ACD4E3BEA2875B4 3B9145597373C6711602F7BEBAF9B8FD9522551F21728F2B78D7451FE59801DC 2487A3FE56659120CCF65E963BEAE8712C450AD1EBE0E3087D43469EFED1CDF8 3FFAA89D7C881A52CFA3AE981363901E22779EBCACD96D15D450FB31F4A2DEE3 DA8417EEF80A6B2333BA47E5BA8A37F64E89A137F0F7F1623A8CF849B6CB0156 18D7DC0885FBE78442E42554C9647E1C51122B1FCF5DDBB21D6566AD789B6FDD 76AE2037FEE46F8070C72E6CDA71F56D254B97A433257EC33941DF7EBA6965CF A897E5A0B30C4009E69DD31752BC639C6A1D010DF47F6BAC5D5C4C55510848C9 0D74E64F7CFE4616B4E7E75C4D53D79C81C42824285CF5D8C41F4BCE3C4C51EB 509A3F9B4B73AE5B7879117953B502FB7ECC04F1330FCA973FCBABE0CA7EB78D F0E7DFE4B3285EA293633EA20EDA0E66985D2553B76B745E3822B57D6A605FC2 A99C6EB6A59DE3167E2CCEF85E042A4667907770FB61E4A721C19B378FA3FBCF 9F923EA4A6BA9FD17FC4CBD7CF15FF709AAD24CB77B155F4953B2FB77C7CF500 E2A85CBC037CC13C10C9B0954A5BEF1CFF0D870CC7F84605851368F8EF5ADEAB 4B798F7D18716F70E99FE03EE06C9FAE71740A57A47BE74F15CA1552B79354C7 7CFCFB839FDFD6D40EC14FF814101476920E40C564854635C75FFE5FEF012E6E 10D5226C24C9CEAF6C9EA175721C1F4CC747BBF24F23514E3D79187129F79B19 3F3DB9CC40247B072C8C083399916FB306F36AE6C68019C0B3599A1F72B11BF4 82C780EED11487C4A2CC5CB40905B4F3F7284BE0A6EB251BE4A64A7366A27A09 C9AA0BF27BE04B0646BF6FCFA11D75C47A6A0CBC8583CA6DD6408C64E234E2EE 3B2286A52EE8492409A1AFA090144BF284C649F639F09A720DC0A43B1185E948 7DD64604CEB6B276A6A8F03190AAB2817A38A7AC8FD6F90A70BEEF4F22FC9A2C 9F5E03493683C3E3AEC3319DE4AE132C0E959093F693B30CB5B07DE5682AC3DF AFA26C9A206EC2855B9FBFAA0B246B2B0A2D7E05BC965C2C9A1EDA2FDEE6BFB5 DD162FE718F61F8A31DA3C18FD1505AD75D1B9F42DDD43027B6D58291627D80C 104D07F0D5E32D226E44731926D7B8BA0287367429E74F1E70AA2F0709ED6741 F250FDAC40B17F864A5B1AD5E854534524B9EB00457833E3AEFDFE434A6C7DDE 24E7E5F79CC7391117F6DEFF266A8CD85A22B668DECB706AC81CA6A65915E045 FE3B92890F3257BB1F8E31B86A15D64AA1C0EBEFE24AB2CF12648DA80AD2E4E4 90FA435D57ACE97027F39112C3F4C270977E0A13BFB696C047DBCEE0AABDFB4E 0596825AB7F78E9DF853E831E47B79A754F94CE27B0366862AD2DFC643A9C8BE 282EF1A0A3168110F314EE87B538DC8445D5C56DF8A5815F96CFD9AD8E71B5EF 45A3A6BAC99B004E8FD80931722A0BC5D281C73F1DA8B40A08B61A762ED31CC7 16C29308959831F6677F4654C801307286A81CCFF1794446860ECB6D2D0B3B2E 1582CECDEA13E7F1047DF20D16DE23DA97691217B866C221D27CCB8B28DF59FA FE5C6C25ADC4BDC3E259D3BC1F853EA54F35AA8B9C58F188420004DF061D7D37 F86A054199190723C1291608E2DB094BBDFFF1BEBCC108CBAFC9DB5151CF689D 54AEA7B04995E4684A177BE46495CB2EFDFB99B64B103DCE4350CD8D455986E0 DF5A26BDA86917EE2855BFABED8D8FF28FFB7FC94FD97A74DDFFEC4AA6E1C07E A99C623669B1BD7127FFF3932184F86A88373093462B64F0687B47450DD00280 B9C893AB63993ED7E4D83B922566991E45CC2B0179D0B31133394EB2794E6E59 D9A975A30115479B210F22E618B7773D92E5E1D3EE9976B9CD3CFEB06A849D48 8BB0E1B39B433E0D3868FA7212544573DECED92EB96B5088C64C6F0BEBBDD00B FAE834353084A4E74E2D26FF3CF10BCC102D6ADB421CB0256308D3DBB253C245 73A55A3DA6F0BCF5FBA5DC9C27BEEC22C6BD3839402F44B380D5A26B02478256 51703D8858A0A9F4C8F074A58D0013670633B56978443D2656A9FC51013A87BB 553D92E4BFFE1F3EA9F12D9E0F23EC38B347E05B2E69799771B93CA33D0D7E0D BCAD06119DC1D97237D0E902FA0047F2F6BA2129267E29AF25D1666D3085AA0E 93A583A0D5F44D7E359B026A2C53E42FE60C1AA20F8DBCF53EC122332A7DA756 BF8A5C4ED979BA8A73E876238DB87CB9115C5F1FBDF6A6B4F78CFE9603CDB91A 58FE66D625E822E3F64F09BB94851B2407031FE6DF6A0DE382A18C8A686E9D29 81A56B58A92FE7D0C81127C851CF2BDDB280155B557539C0EC71C6E2B15D04CF A47049A2DB0CB4C177A3FD232B8DE4FD8BDA0F4A14BB79660BFF2D42C7349E4E 2CFEC9CE893BA25884D5857F2EA774D613C974C6E3D152B0BC718EF96B8FEA62 62A806986AB6E43D4AC5FE95AB459A479EBC08DCABA0AFD4994F4585080B6629 BC2FEDB02D2815CE22A476D24363A721D9EA0C0E617F59CAA393DE48A7BAEE65 56822B7B2BDC3704A2357B1B9327B6A58C3ED1BB000E561BFA5761692618A035 08B7AB9FE673D9EC16DE50EB3A114724CAAC127B687501DDDF8D33BBBA3B3B36 D263B67EF331B7559108FD15B64AEBD38E165310F0D5A46EADD81AA537BB968D 6E2033C7A7BD773EE2F02CADBC56E0000A2E7D194AA4158DC00B36AC8B8EB11C 413A814704D7FB893E61B2445D083235DD3B609845E9CC7997C86D1FD06C9C45 528DBAC942366DAFDC72CBBF31FF02AFB7C8D41CFE3526F28AC4E468BEB91980 CF6A9D3B14F680DC444B21D1D24F3805616BB42034871F1D2AD20B16558E5ABA EA74D831C6D6F956C4D1E657ACAF500819A46DBD52F8B77A9BAD7FB23576F2DC 6FA96997E0E22278651CE7E4822F502BC9870F437CDB259346E62E36C1E56B71 0DB64FD7B0F0F085B27C5324E1A537F38D27E99DC485626CAC7F81B3682B1892 31ACAB5B5A41C4472225C7BEF5E6E8B91BA4711E48EFB4DBEF99A2C4E9EB2326 12592FB9D42CD6F7A4194497287ECA94BA63E637FD0A158C7DF30437AEDEDE62 90EDFF0AD24C426B78B1E8F2DF62E4D768F2DE00FEFCD860475AE444F9C73D78 E92DB722033FD42890B8780D12A2B4EF63B0618B39B49088E53077CF09AFE27F 607B0BCFB71B8B5182801E60800ED0F1D6DE2B5C880F580C548A7D79B90EFC96 202CF996F71FE33A58A4677ACC8E7729929706803E95D999B390FE48BCC6F309 87F9E146AA6F294BFF3D4081AE9C2003098F63D68327B1DB3262E4B08FA27289 5155516A91177C9362243F1CE1CBBA552FAEF002B389B7A6BF67BB9D0D848EE8 CBA5BFDFA29A9C8653DAD1B265591A8CA7E3B1BCC5F18B862961FBAE41006589 0461042FD5EA27006D97DE63B50B503A1B8F9BE2D62DF1059117BEAC982362E6 A08A6ADF4A1091181F5271983A6E9A5CB9EEE79FA033110340A4848C0ECF15E8 ECE797F649346C3E439D22B939A6F1438DA114B096320DA866D35B4703453BE2 72B9CA51420AA5C2D1D2A469B70A23A49A8743F55A15E797B8F8188EC7019573 087A995A3B9BD9F4E187BFA74E85FCA5DAE3EB6007D1A940D0698EA43092A918 881F942E81CCC2AF395B46E544804368E143F0C654B748E72AA6AFCD7F07DBA7 00E49C8A4A2A5D7224FA43AF894CC0845FCD9DD56891A488036E3C04C5105C7A 1073E32E715F8CA81A97BD1F8FECA0E5045DFD6EF5E490D22572C0AD137BA221 C40AF7F56D994144EA588C93D6DEA7AA5DC5DF4B74FEB9C7363A44CA059D51A0 785750CF5E5B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR7 %!PS-AdobeFont-1.1: CMR7 1.0 %%CreationDate: 1991 Aug 20 16:39:21 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR7 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-27 -250 1122 750}readonly def /UniqueID 5000790 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8 47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C 8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4 78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486 1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E 01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0 F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30 8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7 455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2 9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105 EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B 52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97 563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F 0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB 7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1 0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4 1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4DE3E3F6222F 7A252B780C86447859579C68F90DAAF6EE95B109204E64D31D55EB156A888618 4ED51EDDF45FF1F83F38EE95B33F8C88B2B6B0724AEADF6312D876DAC8713D6E EC7928640272232ADC8B7F171CA57A3FCC461E974C6953D672E693C5CF329423 6D09B579BB95B355F2429356498DDEE4CC4B9C556E9F4E033F5FD3AFE78DEE97 2FAFBC332DAA8007F233EA82C8F06916F4CEBF6DB7A76A656848259AFC579BEB E8FEE4E81E1540F8B4DE29BD6C1D4214BD8D040D38B069DEA286DE068A662F9C 79D89479515BDE45485EE068944AD2C1D24A8A496342CC361712932A81F92778 3F643E5E806298D80D261B55DDB3F6A8E98205BEEDBDFF18553210451AE38AA8 AD1DB274A62B38AE666CDD0FAA8CB82ADE47AB01C980AB7424BDA7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMTT12 %!PS-AdobeFont-1.1: CMTT12 1.0 %%CreationDate: 1991 Aug 20 16:45:46 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTT12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def end readonly def /FontName /CMTT12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-1 -234 524 695}readonly def /UniqueID 5000833 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E 3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B 426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161 E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32 6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5 A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE 0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC 85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4 C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC 12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D 048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8 0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725 741D08B9DB688731A6C9886C15A83C28DADCC81385EA239E045E8F3670CE03DB 9EE77ED067036595C9F3B1854343BE3A12E486B6E5A2F8AC44FA5378D28DCCEE 306B0E283AA444423F9A4FF38E2B56DCF67A39CEB2C643DAE86865517D5D0371 CB8797208ADEC637330A3A57902C9A88EDB75A7C16FA9850075D9F19578EC666 1353CC1FC512D59DFF847ACCD17671C7B980499729E5647560D9FFE78F5A723F 01AB18E3E32070D4894D4E5BA7D1D0EA6345EBAD72F5BFCB1C05F4152DCC071E E4B02B5A0141A249E49DC4292A3BAD7E3933E2EE38FF804EFCCC40CCA5BF2EAB 6169C0597E0CE9595ECB2B9B5745FD7555181CB37845F33D0E765E8019655F0D 3020CF5E5D2A9789341AF333618B2B0A15E43C9E6EBF1C497171512ED76C2AC7 3AE81732479B8658B157026A8F1E6227EDE40F92B6242539FAD8D70EF4827EC3 11716B3D8CF82A54ADB9A1B29562A76B37E6518FB7F6F9D9D96C362ED17AEE3E 5AB9DAAA797AD4F134818AC575F68117AFF1A61FD0C4D2AF4FEC2F9F8702235F 68605EAB342E941EA38773D3C57543E8CD916AA59C8EAA2407D6E93F9D37ABB3 ECB9EFEB2E056B8818C813E182376DB9B4FC2C90B08FD4767F081F82BC5AB255 5EF3F535BB38E2D8E82DB13144E1FE6495613483BD862258EC54661E040370E3 8515945768B8F4908EB7AAF2325134E27409BEB5220EED2A83AA5AEDA6F46CDD 2CAFCD22729B5A6EBF0F55514D5BEA51D746FB7D7A5F5BE64564B5F6F83ECED8 DE565963924FAF4BFE5636DD19F2D4C075E277FB6638827EB3B3888F020149CC BE39B951B759EB8252F5A8D7B1EE740A4D0C2C7C9013FB47A6F1CF766A3FFA91 A611F0E027DC24F9B5ECE526301DBE2CD8C331E84C639E1CAFFAE62920EE104D EE374519CA008FA8169BF04003ED4B2E54D4F65A166D648E0BBB1A98D6707CB0 78C5BFBAE022C091DE63B894B84775084D6B5707477523D18ED2B5F4B5F1D049 226C0AB87665EED2548F0FE6E5EAE2CD7837239864561C3994CC59941F4BE02A 76389C3D0E48CFCB2F189DFB0A6DB5D73004B882F176734D0B168C513FD4E36A 3D0C267B31A1F106DABBD9B5EB0501DC7941798EAE905B229C10F72BF4E92789 DAEBB8E1E4999802EBCA66B4933157CCF5F81B7CD396845C782F8C2CFDC70D8D 456D1E3F73210A680CB2937660AA301134C6F1420628CD7FB34CD4F7D44A1CC1 A51D27AA14ED3B99495FEF30B013C3AD6712F2201D081A960D58AFC2CCB433F2 C17536455C7B5970BA476DBCCD5374B1B067F5B8C122D74740D03601A8E637F3 1FC100A66A872470D0170517FB6CAAF4BBB05A78AD92AEB3F0D0BCB9D04082A5 2CF46EE8ABE3A8036B4AA0EB77AB9E42AE8302F493F14158EA1DABB25F177F73 59BF0246F7965ED948303EF0F0B19A217C3348E52FA987FC40CEC31D7F3F161C FFD1F1F6E895B9342B8949CABF8D3573CFBA6A687F8E375CC0F03A1F1F426BE2 759311E3904CD2746D92E0170E94DB9BBB58F3BBF46797B87B3BE7084C19ABAB 2C080F816AFF74693B69183F8825B79E38BCFC59F2CAB83D95C8975D8780F863 AAA06F50E7F6B46BC33C68FE6E9D62C483E7226C3E7E3D5F650836B0A6CA5091 DF4EF51321BF23EAB3CC82D43BCACE738A40C28C988BB9CFB75628612449038A DEEDD9DA7BD4DC4E0540AFB6C9A33B758CC50658A46D46BB28F6F5CDBAB93416 89D4B55BF8D03F187D4A5461188C80CC152D0548FFA9A3D3C14D94F6DC5E07D3 362744A03A38953903746AFC0B67569CAB1EFA0DFEA8D5DE7D5E6500ECBE0674 46F723A264537D183DF0462BA60656999A59862983AD4BE5FBEF991ABE7232CF EBD53F8038235785D5D83CCE73EE9EA7EF46C9975318E5DDCB98B38F2488D717 CF326DC3922BB8779CEE3D3305AA3E7F6E14CEE80070E1C656002166525DB564 0165D62A37C1C9EE1996A16486ACA8998F5C68C1FA1D54EB47E584693FFB78CD D2803DE40DC71EBC16267FF22631B012CDA7E3E6D6829144F550462801520AE0 2554327D23A02CB141474B114C73659F5BC05ACC2338762FA7A83A3AAEBF1ED2 8084DF3F4696ACACE01DD131F30A505E9ADF9D30A6AF2B30F10A4308979F603B 6CCEA728130E7C9C09E4562AAD1A972883887A7AE8CFBF617F4689120EFDAB6E FDF82B8E1B8449F590629B5F9E199B3DA1F4D9334A7BC79CB72CF8A1D10B59F9 EF04C8827A5E000D152A5B0A31AED5AD9933BD66E88D7B438CD7B8808DF238DB 751DBB422F1366045450DE89C004C88B885B39DBB4118419289531FEB8BAA22C 4FA975428F6C1893A134580D9F40CCC29C72C1025DAC86C7ACB87C08118074FB A3321B6FB85809AB804596254A0265852340891A43135300A75D05C562CA27D9 40C0FFE7C660B62973FBA21E4CB43647A24FE6ABBC09905CF3D925B83F663C4A 046CD1D35217EFB9097C952816B7016B58A93712F8CE8E7F19AED332A5DC0FE4 F8CD245945F5DC10FA408E9D4977A612A183D49927179C3C73240D0A5F42C5C6 859BAB64EA5295F26594933D59B8AC6E2C903E7D80E29BB909D5E678B44027AC 95C7DBB97F561CAF75ACBCDCDB2ED705F38C4B2C9DE64B821F18B09C9E44CD17 BD056BF4CA8C37CF8C0CEF59A3D27D9103A19C3EF8BF64AAB8BB2906AB2A669E D5EEFB32D9288471DE44A8E72793D4AD6473F47C4A6FB9298F935B6EBC65894A B4E513A878F08403832DD89BFCAF5EB9C00DB777303B8F87C9D5BF95C51C6B35 A98645DCDB6D6A1DB67A184BDF7B9B7E2DFCBBA676044B0A5B1DB2AD07382FA1 EBFEE9FA666C316776E4C627CBB7FD5D7825594233664772ADB31F1DF31361F8 9AC9D7D23E0F289AB3EF12EAB50138065A50828E96A64669B72FE6EE47B890D6 4651110B563D74888C8CF761947D735EBC821EA56B68436C24F1A939ECF5E15F D3E42D1D969E0971BFE801882E2E1AAB9B7921777DF65C67C17BD1B8BFD7E741 960B3CACC9A317B052B3C97EFD6CC3CCA0182816E6B9F6BBAFDB1F9B9D9F2B41 55E710828223F3682D41962847F048F03EA41B956EC05A46EDDDBFB83504FF34 5495A8BB72D7632F57C0F06672A9A8091FEFCFB79D88B6EE5736824D1E22B113 C988A0CF0226F2EB890554371836FA75FEE2D71D2B7EF38947B921E6171C35B3 2FCF9F15A72B12496192377009ADF91EDB9C86CA25161663CD72C0EA95CC896D 9F706E4BC5543BACE9126CA0FFEE32FAE811A85688B79F8D99DE2D0028B816A6 36EC7E22FAFFB45EDC3F627A48ADAABDD5CD45DE9C29C615BE6C1383F96D43C6 876A883F434A6371BB57444FB6A935754DE9270202D54D53CE07DD0D589D9C50 20B2FCC6A21659471D4BF5865B1D9181D665BE31E215E66D08F8714E73087023 55FCB67DBA5190741A67585331987413B006CC832101FD3DB31B76AE23AEF206 926A05BB597A231C7D3C413E78FBF72D4F45806F288EB1BAE2A523E7C2F1E336 3E406BA5AC767B57EFB621C3332C8FE192B26DD340977C39537C68FFD218A51B 88AFF79C7DBEE3FDAD5640B649B81CBE6464555949BCCAF35BA65A47C0242DE5 D3B3334424D053A865AA6862B1BB34EACB4326A3B64867EA8A5BA8D491F65587 6185934CDB2514554507879BAA55C33E7B718D02378EB7CF85B686DA8ED65A35 8873945AF615FC4B97BB40FBA5AD26F293E85F9CDBE75E8A4E89B2B56B8FB4FF 849E4AEDA4B626277501C4F8DB451EB2CB61D2DB19063E0715ECCACCF91FC726 F4819221C5EADEE5A53835EE6C92DDE3EC0704168C596964212BA87D7FFE900F 337297998D4A27AB1129FA06914AD971E49CC42330DFD43E05DF1B17214C0418 8C012A8049ECD88DC64AA009DB26D7FF33281C9E59F6C58BCB11237C7AAB8E1D FC78DBBC7B4D1396D535DEBF3C9E83F9E161EA9E532C8763C32A2C235B2E86B6 D17D3C7EAA6F074449859ED4888716B92524B4E349F346AD9C5105218FBA0FC5 EE9FECDB3FD1725A77E618C297FBB94BFC5C997EAD7F2BCA84701BAC326AE748 97C8CC172DC03DBFB491918A066BE508AB35DF0E30222452D055156F93F6B29C EB40BEDB257E74A833AF490A5370A20D4A75F27EA32E326F8BF5255767C22ADA D52FE7D4688A5F1F6DB300FD2F226CC89B30630EFC0DABA9CFEC7C3AEA64BD38 46CD0CB4801F334A5247CC083C7D6B043C791AA6D827490D52AEA8D72EC81047 B10555B2866911D7B8B99149B31CD40BAF08D7123FD39327099BCD1BF3813DF5 BFE6FE51388319592055A265CEAC9D3A5EC4A6C46804BC6F08F803607C3E4030 3B2571CFA9F90C715F7CA3E6F3EFA8DA97BBE4FC98EA69CB642D49E4BE9481D4 AC3EC1B2E272E2437B40BB71936FE2AF41846C26FEC6ECED16C53D517FACE79B 09838CD577CFFD5B2BD7F4EDA75568B289035DB3B7CC29C7793BF47EA0161A86 F5F5D96ACCF125F96680D7FDB02398E881F98413813F389BE73D34DB7DAEE12B 18E2AAD2BB3D652A72BC09376F9DC810495D644FBD979F47BB53A9DFBC2F46A2 56DCBB379BD1C90240F749AC9EF8D21BE360C23A9E92AF48ECBE8C3193B21251 04E4611495BC4A3BA8F034C6E804107A78515620075C5476DEBA3236CC6085C8 68F9ED0599539158B494C2C5874BAF532FA3B4224B002F41641230A0FA2D7402 F5CEACAFA63F893B5F8631E9CCE6252FEDA12CC81F52C758A4CD5CD627C7322D 58A011168E13F881B4FDABC5E26A48F37BFD1AE0E8CCB077D3CC2783628AC29C 175FB722DE8F9FC9AEB6CAB1FBEA7944AE939E912EBBBA127AE6E0D996B25483 A06C41350C655E88450ADC23C729546FBE602F7C35B5CF47BE92075330F398A4 AB2409CC8844335D60E98ABA0723A6E25F3D47ECF0752D97F39185BACBF045D3 2061BFA33944835CF04868916086E74143A8EC3827A6D4A8A87CB5AAE0E34EF3 B387B3C69CAC8BEF1159468BEA0F00B6ABA09780DBF28A722E675D7B26EA5029 CF159B56D83179A903CA2DCE835F2D2C12C7AB6787B3237779FC6345B307AA7B 11DA02EB15A9BE3F382E55167F1259300561EA4C6F1299A9641E02F05D44DF91 0939C48174FB0CC8924EB61A6A82BA3829BB7688ABF91A4BD6CFB86E14611DB4 C55CDC12135FF684A65D2CB58CE24200A043231189ACBD1E08DB8BBB43318185 AFC641D31C56A854D403EBCB278EE42A23072430B8114B9F836C64000C82B34D 238F0DFFE96E3925258E36810EBFD7F8A86A640DABC355FEE8DCED71A6084F49 42AA80195CC667362345E3F1B09C0EB0907DD3F5EEC1C8A6EC52D4660FC62EAA F0F54D53A073DB13C86BB507532A119F85DC6577D4BD698F833AE1F198353CF3 5B0A60F62B32FEF2C8EE8D8BF93E0F29155A5E7ADBB0193323F1119A92BB03D2 7BB13400654D6A4D481488BCEC1009A5178594495751199FEAC3675B27244B21 6870E399103D62A84E184FA3B7D4D3E4962572338862E75A8DDC2D1C5F1FB37C 2B7F376F6638ABEE191334876B444E5D7F9D432082C0C7F9550A64E8164CB6C3 E4FE4942B26F4BC0B7F8451A11FC75AF9D05FCD47116127C248263D405A51681 98CC1F340CA196A32408915BF5FC3F27CFCBBF3D8CFAAD53FA52651BFF7DFE00 3F10E6ABAA28F4709F2643E355EF32D6D57A445CA30DF1F49A83EF2EDA5EC4EE 4D073CC546D23832006E2FEF5A51DFEA91D4B49DED5E6077F41CCD1A0A59AC9F F2E5BFD0D400893EC25BFD84F49F93D6EE2067AA5FBF6E94443C4E1BA81C1A50 F46C16204A445F7C0FB43879E871D25F51B1AF532842121CB239B9F308CFE6F1 0851993688E7B84219431B76AF8D312A9E78FC6A4C4D1EB03C1D08B75835ED0E 068B68E4A3922E8DDCFE3DD30523EFC18C6F15840E3651F4C5536A98F5F61C2C E90A5455210E9468D1B3F7D9CA72DD71436D329CAE22FA2287681D540D29DB84 D474DB05080EADE8B798CD7C942E00A67209EC301CBF37D544053041BB15D245 84CC51B3B777A37E0FC92D5F913F603A7DC1BA5EE2D2AD 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.1: CMBX12 1.0 %%CreationDate: 1991 Aug 20 16:34:54 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMBX12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-53 -251 1139 750}readonly def /UniqueID 5000769 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712 B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99 AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26 7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF 20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390 B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D 68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809 D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E 26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26 77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299 BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8 30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5 148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23 337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598 0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6 472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26 35F916BCBB167F2F245FDA07FE755463AD8B6F1EF005EB430CBCA5EE5E4A9708 7EBF23818E698F396CB6F5E22DC77D42DD57567D32ADE9654EC2D03D6A0C7D9F EFA4A51929C74818303D2E015F68F1CB46DB727EFE99CE3EB71B492B43CD8C00 155CF3E0CDAD98B72DE38C740EBA08C3EFB254AB50F154E462DE2D89A6E23312 2680B4B6AE20C12DE6BB85E569F0EC743FA12AF48BE7CBB81CEF679FD2F9401F 3B85982E3B094600B80FBF56DBB201B81035AEC805F67F2F206864A60C20377C 52C12A242A31757A80EA4AA4C3D7CFF7CF3460E7C8619DA9E283C921ACE73991 A7858BCC287F85AECD00D6925B5DC803F1ACDD6FE45C94A85D16352E8076B5DC D90AAA451EFAFE11D08E303BC653BFBF9CBA7E7AED15473C101E67DB0294E292 FBE5F13E4A41FD37F1EDEEE779EA70F3C5C062DEBDAAEF132B451E549FA8E650 EB9A1A8A2766C59862018E2338D7A255FF888DDBADF368C624D661620FA44568 4F403DB785C61F0B40398791E5061EDFDD6FA9597A3079164DA3A0FCDB43B7AE D5CE746C101F7B5861749ACB3106465676588F4563ECA6153CEB34D1245DF8C9 A27E90530D8C5C2B61714EA6F39D23DD6A43EE898D79652AA1A0607DDD195A68 688C3FF57EEE8DE1DD4B36FF4F8B33D2DB15AD6BFEB1DA7D87E0F0B6D7FD4A22 9520A4773E18C7681E6059D95FA20D9C6A773ECC270E40DAFF1873282B78464E D998CC3469A3FF98B0B87DEAF1F72FD1E305E36E16141F08A451B3A47A13732C F46004287265E8A9EF710B4160AFDDFB0AFBDC30E1B23E0B8C942C3013EECE8F EEE9AD239565F1F467B6EF9B39BF556538CAAB1E9B021FD341AD3C3DE674AA13 1F28964EBA954587BF93419636E8C0942E33897706E8DE3DA019C5E10E5322C5 8B9FB71F305C6FBA591A64883600DBBE5A889148D99A29424835DA599B69550F AC78F58F281BB91BECD569B6B216D4F70774947E6D4D4DBFCC7E921CCC08E73D 3B7C37192A82EEC0524DFF0603E8CEEA7E8D5DAF81A2687D956CA94E0FF2BE44 AC7ABEE9FE6653365631468F3058476D7E78ACD716B0DE74A60383EB7A213A20 A42BC57EE446EDD82B23F003E5E3F5B37D6CA05B1B509B3EF907EE4E5291B82B 8071E81D2F51AC56E24D119934C6196B44EFC8EA4388625874AD43D71B1C4C2A B47924D8CA30B65379E6950460A4E5BDE1040FE8D7D3ED76366708687CDA5664 884DE8CE56DFA87E7C3C3B403E4EFD037DCA129EA0A2C8F3FC2858BB31519C7E 6BFE7F48D5B18E5753EB184B522B7CC584CAC81A177DE42D52ADBD57260E386F 9A65E368610E14034C30826AD63676209DEAC2C7EDFD11A02DC8C7CC64025BF7 612BF28522CCB14755CF51CBD76B72FE2F5BAD826DA26496A2CE0DA43C1886DD FA5639FA0E3FFC09E62B3715D476D5EDED41BE4F502F64EACD10E893D6C07D72 C2577F2DDE9C193483A8B243098C9E9CC5AAC5ED5AAB7DD0DF926C4434313EDD 362F313DE490AB3CF9D4376A1479C0E0ACB6013542E9862475C5A4683399A5B7 001021DAB5DCC0D83C46C6A158978164412AD2BF2A727CB179EE2E3F040EC3AA 3775564BDB608DFD6557FB4D3B9AAC59D3288CFF61487A16DE23DD3146B77B66 8BF0D25054280A38164B9279CD6E499860A5AEAA4B2CE97AAD315EE45CF1A22F A61F3D5F31B286D2D270D5450E2805D86801DF851B38014125880BE7D398BF3A 627F652AF8B95331879CB05E1916C6775EEBCCABC039F930F5AAF4567BE18984 33DD1C8391A70378639FA8BCAAF1AA00706850DA7E18957E9FF79ADAD8CCA4DA B74DCC655454CFAC0FDB72CE564C5C46BAE0CB38CE1029B5A01BB3251DE8A3DE 12E7A1704C16441F950BB1073D1316721D422BF59856B55ACD77E886A7516104 1C8A79EA254BC4E0E314F96705748009F168712FB0E4CD4336131ACD2FD206C3 F01D60412AB4A222F41FBA0B07FEF4831B82DA3CD2DF48D2FBAF0E954F072EEE B5466101B6409E37138A02DD55D8C7624875A202839AFAAD6F8879BA1BBF06FD 868E8AFCE542A170DECB905ED85686D4CA145042E56FF9451B2F9B9AA8486073 C78C71E2B6E91F008BE2B1560E1D0AA187F9B830AB10A02FCF96DAF54098B638 C88A09530813B5AE0B923F3FB27514CD633CFD2F2747D895E31240FC20DEC2CA 8A8470E200244643ACD222275111F9D86C6409DEE819D122128EAEDCDA9DFFB9 76626F49D0921FEBE28DAEE873B72C43D503B1A58F2782EF1AB39A3BB5AF2059 D0BE5E34734A14C59F54D0CC26892029995E1A34BE1A955B04671EEE2B3D8927 DC49C0A4492E94DD8CD912F9702B36A61338B98C092C5749A4D3967C70AAC86E D58DA0E63F8BA97651C58B6DBC9FB4DB7C062D8FDF4716B77902D5F0B4A15F5A EA45A6405378921F43ACB455CDFA5E375B75DD2EE178341E53E7D620DFFC271D 7AB8F8E7BE72DDD552DCE441C9671FA9A2944E09D959A12D9AEF03CE21202091 68655FADB8C553ED3557C8B58C6004A6D171ABED1A00AC25B8CF7A0FF6D8B4B9 67A55D79F2F3F12942E18940086EE552FE453675B54193813DC2219F19F35FCD 4F3ADF3DAE1200110783CA18C790717246E7A589CE284A038FDDF94077013B26 D51E4BAA110601A6D3825983B5902EF6E443B6BB7A59401117E4D5A756C2F009 79AE43852E13D68F75535DC9950E119CB43BEEDF55BC3D39835D548260B5A1F5 12D414BB85A772C46E316D3504A9573B27AF0D399CEA27ADC5A7991F5E9D7148 C8D9844213C43543CCB646B0E5ABF63B22D2BFE6CE114C1BCA99C001B9978121 368B5EF5058974D84EBC64EA92FCF6E4914BD19D7EC2E94C7073455689C71C72 E919397E390C1A98430E6C848C9FA063A6504E944386DD4833E472325374FB3E 38C30977ED91C8AA94D37D6325499D7BFDE1B2030923729B25369B6C408B154E A35D010D979E2BD5E9CBD331AE8163DE95A9B23F19CDBA694D353F06C7A2596F F6C5EF8FFB7310FFCDD5FD101A76AA0498F3D648B1213F1C7542FA484868F7DF D5E4F84B5A79297465D00940399BBFEEE19F10688EC1B2FC58EACE00999D0A48 540784B0105F3414C6DF94359F570DCFC15B89209D7603A9C4A000B1F1458155 F142186230F4727462E01E11099F2542267EFF2661872463C2AD2AF65EBEFE56 76114243072AA0A7F7C895659BEE1D3BCF9C634A5551378E42B617331D4FEADC 55D82D70429D5F7EDDE00F587CAE99A2554F2E38001099A503BE8C7CDC874199 E022A82DA4295C81FD8690929098D8B308B7559643F441FAF631479DA6BF0DC0 E344174FBF7F16850EF6EB2265EED1FC17F5E0234F6EC8F52C6E7083B4F9EB2D 02E4BCAE859D3B2615859B5CA13541F013ED363EAA11B75CBDCCFF8B4CDF924B 4923DEE3A42FCBB54EFBFC562F78DADF62EB0F01F1C1E0BEFA419ED8128CD1CB B05F1656324BF4C2C73F37282079D2B69D3C45888725F9822DD76CEFE74B7354 09D51906329B1A6C7122C1D8ABA4636F8FE20DE30B9EF24B527FB224622F1DBE 5605B139C0DA2E90FAC09EBB38A3481F9446DD48BCAF024A153CC21B1C6D9093 B49D0D253F8C5F20B4299019E4A949F4CE14DFF139812EAA9972043FFEA53C99 4EE4F3A033A18C3A9F5DD27F3751FFD3A45FDA0B31437AEBC2AA25E2894F6639 4F2BDB1278F281C7E42916B2D1B2819A0D081F0712EF394792F622C2933F50AF 918176C774040A5A8F314B02FF8F6F27CE0E52B0FBB132EE22D507659076DE51 7BB21EA5EDC2A79D01C5E2B97086008BC81C622A20310058C27F0F5E45B4B75E 18FAE9626F5DF981C56A605C6153A00ACCEEE96441300499985B3E6DF515E9EE 2A3FB707FDD2398D5F7A59E869C15E4AD7DD3C3A1DF5011602576EBB65DBC4D1 9DDBDACC341C5EC043DA8264A57C2E66289E86591A86F9F49A4D05D1D528824F B001F641D9BC3E06D7180A7AD13FB51531696AD59F9AD9F202364C4766070BFC 978AD29F5D68850B01F22022DACBE255B2F0CACA1057F6B468C4764F5DAEDDF2 29B9492A71390BA076BF3C29CF65C54F477B4A421B36C9E7CC5A958D70116001 0010B593773CD39F705B875DAC54E95FB3210BDDCA4495198816D88C68DF1CCA 0BA947393111B6B253711BBF7702576EB30D9C9019DA6309D91853A4A24112FA C7E001991FB8EF75082001A5F2CC204C1006E8761172EDBF4EECFB2F09A68F06 3113A99D07D1F0FE5D990C4C9EF8254975584B39152B2F9F2B8CF813CE3C9961 CAA57592A7CD72004DC0853757744FE606C170B276D42C176156184115FF1685 D7EB2F16294C59DAB801A2938F82E347EA002E9626E021F18895C4C0D7660AE5 D2EE54E71FC94137F828F96D38A9CE9DB17293AC530BBD233F231FADC28D44AC 85ADEFEEAFF96D5E89465A8515E89F4CCE19A05426AD72D518E45D38AF252621 F21AFD11051D90897BDED8B6D4E37FFAC69DAE195ABCD8894D738E58E0EA2F51 46BAB9D75B4BE51ADC198CA7EAA4EA67692D68F07DAB9B71DC9F81D07316B296 14631E568A38CBAC11D4400C385555AF4B2500B621CE9AA984ED7B6D819330A7 ADBC72C1AA34489D71134D79E8AD04726E99F66F2F5D574DCBA1D94FBC7B3B96 3F1CDDE984B51A2E052C06CA3D46E6C50ABA56DBD39F0AEFE19AF84AF7A67A52 90E7393E685228E1E64402988B4AE771F3531C8BB266858DD0D59B94E65D4483 A6B486046EF59A5C962110135F5BC0FE13B657095F8AE85069F52E614A9B4932 E6DC3D5B990D8DC487E281820BA524CC216B7C0F47C8AEF539EEC691606F4E2C B3F975B8A0C1F6F85178F9D1EC19EA60854152629EFA01667AB7C16EB9EDC972 6C8782E8BE4EF2909E9875833BA28C2FFB6E2B457D198A1A00F0B7C69D1C20EE 91BFBFE0427161D8F05D5ED777BE5E251D17870C4315804926308E36F8AC4D70 106C6F9A457E24EB006914228CFB183E7EC068B7B93982272A50966BF62401EC 81DA727B89A3D6AD2C592D52111E0173946A62221D56883B08F3AF6483D10587 C140F09510637B99FAE2F8040613D1B4A03DC95BD6721BBE47873C850EA4127F 191C4A5452FA7F5D25A881C79E4D3E17FC3CD4B04036F92BD1854F9918F88688 66BB2CFA4D190A7189ED1A8178B6445A182B6E635F383E1C22533F1E005293CD 4610D22043ED7D24CE709C006B845C5D6793171C8A8F47B2978C23013E43A0DF A8980FC5F6446EF29922D0A7574910E3494B820D9B680B44F2E50F030EFEE772 DF08636625C223D1BC9EF011DCCBCCCF792CD9DB0A3962642D21D1AE1B26832E 387B0DD7A739016F19B87AA3A8F6C6977D2687AF7A8987C925FD961575921A2D 7769CF341E8D08C05F0033A6E02AEEBA50C2E61BC9246314B8FEF4F0661C11A2 8EE6971ABFA287B6453FB90637F896E0744A5C341EA918188849B739B0EDEFF2 8C78F91F5A561BF8726BE19807DC5635814E8A436A250EF6967550BCBCF3706A A416FA89F604EC81EE1EE9C912BDC30924B6FEDD90E8531027704F677B213750 2CFAF09BD7E966C6683CC25A63053C011E4D8B24DBA66E72722C412A265B2005 90A2BDE58D7338A1DE0C484C44F59ADF7BE2BE03D3B841F0434C51442B56A053 B7288BD9EA729D16FE3CBAAA8F21DB5BA66C57897759463667FA68C084A484FD ABEF8FEF40DA823349A0ADDD967E154710EA7785B3D1976E1CE98B3FA3DFEFB7 58F68186EC1A5B25A79ADF2D082133D116ECBCD67A46C6F15B68A5D26EE74436 9BDE647F4C8EF461712A90E07D539E025605F570CCF04A3FC73C1F525CED3ED9 B1E73C88398E699441180700971D3FC661D7AE634497F7F3BED3CCD2ACC850CC 1B5E90CAE289439A06DF06BCD88D9FA7C4726840DB48CC45C65887B1A26EC1E6 41FA6D1AFACB71D2160346B79321AEAC6D2BBB921122C12E9FC5ABD02ED27414 42802F8D4FCAC08A554F288E2801D070AB2DB34D23294BEA38595E9CD2551384 903BD035AD46EC40BE7FDA8234155D567FDC5780E71549671E30B0CE3B3C0B99 5E850DAC2E3C33D107556A6C57C82A037B7D2966735F41A832447A407F7C2ACF ECB97467D6A90971B1463963C981413BDDB8DCDDC16D15ECD8A909AA6F74E00D AA5B130FBFB684FEFB6EE1D418318AD322CBE16ACD3F504313B58C719A54F3EE FA4B432E972A43ED9B4EFA5D20D4F800D2 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.1: CMSY10 1.0 %%CreationDate: 1991 Aug 15 07:20:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.035 def /isFixedPitch false def end readonly def /FontName /CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-29 -960 1116 775}readonly def /UniqueID 5000820 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A 27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF 5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A 71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C 515DB70A8D4F6146FE068DC1E5DE8BC5703D288CAFFEFC421ABEC649FD87E34B 8152B8403C7DB49860ED86B02711EE6E5B72D7D9B408B1FB89D5C1C78ACAA4A0 4E176AB7D7281992BE94DC902056793D2F8F189600650843FCB5CB77BDE88C4B 449C6606FAA7FCFF6A644A04CCBA7CD432E5D8EA8EAF4B1ADD43E917068D88CC F64F0764ED9415FBDAE75C836ED48BF8D165A6D341B85EF6B66806E44BBAA4B2 1BACD90DD368197DF143572E919FA7A5303AD0170C7ED917E68567B3C0F87B7A 9FDB7460F52296B171B8883AA76A43E3E610D0F941EA5CC830FC24FEE1332EE7 96EDA621A08DEF2382B8CDDDB7EC133214DD77820AD3CCBC6727D9129EAC95FB 060005D8E6A1CE92F2C2BE8C92E93E0E31C619F513283E3216B7D0F5A089BB2F 2684DD0C27A68730F0C0946DD2D1B9C4380E4DFA368193FE6AB4637CE0093818 1275C136DDE4A23AF5B79D1C3ADF8E77A7DDF4EA04274DA3C55FCDE216DC0947 719BAE894EEEF270BE65BD2AF186D0156C4CD48345B65BC41638DFC05BCECB5D A99B1BB5EFAD059BCEE473F78CD92DA71BF08DCBED402998FF9B4C176F0DD12C 14D66D64E20DE60EECB455F914D5F4140C01D8B94A450F2C897BBA1441724FB9 29984C7CA45A5AEF510B6BF6066DB4B82000186A41C6B15A2D042BC7A1CB61C3 55D7BC4DBB16719FB68096669D1A6B9F209AE9C0F051891B54E8CED10FC8B8BE B0AD84C756A8BB5243AAB8F7DD28D248161B9160D5CDF8D9F9280AD24FA05E56 02AE4356064582B7C6121DD45A307A5B7ECA38D1B19AE791C23CD4F8D603121F 639AE751E453051667F7415CB25709B56CCA2D0C05913F7EC7FEC8F9D754DE6C C780B8A30F407777C6DC3C01C4EA2F57D5917435A06B7C106135CF7F0C0E3BC1 A0581249B17E452EC8C4EE434FF67D61BD44AED95C331377DDC88DCFB63BCFAA 392B0743F44FE9760A123BCB82D523960B148DE3BF451298B416DD63ECB509EA 7627E59EC816C5E2FDF2C0C3ED5BA5D0B6B3FC28DAA831B7BCF3A596CCD2E2E4 D492151E8E9A9050EEE9FEDB920AD4BBD1A8E447846BF1487F54EB6187E17590 25E3604A1E7A96E973C6D1EF06D3545F95767485CC855C9FB4ADD322ED5D78AB 1E91FB5F2D3395CE23E23C1B393E2FBAE6F9F5B7FCAB5CABA79E9448F06A0425 7938562B1747AB4C1AD6726356D2EF27E0722016CC5D1F862A8D3D188A1ED05A 337501E62514DE81436461288A644D66ABD8E295AECEA2F37DAFC4F096FC0AF3 4938A92C1E5D94A438319FEC694EE5E4ED1AE5C1FA82DDDA55C394C73CE39F18 137370ADE011C4FF721395A444A57EFCBA18 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMMI7 %!PS-AdobeFont-1.1: CMMI7 1.100 %%CreationDate: 1996 Jul 23 07:53:53 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.100) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMMI7 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{0 -250 1171 750}readonly def /UniqueID 5087382 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868 DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811 4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3 FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB 76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5 123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770 012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6 A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413 44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC 4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050 01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608 D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3 914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05 261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615 24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2 A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663 9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C 889787CDC0C51802EA1E0C63E6DE20980D3DD206F05360F78906FF0132D5F4EB 8B2384EBF991DF6A99488477067F4A8C0FCE0CDE8FDEDE80EE0E087271DCB088 9A0B2ED6FCA29399FF34CAAD2F4ADE9979E7B1F46EBCF7EAAA9C1BD7D5A7C901 C4F56769AB3279B88B453CAD4F980D5776CBAFA7A5E45EA940A80018FF8A1060 649DBA8BECEB5FB18938F7E69FDCC37A64DA9FE7336ED1BBE2609B8752409617 6D0C56A0CA33A91D7D34AC34703DD12E031D0EEDDC326DB3C7D69E2EEEF2103E 0207D54FCA89E72DF619FDA6021550754A0D030D6EA9275063ACBA3F1CC7ACAD BBBE3FB7B712D4FB3FC12EB4F787209473F6AF333029036E8B41219F905FE923 B89410BD71600EDABABDA9E6A438476D7C57810308DBCF370A1EC37A59B5652D 620720B4C8061E93B2CF980408FD8C7472C0830B33584E2DEB1DBEF3AFC4C78B 141C0BE07F7E4E91B3BE445BD21CE0A12E14C4082AFA0C3D158CA0DDB9BE6B22 96EEE0B9304C9011A137F8F72FA9B7766D013BA0DB0D946C332843934371EFBF 660127DEDBC6ACA9C375ED3CA78062B48B236955762D3A310D9501894984C903 5699529F28DA68E71E22FCE538BEEA83BEFA6EBC79BBD9A8849ED811ABE83361 CA0B82433636947B91A8C876B0CB527E2DBCAAD77D2DCB2740F615C173C3B160 B980E5094CD0BC255AFE12BBEE16CF175612258BD7BB8E11C7BEA64F3D986D37 77DED52FA6C47E017FF36EB7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.1: CMMI10 1.100 %%CreationDate: 1996 Jul 23 07:53:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.100) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMMI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-32 -250 1048 750}readonly def /UniqueID 5087385 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E 6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF 8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE 03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 9560176676B366916621D2A830F9DE24D417F8EEA41453DCA487D7E52AA5A707 C6556910712EEF1672D8ADD9B0A6467042F87839769999AF4136210269F68BC1 87B95357E536C576A2141E0DC750A2903FF2D711CFC032072484A4CBDAFD0CF4 457BC91D065487AD0AA2289909B3E45126F878CEA612CC69E9F453F29EAFD8F8 5C0827950CCD8C655B46DA2DF3F0D3DC2B5F16AF2A0D8B9F8F3FFBA86DDE673B D1EDDBD6D281ECF7AF05FABBB46D2A086273A11E88064306FD2F5C587BC2B7F0 FFF4666F4E05ABB4B38AB5DFBF4B48A118611402C373FF538056AEE074CC364C C667C289A50996585E61D25D64A3445656670CDBDFCF8ABE13A45390D4351E6C 71396C30F6A7BB9124547BAFD2A6A525A3ADE2C7C5B0F0F3C4C8A6D3EE431353 A42E25B070427DC359589A837DA684E4D1EA9839F386731BF875B3A80BC00017 9EA8C451830D7E34182FB6319C56812AA38D8D3A481E60290A59988D167DFD0C 76A9B5E7BE72297AED731A9C122A42FF913172FD59C3B363248241FB536923AF 3F10EAC2C38426776AA2221A7FDE43565C6A4196934B3832D658472B6AE9A733 6EC6514534E1B27E71AADDFC118F628881B17977962932FF4C305CA8128610D4 98E459735E0DF4B79B30028010E740C9CC630FA0A24B97BFF2130F77A122A508 E83F48F949F95E861BE3D84D4D44E4EA366B8DBE8D7CBE98265C483B2CABB11D E7E41CF89D3DB9C53E1017F91BCA593B0523CB4AF18194146385CBA742389B5B DDF6AC99A54993F675D0982E51FC68BD5987EF3F0C055F6DDB70275AE9A210CF C69F94ED555CB7923EE94831C42E11A2E9CFB115539362547AEC6D9F3D6EB2CD B64D147E2C10B0619F7225360BA9AEFBFAD628CBA9391831D4B901E81FF33C50 71C0F218B0697A2A001B5FE999F159C1D139095969E5749BBEA163E9BE1A7DB7 E9FD7007D9C4253D4BAE47CBC98DF191CF54FBBD824DD3D7ADB12F50F626AC0B 8CDED297556992AFD346341D052DFF546E556383FA07A1E79C52B1E10DBE1FB6 F942D42B18F9090E9158D9849C2D513FC5B6FF77F10F8AEAF04499145595A83F B420A25590A04313671288A9DF79A5BA303CE4F558E22D51C839D74719A9C495 9B59C611A0A697364EE2ABB39402AB8AC9F377848AEB39F6B7C6B7E64D365604 AC749ACE7C5F4E57106476BB6CAD3BAB37519AF629B6E60AF31752D72E1E3629 7EAFCEB5789CC3F5B5FE6881B9742232F36E14C53FB0906D92DC057FF154F2EA 6E8473D6F1DC642A84BF6F763917DE8F9B1684F8062CA4777FDAE9D895A293D7 D5957CDD7BB1FDB625E348686212BE33785C8832313FA16C7C72FD32FBF30DDF 66C49540906979080ECEBA65A5971FC7CCFF00DC4066335E9420F792F5242C12 422208A0D6FB21160A6E2B1E336C25C397E4B7CBA829618DB8AD84F479E44D44 E406CA5B8D4463664DCC77606BD6EDA5F43D77358B90D5F4643388F2843D22D9 4F3FC18C1DEE727293D9DD465EABB4944EB03CFC9917BB6C3B632B51E62E084A EB90A20F8F0EEC719ADFFE587F8481D09297576077296285F039ADDE0C437E1E 9EED0B82772CBBF7EB4331D29E091B8229653D8876769F7EB1B8A3A06A07E170 C156F04C160CE2986DD22A835E6C765F31B7EFD5F21338E023237006730D5F56 59867BFA6D970643436F80284C0C11A8D6B6C192022903CC62352BB149312060 8C75313E5F0F51BAC2DDEC7C33FB382E26507253B794BD69912B3DFFEFBB0E32 263DF60C23861BCF2A60D94C8882023676D79DDDBD293315F078B0A563D65201 D13825FD14B77BC627A2684C0DF64FFF7F24E317D764E19A267E38E8A3BB4EDC 93C0C099ACE6B41350B83245C607BF7A9102E9910A04AC8A4987265DDE73C416 4C8D584BA729EB5D88EB69213CAE30075C5A3F7589E2BC761416C871A4DF9B21 BC60E6493E3239C9E5F49270E82CED2694F3F30926AFC496CE028A7ACCD81F38 FFA2B761082AAA9C45617EDC773A59369815681D7E276EA61EBD5C0847DD1E90 785A2AA4667A45E9FA4328461CDFA34E50E6086D1B4791DD5DB1E73CFAFB55A5 F66D7B998BBF230CA0F1B2CEBF6279D8D4738BDECFDB8F54770F851D1BC7D2CE A45EADE68DAB8CCA15023B79F3E99E3AAD407B7044EB53EA0136AD9673373FC2 875CFDB69D2BDFB957C0A76B93AE41A35D64BEC08D47993560362EBD198473FA 864EF254438F232BDA6E680BFCC40D55D515809241D0C8A94F1E35F1064602C4 1DB61DCEBCEE2675F7A8A4022CCF652CC2E8278ABC379456906ED657BB994EB5 D854973408718AA8EDBC3A6CC17EA15AEE69A31C15BD2DDE265455C2F160C1CD DD042B9E7F8053D1AACB2D50273573EE7D546ADA07A8FF8B7F60F6E82FEBFE5D 3F26B6E937F6162FB0110AAAB42792ADF91C32C8A97A993F4B914578E701C8B4 21DE0643E0598B0BBCA730BD28B66C62546828D0CBAB15DEE6CE890F7822F127 E1FBABF2F3F7B160247D65064FF02658204E0435574C9A5B4659B1CFAC635CEF 62062CFCA8AA6082B727ABECCF7BF1CC77BB83C7C1857004801CF9DACA352570 E51E999D035EC1FDF4922664986380C0E7D264506BEFF2B45DB8235F9343C633 7DB4B961F4E55FEF5C47FF3460FE698B306F1658AF29730AC950025F2E93164C DD2EECDA399B2DB1C1D09139826925350DDB5B9D26E870EEC1A7AF051BA730E3 23AEF00E8B35E47818281B05E886C8C97E19EB797BEEE2CC1D23DDF04A5E55E3 EF887C22B85DCAD9CF50B3DF4FF2F1141A1C2F3CD800010DB95DB47D7CC06EF1 FE0C845267597F035FD1FDEED9BD59FB415B1E87DD4B9BEC04835FAC91D5A145 D3B22DD305F275AF4016CCCBC12186B8DBC933ED350C7786269C186738584D3E C1537DBEDA160CD277034FD59B2646178F3AFF172BBB94407BAB4D3BFD83759F 53D6DB0EC53B225C0CCCA9D6DD9803151A504E1AEC2905ACC80A9ED1339299F1 4FCFE23CA5631EE088CA394EB0BBAE0D1AB5686F1FAD01EC8082AAC38A12C7BB DFA629E4B861EF6B2D8BE90CF1E7A0F7099BAF3C7593CA8F6FA5B9CF96573AF6 68E790A96B020F92F19F9BF9474C02B85B953A091594B8A86FF9960CB40E6220 76C53CCCCB48CCC38FF7F803E4C62CD7A1CE43147432A2BE1A43C2A4C4C3E042 F44E1FFC2E68FD8CB8301BF3E6104C14FA6EB4D2951CA57BE5D25FFBAD5E6DC4 92264B018681842AF2E03E0C866DCF230AC258E9222FE59E41FAE110EFFC0057 85239FDB824ED4F6808A201D6FD9797D64B43ECCAC17C6378A8EBEDE5092CDDD ED1128DAB643E9D1D9CC621262FAB5B2C3DEDFAAE3442734AA1C1D9FF27F42D4 3CB003B64E4D6F48C65636D9CC6B15A7B58438F81BF0C0761B16155B4FA5AB3B C6483D6F98CB515EEB313A81D16C929959792898316C2E73279F963A22FA5366 0D6231375A81C548978E8DB3CBFC0E2C5C5ABF2FD6B074F4A2A8AE5C8E2805BB 5565D20E5E85FEF3F4C2D741D21A23A959BA5B81E2F9D5B45C9CA2EAAEC7464D 4CA3958631CC800A005626D4A6246CC0A3912ECE29E6D135F02064418678A31B A6BCF182CB7089E12798C6853506DFC1859B4E832BC29A08F9598A705C16D0CA A38EA6E08300FB43BCA4CE435C46E70EF31514A4F76E914F2B0E71D665E2FFB9 DEA5A9EB7C22CEED3F53B9BD618702E1EBB6C05276262F6A3FE48CC5EA11060C A5C839E0A3572671AFCE820F94286D18D67FB928A753B1CE002B1BB043C9C2B2 9232502897C2FC1AA79EE4312E71F4C89515A373773E34FE531231EAC95CBEF5 6A5FEED525005A54A685DF1AEE08A979F2EE907E27E9C133A8545B29AB5A5BED F044A8883DCAF39DA49A006884486441F33A30065FCC7C6F34C9CE6642BD5F81 45C67DFB4D45A0CDEE9DE0C13C34687E7A4BFAE1DB9C6D6E2C6ACFEEF5FA1222 731B5A0C726944D37831122625F0998625402690EBAE54689944CEF674EDE601 ABAC1FDFE48F2738A8A1A4F5CA2A51B5A44015B319A0EE49F288C0B94829F0F6 CC195D8E0DCA3C07DBFD3762C15F9665274BFF2D2FF39935D7A891BD09746675 5696FADF70823DF08A843B5971B539C18C5D5FCB50F0D4B46F228C147B043CD3 5D3F980C31A0D4AD958461A59D419B99BBDBF7D22779ED2C4EABC30A66BEE16B 89E3E6D4DC55D7551220B012C1460399AB9EC9F7F974935E0BC2619DB2F16FEA 6352C33F78E8621978346A21037A0B92521888D60AEAE94174E17BD7D5F35D77 D2732D457821B086FE7427725FD33B31AB0BD52893BA1633E040CA52EA9568EF 06455E8C37D61ED6AE94B91ADF986CD07FD57A55B8C60D963C2DF27FB2401C32 54538B6786417320A3F448E112E6990A69A8AC709B825648947FF035CCBAF570 4038F1AB7CDC4C5608F94E5F9D8A140F1BCFE317CD0948DB37D92BAFEDDC31A8 4B0D72E64D9EDA5F77551EFCE68DF61E1EC58DC03FA9E0472E966609D10AD1CF 1C8D09AF74C85E955AFAE74160D363577AEC06CA4BD917D5FC1A09EE490F5FDB DC3A5B14266E7A072A92A768A03E1F28A8A6D7FB9F55C49EBF1FA4D96978B622 E00E97BB1763AA4B8E817396E655E607E466919EBF1A8168DE7BB9ACF21C9BF7 269EFD681C59008C0B751230ED419D6E5216ACD95F99ADC5A40F5943CBC33279 68CF2A0D1003493CC0F2DE913D4C7A9C8FCC1DED6BA5A5EBB050FF70BF5291C7 04DD4164258BA624FF8AE1EDA5E865866F03B04FA56015EDB80E6BF04CFC7F55 229B368E69990FCDEFC1337C32E086813FC45A43B75AC3434BACCE00E609CD0E C6FE80951EE11B77D2B2B4D8EB77D1F5A7FD9243F87F67E0D311F4763E4BDED7 32976A923E1E29C5BEBAB148D1BCD6F0BEB7A9E4706A5A1C39E1774103CB6AE7 7A52ED0EEF0C043932AD1EF81DEDBF482FD8308B02B2E1B0567D4B9158544300 3FD7EF4A646980CA559B7E3DA364DCD8C7BE78D640C5934A081957C48AC0E3A5 9856FA78F7FB9E9D148C96E1952DF96A1D190CE8F8E92A75FDE1E6678A863B27 D1CA916079EFBE5BB92673777CA7E76B1EC25120F35972944754E5709CABB5E0 3C2ABEFADE842A882AC009E4225F07C656C5AE5DDA419A05950B446838EC2208 CDB319CFB6D5C7A0517ADE72040DA5C2A0FA588888E3C79BDD81EA58521A88D0 B6706756AF9E7A15677AAB7FA1B929295C815B418F5B2DA6A5C293145538942A 95C2EA524BA517A722610242F674B5676F71DD86C6C5E25E88162F841C4FFB04 2F3C134601462DFE8C85A2B3EDA3AD66FDBB66A3FBDCCE1796735C67DBBA0CF2 4A4A327D0FB596A7C52BB3FE6C044F221583C5CEC975D866ABF5AB29280C2CEE 4CA9F158343B22CA0BEE3C3CE132167F6C198F88C29606E899D67D313446BD6B F1064801C4928B8BFDAFFD5469E1676974F10EB6033BE6F186516DC4CE9BE39D 6BD368A48F8C655B27A5B3254F8316867C714F9A7B2B32EFBC9C73DEE7485C2B 3592682419E0B7E330E62449B74149CDE7166F9ED43089CC59CA02D55A702C7F E020CAEFBC8B7DE00B9F6FF08F9A155ED05DC582E288734E7165BECEF32EDFEC 4EDF7F2E1627BCCE00541711008858FDDD11AA4665A987D19B99349EAFDB7799 B1C23C3B1B29D4AB84188E26DF74DA087F9CA5EE08CA42E1CFA2C9542D4CDF08 6530F401B3C3BF996D2689BF8D63ED11298C760D1D76DFA279B05CEDEBE6B9B7 457010BCC97EF46874E0F7884AB257CD39F9D9F09650D4635EA3D31DDA36BD1A 3AA9F4FE8DB55F21328F1BF302DA49170232E285C24EE7DC3105A266C60CE0BB 7B288601AECE42E110A46AEDA92F8B5FC47072DD6B24CB531F6D233C65383344 592B11B69A9E7A7C4E3E5D874B981BCE422F2F21F7D07461FD13D67819870CDD 99387BDFE4E4089EF9B7CB4D2060A5602F580FA4BF787665692C200867EEDB72 F394BDF21AAD0C5571162707B2E38D56C3B57E9BC0DB76AFD9E64EA15DE32C0F 0568E32B528E76EE246212F025489C518F48C5272BBE544ADED1A9660D51407F 05AA298858C264CFD5D8B406EBF1D8AEABDCEC08B1903BAC8702CD1948B6C323 E159731E0586F28D4DD7CCC4FAFC2DD31773A10CFE6787F6B19DADA872AF4204 C8A3E130BE8DC2FCA987EF0FA799C58E9C82493C97AA074C2B5DD618EA8F6DE6 8F2EE5DB0EA0916B13F557EF54ABDF950866B14711A56EF21765ABF26F9F3D94 BA7E6B7685E728B443F49EE7A1B2DE70E1FC53557EB404229AE9987B9DB8BFF4 07E1F77FFA81B95A4D93CEAF0901B065D6572407A08E059CC389A34DCE97552F 5A0322B77D78C7391CD68B471524869D347ADFA7495E88D4B8B517D5E5277240 2E4222B116F8022EA523F48C9ED1722A496D91B11872E44B9F050B903320DD56 3D59DA751945DA180F20266412571ACC35D74A0F17116663DCA09200FB502BE7 694A1B223318ACA9D4AF37319D3082BB2C0BA842428460AC0816C225581DF440 90BF9AAC1E1F073CA6BDCA43E609BC148921318045FCC62247D4BF74C5444FC4 9CB9785656335966F0FD0AFFE692CBB1C5A16E7A6D2BAD2B180BF81CF525F5DB 25FD2EFB8DE6C48979129D94E80574CFA9C35D80F9424C94FE4B012E0B903F84 2E183F382F083DE6821D61CD525DD2B297860EB312634C3B7432281D4644FFC9 A982C49E54968EB909D9F586B1F74E67806CE56DD544D59C238D2BDD1DE6729E 9FFF4DBED9E5F427D146728313E9C48368A87925C31A3AFDAB6B0AC9E133FE0C 89E50026706F9538F5CAC27F63DFBA2ECA309FE2F23345C35AE80ADE6A1ED7BF 7FD27A0BB1C59B2081B09A05A598FF45EA2EF29A86C548568932E2CED1988065 9FF1B6070C8745E4900F0019DA63577696E447E3C79F11D093DCD068A15ED28B 156964E0A5EBEA079F83E9F59E440369290778A1E0510E5CB7C1493F4D714D2A 650900FC02F9605B9095F9739D3E24B9633C8C208BD3147F94D05F9D4EFBFB42 42A09876DB1678FBB75E86B7A98474B73FE04376D26C8F431605B944335082D9 F7F45FF01D9F8E79659DCDA0A9DDF1ED4EFC7A991EEC4B276494DC8882D6F342 6C2A594054A27407A1768B001315B65BBC030E00669576FBA70828979C7E320C CA2C11B02E8EE6523AEF2E16201B93399023D4A6128C1E7061B7E017D3A1AFAE 4BF404BC47F3DB695C9BE6121DC78F239C63DF058A3E847DC5112FDA14088D6F 42FA7D1D78B7D4D5E500A13DEC65DFBCE86EC1A1935CDC95928EF9A126BEDB83 39DCE174729CC266A5BC9D69DF36AE806FD730C3D5089D90A6FCFFEA55C3AFAB B12213CDB66017245A2AFAA557 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMEX10 %!PS-AdobeFont-1.1: CMEX10 1.00 %%CreationDate: 1992 Jul 23 21:22:48 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMEX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMEX10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 88 /summationdisplay put readonly def /FontBBox{-24 -2960 1454 772}readonly def /UniqueID 5000774 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF5B8CAC6A7BEB5D02276E511FFAF2AE11910 DE076F24311D94D07CACC323F360887F1EA11BDDA7927FF3325986FDB0ABDFC8 8E4B40E7988921D551EC0867EBCA44C05657F0DC913E7B3004A5F3E1337B6987 FEBC45F989C8DC6DC0AD577E903F05D0D54208A0AE7F28C734F130C133B48422 BED48639A2B74E4C08F2E710E24A99F347E0F4394CE64EACB549576E89044E52 EABE595BC964156D9D8C2BAB0F49664E951D7C1A3D1789C47F03C7051A63D5E8 DF04FAAC47351E82CAE0794AA9692C6452688A74A7A6A7AD09B8A9783C235EC1 EA2156261B8FB331827145DE315B6EC1B3D8B67B3323F761EAF4C223BB214C4C 6B062D1B281F5041D068319F4911058376D8EFBA59884BA3318C5BC95684F281 E0591BC0D1B2A4592A137FF301610019B8AC46AE6E48BC091E888E4487688350 E9AD5074EE4848271CE4ACC38D8CBC8F3DB32813DDD5B341AF9A6601281ABA38 4A978B98483A63FCC458D0E3BCE6FD830E7E09B0DB987A6B63B74638FC9F21A5 8C68479E1A85225670D79CDDE5AC0B77F5A994CA700B5F0FF1F97FC63EFDE023 8135F04A9D20C31998B12AE06676C362141AAAA395CDEF0A49E0141D335965F2 FB4198499799CECCC8AA5D255264784CD30A3E8295888EFBC2060ADDD7BAC45A EEEECDFF7A47A88E69D84C9E572616C1AC69A34B5F0D0DE8EE4EDF9F4ADE0387 680924D8D5B73EF04EAD7F45977CA8AD73D4DD45DE1966A3B8251C0386164C35 5880DD2609C80E96D1AB861C9259748E98F6711D4E241A269ED51FF328344664 3AF9F18DCE671611DB2F5D3EA77EE734D2BED623F973E6840B8DAD1E2C3C2666 DD4DD1C1C8384F906A7BAACDF441BB0AAEA2A697E453D89E61340D3A13F615FF 3E64BC24A22786C838BF3BAF6B2829B5E16372EE3B9347142EE6853C37C61423 540C793D56EF624F68D2BD0C0A43524C3DD7DE1A30702B79032D9EAF715668AC 6701F3B3E54B877104A17D328FA3B6F17B484771428F11365153D779E59132B8 8AA4D47495417DC5F6CC5315B779C2B12A4EA32D16BE254D2EF2E0FEE0021791 B46226F1A45386FA41C56864FD6EEBE29E98E00C279EBA6F17ABFC1F8E0519F0 A9E5A7FFDBFF06D6475D65A977BEA0F5DACFAB70461E8E08B1BFD3D31ABB37C0 5C42D17ACBC194B89A50063B9C2F02ED26A99FF436DFEACD70511658C9554FA6 6EB73CA3F0A8F17C8C34B79C6A5BB7C395190BA6822EBBB81A40EEE29A69E316 9AC9134E9DF5007B32E8CFA45579F310413D25E82691774DF4B83610A41BCFFE E2119028B24BFAED5197C3ECAC5F0D0D66D17E69 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMTI10 %!PS-AdobeFont-1.1: CMTI10 1.00B %%CreationDate: 1992 Feb 19 19:56:16 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def end readonly def /FontName /CMTI10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-163 -250 1146 969}readonly def /UniqueID 5000828 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F 21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6 06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF 55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5 B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86 0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9 1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961 7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A 7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402 356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B 19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2 C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F 244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95 5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D 993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363 2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3 309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513 F42EDDCF39AE522A1DC2DC523F046EEC4CCAE25792B702C288732F5B13B5CCE7 E8B6A1A1DB86B1EA38883E481BEAB54023EDD9BB94E7780DEEA577ADAA169E66 AB7D8607B409619E79F242CF52E618AC0DAE43317C507CDB27EA8A1472D4E8D9 17E62C98DFB049C78AD15560CE44A39581BD6B555165091C5D41071212A9D2E3 05965AA02B8A67AEB04D915DADC1B84A531A1D60569ECC2EEFB7B6B0263B8B5C E6EE63CED9FA74FC7C03610F6394D64BAE1BF3B50FB613A39C300CA5F4F16CAE F9B9F4DACFC69B69AF30E4FE9E41A6DB0FC987A13A3AF3F99127E5A44E7FE781 399BF303B773BC0096427B18DFD0DEACAE196EB3927A7EEAE0F6DE8434EF0873 20F134579D9E18D1E0A10DA116F544FD2B6C6917FD8B2BA682D2B27DA99555ED 7C47B44193C623C871703226039460A62C80D6FF14121F46F03F0062E0E83ECD C37CBF62603F7C3034C2911AE2C2136D0455D31B267D8657A08587587AA34576 6496939DF5429564BC149EF80AB138139F84D55A3590C61EEC1AB509026BD4D5 899FA25429BAE9A3998A594707097CBAA84DEE72781919AE6419B9723696DF94 E7B6AB2F57A055D421FCA4090D7BBDE376BD36EA90A3A17A6EA1AFC5760BD2BF F8D7853A9E3EC3D8EB868C9500C5B0A5C9F5B60E254279D06A8D4C00E455904F 0B2D91B32ECB631C1099AB7D511DE7B529DD1895F8532FCA0CA6509F2FF46951 8F59EC3CC4FBC09DCBA9B3E4743DB73B81042CDEA0D4022498099268E2BF2143 3B3EED3C4AF510DBD77926D35268F57F692D98009BFCEFAA63511EE27809774E 5A183591FB5930AA9F66BED75F7BA55E65B17AEA56BD33E742B36A8718672B7D A4B4FD48EC6922A42C7DDC372254F5680EC31DE664E7CAF6FFBAB71ED6292916 BEC94AE1607F1E779E9BD0B2729F4E4255A074FEDC654B80B7BCFCB7CB0F814C FF39F8891EE449316B14A2AD51A3058672A9CF9768D661219C0A11E03B685A3C 2AB1CBDD1A3E9E9C6BC281200FBAA183F41578D5A51E772A08252D9D38E99DE6 0E97FD0DC02B264B7A5C82DA9C593D1FA62BA22C42862686A34B59488D5B2263 E023A3ECAA9E73FA55A69B2F6BC119C972D80B8C8E130D3547AFFC34DAB3A963 F5A0D79C8FF3F0AEF4C80B54D3A5AE280CE4C0E9A31601EC28875158B897B685 CA963B0DF9CE6599CCC6F5C2C3F0DE4394E8E8087D2117044E057136DFC57B13 7BC203946758AA2E609E00BCB3058CC26535AA553CDF1381120CDC0189CA3AF3 DCB4DA7FA2F5A559C35C8C9FE90F215BD268656FD50F2E1964AD234492AFB4DF 945A431065BF524B235E33E43DE7AE75948740D0DA6040F3F6EBD7F1D23EF60A DF8F8A6B40DB86C676BC31D11D5F14A48A3B1B395E27C28F2510EC16779DECF9 13E2B15EB17FDDBE03044754C4704E847784BD751E25C4512037389D1873F11F 59E70CAF097903D6CB94F517295ED8B0EFF1552EA45AC43AC36F5F1AE22F0E39 92B791379F7EF55B328EE2FD731AC1119BF32838902A9AEA07BA831AE3C5D1DE CB5C43B60907C0A38F4017A7BB15219E3E3C0126AFDAFFBBA209D3926CB81767 31915A02D3D8221F0D31F9734D0356FB1A50CDCF8A2F305EBEAC523C9F174725 EC9564772B9056B22D4A63B345D5B443E45113512C9C4151BC8225BBA323E3BB 446491C97626A79DDDF629BDBA5203A08E963FC0DBFD343C58F486A879E83108 0052CF90D6971144C91620FB8B70ECCEAF2905EF8C670CBF0C8EC567D32DB981 C986FE7B359E5CB41C851C2D03B24A495AA1DAB8C655A9E44ADE8C03243C6A37 30F1CAB92542FD1FE10F3D03CB8AA0136FD4524E6B05F30BCFA0EA4AA982ECD1 347B29768ABFA753A70DEE6E8EB45E0B90B043DDE1C652AF61749CB59432C515 8170986082C9B29CA8CBE4F9063C4702E08F1DDE5BA0C6E4E04517F78369D574 BD09CF069970EB52380EC9E20FB19861072CBA479AA9CDE9618D53A22AA08489 B7A7C5B3A7E9D10DF33C327609388173ADEF4211ACFE582CB38A3BB336AE0FA5 4D9FFC4A185A7C6EF336F4853F78098EF0226FB372A987FD74E6B281FA9E7764 C2914F4E113193C8FAD81C929462E5CEE451FA36940AC34855F19BE088F73F8C 07CF5BAFF860B20E875C7D2A8514F218370BBF19A071C692298581F7D5BFAF89 FCF4DA0A810A99CD77B53459F1DF74DE195C7AE144EFD5A2CC2D24850E90599B 99E1FC94309F72B181A37529BC6F0208EB2D8037478CDA874AC1E8B58746EAB9 A5BEA05347221CA74EA9723BFF61BF2728869616BD17456E80CDCB25F43DBD03 D2E76E56A9D086F1726376499041F803BD19C995F2470A021045FA28A7497DDD F9C307B23324467231F707F0BE3514A0E585718DC35ACD99D3CBC28F03013630 E98AB9884BF4A8CBDC0F6B8C8D9E98AFCA65DF348E316FDFD43FE8BFC3E9A29D 7DC71D19F500B9A2513EF4C761C529B7D085D1A1DE171DBAD4082839A2ADC75D 8EFAAD55AB9EF30E176098E40C76AEF70F58FA9262116D8D505F9CB9A9DFAEE3 F1D7EF9C8C10319969625DDE3D27FB661D79B451A261DC6FF8E5403AC905D0C8 CCDB19D18CBC932A31A9CC449ACE781242B659DD75BDBF5A64B67E3FFF3E659E 3C8E6DCA6DC5D64EB8339AE24142445746A7B68800AFD84F37C3AD6487C4B77A F4B132237397DB4472AF2EFB328C90D3754943461B783AE6966ADC8A41A68680 58EC0AA5E0C8C26EB47B63DAE43D48133CCCCAA9B191055DEC5772FEFAA63694 2EF5E50F21E780CD462B53ECEC2DCF0F2B95102C12F5BC4DA3A684103F37B46C 5D06F5C30ABC7BFED69725373244D7D811A29685E7A85462F988F2DD874E1EF0 2709A824BED753234FEE172E586702CD99F57AE4D821CDE664935A38FE214578 3D388AD959FFE82FF55F98DC81C304C326AACE821AACB2548354A94BAED75EAF 844F37241B874ABE5214D1F30C24D321DF0F3A845560D32C12B4D0B5F0EC5F3A A11CF6C7D43D3F3624EBB14EE1C357C9EC415727CF57007947F872820C06E15E 620D955DA3FF284C24AD9565E3EB32311683D483C9333765BE5D5E871BBD0761 DEFB126E36FC518FB3DF2FBE6224EC624FEF00E23A673ACDE4F8F8A8F56240D5 711219EAE2D1FF6B09AFECF586233AE399740B33D3230121818F5996895DC4B3 7595A4E468DD9A8C04B51151E20DC652D09A7B3D0F7CAB8C8BBAFA08B3724D63 9A6E29E9D9327FC1F8AB4EE23BBF14966893DF2B551138119EF258671E1C2071 73824DE343F2B67966B1A3ED69A31EAA3C20E035C6B38313040CE7D67A80D46F 460A8F75713DAD5FB0A84E13D2CCD9718A89CABF4C6339EA432F90C763E98AFE F3CC30EA534676779E53B31650B964B2151BDDB463D448A439011BC9244FB45A 5BEB1F58724311417219F07F4F5539CB7B10B3B5C7DCA6852A6E22210FCA01B9 D9335F147016AB79C236841B01090C68216D7180ED6561C9D6B558A625CD7347 4B2872C0024222EF250F7C07FB0159372F252140B4BDFD041C87BEC004880157 DB8455BEA7FAFFE9CE25C36A68AC68377AAD55CF469372DD654FF3834DF4ABAA AAC6000C052573EA7F579836B238C1CAA9C39D637EEB5774297E462BAE6AC611 E581DCD996563B889C65E90621331368B705D0EC2B1E278BB8B00D159C1AECC8 48C063ABAA5184139B0396B69A0F2BAC49A711D1A90BE127C6E90AB200239A8E C825E14A2E7A8AA3D37FCAF32920805747E8DB0585CB61D220BB0C53EF3C1042 761B25393EB4627863EB6300691C278575888F57A1709EE6DFFE26945C732013 20CA9DF917F9C78616FB6FE9E93BE8F599136037A79E37943BB93AE468AEC9D2 F3EAA7C21F14FB7BD470E46702131E998A7E5DD1934A2A64D0D4998727605887 68CF4D2D8163E99C459AA40548263ADEDD1D5E5D63866CA57CC7E51B174B0A82 0582AB04D036F4E2DF1859B8943FC035EA26B7D71BA318496C7A2A875D52AF12 C73CE423DF6F4F8A6A2D70EB51C233EAA224BC959879D54F20FF847197F0951E 2472F9C06F5F8E8C29CAF8533148C812BD49FF7D1DBF37FB5CA408FE0C06BCDE D66A956A90769865D64FB961CE9E7BC5AC01778FFDAB0157DA2D1D366BA8D839 48F6E59F884346BDF2A33E085142C87BEB7A2D9B37A08E2B637E778842FC8D68 4ECF8308D419036C0A88C6BB8F9187BDC054DBEFA40E00FB39206E8C05D6F10A 445F1A4E7CD95D0A172E3586DC7EBBF0A8C93F6B4A4FBB4019505809084BEA2C E69F831CA7EBABE4F3A26FB256A2ACE3A842B02821BAA2304CEC5797F4BE0902 FE7C7B33B769D7A4299762FBDE8D89F0ADBB71E0F0131344D531D8F23D04A4B9 A0D9972F7C2C7C52FD47EBD45AB7F08B2890C076E34A835E6E5849E834795517 07F244B16001C977FE310AA69EC76EFDB5FB30984E9A9EB47166ECF5EB9BB06C 9657EA526203D53F455295142B8E392816504E0B792B7511E9DDEF3F9F6FD047 9A9B03054976BBFB377AD18AFA3A23027557EA040930E9ED0D15ABDD24EB7D3F 8A24669718DE1060FF193D1576638AB7BD384565304A862E15C0FB0D09719253 DF70984529C14C1F057BDE67D306874A8C415F49A264E7D28276B72993A2FFCA 3826C6E336C199A61994730F0BFDC1E6777B1236BB9727134FAEECA4B0ECE76A 39BBE739D7326462B7546B9CF8DCCD6EAE6C6EABBA4CE2520855858583671CEA C394502B23E98F16CC73138C598356C08C361A9630BD2704B66C5031D23AC8FA 42F487A26AB984C083B50030D088671B6776873EE49D69C738CC1D23DCC29800 B524A3A448B18A64CC7FF78895D6810A52CBD521960B73387A36037FC4A69F97 FA607D7093BCD8572830D8AE40B7C471BC454258EAB307C8053B9AD5EBEDDD77 2F0A390983BF2B83827E6D1836D4BB6BE72BD3FC9E57505C7846FC9277F2F9EE 894BBC49808FECAEC8A4A6B76B4F55A6C9E4D1CE882C88B3D8B5D0E36D72E970 3AA05F6E33154504DB0E256EA6290F027738D27B7290AF58491EF8638F5185A0 F2CC71221D0E07517E3192FBD1979CB1F3BCD01124DA270C5EA5BC9D6BDDBAAA DD126D0FFCEB4D4D4BE4BEFB18CD307F95DCE95DCED737F610626A345D231BE4 FE5D7DACA2D5BCC18DA16F9872CDCF7E253C651DCD102FA1BD2BF9D6968A6D73 70B6A7D5679B3F8AB2BD23DF415898E56511857103A91D857EADAF7DEEC3083C 8149044D58B5B0D1D5534B164444D49AA4FB9A6187D6D4CC02E7DA200693B7A1 65E0A3FFB8C43519A3058AB3146F9B4393EAA54CD0810BC680B1FBDF3B500542 CE706B26FF2CC0F041BF46DFFFD454EADB84D27BE71C12F2A8A29B615E5E7186 778DC4BCE417EA6D98C71B3CF2841903574B8E30FA145F82A1FE7EFE30DC8067 94F57DD1C8727DA6C5B2E5202D19BA287EC3151F61F9DBA3BACEFF3DE5C3D0A7 E41A235F9ADCAB4193237C200BE171BAEC974D3932E54F404F9912B9726DE692 359AD996264331DDD7F9D85E1ECFC7DBB93CF5D624BACDDA1B193916C4A8B4AF 83E45F3736F5A5A7E5DBBCF29F8F08286AEDF684948B794F80194152EF807C42 1AC9EABF15702B3231B593FF87C46253131BAE2A17716708BDF16BA615682ACF 6661CE2705E6B63199BB754069BD5B50ED36FA962ADB516AA1AE0EF481BCE062 199396E5DC39FCC42A32AB1CCB888BB6567CD72C60F376ABAF191F60C75A6081 AE9C19D5181B19C4ABC28401EED3BBC63C60484CE2E4B8934F8A983BCB54405F 30A4D1D1E934D54F90F2D8D182B10FDD5FCD1FCFC2EAE6DBA0AE0FBD0D938FA1 893FD8EE67F6FCFBD308C588D63BC41FBB148E6D4D6AB841F3767CF457B44B47 10C894015630F44435EBD56D4B5DBAF67B22CAE46459DC129E19FA02DC0C151B 111C8D6BD6860CDB90EB6613C40D5E615C68E878313AC9EBD0C7A873D840A853 38EC9CD24ECC6E5AE988AB3A0E94B712571CF9693F2903C0C241AE3D76B9B048 60F447ED58F72FA15A19D7E4D5EA8420D0125C20A162DD1C34F2A8087285B3E5 A3BAD93585EAAE498EF2EA4AF1CA177AF10ABD5173EAD1D6A9D2F14290037398 D367DA0B4BFD68AEF239B51A9C9DE63BC61E2786D5876D1EE283050FFE24A5A4 814E446F5761DBEBF27FF2CFA8F6775E48FA9AF77995B914D8117615F439E321 A0CD70A150758AF00C6920A78057D56B7CB3967E6F083F03D57D9592050D5A15 DEC4A2D4B6FFA76B2C82DCE5E391A3391CEBF2FA64BDBA1D7EBC1362E608D4C0 A0B6127614B4DDC899F4D943B7D84AD9E48C724F822AA3EBBCF4020F32D4E990 D830234204781C8908F557CA92C8361D07C4830D1D290DF3084E71B6463ACB18 162CA686C981DFE87A3D8C4F6F5896FCE68E47A465405DADB3D3CF2F98932F82 E1A8DF4F0E92D76BF8DAEE0D10B8456F03948223DF176A88332A796D4AF902E2 E8DBF7AC72E61BDF2C1D69D1BA2E069056DB28ECFCDB75DC5F2FD7B353BF44EE BD131B1446385002809421D0DAADB53BC74D17DA3A8E6D775004C46D25331482 E2403EA108434DD583B4A14D64E76BFCD1A7951FEC1957BD6C9B90F80A3D1CEC 11672F734DA6FE02C6AAE8F74E043BEAAEAD06FA7749578540C7CF230B1F0E9E 98BB699DCA51D6A8E524F1CEF650C85C2B15175889BA490A731884931ADC066C 00FD22DB6996D2D94C1E7FBF0980D58700DB508A59C3EDD82A42FDDDEF0AA28E 55E327C769756D9F8D237EC63047EC0E3E037B0357386E7AA0BDB955C9E2B13F D91022E614F9919BF94923A6F931FA5851EFF291A0CCA913A4AA8B58582728CA 1CCF5035D5D00C5CD4AA3AB17EE0234D7105296EC3E8627BAC78A260DCB36820 B0C66559F64B83F3B61079AC5FDB4633F9077DEAC9BE53FDD41BD1ECD9C959A5 9D930E403D30246172D39073634760015D432E2A8FB132D548368B68D74D7D66 13E6E7D0DD2DBA5228F08CF3156BC552A4E2CBB2E58A2D5737FD71442447AE0C 65C117036DEE3154EB7D137AE935F652D29E93CE9FD2EE3CEF0846087FDB52EB 797F44C2F0198A3F414F9AD13F8A0D6CD26ED421628B52892097D5E3694C91E1 C859ECDE9373A84EDABE1B4AD7D5CB03483D0ECA51227933E26E6E7B31760DAA DACB22A057C11CE072C7DCD0800B42A5606A4E3533CE41CB0D543BDF8DC48E60 A6B730ECCA83A04B70253EAFA0D4BE8F1A41EADB97C1127B4B4E4740344DB53F 73161FFA8B06B5AFB6FEA809235A49A263E18266EE8B937D69A2D32A447CB885 2945FE40DE18FC19FD8DBC053D350EF8CA8611186A12F4808A9D63EEF68BFFCD 40C841EC7489A9601484F7FCB97F04AE81B458541CA6633E433E2980A56F36D5 9E75BA721BB434C333D833F32DF100F63E38031A030F08AF9321D691521EF4B4 B800484BAA40E0A043C3A298529B7F76079C757E27CC006AFBD856F3F8C1421B 20630A3705C1F635A6214C6D3B31B7F90624A30AF074B91D26BB3040E42CC4C3 77AE6FD6F9DE01529803941302E0F61BAD791AC4919FC5FB28218BE0AF525284 C95114F7A034A357200AFF7DFDF638DCFE1EF9F7ACB492ABEB013E0296508AE2 78745C0319BA38D8F4F7CCD561FC7B42D761B876474C41D5BF906486B296B7FD 2D8913F1CF9930910C2C27E789E40177866266A313012E6701CE1B08FBCA997B 42D1F79C16781F025D9F3193A51D3BCED354461003053651B92C8F3674D82063 A16F01F6201E5AF070C22A83563C9648EDDE168BE56E3C7D7F2ADA8994CF1706 1BD8CBD822952759DAC0C099B1671DF00CBEC8936A092628911C35C2062A9EC7 89B1561D4C9C68D0CF2AAE00D0876E1A71962E4EBCB24424ACCB594F80C78F4F DEFC23D1F9CB7333D2602DF2A91E7CEAFAFC30AB99D6D431F5B33812E37F5BDF E93A40797FF0A1DBBB2F0B58B783D3884ABD08940F25D00DFF491A008040B9F7 B9C9015696CED03120D081F8F066D167DF95AB35FE30EE211894941A4D5FB69F 483F58CFFE73B6F03BDEF7D0B06FD0F520E09BC841D687A121E29B8A5249F98F 1866D152E7F5DDCC03F544063F0BEE5BA527313EA46C6684836F685ED6B0A86F BEB03FC4B886F76B905E31434F14BA3D8FDB2A74BFAC16967BE7EF6A7FE97F76 AE5C77B5FFAD02BF6FFAC21FDD48CBCC4BD210B3139F44DBD9E3F578AD9A7675 627AB41DEABBB97BC5562A218B4A5C4DC485CF7A53D506D8F146D23155F0E74E F94455933668EAB935CBBEE07BCE1EEAC511C95C037466AD73C7DB596A7E4FA1 E8B59CA223AA439A91352E9D109D8CF70E4C1BD24D767471FA9BA799160C9C89 17A0466CBD44ECB060159489BD46F138F0143FB840C964CC5FE93A91054D9098 B06A3C5EC31AD55C0965A116D17FCCBD8DF07040868161DAB09B13E6E15C0442 6919259B26450A3AF1714F4375A186D4C4FD47FF8B1E85C2D35AAE16FA4F065F 7AEC0C498054D227903EA324AF6F8D3F8B4BB30D0F4B5460FC13933450CF8AB4 60050CD2D370C1AEA769BAF46B09B5F5B714D62273FC3636B00B39EF3ACA1C97 E753FCD18CD345D3E72BC1EA51E64F4F0D6EF62185AB4A40D60BE6BCE473AB46 EA3725820FCCFAD013966E8993EF6C46E251EDD8FFB2D15C3485D91DDD563439 E6189F832FC10389C5A2AB28FAB4EFE91CDC19613116601AFF46DC8630582F06 365BD9E3EC0D0165BF358A1B571546EB5C40065AF4CFE4ADC0A2021B94DD735C 5EF8E784DDD7FE6EA82122607CF4110099DECB3DB020974EE12696714EF4DAC9 CE90B158DE872C7E6772241BF62B1579EE37C203C35678B8C9B043FAD748A915 5D297FF9C6386318E682387F86B9122177D79ED8ACD3BC4A69A375E59C04E1FC 05EAD7ED40CAAC294EE4F8AE42A789F629D886C6477C4D6DF42B05BED00FDEF6 7742BEECE2F4EF3E8A67E40DE2D91ADEDDBD4ADE174A69BE63877CCB0A59678B 6B1C8767FC2339C29E6DBF524BDFDF378B1106A61A77CEBE3D8C27 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.1: CMTT10 1.00B %%CreationDate: 1992 Apr 26 10:42:42 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def end readonly def /FontName /CMTT10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-4 -235 731 800}readonly def /UniqueID 5000832 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19 38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204 EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727 A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593 F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714 4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA 6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F 1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438 452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF 8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369 5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9 BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19 741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79 E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712 E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7 D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DC FF798F2ABFC4F3539392985C4CB324B00072295FC160818BB0355FDC4F12E39B 984826450553E3D271F03D8DC2D12A92A4D32034FD16DA13B876D88C8C097384 46D8D7E41CA1A8979F9B07EC3337E70CBBE3A377235B04C79BBBDB66CE1C1A41 89DAB0784D0778A4244CAB95EF2FFC33D38B2479461E3CC7B65F22604D4ACABE 7260C0C8C88C70BFD3C9A7876D579D8F74A789C00DCE47C63C53F306FFA01013 A492F5F4B1F0A6DF35BC2A47CC76393F4778C924FB8371A04B2624925CBEE778 7D68CABBE011734EEE9343078C9A2EA7A14D4B25EAD4D58B062F939B6CC1242B 5FFFE7B0C10DCC5218D4C7264564C80C2E0A18F90632E52A1FF2270360FEA439 673CAF52AECE71E20F0D4479E11B1D911F6F7E569A48CB4193904CD00E55E969 5F8C928F59A04DFDB4812D3F0F553F3872DA1FFB0008B8829310723E0080F358 AAFF93B9564AB6A2BA5C835319E19315E9B21604894D18F40C3BE5C62177D7B2 ABDD5D9EE861F61D00903015E6213C3C6D20B42CC0E021A86DD9B6506180C810 374D0626A175B1B905FFC817F3F289BB8EE9903EA516FFD92761A57D52C8BCC1 43CE498BFDC32C0E5AA713B33387E8CA889BDE653103444DADA7776F07B1DEFD A30485A4469C54B5593D12A9E3F6B892D17BDFC87D60E8713249ECD9A7715811 0E3D1553E3FC630CAC5ADDC9F3068F60A0C485BE6B3A09C83DFF60431E8EE1E7 36745040004896FB97226F93CA641F3F2CC93A81DF9C78E7D10EA7A3F30AC66B 82BCF34CD80803E0C529F6CF900A34466FA10496515D1B2C6737B6D3C2636C0F 9F1BFC5EB0D9B009865A2E1C48F26057DF1B997DCB43423B6B66428A89D6B762 9ACE5D81F5BBCA2C177BBEE88A402E5983F1DDD8E74A51D131A866DA381E5308 5053C42ECF7716A6F5C0A4C01F996238F2AB4DF6D91E7F77B26633E562F1B1EE 8D5CCB334C602DACFDE349D82E2D2B64C46683A810E0315BD3E6001F6E251AF6 59BA9DDC66CFA2F7B59A3EC7A988C4516ED8B4B43A41DA633A762232732639EB BA0B24AC8B23370BB810AC9F30DB3421C8FEE0E6B347460EDABBCD7921E7B88A F6ED40916688CBD48CD997B92A06C28A5E9C53BF525AB40764CAE69336E8C12F FBF74321630D7F0F1D450C0B9B765CB9CDA3F38FABB29BAE224375613524949C 6E4A90BC19A08B57F00AEC8321A101AAFDA5F5618CF07DB089C4155F6527A8D7 BC3692132CD277D73FDC33D100809D2136D215C94C85DA819B510656D11A6A09 874BDEFDDB3DF64999887A3C7CF1688C9FF060D5CB49E23663DA9526877DCACD 665820B86F7FD70183C79B9632854E479E05A32FC9C98DB5AC11D9BE547078F1 839E8E43DEF210F145175332A3CC021DC455AF02170ED32485D1E0B09F3ECF25 842448A35FF22AAEE5F81D608F989E0BC439DE558F82DFDE6748DF458A8EAB75 47C9CD6DD6E3BB10D6642221E77AE4D9CFD0E3C2273844D1132DE7FB760060E3 A0A3248CBE9E151C3C9B0D35C34482EA537988287AEF60C4F6593BC96ACF74CE F4B590FFD986D3ABF8598CC6BBDB61E3FB41CE44871652FBB8C884241691112F B5018940C55CD7F7D880B9D6156DEF3E6788DA0C36A878B5D2D845899E59598F 5D24D92DC1C5A44BB09FD5973C004CE6438E841EC51378842A7941239F6BAEC4 6D5FAE295994AB90216C602DED311FB8480E3286CBA54069F06C6DF17A2A60C0 FF1AC575E138154B35D58042CC0DE847D85F1956488C7E2513D63A975E50B4F0 CEA60F87F44BBA2FAF63E6B7A87E6D15076A09F529A53487EDDD09B05BE7337B 7CFD16A47FA153BB848F75F4E726D0F0769989710FB9B641C8280057BD24256E 0FFBC2ED3A4DD712847952E16560FC17725F211B9144B881256279AF5B95DC69 2E28203047BA5BB1E2D95F387097E353033944236EBD732610F1E3D291A00BAC E23B8656B7FF46183B2558E41A20FBB68787BE8423949C2186FBF0D14D07836F F1A7F0CAE7AB0BD7FB7FEBFB66405B43F52B4B333732BE6E39A9E04319279501 97D25A5C6B75AFEE1A7B8C1843C996107BF91EC7DE3306C4EAEA4CE1404EE710 5FB116BC598BBD0C86ED4C9E3F231577F34A412EB98F4FD5EFB10B9D9748CAE9 BF40B1A74FDFF45C3FD01FA3599395D0C190DE623CD274F86E1A8160AB93A549 8806866EEC0BD3F75E25C7A02157350F4F044A96E8B47CB0C38624CA2C6950B2 02F0E49842A90B52959C794BF6CB30F00C2766D067D03AB336211382B51DAB5F FA4BD58CD1AA5CD1BC866053AAE63421159B5A2127B1F259AFBB7C65FF7CFE86 F11A14CC66A090F5723B60284DBDC81EE93A93D3EA273DB7C1A7288CFCE69436 301DDE06210C4BC6D8365F05C0DDC68AA9437DB1B45EBD46ECCA4BC1F8369D93 62711C0ABA1F8D11AF835A923F1D326F006273E9A8F2E1C9167896F8865ADF75 E9BA8D117EEEB4DD33E22171E533ACD7111B7F55A4354182564267E1E75408AE 72E41905BBE813CE6C88D5684ECD2A5EF2ED14B6DDF6B8497318166210E47F18 112026C5425AEB40AAC8DC7995BC67AE920B1334D47D46A659829BA81955BBFF A3073839715A66CECF142413BEE0630B30B850A4C5B788591D15A42F7497FD32 3740E63EF11997ABA808BBDC2CC0C55824D759C50059C5B362F4B73687087046 0AF4FF4C6CA7D534DC6B6D4570EFDE490F00FB8DC0181929E69F8DA00B1DDFB0 964CE024172DE7C5DA70A90E89487721A9E76DD3B35BD655270806D4ED3BDF04 3D7868898D007378F30CFCA1837577F0BC7E293EC4AE4FA2766DD4DBA165C01C EB16AA16BAC7080A6B1A85649A09386A086ACF3DD228482A63AEB6A011C651E6 5A406A20872116EF67D700CA0F36ED2A9BBADBBEC0FB64FDBEF24579A59B8288 B4C915A1866A0B466E69166DC310CC10982B842FF86CEAEC8F07B60C2DB32BEE 19247BEECFEE0A5033A9FD190B2B27DF1300B30526F151DD6A3A5B6537C300F5 272B85D06C11BAB0E98E8C1A96BF73F3D6BD47D32EF0C36B622F95A0F60D188E 9E0C45C589EB703DB70D55D361F7EB22CAD041958355B11CC426BEDF1E19D1E9 F6AEEA0062BED07FA53F6C2F545544F0A33A7E29B450F6BE6C97FB7FD74AF666 3B9A03AEA1D57AD3F5A5D714EDD895B5D945082C1AE97D0868E5A0CD6FBE1001 B73169AE9F6CB1A6DA097B297146B48189FFC12ADE46DF242351C62FC7E04FF0 FBE1C810FEBFD22BF70F556E136A227D9876F84D072F6F08F76F7B9C230CF9D8 43E510CE75B2C6E45EE5623654891F6EFE237714256AEABA8B042D874E9E3AD4 2191C13B8375D2ADB6037A3872340BA5F937BE74F535B57EADC58706D2218D3A A4D234B5BF459FFA1CD806A1647F4A2F3B5630575F64877B8367914CBEFF6BFA CE449879AFC8349F56DDF2078C9457DF12CC19E4BC8F550B609E1FDE8A6FEE25 85D01DDFFF1F5BDFCDC27B0D9042FFC02E8F1905B65AA106C45760BC34184C13 24AAFCDD6BB874553DACBFF970CBDA0BD37AAF1B50C6F031AA9A6E297AFE238B 9CE4EC6D1981E846B631AFB1B732DA6D9177F6C37070F27A8428F256E2E1AEDE E3F6CB3412E4E33501E6D83008A6A366FA939A157ABA070953F605A1B5A5B698 3CD58B749EFDA0EA6D6275C77E42EF365E4B32E1C0CA49EB81AEFCCB0941CA5D 3A4A31686A8AD651989BFCDC6D7B1667D7275BD595D0FC41F5AE16DAEA552F3F 08B64274730C0904CD906D72FBD762D939919B92D78CA74EAC5C3D4FB856AE3A F705734EDE8365A6BC601FFC7DF9B90815139B9C098F6D1AF25062038E019421 CBF2F8FF6914E7165A0411775EE9F245865BC5A3710C77E57A606C70033A2153 22BDAA40557CC4AE986B28948DBC1EC5E604236F45E2F4D4DF506AF1311D1084 3ED4EABDD3EA646F161DF2FA944D417506D022C40DC178EAB049AC97E2BCE1BC 84280F671C1B0A8F7A3D72232F25AD1005F62AF6D1DDD3D459C0DF997ADEE435 37AADEBA6B5BBBA9803CBCB5C716947506CE5154C9E8E01514B734746DD38F95 D5C96017AEB7F1484A23F45257FD14958C4D20CFC0438FDAA9959A5CA0F5167B A8047FECC97AD4C4BAE0EB294BE6E81B0985F476394C3FECE44A4D233A86BEC8 A0859872E0FF8CF8EFE7EDE9BFF76E64AA8C7860F0985DC18E1469D7428247B5 72126BFCFED5ED9A3E76F9ABF563ECF7D3E7E0CF648D31E26D90540ADB2E2CCE D3C60B9EE5CC69F09B23FA7DBE3CEA5AFBAC010EDE906E1692E083B90EB8585C 270055B0CECD8FC8E871BC2EA776223E9A1C5FD494D19007DF14B5E362BB39AB D08B33D7B925DB5117D9454D33C6A0CC73DF19350C14C33520E300E2DBF303DE 4E8327302A42F15A07C361E7E3352B2707FEFCF37174F65836442AEEF338AE46 C50761ED9AFE20D0195B48B3C73C9D131A1B991DF83181777818DE38EDA96489 BB247C5150D49810B97755B5C1AAADDBC767EE3D674A3C83D274C563C9D554C9 651552FA115C3C263AACEA6641DE98F28611988283D394643B3BF00A6425E427 358F4DE3397A4A338257856141CD4CF3D2F84084046F59DBBE9BE53FFCB91AF9 0BAB52486EE5442EAB5AD10EDE5C8A0C0296AE603B65A88E47940B63933E1EE3 7CEE45329651B7C21780A4920FEABD71BCB63C3B2F13D5634B66A85195D56174 2AF5E6A2B180878F42A9EC630679845796CF01C29A2DE654E604664C32C48C9D 9247A24198D853E0EC6EB231353D177C5C5ACDE6B5F761DAD9B32A5EB23DC6E2 47FD3758954FAAF3CBDE5DA3E6CE3BE045FF485F94F14C4AB17A4068BF922FD5 15CF82EB961B94111073D512A3F905CF9A614B180C40C282AD0B0C2D375AA7CE 64651F89277C3B2A47BF171A3528A92937DAD15D14050B9C7F58F9844296A605 563643629A00E0B0AD0BE589256A53C26D0E32F111F6D793D16F1643C2CE2467 C34C34E8F6071F8B9D77F62CEF903C7381D83E648D70AE497095C42382920E8D F1D87496294916EAFA2F04A276E1CB8DFF3CB24D7917D4D1D910A42250F3F402 D05239223E1FB1ACD3DBB84F2FDBCB65AF87CA1F997E227561E3AF5E910D8CE3 911DACBEA0B8FB6FDA87013ADD6063D1FC7BC3DC748CF58FDFFED7E3E4394A49 F7677CEE060736EE9F7EF63A115001EA5EC51C1F18100A800345CF701D1B62BB 4BEC13BA7A90E849595F105B296CAABE41B17154D924C7850E1BD84D71410929 421A3BEAB5F9D6C01B39302FC05140AF9A2EC5EEA27D0E7B7F9C4C97563AB535 657EF6AE086BEA502040DDBC9DF8D064346083A49B04683F461EF302248C87C3 9E5FCD896D8D330E35A340B92D7FF6BF220DEB548ECDD3E91D6A877F7A233217 E94983389BC1BEE46C6F147AA791E090582C02B10557C6EAB873C3067D0B217D F2ADC5A7991F5AF1F75E0DA917034EA5D81E94B7FD87DB09911B7F14664C1313 C5E1403D96FE9840AABB1AE2C2FA339055B12D930DCE97B0E2F56CE19FF5E937 DCF6D248991ACAC5F81ED3443CDC25E72843DFEFFB2ED0E4759D6BB882EA0092 5A036A8BEEAC4028CFA57D7A20A4C9D8434F8B94058A8EC858F4872437F46556 4D2DD118A2E6E544CDC21DA04B6300C4D05544FD06AF1031DECDB5F528420852 89E55C5BB489028719FE97B3D77836A47567277791247BD36AD46074778B1E07 7B2FBC737D0D2B92DEC076843EECB1FA8945A7E8114A4CA20B5B71BE0ED7CCA3 B443FD524E97C2A11439C8D910F3480BA082E528606F96316A4DE3E4FD4EE91D 6FCE831190B71672669338F970071CC6781A7368EF748F18AA97A1D9E5730FF5 CB492AD9AADB92ED0A7D4CA1E545EEF3AA7A54C8731658CF1FF3EDA4AD87AE40 1DA756F12CD450C3DF04A01F8787C7778E7ECA271FE2E327DC7C85AB17983765 0D4B8E49747C2219540A3D974F0DC6309F5E73439C0F1FD0893BBA04BE98403F B9D031D94228AC39C6364BF69B2631F7F9C41F2AE511AE4E10A4ACEA6A444F26 1FC3BCC6C7F699DF066CB698C5CBCA5B28E69719968DD8F35B93A6A2A213E0A3 09336320096BCBBFBBC7CB9C750734696D4F5C9342195ED5BED13901D90EA409 0201A3EB9C6D4641DB496448669AFD4ACD2C69107DE4E543EC37E1862F137499 F794AA8639856E8C7BD94488E2F68048DDD825BD25377D4C6337F77671644F48 6185A087018345E094E87312FB649BFEFA74C6361E32FA09D3835AAAA62E5842 82E4278789322167E9D0BCA87433ADD9F1D1FEEEAC0B37D7F4D08F5640FFB544 4A0F004B9DB7D88EFBB0B12698977EA8A95E626B9F8BCA52815458B50A23897F ABDEF5EA739BFEBE138FEC804F20FCE852AEEA71D22B14C9105D6C4CB1B7925F 4CB9323AD90D0311AF5664BCB5EF1AB66A0C616B92C03B6FA6407BADD2185F10 16AD5169EA289D01BF617F647BA4A4B4F7D669B3CD4253178C052F9C791079F2 CD38F96164C7EC098D3DD7FCCABE52095E6DF730D6ACA63391FBEAA362DB3522 10D178BDBFD18F3D9FE59101D1AAD12EC21EE324D5B4259AC70EA5ECBBEBE5E4 FEE1BB9FA11C3C4243141FC585C0FCD8E2EF74861045A4DD3517BF61DE5372B2 A8B33442167AA417C0AE0FB4F0639A379E85C53A58A18F8AB4E4A06C1136C271 F2C86F024992F9666FA3256780ED217ED26FB8F8DFADF2A06B23974E5457CE99 97F49584EE29332C3B6FA4732B2562BB138EAACCE4F30B9C2A0412D6E646A7C9 C02CC0732E0FEE8875B45F82AB5975A8E19676E0188DB0A0678F417D034D365C D9426907F0EB18C156F0C1C4E839D020D85D6D889A13C8812048D90EF381129D EDCB3B956D1DF7EAE10B10C8D20CD506FB55F8524526B9F819E6E507FA2A14E7 3286A7966AB5CB34FB0BDB072877F72E05E951B9E4B292DE92CAF4FDB3BD4BAC 24315E0C213FC8194C67F7F75243AEC999C33C8DACC134A65345086648511E2C 37D27AFAA0619F370CF3FB543A090292044620CA113749C04ACB74B18FFE1321 9414D33013FA33A396B82DA7B2250703F827777FEA0FDB86D3D76B0BF1F774B6 02CDCCCEF6528D3640887E6B21AAFF7BA24043C3938A9D58CB78E2139E8BC84D AFC74E193EA6CDE17853CEE7C2E8EB95F77B142C61E37B971FD34FC99506AB9A FF09B6F30C88C446AC5035286F13D331F9F0293AC4C7F72C36BF4BFAC2710325 27E63D4FCEC5AF59A574733EECBFC4E8D7DB4A2220976FEC162358F3FFC3A553 F69CE6668154701736DAA72E0B92D8DFE6B88A0E8DF09C97B54D15280197FD22 DF648D91A966DCD7D2F741A5BDE56391807589498AC04AE278DF6B69C80B5CA1 F316D71518B23FD66127E276285743DBD63316387DE5A75F57096B636A7945FA 24F82AD75C2394B1C569F14E6B09CEB761FA6745E1CF41C075C4FFAD2EE0EBE4 192D6085A0986F096FFEA429F1819A41E097A7E7432C88139ED8260732082EE6 EB18787C865B0739EC687EDE8D9438E28F581856D1FD4BFF72A1B8905DE5819A 2F8EEDD9B8FE8C41272EE08F383B76986F87F7162A6E8796CBD4765249F13B3A CC6A3D38956919F373981298D18401A71E93834610B9F34926186BB091555E3E A99617D756CFC2056F15A07EEA7929654B77C0EE25826E77D2D5588BAFB0713D E15A984A6BD6433DD22BE0BD85C7E366BF766BD3E7DA465ED606D014775CF53A A01461C93702915776CCC8099F8C13A6F806DADA4B8F0DB2349EC9ED2594327B EA3126C1229970FCEFAC9A523A8CB04D07C9D85F048DEF25C7866CD2B1B3C136 B832EB9A2DD057426F167B69A06CA0576EEB0F8FF8C4E350D57D10586F3AB2D6 E07DEC49AD89E34B2457A114BA1668B47ECD281F31C9ADF947E9762E7D41E6A6 31354AE7AD01E787A25736670A091600636592D3625694F0E09C91D9C9AB20A8 2F19D0377B5D4F373B152429322C965ADF4AC765BCD9C3916F926FDC0AE9383A 92F79C37CC4E9654342BC996206F0C2147DF89E5F2F06067C1732FFB90709E0D 20E39D8CDFE8C8D928EC3A8FDDFFA5583B65F85F5BB0CB7C0FF4D52BB696FC92 017BD5361C4C0228C6724C739C331519179719BFBAD6B07230FF6C9976D14059 DEF0663902D08BE5B785F436FD8E839731811318D00546916484081BB3F3F5A3 6E7FC60497AF6D9D8C32559B6202AA8932DB1B5AE3FBE84DDB2BFC5836A78AC0 EE1FF6D411C191A098E75C83F45D7D8C4E86825807E9DA3FFDA403A67C4D5C6A D959F01CF25F1A5DEE1C3756CC66CC15EED57A6625D0C62B0632CCC630DA6823 F9A34998976CCD4F6C939E0D797299F7952F13DEFA80E610BF94EF7934F40AB3 7EBF51136F6F4BDFA662C36685846DB0956C693F2926C03DF8C456F5CBF9B5AA C75EE7CF176C0AD088F109AA33F6A5C84CF06F3B7F90362081BE119DF5AC24FF 082D6E2902BC345E1443CCD740A152146F5CE80F904D0385226728D33E8CE375 BE57DB277982123176032F270661A36A1C937EA72140065FF3BC3EF92D90F2E8 7318E000B25376A6F62A64C85AF894D15014495CFE0FFA074AB0E77C3E473E12 7140E94E0A0CAB8A06939842DBCADBA0FB169137DB7A563B22513B75D6D11520 4E98B5AB5B900C884EC1E7036A617603A2989815CC7C0745949627F2ABF829EB 7C6DEE37DECA8EFEC060BCD2E2A0681D3E41563BF86265D3B5E68899251D6F9F 5C2DBEE3C79E7553593E8B92EA6C5D3F3B46887E985E38E9BAD58AE8F88A0240 9FD67B5E4F7A5A189DA18812A7E1EBBC78F94B0B8A4E20163764DA6EF10AFE48 3937E283C600471F6F3C7462EA38DA7345CA0CE2E3E8B12F14A309B26BCF0011 629ACC8B50B0EF8E3CA04D1BA73CDF51F2266DB43442B1279680C54970C75CD5 026AB25EA5024CA5E9210AF139D202E850618394EF2D85F3F35F30B4D499246E 40C512BFB4E7DE4677366E9B01FE8DED5B7F89AD9902A58C66D63127A2538F70 840CA0C41B8F6A308DBBFF8DB39A9B8772194AB1DDD484B55CEF5ECD9929E976 28A0756619986BCD018F3A6C47825685177D7725F426F10E5451CB236A157A4F 8CC00A3FFF3507AC78953122D8769C1218A648D5FB2903F78553D013FC0230BD DF5936D06EFBD299BEC1B75FB1EEB6D04AF3CC4DF407575DD6A16EAEB41DCD57 8CC64C2CD20FB4E0E8FF0FFC4C9244E6453DFDB4994EE65D3F926B49E7C3D7E6 83EB946421ACADCEB98E6D2F1A7F9F6726EA2785BC13A8539C91C30146EA43C5 2FA8A0A69B04B7D51D4F0F765F29A4B7078E5D757953BBD332EEEBD7CE059250 781437811FF8EFA7DF77F07E1D09FC2E55082359A896B942603D71A887B5E7D3 573AB1B0924688B539BFE9F0F7D698A8007917E54DEA7EA82606195A435DDFAB 4B05F6073B89C6315DA14AD19BB3AF0923E20CDAF88A29D429FB6CFE3CDA23E0 AC97720E7A7D12B93AFF669BBD2EDF307B473CE0BF6A9ECBC87193EC3E002576 30BF12734B862A9E115406051BD5EAA7406BC5A053623351B9A6A735155725AA D83323484DC6E5DB1F48BBCCE9AE4B623933666DF798C5095E973A9BFF57835C 5748E8CB332C8226BFE87626A6C90E9B5CA96F288501A96EC3D2EF2C59562906 346B5B8BEBEFE7052A639AF93A91DAA462CED2FC04DFFA756C350CDFFE2DDF4C 5B7BDB33BAF2DC21E1877EDA832A692FCE7203EBB34FE13B8CFDB94DEFF4AF7C 016FDA4448007836C96576BB6F81848E15DFF0FA2833D1EAAF035AAFA0CE8466 0092EED378DCD15B20B93F959414FA94E0FE257D39D4FC9C780AA1D1A7D23D7B 06313D64D00328E4A9D92C69DD06E4D893D9C89CE609454691E8B3577845F20E 7ADF13B89BDE2DC5F7B4B2CEE4F24938C7E034129FD8620464115609BF234332 E54DCF54C0824AB01FF54E0B2D32766BAC55AF5677DA970C8980066A84C43F25 31B04FC5195033FBA1392AB8677B353201DFECABD9A5B96DE3AE7471F239CD9A 5DCCF1E58061C3E8C909A3530365AFA6942506FE4118C0FE2330141CC85BF075 9F5615F242CC3B629BFF0734E6921BCA03BDC462FA788398943BB6AF8C86CC35 0B6D2A450FF4B34637BB5041FC64FF1C751D1B5C7B4ECB41CC4D865027F0572E 5E60242DA802DB132E012C2CAFD51E0094C0FB561D23AB3DE17CEE6E7D751BA6 81A9B25E904155157B31C4B465BDC5639E6F0E9A54E5C604129EA6D96EB69383 7D1F7FF63E5405AC6E28BD087BD6511722516E9A17647A25FAFA22DEA0C338EA 900708C463BEEE9BCAA347007E4B309405B2D59686A0D48BE5E32CA8CE1F9C3D 4B5C45DE1DE84EC99D0CA81BFB0B117C4D69BD7CA26F1989BD0DA09B7D787AD6 58C2C9AD0F4B668BDF273CB959C262CA0D4CF56B3BD3607686CCED0286984D49 49F0F838A3567D1BD41B98ADD090929F0467EA95467BB37B51E6E17C7273B426 20309F0CADD3B556BA9AEAF42BBEE57080E8B3206572D6D570F8B71975F76800 D40C66898681B0B6C4526238EE9F05EB68A4400185530834639B2519A7400888 C75E09A9BADB34BDFDD595FC88B51ED1902E41058E45E98A9FD7F737D17E2A4E DC99B18F73DB36C7DD3225E6FDA68BE62536A77692CD2CEA848D54519D779980 9A9695B52A95C161C53B3A6F24CDC9D914DFB2BE0595B695773C7D52E49CFEC0 13249F16864650A0A366BF7425B8160C1B4F5963B9212082873553B9F270D2C4 87FAA2CE1182820B0430F9353328AB9BC9A1E3BC5955E074CDD656EF76EF4660 007F3B466E2F6205508054D195BBBE097185E9C0D89FF9E36A6DE6186F01E9CD 15D8090DD2AF24917B4DA64A7E4DF4291DDBC0A602B86306D6B1A37690EBE722 B71D79A88AF44B8C019918C5475188359023777062F3A1B1BE7343822CF98EE9 047B9A27E230A63908F2D45F1294D0105784758121E84578247CB6A18FD77C26 D9A6FE5554B0E23D12B24F40B5B8384F4431FF5A1F5BA4A44FC7D665455253AC 1A676E8B357197B02EA55C7236114893A832C1C859A3480745BF094E6F96C82F B45F5AB409FC95D6B0443519F58EC203580F52C8B67F890A13E8AE0CA66155AE 6FDE9C93A323BC1CC9877DBEAF7089C3342F545218A57CEA503B8248278D62C4 5B4E8C67F28088DBCB5513A6C7CBB4E66E5EBF647D3E097BBF7EBBA81502E3BE 15485A7C301FEC19770067B3E73477A2440B0924DBEDB4EED4563E05B2697409 B80A9C36FBE341CAB234D77EBC8BF8F2B2F94D1B5046C874D5D1EAE41575C3DF 319DAE68EF59BE62D419998C8271B9786A32C1851FCE2046429AD84E5AF1098C B86052058103B3951889F9A3321819A04DDFC774F538B0F1AE6961AAA69F50DA 8623B10157815B00BB5415BDA333EE83BC3D41466289A59FB4FE05F785BE2330 9C2AB9BF30E6B569CAE6BC3190DF42F654BA45DE61B7A8ECDE6858E8A39E6AD9 FA6122C32D9037F2F34169A792D55E0CA4DF7A00BB88951ECE71EA662931321D 712DD4A93160D52D0E814B539517412825CCD92EEE02BA9B39A556F42F2F27E6 AE6FDB838144E2DEB9AD54B3A366F64CB310A81D91F977EA0685BF93FC74B58E 7200E767B43FC2C86CE9470B2EF133D5FBEFA409C8E54159992D04449D02ECCD 9DE7FA7D456F1A737ED861715D1EE52FB643376D619F1CE422CD0F3B224ACA30 04FE96B80B1B103064AB0D78D3DEF68569BA496BB249ED8FA2024EB273D56213 C2E663CFECEFD4310310FE55DA5635C2A7C42EEEE84EEF1DA985FEAD36799BC6 678288E07F8ECB9363AFC8E3EB1DBD2FCED9013C00CC5C527E79FD9F010E4C93 E0165C8313AEE7A4916F9131BE9D0E94A264F3D72C270103BD71A06756C11314 847F22F6D08ED183205993A40D7791512FE598CFA03881A33D98188F6C293D7D 5F45432A8C5FF857812191CEF9D025ACBFEB861C21B6A0E99E55B8BBC47B09B0 617332F2B49A4B7FA0AD98CC57F51180F9D15B0AEC7F2E3C04DB9DE00D7A3CF3 676DBA2A66C94A208A72529D3086CB212E60BAD93A47299B946752E56F348894 FCA928D8FC459AB9BDDA400434F5EF826D6155BB43B84D1899D7C4CC346D51BA 6572741583707CB822AE56594E08115F5548E685A3FF6064744ADDA2812DCE75 15241C4D6E2BAE76DBFE84D31E4D85FB3971D76D494A781F18A8F25EE861F659 FBA789904ACF1F030BF4243C1DB8677DB26AE385380F48367D88B00B4C1FB956 422D01F07D4DAB55469C9333A19E04FAA1B01A05D2CEC5BD8C1C9115BC4CE1BB D8889FE79A140045FE7DFDF8D45DD619D6DA4D1BA5D46B3DAE9B396CC0A7AA4D D00B1E6FE6D6A753AB9705EC0D90CFF8D0ED8B61D468C6A48AC4C802C6CABB57 CAF4757A2AD6B06536DEF9B3F42DC1CE737DE6E3C7A9263955F12BE7880B2648 530F1E90DC47A9722A47AC1F098D291472F7A0771C49F69EA269C296BDC4D586 9FF3E6BB872A14FB6E76C2471E5B9F4A04552C4CCDEA22AB2F38FE7689392853 CC13763B09FC0B3E835068EB85FA9956367BE66C247F82AD7AA6F80BF9C4EA44 06E4C177D394BAE79C6457FA1EA8E118A1CB419115F03495D6A314F8FE56118C 41CD5145E96C0A663E94A9DA4495DEF5264F17F485D328FC72C40B1478E50C14 BE2858C19951345AEF97A94F81C3ECF71CFC031529EDB612F7F6E2C01DA4A4D2 24A2F4EA871666E850F49FDBF6EBDA88496DD468494DE29492B31E4254AD2379 47AB26D2F9D42EE40147C1C67BB146E0D566FF0BAA5272308108F86178AC8235 6853A6971AA030D73B63CD911DF58CD8D3355F3DF69D4BBA7ED69B9AE12B5A43 205871B1DB4403C1B21051497C83631124F41772A76669F416BC575972C85021 8C0D1095629C60C186C17938DC3370240BDFFE2916F0AB0497DE5B380B1BA8C7 4CE2C9A61607D4A0C6E13779241A5AB845748E0028319EB92AB268D784A526D1 E5C5C279FE27ABB319A2A508D17F1DBDCDC01E5CA111AC15C353D7D93F9178D5 805C611D326D0FBB31ED9030DBC5BDE28CCBF19B9E751E23A8BCDE08A3ED4C78 5A40C4DDD9ACAE0B5F47CE1887B9DBDE0FF4C9893D8C3DBC0F7C07F1F1B28741 F3E0238059561BCB893E2A23B334E7AA908CF45B5940DDC44C85351A80C55153 55FD7780612AE93793FB59C3B44E0A9336C64B043447E933E35EE934DA16ADC4 F2DEFBE93D303A79C7DA2A6DB448BA2928A1CB55B9CA1BEC3420CD7AF3A3FBD4 43F30FA7DD304CF57E1F4CEE12256DDBD0406CA54333A7F4DA3701C595E93568 27159E259D838DDF0C32E2F8D1D910533EADCDD0B44301DC872EE4153225EBF5 ADDD469D599641444B5CDA73A4D08449786864439CCEDAA5ECDC26C35E6176D4 FF86A17270DEE4A4E4744A2285626E2F8184224A7B2284595390D6350F699953 A8B00B17E6EE1D05A88E52A309C93F15FF0C6EF321EA9A2F745102D677DD9BDC 7B93A7F89769B1984A6C4B58FF173FC21C569DA04BD2CAE497624CD8AC3495E2 82B3206A3E97BE69E22B7DAAC7A13B8860D64FA1AE5865235BA95207F4F6E435 0FDDCF5F7CC80F714823AEE724A2A14423D0A32E9CE1F665F74ED5AE88B5ABA2 F2BF18A5CFC4D2D08F682F5F33307C7C524DB06547BA9794338FE0EA3F46B95C FDE81334F99261B574093AD4DA6691BC5B6E1F6E098708FEB431AB3F44F487B4 C6A7ABCBED5CE45B34EA6581CDF83FC3CC09BA38D50F142E168F2159DD92A00C C29A3934DFCE5A09C7278E3320B3D2727942BF21E5DD05497C1E77D59B41A557 0709C72644FDD4DB713582FDD920291DC3EE8017FC4352E46B4657FFEE866AF4 A7C90B3AC1FA95C5A5CF0E1CFCC0B0672240D2914783AEA8CE21A3054510F028 1CC9DC5ECF79F3F7C553C9572A43EE796136143044F52B5A6FD27872A232FEA7 1FAD1FAFFAF14465049DB21F4A65130FF12A000672C46D4A859EB8F1779EC2F5 256D461B538BF3CA00D4B7EF632153EFF1A668E08D1146C2989C33152D4F685B FBCF513B4DC144BB0675C099A5354EDABBBFBA133D03607F035484F8DD0A4C48 A65CCC7F245427525E08D3706CB2A0210E155EF0F17C2E44903B343983777A90 7BE4C97281165D87386397226CAB1F964E802E7FB406D339BD8ED71D896F82BC 8F275F3B6D648B4EFE00532BF0A09C9B061E6D08C7D7C7A93F54FA139E2B4AE7 EAC9AD7CBEC7866879069969E8F897FE19E688130380905A7751D149C4158283 F3512CC7698E948B406748F42B2ECE55E1F053D9B2EB2BB55DFFF051890667B7 E85018792247810CF07FBA0DDE487ADB728661FA9A82A338AA047BC84AD5B836 001E2CD25E049C679A586BF73980816CFE10B2E0886E90A149BCA54B68CF4C38 2A4F70B56A8F83C58F98DEE1468DB0E4716029528A4DB36FC7E985D7458F2530 61355C2ED2A169BDFD54DF345B485B974E174E1EA19F0B717258F6DD8EE05031 6E8F444D692C319A3B64705878AA9A2321E222B51C1353DB10F3EF2D6E9EC238 540701920A1E787153E7BDE4BD9CBD1A1DFFC23CFDE96326378F8E271F35492A D6CEB83BB512354EBE8F761C66A1B8BD54AC186DE4F00DA8BE211EB8352EAB6B A43ED4A3F30CC3903D700AA65326ACA14DCC1DAE4760418BD9025144C15FEB93 88D8BFFC179E527919CACEA39F64DCA901687753F714BFC70E21A34CCD0A0C14 78A1679EBC7CD1754D2FFA4202E76AA5F78E7D6F5965DE92D96FA8422DA96DDE 8003F572458165E27F932040717EE8DA8E9B4C34A86F2B8CAC58E336DF661406 303D3C26B93154C8C5F050156CAA3E91C15380FF58D64AC528CCA7FD0B5588F6 A74EAD6DD4BCAAB22D710849CAB18DA9979B8717338AD91AA47EDD8FEAEC4835 34E000573C047EC4AC1EF097519C033F85642D46B76073E7D5FDEF5D89B6BB3F 3D91B048B5AF47996A5275ED921DC505E0D6F466613BDD07F65CD6A79AE49EBC C4F3F17F667E0273D3041482C82B36532514A3C51B449F4BB2B0E6220BFC52FA 66A84F2CC032F1A2FDFCAB1F6F846AD99FC8634CAF09226CBF1FCF19D076B21E 7BB6BBC304827CF74B67E33D6401B2CE25CA769791710EF71D2B0C1D422EB246 4972A73CFAFA82359625CE1164004DC7CBDCA54EF8B48E13D9560BB2F5E0A5CC 97B853FB1642A14BF9BC6A8498D05D964306D57FFBEE025D0C6420A6797C07F0 E672B48BD06CD631AB0798FACE365D129B1C51F99FBD5B998D144905D775EA1D A7F47E8FE78168E31A38A806EB5D38BF444ADBE22A925B57A95CB5826B3E1C58 E094EAD91822386E00B583B6422BEA87653CA2B1CAEE0286429435CB2C6ECA24 7F13C0BC521E69DC4F10A57382FFBF7257DC21B14DB59E8590DE0B2C5ACC6285 0BABD7C0A1440331888F63F8F1CF2AFE0060E43FFAEDDE1CC900768D9163D811 AEAD4DA0D0BABF49911A0F1CBE3F7EDDF26F451FCBF037B7AADAF7433098475C BC19B535097444294A9D9A44D6BBDB8C214C2EE8D27DC7FF281F4FF829FF344A 05E00D7A3130BC7F03DF6B0BB6E0E87E778ACB9DE0F029D8A25E4AED01183BF1 937DC3C351CB5AB2F5EE3911D1545E051FA75E6F0175B5934A0E8CD6CF16FFF3 71FC78D3EABD88605C4BCBAD2685D5EC6C6CBA9BC10AABB254812F6CD9881480 58D83946CC8540358318A54D04D0094E8C193AD6BF1DBCC7DB81462DA78228E2 D995E0D777F9EB60C00C1C50284D76B1952A73429C0104CF86BF482C5BA630F9 ABC0E00C4D3C146DE988BA90E584B59367588F4B668A301A66B811FCD385B916 B315D96608BD3A3C90DCA20D273FB5F7E48EDD3C96941999A42FFA7DBE93842A 9780966E4ACCC959C1FA93CD03CC228A30959962C8D0915732484E7CCF32A8EA D628D3CFF58B69F070DE16DF6AF47321AFB33C40632BE878F35C4B758FF75DF9 9B8E39249DD8DC62FD4A76C17C54697ECFDBE3F91BEE8CAB98084A57518EE22F FD1E1D96BD4C34EF250E90CB6DC81EBEEFB4790114B7BB68F064ACE3C001086B 3F4C75EC58EC382B0FBB1A5C0E0A277B3AA4D68C4E104BEC3B763684F6D80C1A 187F133CDA654CD39ADC4A811EA445A50A69BDDEF8AC767E0D7B489B8410A585 A4600B51F4552074DA362E3F47C5E567A12E55593D254F3C90847A508FA87D04 486113B7BD7464E886EDC86F97A16EB0F0544A0AC59FC5E12740B39D3514666D A8D4AF9CBEA3116EC40E9B6818EFAE35027C85AEBE8ACB017752F4D5B3AA30 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.1: CMR10 1.00B %%CreationDate: 1992 Feb 19 19:54:52 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00B) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-251 -250 1009 969}readonly def /UniqueID 5000793 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C 295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C 4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF 2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E 0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B 43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC 96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65 0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830 B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007 97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8 FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5 20759B6A4C4466E2D80EF7C7866BAD06E2A1040FAF2DE1FD6AFD5FD97EAAB614 956897A7BA8B194E613047BF469C7B4261CACC1DF1648E8A86E926F8702B5ACA 6CEB4E3E85EF23EF5C9C53097F3BF17243B8D4BF0E6B0C5982FD14E4E916D363 E265322DF0823E9990F966A842ED69BADFAC2CD1754FC84C0FF6750D2373F997 362DDA16A0D73B178FB7B67307204AF174AB871C254B8E7CD77058113B702B2C 13F341A972B67756D65C6A9F553C365E20F0BA59F8537C88E0C139E4DBFB279B 5EB06158D9CCE7670C8D6195BDEE16F430F73A91F7171B4C8064DEEAC7D38B5F 0DA94B3E97116E1C3FDB669AEBBDEA3A777A9AFA92550909AA9D0858311E56C4 61D372BC556317957B1127F260CD64377D11125ABFD379CFEE11E4F1CD99B2CD 17DA577F2F277ADD3791FC8AB9E11AAA1BF898AE21338948D37202E017214D33 FA245ADA5C1DF1281B0D03CCD7BF989A8A5EC887349676D2DEF9F727ACF41712 C4A4B0A58FB3407F3CF897C932FD35A827F3CC2B737C65D95E0A27F020174B1C 362BD2F9764042394792B01DA5D041F124707E3DE6C99E7B22C06E621A6B3345 263F95B8CABA907FD4313202BC899BFE22E93661C69156123182A8C9355D5C83 61FFF6B017AB7BDE11288190F34414839ACBD8E8B07B14208269ECC85CE7942E 126723698234387F8DC6B1C926563979CAD433B91341797AC8D4E9842A2021D2 B10C931C8D48A357518AE4B9309B6B5FE9CAD21C226A781867EC9C9697AA0991 1C89233240A676D5BD336DB321F63A4D67C6BC8C9B9034EB7994D97F7D0A76E9 EE8CBE9D635AA4F737D5CBC29E7C52BC7B203A53EDCF2AC17C97DAA643EB311F 9C71D07F43EC8F49CD697F6170323D9CF494B3359F533BE48D38907D6A2E5B98 73301286E2542B278DE567FB37E8F7085831A8FF2AE0088A25FE2F0A934F5178 67DD5BB165A516D5F2EF9ECD69EE2BF5469670256638DC6B7A1363DB3A6143A1 DDE149C7549F0FE9039907AE326AAA7812331A17081247A62BD9A7E2FB8EBBA3 0BA2F91C6499EE1CBF77E16D7EC4F94FB96595FC66CE9FCEED3076C006AD5FF6 77E0C7F856A40BA5B30278217A3BD475A187BDAE24AAAE8510725A2D244664E3 B20ACDEC911547897C7C451218068C3AFCE0E7AFBFB99A8A29643C9844717D32 E88761DB6F94BF760A09692FFADB23C398BA5E9F1A5EE01F6781D44DC2D13885 279E750C8528BA5F974CD5042775BD45E35B0E556D8015DAB8EF9808C6FB887E 79634230CF61AB7AD05D15473560AD5BA8E9C22745BFF150D402D02439F6104E 12C829031910663583604BCB1609A79265A100042B9A685A4C2E7A452356647C 36B6680C44BB1D89DB60C38E2894F97C0442ED380125D05A21701AC58D600D84 59B82B38A30373D7362A0504CE71C22387371D4322CC22362D93433ED26D4585 1ADA61B17006B016219253A1667463A7734DCDBA217A458B9D0C8FEE6262CA04 23E5B042AC025B0D58A83FBCE8786C934404C23ACB098FE1B44F223889D7B524 2201EF7936C6997E133DC99F39FFEF7398417606652FE19A54B6D1CA8B44C8CE 4D4E5ED7C18A67F8A4F85BDEBB9FE4122FBC4D37C448B437C00CB8F6EE99D2B6 9830F0CED88569445352874F07D9F56C7B80ECAB15885DA1DAD07A44E26AF0D7 07AC50CF3FB851A9825594C4DD0945A958B14B99EEC5C2B64C904EED648B4B4D F0E89222E7EBCD6312FC96CFF899CCAC483513D6EAD9A6792BFCE2CC4382787F 9A0BE08AA4A2F4EAD20A3609703D376E1764C1FD604E38A0250527DD3D3B3438 85065E08D9E756A2182FF28DD0391D56ADBC0423625380A696066B2C72E24938 FC793EA3BFC8CCD485D66560E7A86944EAFA86E08E101264FDEBB4F60BAF123C 1EF24807651FC691BF7DCB15FE97F8F55E60FBE28E7F19CA24FC46D76AF4F200 40ADBC55ED9AD75C1EF060817068E97AF245FF784E31A8D828B74CD50DBFB4CB 778A87F9D9D16EC616791AF07B76C15E92B3916526AA250797C2FFB441625876 6C4D46DA1CBCBB7F3EEB057B10EA28F6C59BEC6961B9C1FD09E77F8A33F4704C 3D2D68B1BF955EEE560CFF203910311D894F2B86179C7042FE17263A0B11A846 85AA89EFD4414B5D7ED5F3A63043CB36F744A9308116E3AD705DA8812D689369 704D1046BA8A5D9D89E2A8B43A864F8C106ECF3C882B0A1345F820FD19D3EC35 87C8E9E81E905D89D266FD76F9FA78DF84AC93F6D3D999DDF42F916ADDD3E3BE 611B3B8E946925B0012B4710128173DB4C2D5598CDC0060F101B064FBD66646D D3CBFAB4FD71E329D8ADAA95E51C3739584A29E41C423E55946561DAE3A94D58 0FB0DA880F934F65F19C04E86827226FCC00DB16742B3EACCB83184671A3875D 861ED537C51328F05A368FC4018836846947415B3CDB43FAFBC72B6B7394D6CC 00769E31727A3AD46576639A09C2500D3471DDA0049654907827D62A3A49A37A AD320131053975CDAE6860AFBE73134C8F8EA95F22970D6B89839F6AEEE73CED 23E885A00D88B5A47A462194EB56F2B1C8EAC4617135D3C4C8BC7510D90BA8C1 7E7D615581589C6A88AFC8F2A0AD993796B44661D424C57F44D6879C4002EF95 F4510D02ADD562B4EE4C0CED90B75FAF895D12338C67E8CC8BF76F75071BEEC4 3DF438C4EA120663BA0C4F7B1A40C2223FA50AA89CA6BCC116512E2DE35205CC 76C64A33BF7E4D018FC0964DDEC2CD0ACCD5716382905B9BFDA33A4C0EBD1C90 2A2950ACE2EE1A4693D5BCB0A15431C9FD7EADAA7E7F61295B757C7198CE86B4 885E0B71A25CDF4642A0B3780060278FDA57B05A3D3D79738A7D575FACF35E63 4C4824B14CD502B8443E4EA12AFC1F2AAF5BC55BAE3FDDE72332483DC8E9DE28 A1A7931980462EA64FC26FD1220AA44A007D82ABF0D158420D663D01D5F2DA37 9653EF86290D8B9919F5A199F25155B525E7AEBF9F355E65DAB67C7733447AD5 69C889246F8C15B5625D10A832BFF60734B57D442DA046C1994A74C8846BB865 4A8C02743E916CCB34E64848442786B43389EDD56189A3ED98A97F72075B6E3B 57B2FF0B132F11F39B19456F7B986DA6C54CD422E31CAB19D99A4765C3839C22 6FB63E7BD3A82D63DCEBD995745F872DD8E94C9A40AE554EA0390A6C4DDC5654 E1AF1DABB5C0BB18E1EC99862F9DABDA7DE7B3507B96FE8AE7BE2CAF0313277C CD9E79941A264DBC31EE98775B3E92E84C32B65FD8048A7F00287CB40D8F0D47 FA57F25606680C07225489DFBB79397DB315C3C97CEC8EED068867177F3FFA67 17F5D3DB8C17E8A78B0201B5A7F8780C567D4EE623B6D2B85FC86AE8AF6A5DE0 80B2DB4360559DB14764ED076F531B2657F4DC5966E1BE3FC38BFB8EDDA7CEFE 0CC34D5CD33A66BD7B36BA48EF278742F13DD619ABB90C781113396D9C652507 A37694FB21D51C1C1A85C7B114FBCE8C728F92DB66BF1FF92CC144C11401C91A 9ADD033674C5B8718CEA4CE4ED9AF12B4F726F9578827D100CE0A61FABC9C178 047A81D7C7DA1B3D61A645A6A1AE0871E6DF7B672C1065D86714B611FAE39646 ED93B838C86E8D22C4154E4355EB0A287B5C80B26FD62D79EB4EC90725A80437 8AEDB4E7D3933FB236C224F3E6F6393BAF4C8653B58873C6FC8341131C239407 DFE61870BEE9BA257EA3043393F6DC0DE9F23F8D2ED3371EFF0FEB7D85E4EABC 7CEAD77F70AB58B3AACA6335A0CEC7ECC63492E2CF2B2A36B51D5154C1B51171 395904442DCA25DADA9504CECA3E3F7296B6100A1C8201EB1442B7CDD47731FB C0E8398F1D351F5C3ED4D3ACBC9C54821C9C12CFA5DA38A30EB44DE3DB179957 FB824B0B9397A143B4AD9D3DE6A2275CB45676CB350DE1F72CE40A28E1A76A0A 8C69557D7E0CE715E4E26FC5D913F44C1487EACC017324F7697F4CF0A8A97EA5 D36E25FFD6775D1871BDDBB540AE6DC4A2D4E4AB121DD18B65A79739414BF232 8FBC5388C4670EF51F9FF363D20DA1FD57735A6BFC0A343B399D6EDD912FB0D5 D51C0E50F651791AA327A001A1ABCE73C06CC01A77547C2984696DEAD510B6BF 619C8036925F90284857FB21AF817FC33FD016D068016EE5F4AAC5397B71D01C 9C7867B9B2018DAFA861321566299EF4A97C2950E2D566BDC4F89F14D88EC501 7A2BF7EA0C3CC0323EBCBFAD0A464A58CCA861177C6D78F19DA31A8C18E22059 76E1C670216FCDCC8DA6099246F37BBBE90FA4CAD1B733905ECC557CD19F3A3A 9CFADE5461D6E584E1A7347DBD6D8386A967FD76C76E3071F631CA57DD9D6872 A559A4B64605D4899219B4C21BE727AE6A1E3BEAAD4337BF14F725F147575A31 CFB8B1BD4B05BAB99645C79823CD6CCA9E74192241C98026733AD2C02F0B1B58 A3E97E3D11275E74B469B185DF61BF26A2A88937A06887E65FB94BA969007ABE E602EBE0E675C7EE016DA53CEE6A6BE34D3058CEE5B8E472F524370082C8B118 822B106C8C1DF1B66F9579A213CF094A0FDF442CB01FE00EDA8DE849E0883ECF BE62B4468015925BCE76E22EEA46BC5A874A060954AA18375C12452C0591EC67 5BC881548151160B6F5FAF15A152638452AD1848DAE69B9019BF119CA1520163 A37DB7019F3A6E6AA166EF1718E394ED31664A3E60D01E7303D3444D59B0E872 7EA0B2C47B567CEDC7D38BA45886C254888D63258B93059E8D55E34123EAF0D4 91934A068DFE1235C2C823881FC1D4AD8C280FE7462C2204DE6DCCDAED5F32C8 CEA0EF86C45847BAB63C1F3DBF3E478FBA0C32F8393F4ABEAF0AB78E3E6AD016 8765BBE94017B836B5F7F9EAC2D6DD8A988F8E7DDE22950FFED1AA53668CD753 D464F2563936ECACC3918DB165CE4F34482185287D757C041F9761666D023482 E2EF24DBC6876988C4714B4743715DD30A4E534493C73E79924A96A9ACCED9CE FD2D55D1324B779DC2C443CC6818418C1EFE756474A715DB106B2B281A0CDBA2 59ECC2CED5FDFDE371F338EF3158CD4EFBC8C7B97581A59D8E052993762C72F5 FC2921C5EC34BF2A6B1C81E2F0B5EC249A2E3DAA3E5A08468FA2D5A1234CEB3D AAB2F97C8C2D70A21C74AE7F81979EEAE284D408081A83C6F2656C252D86C740 0DED51C088968C589CA6CBE10901C509DD37EB21E75FD291EC052D64657BEB31 B6BA1461E03F1B1E3BEE74B686D740C0F609A96782E02E27AB97AE4A46274F93 41BD6668BAFCC97C8F1723935C33713436AE69E788A4231FC2DF518AAEA8CD0F F2C9B85AA666519FFB899E03DD4661A9AFEDC84421FAD51B8F57EA1D1CB9C6FF 3AC6A18630A0E4B9C8FC587BB582376897EE1A6E154EA670771548422FFFEC33 F47496C8C2D1255454B21BABECF7FBF442EBE080D49DA6A7FC875FDD66B6142B 44F27A14B70A490CEC1CAC0296B4B49E5C69E5C434E4E97B181EF1C5D338FD6F C2A9B14B251CCE80EAACC8CF9803BC2B86EFB42CA1D4038080AD4613A9D32C8E 5D602536DE4E3A6C2BB4761C267D919E5E22F877A008A46FE6BA2EACFB0B000D A048EDD6426913C2877FA355481728663BB17A76259CB6EE4FB93961A17E2914 2CAD24259298AC8B23E54811D2331A83B692E5190E43D2E955057B07FB963022 A59010F2DE280777384FDC604E11497798E15C616A57FDCCD4981B7EA26E162C FB3CF7002F696BCE00EA95D6A722627B45D9D8B8460230C3375E45EC2FD6C65E CFB374746332284A94ED1DC9AFBDA247C98A4E156FE4B10220F348DE9878435F 5F44A56F6CFAE44B4BB528B8F99A7EA0393276275B45DA1E6B8DD0DCAD937CFA ED7DAF3B3C950B418B550564B97A2164CDEF2A6BA70665F26F0C436073D710EF 56187558084DEF9D8F319F39E9DF6BBE3AD040BA388507D400FEC912D2E1DF3A 5C94060C57A819C06BDC3616C0EFF08CE812CF7FF80EB872C6E998925830C6F7 9B5FBE724C765563E86DF0396EAC4E5509337FE21A987506CBD86EF21230513B FB86166908C3FE285E87F80F48AC434086C3B833471CE932037DFA12E058AC18 61A1166414E8B8C75B22C29C7E74DB006670A58FAE9FB78879EE01358E534F98 1EAA4B9ECB2E1FC8217494379CA05C4D8CC98ECFE8255F73DF9EB1F79F4B6E3E 927EB3DC9514AF953D755159EDFAA4E3B6450BE4A1C3F1245C8882065A8A79A3 C87DAB3115C6D0AB4069788F85240AF085747A40002F859E100005FF419FA192 E77ED64786FFC3814AF10C6BB3F6AD08913BD5BB490ABCFA5244D6CD15658C4B 8CEBA83AD5B44237E08BABA108AA43D3DC8AD59CDCBB586EAB504200F501A7E8 467481A8625D4D560E7E0131ECF34C6A90DB14996DDE83D0C215F0CF3DB33CF9 F83EAD4D96D47FA4934912B7D7C0D985DCD95F842ECB3C9459BCE14418E56270 EF8EE0BAB68494C25975C837706FDD3D7631A3E5D867387D47BD23707B715D03 F537B959C1ED2194B95E570BF261D7F52F1A2BBE4D2C42F8393624F58DA67CBC C7B11BC572D9725A4AC343BF87E84D38FC6052F3B6085487BEEE02C78AB65613 F4CCEA72A8527DBE00224834F8B4102E0641982087E56FEE148DA03669A9983F 51702C37885A8E9BD135579563CA528094DE552775DB3E3997637375B541E645 65A0887A9BE86AAF0D216AEDC3544E4076C73D716FBB8BDA826067058C9EBE8F 3FA5A1FDF8656D0095632667DDCBDA1A76C4014FE5BA854BE307CAD912F44486 4A9960575CD921D6B4F2A675C2B7CB6DE2D0B86C38D1BB6FCB4D3C2625747F56 05552C10C5D61AA60AD68B4B4D2BC7E1D4BBEFA97B3436301C07161050D6F045 22248D89AFED104A17801ADBE17AB3CC77BF9216AEB98EC8CDBB10D83175C687 2F02A0FB14908D7CB541290E704D90CD17DC1295A83888F2EFC8C8AAF38D3791 140EBED7717B156C6B1B7F2201996ACB52D295026F4B1D4BAC0F195DE6B340DA 4453207FF65A63CF0A8309CEA20C9C42004F3A9075D3E3C92AED93CAC55309B7 6FFEB03F9781262968B162BC904547B61D3A825C556C70F3FD3F90A261B9A70B 405DB81F3C9CDA6DBE97AF91BA2EE6C5DA666ACCA25C2290DE4726431BAE3A18 D4815A93EC04EEB08AE39BA505C412AB91C5E5F937D2A219DB4427F2E48DD727 5D09D170AEE5C78CDC8AD22EAF0C5C351095FAE1291FE448F6C78452AD023E6D D163EE327D55AA5B1CAFECAFE189DA96CC8AE1A8CF163C4915A49566529AB7D6 8B32526F640E43521B128573F25B4664A39581CEC07DCB7FF791B93F4CA07143 43F3CF9B064E7DC88CFCA8E6A86BE542F09CD3C12167B0B4EF0AA9C85F9880B8 AAC65842AA0E6970B0AF078E5E3B1E0735EE1289C80D299C33E44476A886BC97 CAF53A29B6ABF64F392B5084C05DADD8F5A575E604DCBE574521507CCBF5B08F 3A73EED91B2058AF15182FC22BF6668B21C2E4397889BDC0712F4B6F2A03C322 B57860BC8D6A1C3BCDCD89AECC7150B08597E8B9E75A2EF5571095989BF0AC7E 6A3B05371ED7382C74095918C7EBC9A5CE353C179EE61553792FBD0EEEEF23D7 AD572809CB109D9B92E0246A5A17E4270B8180E57AC623D203D8DF54BF40113B 5911ABA9A9BDB5FE3FFFA372BA3434017D6AF976EEE7AFC435C333F5DD72A7F2 1B8F7853A764089242E96562CEA5F747EF2CF2A67C2A1EE91F77D9BFC9C84DCB 08E73EC153C2C631FFE094C83095E8333585ADE56DC4B892277130B447D43723 1AD6BA1BE0171DD4B5676529E525A060F9D42C2A50AAC5D24D7D5DFC5F63D5AD 1A881F2786E2E729A1918277F6CECE94C438523CCEE9950153E13064CAC6A11E C0B2D4C34BC505191C70665EA407660B6FE8406842CDA55CC3DE1430349B22A5 11D91758384F4B61CF40A49B94825D449E93230A24DA2021F0F3297246888634 EA5773D1BCD7CE09239A444E69E6D4EDD9F3E1950C913BEC7963FD57437E6D79 E7F9596C38BEA806586034B534DA92D1D3F2290FEA2B8B3B876F012F0E0D5439 EFE2F147FD58CB0F1714588F2895C5BAE24325988528955ED16F73DB1FA9840B 4722FA7EE35E0A69E7861DC8FDCF1A9C88A212EB8F0060523E6D647F601CD9B9 5171935978426D704EB30127B6C4E1278955CAB81FD6AC3A0C031F83995FE7E7 79A54DD9F724CBF3CEA78D86A6F45176A2549192FEBA8BF1C94DD133E3CA358E 1AC58CEFEB629000E68EBE6191240A8A767A4CF431DACC5894F80111C624A24D F0BBF600AE97FE1CAD1791CF51F84C97C2D86BE7264D8C9610023252D6A5201C CD09353716C971554D3B8A1558CD9D107DFF709D33E01063D181A2272711ABDC 9F2C601E827E2DBC754D0C68343C0A96D3728D72FCADC8763AE25BB39224CF4D FF76C31FC008EDDEAC490BEE81E7229341F33A8D757329525C0A1DA383F1F19B DCF363CEB3E4CFDD9D718EFB2D7EEC62CB0D10CB0788549482848262EF1AF416 9DFA8CBA4FEAE09AFD9C55364D86F4528CC2A75D01C69EC0CCD1ACFBF7A5C553 179FFC5D39FD7302BA59B7BB8D32845DEEF072E31767921E32A6F9494F080CCB 25A86E684989B8E0E47EE887CF81690B73788AD91F8F24AF4067E9D545AC8A05 EEB1200A757777F885D898AF09A92DF2FD34810F40C4CFCD98B982D72FF91CB5 09D52567D7D33FD938539A38B021C30097D7FF28D6272DF02D0CF519FF781D7D 93B93BA88F3C7F8478871C6A50F32232C923569B35975D350A8B4F30AFFE9955 4035F947758317B9D1DD55C22EE5FE4BC9DE9B871CF4D37CF1F6774F54FC9D5D 71922A599705EA7FE064DF068BD111E1ABDCFC3DCB42756F1015CE7B9A3B4BF9 6026E5187A8F4DB1B946648AA20A9A8361788864281327ED997EED40AADBAEEE 48FDDF030662EC0ABF87598C1475088FA4BF67C5DEDE2F9EE35043142C21CB6D 01F6938916632674233DEEF19968FF63CA1A1F47007E29BEC9273D5B75B147F8 EA9C0FED4E13B16131759B42CE22A307F357C6C501ECF44E5379E9318987DC26 62A264E4A852610E5DED6257BA463C31757A22010DE2273EF9A0E50BD1BB9771 63E227B811D7E0D10075B17FEC0B461FD999E10DA20FE82B4D41A7A81CB25911 C4C3E7E5C37E62253EBE1BBE9A111AC77828AEFBBCE03A8E53576FD99DE7E0EB 01FEEF17734EA2596DE75D86F335D7E6D7F10C915C5B2595F2FE7186365D5798 4A658B8D1D95C077C3DE6436E10919058CBE027E87ABE217E5D4490F323A9709 9E2B3DED7C666F72FEA378802832CDE83796A1D2F46A9D0C2C1AE84072912FE5 05AB8526377DB2A96D15305673A024DFD4D0A90685ACD09D3D0CA577719788CD C30BEFFFEAFEF88D1FA1C51B691DD810C88FDE3BB046C727437071AC6E915CCA 4792CB962FF70E745A5E95F1065A7480CEFCAE06E3C811D74D99FA56F0EA34DB 801866A80BBFF79CA7DEF13D26C22DDD2784BE08C9C1C122DF0CC8FDF78E516E FD259C6C21BD83461F4ADA1016A9B183D8CAA68900362D881831737DD54359CA C7958DD59E127AA6D1218A8D8F14B42DB83304BB0BE338F6D843EFCB8DA7BB42 9E2F42CB4DEA99F16E9C0407E501E6431EB797C5ECCE3A2784FC130BE184B992 D4744C1C0214FD8CBE56D66AEF766C3F22CB746CA72DF2D89C969A81A54A9F2F 3F690082A8F284A6FA2D891D06FA26D97F8587F66C64E199CABA7C415A4C6EC8 F3ED2F57008D6F37DDAC8B6E118E8B492083FF56E7BE034E59F9B34AA6F8E8C9 641541C020935700BE44D2742F2D49640AB86F9791FB363D6233BA67EEF5E26E A4198442CC08463E5BE5A689AF7BAB3E5E2B29A7B8333C82125828181E590221 72385FF672A993B89907F5C3AAC257653ED83ED2496F15956004E3FBE668A34B ECE21D6F32EEC98BCBA17666943DC43FF1C32D15F7C9867A63F36DD6E3BFF719 97E5D12EF01AA3FBD1D56B2ACC8905F49691D3798E8405D799F154AC5D0474C2 B1666A1AFDE2B147522CC8284E2B01F235F9D82354BC8F7B22D87BFBE1CB26EB 69CD2BB5CB5CF2EFC71F2CC870AF333EB1990AD09E62A034B25296E08D22E9A0 F489A6BD137EE58602DFDD3645115298B9CF50CF0B35D3F97ED73869F42CD82C 9F43A749794AAD1C33460201B8D4B18CFBE32863F0C6158FB718CFD77BE29915 E1C61CBEBE8CCDB3DE34A6CEA2DE7CDC3E99F25D8D4A41AD856325614FA27171 2090D583BBCD5923223EDCC8DB38DD41766C2A62672E1AE8C0A6823F9B77F34E 5694F1E9B20453F8A72DDA58C1000E833904693D8FBE07BEEAEEEB5781FFBD3E CE3714B5AB07D3409D7C28C6DA3D31F4A228B0A27D2E3EE67181BFCE0BD9C402 5A1DB77B0EB20DC9BFFFFB45C43F2F374CDCADBEB0F11087BEF6338B87BAA8AA BC9E5A7193DA03C41F2422B2E9DC7E203737F205DBB10FDC34B7397C9B195D48 9CC3ADF1D3C20D35D296B5D382F224AE9A56D5AC444BB1DE15B15ED290C35811 57A1AD8915D76E2066C4956BCEF475D0D4A5495D0494842683C356F7C635A905 508F6C4D6C3EA03B857E12FF0539B439DDE0AF8B9AD917860A2B47A687C30C6A 2F7B816D00629B4EEBA516327448F36E32E0D59FCA119F84D9D5CE1194868989 BA8FCF711C523EA56A048468EF1CE41B90A3B71005DE825525AA1BA6E1FE07E9 5DE0BA27DA510E008AE5AAB6ECBB3B01394D7F0A05C6DB98FC3389015BBB3B9E D1BB40CD8CA4CD3A4778985AE40461DFC4945E184E7C0BFEBBA5C0FC33C8A9EC 794F6DF49C7150525881004EAA2AC61677F6673AB8020802152A4B129FE0EC6A B33F9389736AD0ACEDD294C01034DFD50355BD4CF97D1EE77FAD81F8EE40BBDF B61710461076A4CEF0E98258CF581E9378F716CCB4AE38EFF6AD4D453A834C96 EB6C2A711E6F5B7927EC96F1167BB579053BAC4D6D822F74022D613589880D29 F1F0AD3ECB8B197143157BB13E1719231449442E9B79574D212A95C6B6385215 E05024C7B324B127081E69FA661A180F8634D1EA412975AF7A3792AA33C9C81A AB5F0C2B98F2BE9C6967C4063FC04A306F7849203FED19DA641050089586F571 5DDCD6C093E290D883E2BE49BF0DB07F20C300C503745B2FD21543BD0A767557 1E2810FEB292B1134B92746D0CC6F6951B16E31DD9FF8F41C7F79424788D6E45 55CB7AF71F94903C3A02A35D01690E1162A7AC1F567C0B161757290876C4EAC2 117A84865DB1E8B2C318556D7A9CF62CFF431DB61F48ED877A0B17CEA3938868 94CEC3C806F1C9335042D7536B166F81F027876B109F4D71E901B58B4848EA7D 7E6DDCCCF314EF8ABE42ADACFCC7543F04587B583E3FBDCF18ED28CBC7479E64 2464F4033922D793C1777307A4CD9195B1B0C24F622C89DF230F5A231EB77894 74632A2979317573FE63261A4244F5F11A00BDD533E79E145C15582B3FC7094E 16E956831B172C066F11C421CE9179DB45B0AB6BCFE814D7914DF6EC21218F63 CFC9EA7B9B86C37BA4F4EDE370315A5B455A483EC86D454FA7B0833AE1C1CC7C 4416B4DF4048EF3A7FE352EA4A2484B463AF03A7A18776AEF1BC53297D04629D 9F29041F2D636A8F2598A636AC7B5263090D08C4FE4E4BF5F1AAB2AA5FE4F9C5 E9434C558DC6D161E97032F55A63951E3A004C7DE61362998E9874205D834CA2 0B33135AA106F35BC2EFF1DC3545C2C022DE73E670A3BE3A88855B3244B1D6A8 E6A7DFFEE3D414CC726028F0B1C0BBB1643A774082921570919D9D345FB265CE EEB037363B123C19A69E05C5E557D729A51C66D54D9D8CF4B88BD8F25253B38D 3820D54E1E7B1A63777C458E35DBAF92983EA0503F17B86925A7AA81A616997F 727F208F528AA27B86ECAADF459158B33646C08B786CE3633F887532FE0DA896 FC2797F9EDCE4AA1F93408F60B15A582BFB93CCD53A1CC0232FFDB1C8FADAEDF 5385D06E44C26616927EC78D6D3386618B4A988CB138EA05FA66B8E7589676DB 450089A8BE2B2B8A07298BF82BD1261C565B73C10D199F3C153917151086D2F5 E60F5BACB81AC76E9209F32F7C2D2549C9564692B5F6081CE2DE00DCA4F451E1 9489B24E792D5223AFF68F2AA73E3283CAB5C7D0B4E89925924D00815085AA5C 8DDE03CF3B6B286BBBAE719B5518189AAB63F435CA3B6CD7CC946AF24F600453 4F41DB633F3FDFA96973D0FBEBA9DAED96F8B18E81D44D7D1D24817F8E16E0A6 89024B2DD8B0117E40F04E71CB80DCC4CDCD75341515300580ED205424B0F940 14E54A8CBBB7D7A9CD0CBD1E7646611634E5B4104FFFE1F1AC4ABDECF25CF5C6 0611F543F2EA4FFBB6F22917C8500E0DB5AC2C31D6D746A021ECB7EF04166DDF 894910A649D5A3D57FF17DC8FA5E8812AE0711C2DF874ABE03F022A7F35A1CEE 53FB88A797AFF4029E41B38ECA3CF7240594EDFDC4FD5DC289CF1FD5384673CE 50C502632AD38D0DBE41B4D8F0A5D95699039DB92F5096BC9AD719AA34493378 A4949C2E5BBF88DACA0E724C485B044E99146E07BB888E055870617346BA535C C1D01F84AFF34FE09EC7882E739D4C3AA9A975B8717DB080435DB4861AFD3A8F 055B86E2BE34C2271D7D96C7CB6512DBF41D3FDCD9DA68C236FD07BBB346152F 1E13D468AFDBC6953B270B1953D103C0C9BB060EEA3F126533B604428451EE24 B9B98BB0592707F93EEFB5DC77EEBB9582C163DD724F475854A7D03B6B8911B2 DA0472651685864B35B2F23C42FA2BE8B8765353A7DAF5D5CB8ACF976ACF3203 95E7911EABB43C5C39FD1B8D6C1C4F80B1D529EDFA9BAC5952B60C2BBD5133AD 468831B441989D580ACF89B5131225AFDD52C99EC0C956536F96C5463E480265 CDE5E9A5AFB89E073165603BF2CDCA9185BA3DF1494A45BDF9E6BCF7A65DED71 5822C61FFAAF646D70BE605520CB7A543B5A8AB44B9488A33F9CBDA04C673210 580E9C6EF58968103D80292151577AF9CE5741A5C4E3370EDB8B59601FD7A019 E7ECC3B248133465860FBED534D78D36CDFBE49B3F280839C2455455DC6B0DE4 3851BC3F9E854B8E35B0D37D0E1695E2105BCF5BD1BFAD3F0300DBD409C40385 1EDD81057127FE7C0069794D2A4845BEBC51E71415F18D765C306D24EEAC17E1 DBC1205863D5C1BF0DF5648CA63F226DAEA86CCCD8ED73DB2668625E166A283F 3AD05D35F00411518D1F606E1DD08F3CBAA96A673E324327F2D2613A67944498 4ED3A0698129568D39AAF6D3EDB221498093455B844CC5A15CD577D97378C93F 6A16EF47409B6C87E782C8D207E738D19A22EB248C6AA350DBBE665A22C072B1 7FC894ED876C56ABAB1773F48E2E24FA4C8A74450709DE17C2E891657B9A6C55 981D2D221E3D4469B1D183F818D22A8133362797F211948C24A6D3FDA5D0B310 698C99A3704FEE90EC92AE399D157F786497306BB9F2618C7E18528A24D91B0A 1171E95DC1700AF24F64CB218822007B02C3DAEB1A519D223FB0857232FB35B3 DDD1685284834A2D0E7CEA2CED6C2C7B9A9CAB0880EFB97C40E00CA7614C66A6 8BE8820091F9167254ABAFC10DD69F9FDFD73812BA9F4F983E699F6AD52A8205 64778FC89AB0D24BC1A61C1A9959D050CCC919DB05CF33BC9D6D2B9FC271A79B 2DECE97E6A51F6F5B288871CB2AF54882505C32DB1137254797D169887C2469B 83CA1726BD29503B450A644195CFDA0F57A529BD166D65412AD3D35A9E97BB96 43FD7214B05AED96AD2307A5B3A30692149FC222797EDF2E782A8B35B73BB3AF C9DB8C4A1A2DC86121E19323EEF3AF7D7BF8AB62168DFA63EB4470CE484779A1 DF761CE9BFEE864E9077CA1964AA1D9C11334EF9B8F84B126228CDE0FBB6B066 69B989A6FC3D3A4B621FF27169518D6261E138DA1CF1D8C21A12348D3A5454FF 38D76F837EDEA55C1FB3EDABCC0F7A168C985CE0B862A9AC4512B38601BD169E 7D1A52AD11122D6CF4A8D22A74B35CA097E71B8AAB88B227AECEFCEAE1412B89 56B1ED7D14566D0E6EF71F1108196A7F485E4EE9BDC2D3D78DF892EA28482B4D 89A8908DB1993EE6C1349DEBFEF97F8539566BBE0749459B986818A340BD5B6A F316F15C18F1963D72D60A442F0DF648361B131E5B98FA7183CDC91ADC7B26C0 FEE7024246213B7E58ED5B6CFFBE6ECA2EF2C28AA3D7F7E35921956B5DE5E08F FE7F2143F45D46996FAB8388EDA2ABF36030F02F6877FB2FB3EEF7788E609224 537EDC291C09B9041423E78120CF998E1A173CA1EF8FC80F2EA4D621481609FE 0D368DDFF82EA5D582332E75917C0DEB007CA5B9CEBD48DA4850BBA4B1335842 A1202F9EF6F85412760B97C704B3F769EF2B8A7A80076120313EF456DB771355 5A14AA14E034EC4ABB31622128C65B076E9E16A015AE5E713B1B90679B8F884A 5A11391CD7C0561BC2A09B3693A540A589509DF35E4D3C208F0C3A95FDC8D701 913ACB8EAF098891EA5C02722BFE9E36AD2B60866E6316A265D7276D3FA908D3 2EC7A79CE6848A7E5836BC6CA85A20847B57D96BD7854802273E907D2CA4E3CF CD2614645CFEA58FCC24474856920338098BEC31BDC84FEC8D8F0238658D3C17 E4311FDF08B92B0E3A531C85D96BE5545134C0E5A8822EFE35A13A03F77DD24F B6873996D745A083F860DA3747A9A1DBDB74ED7744D744C2C8211571F2E12804 C9254BC0A94245D5CDDBE3FC8C19153540317FAB2FFE078574F073FD5920D524 FB45C502CAFFCEA5A4D0789A0772568833F5608396927B7C27F084D592257C30 575F9C453BCFB7F5E845D3EEBACB15933B564D6F3D922847C97296F294DCE96F 8B7A33FC9F98E4FF204AF6A44E40B1E657CB25BDF0F288FBFD0DB93A4D2974A7 2B0E8AC8535FE76CCE3CD39E4BBCE5564BD3E0EB837937104A84B8FCD11F0C39 B5E9A639C06B27638DF5A23312E73AFA015ABBC22F3070959FB0ACEF3796965A 23EC3B218910EF5F7216D4F58884C2E6862CCF15089C7EB5EA8F6E4101B93E21 74DFF9D31CF3C1153740D042A1508303406A99092CBAE124160062CC6E013B7C 0E8B0FC18F10E436430E2089D64A1D3B551329B08ACA4F95DAFF8546EBC50FBE D5BD362671C0845C8598440D550FEFD0FE8EFBBCCABDFC440732A1F125672881 02A5510C0DA85EB22755E7AB45864D13C88B1AEE81B194DB991636DE54CCE4ED EFE84B6523C531CCE641A48C0943DBDEDBAD9E5DA36181F73D782185F4B828E8 763E4F60E2260CBBD03AB5502F659F2C14DE55D07F255E7391C78C55E6A2B04B 96FC138ED7CE889E9D7682FF0C7A38841AAE3EC837685EDFB2B5488FD668A050 7D35F35DD6857A5BF9350B75677332A1183C16F38194F989DC03F613018892D1 CC585C5B1DF3D1174DBC8A6EDA8F7E44FEB7F4CFAB494991EEAFF3E881EA1C23 ED9EF8D1AD8EADA64547DB82705042FAA56DABE5AB779B6EB7EE0E5210EE5C8A BECD7037D5B288601503E113BD49CC0291BAF54E1704347D2A45CA8CA5C38C26 293AFA8FCFF39DFAC645F0F8D455370A308490CF7FA0BE5B7440DF8185C9CC20 1AC040C0C0E135189D78779CAB4120824EAE8A626CD976387F050C1DFDEF83DC AB19E009664211490B67B8148A40BF486A71C20BF875F6EFB86014EFC1AD84B4 D4BEA3FF8270520E4D65EE7CB8184025D689DD932E2F8A3B8567BB9A58BA2D8C 66697E90929D4C5BFD5740E626E62205A550C087A81200A102ECBA191A425195 F3DE0BBFCB2D33E5E2A2C7464190B06040AA333C31863DCB6C8759B07274FBCC A9B83FDEA25E3B9381B9F6C0A8D4A2F1EAD2782895A7F55D87ABB0B3E39FAA58 3EA43D2A6FFB92F541A0CF85C5045DBCD567B535C3C37D2E56B2C7C341E1786C ABCF4568872D402441A45C8EDD7F97CD2A1A89E82E1B577096DD58ED8B3DF933 3E0D87EBA3664B1B80167CC74C4B00EB51E0D710568A974DAE3FFAB5B9994555 187B8D38EEDA62ADF419E071D9F7963CF70D621DD6039B73AFDDFBB49B9F183C BBA99A5C1AEFBB845243F8B3A41B7B919076EE0EDC76AE0299F7948DC65E2C44 E93CD69795D596B44609071088CB81DDC5725A66A4FED71F8934C40C9D935964 EB37C3AAF9CF08058089CD749C984C40A78E0B9A74FA71CEA3BE0F5348080651 B9B3395D6CF809445C841BF9E3D4B6BA9E21BC249E05DDC016CA46A1C47B9198 1AE850CC3F019C4BF2E35E510FAB7881E10BC7E970C03FBBFA501AD032AC771F ED8875A1450BA236E0BC6A8301A2AF646EAB3C29816334EB79F5118EB57DE284 5ACCD7996A00D9BBE9AC55D4582119CDF48028D948EB0D97491980BC6B7ECBCF CB4A9841E47F9FDB8005B5B252B288DE4FF661EA4CBFC92D7524209761968EA2 3C1F70F40140889E16A4F2A667F8CF2998B497CFFFE56EE0D3DA44C696912EA0 D8B359E19515B9E487F3C4CEFAB00BF64B4AC4E8553970326256074C6C0E81D6 8D36165E071E86D02D43F75A561F8F9553C8E403024CB432E7E880544310C110 09D7F95BEA3CA7759060569184FACD88BC481E5C8AC0FEAE7CA09664A05C9788 9AFEEF09DFAB4819EB3183B5326DCE99E237F8FC459291A9E7983B6E8313A98D A669B87CA1E6D584CC5C034A0477F49999FD121A6158B85F410D6C61C5EAEBD5 E9496D7DF6D7209BB72256F9C135333A9D94A2584C723FBD6F9ED8EBB72740D2 161743B214CB078F5306AF970765350DDC23A0BE1337475F3A9A122BC0D98199 71BAF1372CEEC2A12A2940E2FA4B2A91DD79E7B3B6BE1DCEE7DCA27B641AF16C 620F6888433C7EE3C2AA505F185A0FCDFA354767DA279A55116B15FC5DC0F106 1808DEB77ED5FF7AF6E0888F414D8A221290CF67B1B1DA7A4F1C700C6DEDD725 ED4BDEB3D8C96417EDCD3554C3EF7D579144283D1D9BE0100A908250394B9027 8459C7649A2567A507C7A0B31DABDE8CB6B578B13D8ECFC8A1C5A2D6024EEBFD E62CC95D4EB90448994BCDF0528B815A4B45B8EAB58405E6CB7112618F7AF235 B9C3E5E2E181BA9647D03F506CF9B946123911503CE70B248A709B5F98D97E25 498D90DCF71A20F357CA59D967A1058F8D59EEB96C89D417D38909706097CE3E CB819E6943D9EE8553B853A26562DF6B1839BAC4B55760DD64800B9894EBC8D7 6E67212D58B03A2C165941F678411DA831C8F1997516B28A6149F3BBB17966B7 2BE64060A0BE385625E3E81A5DB2AD2D5701B45B8CD18A192E3A1891B13C3AF9 C4FC3F2DF6D844B1329073BA98D3EA4F98B5656F010295D1A76CC1388599C71D 5593F8CFAA00EEA7B6E6CAA4A2417F0DDB466E979A348962F526F0359DD1EB0A 554734F1E1CE10FB0C2747C8D328E073C4F0F7E8925FD8A48747B1B0B347D64C 59B137F32A415B2A40A37C3BBD78B49DC3D762C2DCA6E0B2DA5826085874FCC3 F6FC5E1A5756D205FBE552F53432DFA7D029EACCF3C116CE7F2380A165F75501 A3D16CDDB6037F2BC5BCBFFD2CCAD15535B1707FE79C08319E1BFA0430FD51F5 C7031D6C5C1B07904F7189FE029E8C9A0007432AB243118D3409926FC5998FCF BAB8DABF9D60673CF2A37712B68C365A5C4BF11C7C146C5A3246958C648B95F8 A33E195476FDADF525554C703910AE41880087FC4F562867CF810775337EC490 9F23F45645D1AFA210F6FAE86628ADD619A3EBFECA5A34A5817C8CF997574DC4 FBE9D42DB53E481A45CE5C82C63E755E458896E08FBE7D6FC73D4D834884EBBC 8CB4606B6B42FB446513D2110B9810AC173838FC2CF6CD917930A0B34C616158 EE5A820B61BE72FA0516DCEDD6E66E809791F615409C36BEAB1DB23741C01309 A35EF20BD7B22ACABEDCE964E549DE4696C3D4766E5EE2212C60ADD4EDE61756 2EC01F6979DEE4F49D14505091513A588B7E82EB86D182CDE070F3752295FC46 DDB67153C130EEF59B4023CCB60319C79180B782A8F0F211E59EE66D106FC202 88D2B16E4A7BEB92B04D4D381FFCAA449F1CF87515A96F65B8FC4EAED4A97A3D 7912C89C51BC34DB9039002B35A2AD96895A327C4F55ED5DD8AE64DC26ADCA2A C36E5895F95ABBF88693C4F6642BA33663469DAF2217749B93AEFA795D4E967D EF30146F757AD127C040FB01809A4450BC71F26A775048E54142F7EF6369EA6D 953C581E3648921CD8E7DC29DBD288C5470AC1F43918D1EFC31ED5322912DD18 F6F8E548973E86228D7A00CFBB04D0273719C889198D9F0C5904841C4EEC83FA 1068204B97522735C495515CB8F849625C7DCE3255DDCE7EFCC5E2F32C69092B A7DB279C5397AA1949A1E3385451D3C0BC0F8F399829F393F7A935B1F0439B88 17E840211BD0EDC1478D880811D1C2909397533DA166D22151BB06C32F03DB74 4D2AC0BE5628B27434FFBCAE55EF6970C64B56C708D59E557FC2C9C8C56F1814 1F84525B67974995946BF0382D10123DAE39DF6226B1A6F469363867BBAED5A9 73E2D0761E4D26C99CF45616E8073A45B5A0EB784C197AFE759B3C2E73506937 1AE273DC315780CEE1BE9650D44D5C411A088799BB648F317C123637D77C45A8 0557637336FCCBD60E812C4D7E10A9D84A1C87E37A768414E199C754294551DD F86ABA73E373C57B3DDC7EB5A8D63A21D0AF6E6B85E0071938BD16FAD73AF952 EE51CD6FE120069EA6448FB8BEF836123C2B73C37DE8D3CF57D0BF789BF3A917 9ED3C43EC6B36C4F748AE079DDFD42C8A64B5DBE01BE300C70A997A7F4785EEF FC952C6537EF0D79C566682CA09C84251BD6C6B96E08F2A0B359659CDEED1FB1 A99F59112D08B2D2B5B85294BBC4E9F4DBDB85AAA4609B3D3CD7B8BFA132B48D EC59BA46803AD45F473375B3A28C6009546CDA199DFF5186B81A271263A2D5DE FBA6E9CC3BEEF962DC50E2D8A7821C91856FE821AA289801B84CEDC7FCBF8152 6E8CC2ED07FF1603A964FA236F1CF544AE1D526613D83420432CB2D524298F84 7E22065F2870E994D56FBE203BB8D41A5FE01E454EEA3C05559DEBD7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMR12 %!PS-AdobeFont-1.1: CMR12 1.0 %%CreationDate: 1991 Aug 20 16:38:05 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /.notdef put readonly def /FontBBox{-34 -251 988 750}readonly def /UniqueID 5000794 def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C 68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E 59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28 51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23 DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F 45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31 821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE 96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D 9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379 26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4 140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213 1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498 1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB 377D3061A20B1EB98796B8607EECBC699445EAA866C38E02DF59F5EDD378303A 0733B90E7835C0AAF32BA04F1566D8161EA89CD4D14DDB953F8B910BFC8A7F03 5020F55EF8FC2640ADADA156F6CF8F2EB6610F7EE8874A26CBE7CD154469B9F4 ED76886B3FB679FFDEB59BB6C55AF7087BA48B75EE2FB374B19BCC421A963E15 FE05ECAAF9EECDF4B2715010A320102E6F8CCAA342FA11532671CD8F801CD08A 1481441DD7636CF033CB03AED4C0DB61F470E74EEC9FF45F2D63E090E5015B57 7D91817B0ED1A37DD5CC9B3FE39068852BDD2A0F0CE171FBEC090E3D313D56DE EDA8FC0A848AA3A5998448606488364AEA5E64834D4CA580EFD84EF0E0E76666 7293B9D820C2CC12C8FB9674BF75AD57817E72E9F829BEF6D45BCF8B0A76E90F 868E0B75B1A4ED789D8C2FAC1D14895A67B78033F1304C828E338F02D7EEDC69 55ACB5F6EC477FDA46F246CA6325F72D328923C3F729FC539C369FF33A5309FF ADF5DF1A75E7B0C6A38F4A2509E66C3BA14C8DA97A604FB334FD724D51E49E7A 4715599845AF0BCAA6764C5F3C1C2A23586B413A536BEEB423830AF95E9ED8B6 79953BF468809DB6A09E1B4417580163CF617B884318DD9F03530CAAB6DB3882 A9FF3E0D47939DF764A604A3ED4D88C0E7B8BC51CA3591957637612C4A6943A8 1C04D9E7C64FA380AFC474DF72CDB5B686FFC223E7E06FF70531971A47AD13A9 0354F80654F8247F703498A16F5838E52AE340C7908276491644E9DDB4D9D05E 900728EB2F92D0C18BBE02E1AA94EFC2F4198E4818FA2001C1F0E63DC2EEDA52 8CF9372793EAD4B4A114EA8E4516A87A780DF244207051A02BA3D09118E6EB48 8C9FBB44F1C8D8D35858ED64D5C461471CD45EFD89FC23F8A21DD741441BD186 908FD274E23B98851CD9DE7CE0AF48D0F7FCA0F408F2A048B5D2FFCEBCC978E0 AA1F2844D36239971EAFB70F63145138904AF626F04C5608A303DC560B82DC6A C502558260504F9290535D01B2FA2ADE7D33361DAA5BA065B09E7204C48F8286 5E79BC1B334254CEFCF2D11E3C35F5E821B0FEC05432DD5A0169B17180E21A31 2DC022245127CB93A6F51F832A7D0FEC8CA776BC21BA4B0FBF54712493FB1B3D C3D5DA75F7AAF1453CD9AF63A8B04EBCE939408EE21AD7FEB968C977EBB862CB 1B9E2D500D41ACF7C15E700C73481A89DAE02500970DB57355D2957F30391879 6249500A10E43ACCDFBBEB904A4CF552AB2A480482634FCC2986D49BE67C5D57 ACC2BD3BCBE78150D920E5D5FDFDF07839B0E50B9B7FAD08E09CA89D711AB0B2 91EDF96E858CEE17FFDB8D8F0780D91C7E050959FE723B2BCF8FAFEC7BA24851 CA9B0FC33CA8D1E9AF46DCA1743BC4CB3F67E9617A23A123B66FAB1E9D7CF505 C3788FC7BD3EFB75C50342F98D54B78E93265A0C9E2F11228D8C37CC4E965427 B06E4417FCC770E1443AC0ED2E8921F33D0ACB71FC8AC141792F1DB93C6C467C F40053644272CA63888DEC77ACF5D49FCAF99ED4011BE5665641F0B18D715894 7131E213A739F2F6D95DDF4513C49225B32DD76F946190A754E9FC719C9D949B C90A1B09F904F075F7748202EA6D410B70C822C20E40C8EF6E6B7F05310E9079 FEBF196772480ED2BDCEEED9CE476FA93BC294452E086DD93EECE239CDD19949 1CD6E1C3A778D45A9E00C2C56AA0C4F52B148A6FE67895D05F8DFD9944D58673 CE59E9D49705F6936DC8C521A85542FBCAF2FCFB945CBE4BA6448C297C965877 4D5A9B7F2257D3CFEBCC38F245DC0AC2D7180FF1876824CD490D75E801577702 74CD65E1F08FB9AD9906F841899D8FA7CF11DDC597F9447A96E73CC6C86031F7 0199773326B864EB103F71498AAA4EB5B0AF6EB1BBBF52E951BBDA078AC48934 24E45DC0B2F0C98550BCAE6B27696B8CC7BC1BF7F3B2EE852CA50273228FF978 F36FE13C4EAF01282EFABA14E6B1454CB768B45CB7E15569CDE1FC36C000310A 233D949AF4F94791E590A246FA043535F15E1D03259E5136232A71F3C7BB3B9E CAD62EF750A9F6F8A83B3FE6AFD79A175920B1839CE75427E185F40777ADB276 0053DB7981776DF7492F9E944862DB2563684968004AF9DE1B8D225427BD859C 498A5F4FEF1C9DA39FDAD1924008A06330CE13C319EC6EB05A19360183A9DC49 E55B949D57AE4A89E651293B670E66DC08B47A0E2F789762C92FD2D9273C37C0 FD19A9245BD8760495A52B9766F84EE1385F7F8AED25C983EDC8A8BC21856DF7 492980CA5C31B74534CE4BF1E55D9CE3521F8FD779CAB088F27979A192C18590 197FBCE0853A4C249D426434FBD2E4E07AE96127CDFC88A2CED3F40EDDB3EAFC 8864D5040BB9535BE155F11CEFF9FE1309ADD67329680011741E2A39FFCA32A5 A325538E58ACB96E04B23AF97AB4C90FC323BA34C39EEDF6A67E04BB0CBF1020 BF3C0540454DE84E1A6CACFD810A25AA1658F3FE931DBA2806EC1732F15E642E 3EA41C349E4D894D43E5E95FF764A5E65A8B5756225405FB8395AC9756AC1819 F84675222926AC781913124C6A4FA4A48D42D77A2E99E9FE7673AE2E4D598B2B DEC93A45971A9064F6C94681EE9E082F7CC3D32FEA8596C6EBCD3E557AAC9AE5 DD4AAE6885B684EDE293F98E87DA6C9EF5F824F7BFEEB51DC552130BE3232CA6 667853B772764E4AC3225997E92EB2001A847E3C67FD30A07BD3BF5F7B250119 AF8A81E8F67A0EA9D8D34256737C02C8154EFA629339B643FABCE826A99AB349 001CCFB7A61BD27558B5DD7445F68AF7A716960112A560338E1EBE091694DF02 F9E0D4CC3553E087F9294F9152BC898070E6116EACA8DF53AE411AE76E801C07 7B298D7192393951995AD524D1131EE3235F016476C9F758AF59744BFBD85C95 BDFC04B413CC2BDCC14B5041735B061665144CA1DB7CC9A4D8B1FF3BEA641E6C B9C245B188A56C5D70CD3C3EC8C25ED95A3CDAE0624D3772152CBE03840F46AC F0D922ABB44DA7B29CE16C0DBF84456AFA0D877E0D1FA8466B7732938FDA7089 9143F0B20682116D90EB31C962F7161C3A4CB056885BD9DBEA6E185A3BD13273 9B0C272C29DB292D5ACF20263BD0DB6760C9A0978AC4B2D28AB717123C9681D2 C04F1C5A6C8347980349CB284B14AD54461FABD4DD2F4D9CD5791FCDB743F8B9 57DCF52B698D3CA594DF6D6D45E570D59C2560C95360BB3F21DD744E1CCB5708 3682B9FDBD8682953ABECA12726A0109CD01E9844B3CECCCF1357FCAE44AC182 2D8C2AEC0C1B1F86E2F5FAA82B742C4AA4AD8411D6C30BFDC2E0E0B75092216F 20400441E30C4C4F7682A937CF2BEF2B16EF66CD73F3E95AB2099D556E5789C5 B24FC83FAAA04B90B94CD35B2707F4214239BD19F027826746A4208876ACD817 D4D41AAF4DC8C65D5A6F7401EB2E14CF445EC88FADE398C4FF217FB392EF9FD7 6CF3C4E3C61CFEF327CD5949AA997A5E04637AA64EF6FF979FCB507A45B6D4A4 DA61CBB5757B88C0456A719E28F476E279668110F276A21ECAEDA8D88B4F934E 128237171AA19B5011DC984A9B700F6A2CB84E30CC29422DFADCE605DFA3B22E 701C7DC8C01C060D68F055990626353FC815A49CDA5BFBE7964EA7411C85BE02 A3EB6098502D4D1074A74A246867712F7C14E256FD02541A63F90E69B06BE2AA 799EC43E9BF61969F3AE750AFF7AF2A913FB4202E84EBE7DCB80EFB4D89BE60C 30BB8B538BBF2A7DA74CB215843C6A96AFFEAEEBE93182936E65DE5E59138F66 334A62A840212997A6E6BC1826E7F649C36CEA653749DD4C0B0F566A3D097B51 B9979EEDD568B4AF2A20EC5A3127A952A11C6C166554278D7B2C5281A403F884 501CAED5C89E356FCB6DAA37864654F42A92156CB929A43A9262139575EF24C8 C26AB3FDC1CC9F5E1708E1DDBBF75057DCEA307CF83EC419104EB92ECE8B1187 88EC7A77CBBF3C706F91800DFA0126CBFF5B456B0B29739D5BBF04E6554A26EC 446C53890383123D842EFF6735285DA7ED1FA96A2731C17600EFF7D658FCDF63 66D2F8A0D8EF7E496FD79EC770E19AC1A90CFF55DB41301314443696B167B5D8 AC8058BD5DC9107EA2C79190D68E85DB798FE6BCF489E52F15DD92163EF8D800 5F540E9A95C15573D63E33052A0B6642EEE01537B2D96B65C089FE166EF7F0C1 7191FEE68D137B6F109FEE714593B2CAD1B0DAF3EB35586C74236CDAD34E35E4 F527459DBA657F0AB1E08A47A61BAED3EB1269225C4EC6698A132272E7A3F7A6 ADC5C66A7FF067285FCC848B3C429C53BE3D08B5028E7C203387B16AB2C0211F B1698514E2DE08E109D93D4B37BF501344B96392D36CC81D60C3812494D4B5D0 27D299A9BC876F738DB6AA20245CB3BB53813FDE5D58205F57089EF4D6C634C0 DC597A26356923E0A2562C848A5045208E8A1139CC2EB04FB1A8CDD69F5511FD 11178733332638A407DDBBE053C79EB35F0B2FF79A08C9F3001643DFEDAEABBF 132D65974C09ACA8FAE0604F25445670AC21DF4E34A2E3369E9F9F9C3A51DA67 4A190494950D5FD469E94D782E1CF4DF1DC2D134C831A49C551CE9E911772234 73F80C30543F494A05B99313E5268E741A0F9DB646689B0A661B49546224BE4E FC90563EBAB5FFC7DE301E972A3723CC6297E20029DC9430080D8E0A04495DAD 0EAB3580777285F0A4C4097080C7F91236C683CC5022C414942F02FBC3B34B57 BC5190CECD101D8AB5E2CA438AF3344FBB9D43A1A094B5DC8F4D21EDD1CC0342 9FE77A8C3F4F9BA5FD044ADE5B897644EF4A19F0D94AEC118DB0D2B6A371F6DF 6033F88B6EDCDDD7A50C9787D9EE7E93E2CE3AA31FF64DD99DC84AD06DBD931F 41766FBFD91E7518D1C8EEBA02CDBAFF4BD0C3AF587DAF42D7CE75E767E25971 787763D46CF4E3F6B1BFA8EA0EED6C37052F713484EF053F0C200B16CD75B2AD 20ABF84B14D0CA7D1BC2FBCBD06EF0BC0A6345DB993979794B6A2C24D83D7926 4BD2B275235C1C62AF695BE5286E272533C251B4BABC317F8BF62C1E6BAEF6A3 B0A2C807DF49ACB77551BB47FCA6B54F4D0857F7D8457D6A477CD55067612016 E0315B56C70B218A07A00B7C0417B9EECF88F5185A4CC40F2A36575B0E4EA444 E19C4C474BE5CD8FF9B3CFD0B57B6C89788C985A40874A1385EF05900EC0455B 90881566F4C2717A58989E94A74D35B642F14DA97AD679CE0BDDC4BE1AC4FB69 F3BAFC7F8AD868D2 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (volDoc.dvi) @start /Fa 138[51 2[50 2[53 51 1[43 53 1[25 51 3[52 1[48 51 14[66 11[59 2[65 64 68 18[27 46[{ TeX0ef0afcaEncoding ReEncodeFont } 17 83.022 /CMCSC10 rf /Fb 200[33 55[{ TeXf7b6d320Encoding ReEncodeFont } 1 58.1154 /CMR7 rf /Fc 138[51 51 51 51 1[51 2[51 51 3[51 1[51 1[51 51 1[51 50[51 46[{ TeX09fbbfacEncoding ReEncodeFont }13 99.6264 /CMTT12 rf /Fd 202[56 56 56 56 56 2[31 46[{ TeXf7b6d320Encoding ReEncodeFont }6 99.6264 /CMBX12 rf /Fe 149[23 55[55 25[65 2[65 65 18[23 65{ TeXbbad153fEncoding ReEncodeFont }7 83.022 /CMSY10 rf /Ff 149[27 23 105[{ TeXaae443f0Encoding ReEncodeFont }2 58.1154 /CMMI7 rf /Fg 133[39 41 47 1[40 48 2[37 1[42 3[25 43 34 29 1[40 41 1[43 36 36 44 11[57 8[57 10[62 2[65 1[65 23 23 32[47 3[48 9[53 11[{ TeXaae443f0Encoding ReEncodeFont } 27 83.022 /CMMI10 rf /Fh 167[120 88[{}1 83.022 /CMEX10 rf /Fi 134[40 1[55 38 45 28 34 35 1[42 42 47 68 21 2[25 42 38 25 38 42 38 38 42 12[59 47 2[56 64 2[52 8[59 8[25 12[30 30[73 14[{ TeX74afc74cEncoding ReEncodeFont }30 83.022 /CMTI10 rf /Fj 135[62 2[62 1[62 62 1[62 62 62 62 62 2[62 2[62 62 1[62 1[62 10[62 62 4[62 62 62 1[62 2[62 3[62 1[62 19[62 1[62 45[{ TeX09fbbfacEncoding ReEncodeFont }25 119.552 /CMTT12 rf /Fk 129[44 44 1[44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 1[44 1[44 44 44 2[44 1[44 44 44 44 44 1[44 44 44 44 44 2[44 2[44 44 44 44 44 44 2[44 44 44 44 44 1[44 2[44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 2[44 44 34[{ TeX09fbbfacEncoding ReEncodeFont }75 83.022 /CMTT10 rf /Fl 132[42 37 44 44 60 44 46 32 33 33 44 46 42 46 69 23 44 25 23 46 42 25 37 46 37 46 42 2[42 23 42 23 3[85 62 62 60 46 61 1[57 65 62 76 52 65 1[30 62 65 54 57 63 60 59 62 3[65 2[23 42 42 42 42 42 42 42 42 42 42 42 23 28 23 65 1[32 32 2[69 2[42 11[42 7[69 1[46 48 11[{ TeXf7b6d320Encoding ReEncodeFont }77 83.022 /CMR10 rf /Fm 138[75 52 53 55 2[67 75 4[37 2[41 61 75 60 16[100 8[50 17[67 67 67 67 67 67 67 49[{ TeXf7b6d320Encoding ReEncodeFont }20 119.552 /CMBX12 rf /Fn 133[43 51 5[38 38 1[54 49 54 1[27 2[27 54 3[54 43 1[49 20[61 5[64 3[69 73 7[49 1[49 4[49 49 49 3[27 44[{ TeXf7b6d320Encoding ReEncodeFont }23 99.6264 /CMR12 rf /Fo 138[90 63 1[66 1[90 81 90 134 45 2[45 90 81 49 74 3[78 10[122 20[122 65[{ TeXf7b6d320Encoding ReEncodeFont }16 143.462 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: Letter letter %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 353 739 a Fo(An)53 b(implemen)l(tation)f(of)i (the)f(V)-13 b(olume)52 b(Algorithm)1097 980 y Fn(F)-8 b(rancisco)33 b(Barahona)f(and)h(Laszlo)g(Ladan)m(yi)1648 1175 y(April)g(19,)f(2007)150 1533 y Fm(1)135 b(In)l(tro)t(duction)150 1714 y Fl(Here)27 b(w)n(e)h(describ)r(e)f(an)h(implemen)n(tation)g(of)f (the)h(V)-7 b(olume)28 b(algorithm)f(\(V)-9 b(A\))29 b(originally)d(presen)n(ted)h(in)h([1].)37 b(The)150 1814 y(follo)n(wing)24 b(sub-directories)g(of)i Fk(coin-Vol)c Fl(con)n(tain)i(the)i(relev)-5 b(an)n(t)25 b(pieces.)36 b(The)25 b(directory)g Fk(coin-Vol/Vol/sr)o(c)150 1914 y Fl(con)n(tains)19 b(the)h(core)f(of)g(the)i(algorithm.)33 b(The)20 b(directory)e Fk(coin-Vol/Vol/exa)o(mpl)o(es)o(/Vo)o(lU)o(fl) 13 b Fl(con)n(tains)19 b(the)h(nec-)150 2013 y(essary)88 b(\014les)h(for)g(solving)f(uncapacitated)h(facilit)n(y)g(lo)r(cation)g (problems.)221 b(The)90 b(directory)150 2113 y Fk(coin-Vol/Vol/exa)o (mpl)o(es)o(/V)o(olu)o(me)o(-LP)19 b Fl(con)n(tains)25 b(co)r(de)h(for)f(dealing)h(with)g(com)n(binatorial)e(linear)h (programs.)150 2213 y(The)d(directory)e Fk(coin-Vol/Vol/exa)o(mp)o(les) o(/V)o(olL)o(p)15 b Fl(also)21 b(con)n(tains)f(co)r(de)i(for)f(com)n (binatorial)f(linear)g(programs,)150 2312 y(this)88 b(implemen)n (tation)f(relies)g(on)g(other)g(parts)g(of)g Fk(COIN)p Fl(,)f(while)i(the)g(implemen)n(tation)f(in)150 2412 y Fk(coin-Vol/Vol/exa)o(mpl)o(es)o(/V)o(olu)o(me)o(-LP)29 b Fl(is)35 b(self-con)n(tained.)59 b(In)36 b Fk(COIN/Osi/OsiVol)29 b Fl(there)35 b(is)g(co)r(de)g(to)g(call)150 2511 y(the)28 b(V)-9 b(A)28 b(through)f Fk(OSI)p Fl(.)275 2611 y(No)n(w)18 b(w)n(e)g(giv)n(e)g(the)i(details)e(of)h(eac)n(h)f(directory)-7 b(.)33 b(W)-7 b(e)19 b(hop)r(e)g(to)g(receiv)n(e)f(rep)r(orts)g(ab)r (out)h(bugs)f(and/or)f(successful)150 2711 y(exp)r(eriences.)150 2985 y Fm(2)135 b Fj(coin-Vol)150 3167 y Fl(Most)29 b(users)g(should)h (not)f(need)h(to)g(mo)r(dify)g(an)n(y)f(of)g(the)h(\014les)g(here.)43 b(The)29 b(\014le)h Fk(INSTALL)d Fl(con)n(tains)i(information)150 3267 y(on)e(ho)n(w)g(to)h(compile)f(and)h(build)g(the)g(co)r(de.)150 3541 y Fm(3)135 b Fj(coin-Vol/Vol/)o(src)150 3723 y Fl(The)28 b(algorithm)e(is)i(in)f Fk(VolVolume.cpp)c Fl(and)k(the)h(header)f (\014le)h(is)f Fk(VolVolume.hpp)p Fl(.)150 3998 y Fm(4)135 b Fj(coin-Vol/Vol/)o(Exa)o(mp)o(le)o(s/)o(Vo)o(lU)o(fl)150 4180 y Fl(W)-7 b(e)28 b(fo)r(cus)f(here)g(on)f(the)i Fi(unc)l(ap)l(acitate)l(d)i(facility)i(lo)l(c)l(ation)e(pr)l(oblem)e Fl(\(UFLP\))g(as)e(an)h(example)g(of)g(implemen)n(ta-)150 4279 y(tion,)g(see)g([3])g(for)g(some)g(of)g(the)h(theoretical)e (issues.)36 b(The)28 b(\014les)f(here)g(are)f Fk(INSTALL)p Fl(,)e Fk(Makefile)p Fl(,)g Fk(Makefile.in)p Fl(,)150 4379 y Fk(ufl.cpp)p Fl(,)d Fk(ufl.hpp)p Fl(,)h Fk(ufl.par)f Fl(and)i Fk(data.gz)p Fl(.)32 b(The)24 b(\014le)f Fk(INSTALL)e Fl(con)n(tains)h(information)h(on)g(ho)n(w)g(to)g(compile)150 4478 y(and)k(build.)275 4578 y(As)k(a)h(\014rst)f(step,)j(a)d(new)h (user)f(should)h(b)r(e)g(able)f(to)h(run)g(the)g(co)r(de)g(\\as)e(is".) 49 b(This)32 b(can)g(also)e(b)r(e)j(used)e(as)g(a)150 4678 y(framew)n(ork)e(for)i(Lagrangian)d(relaxation.)46 b(The)31 b(user)f(w)n(ould)h(ha)n(v)n(e)f(to)h(mo)r(dify)g(the)h (\014les)f Fk(ufl.hpp)p Fl(,)e Fk(ufl.cpp)p Fl(,)150 4777 y Fk(ufl.par)p Fl(,)c(and)i Fk(data)p Fl(,)f(to)i(pro)r(duce)f(an) g(implemen)n(tation)h(for)f(a)g(di\013eren)n(t)h(problem.)275 4877 y(No)n(w)f(w)n(e)g(presen)n(t)g(the)h(linear)f(program)e(used)j (in)g([3)o(].)37 b(This)28 b(is)1929 5356 y(1)p eop end %%Page: 2 2 TeXDict begin 2 1 bop 1336 573 a Fl(min)1488 494 y Fh(X)1622 573 y Fg(c)1658 585 y Ff(ij)1716 573 y Fg(x)1763 585 y Ff(ij)1905 573 y Fl(+)2052 494 y Fh(X)2186 573 y Fg(f)2227 585 y Ff(i)2254 573 y Fg(y)2295 585 y Ff(i)3644 573 y Fl(\(1\))1582 660 y Fh(X)1630 837 y Ff(i)1716 739 y Fg(x)1763 751 y Ff(ij)1905 739 y Fl(=)82 b(1)p Fg(;)42 b Fl(for)27 b(all)g Fg(j;)1186 b Fl(\(2\))1716 941 y Fg(x)1763 953 y Ff(ij)1905 941 y Fe(\024)82 b Fg(y)2093 953 y Ff(i)2121 941 y Fg(;)41 b Fl(for)27 b(all)h Fg(i;)14 b(j;)1093 b Fl(\(3\))1716 1065 y Fg(x)1763 1077 y Ff(ij)1905 1065 y Fe(\025)82 b Fl(0)p Fg(;)42 b Fl(for)27 b(all)g Fg(i;)14 b(j;)1120 b Fl(\(4\))1753 1190 y Fg(y)1794 1202 y Ff(i)1905 1190 y Fe(\024)82 b Fl(1)p Fg(;)42 b Fl(for)27 b(all)g Fg(i:)1191 b Fl(\(5\))275 1372 y(Here)40 b(the)i(v)-5 b(ariables)40 b Fg(y)j Fl(corresp)r(ond)d(to)h(the)g(lo)r(cations,)j (and)d(the)g(v)-5 b(ariables)40 b Fg(x)i Fl(represen)n(t)e(connections) 150 1472 y(b)r(et)n(w)n(een)29 b(customers)f(and)h(lo)r(cations.)41 b(Let)29 b Fg(u)1609 1484 y Ff(j)1673 1472 y Fl(b)r(e)g(a)g(set)g(of)g (Lagrange)e(m)n(ultipliers)i(for)g(equations)f(\(2\).)42 b(When)150 1572 y(w)n(e)27 b(dualize)h(equations)e(\(2\),)i(w)n(e)f (obtain)h(the)g Fi(lagr)l(angian)j(pr)l(oblem)1144 1771 y Fg(L)p Fl(\()p Fg(u)p Fl(\))83 b(=)f(min)1695 1692 y Fh(X)1831 1771 y Fl(\026)-44 b Fg(c)1865 1783 y Ff(ij)1924 1771 y Fg(x)1971 1783 y Ff(ij)2048 1771 y Fl(+)2131 1692 y Fh(X)2283 1749 y Fl(\026)2265 1771 y Fg(f)2306 1783 y Ff(i)2333 1771 y Fg(y)2374 1783 y Ff(i)2420 1771 y Fl(+)2503 1692 y Fh(X)2637 1771 y Fg(u)2685 1783 y Ff(j)2719 1771 y Fg(;)1207 1907 y(x)1254 1919 y Ff(ij)1396 1907 y Fe(\024)82 b Fg(y)1584 1919 y Ff(i)1612 1907 y Fg(;)41 b Fl(for)27 b(all)h Fg(i;)14 b(j;)1207 2032 y(x)1254 2044 y Ff(ij)1396 2032 y Fe(\025)82 b Fl(0)p Fg(;)41 b Fl(for)27 b(all)h Fg(i;)14 b(j;)1244 2156 y(y)1285 2168 y Ff(i)1396 2156 y Fe(\024)82 b Fl(1)p Fg(;)41 b Fl(for)27 b(all)h Fg(i:)150 2339 y Fl(Where)19 b(the)h Fi(r)l(e)l(duc)l(e)l(d)i(c)l(osts)f Fl(\026)-43 b Fg(c)1054 2351 y Ff(ij)1135 2339 y Fl(=)23 b Fg(c)1259 2351 y Ff(ij)1319 2339 y Fe(\000)r Fg(u)1434 2351 y Ff(j)1468 2339 y Fl(,)f(and)1684 2317 y(\026)1666 2339 y Fg(f)1707 2351 y Ff(i)1757 2339 y Fl(=)h Fg(f)1886 2351 y Ff(i)1913 2339 y Fl(.)34 b(W)-7 b(e)20 b(apply)f(the)h(V)-9 b(A)20 b(to)f(maximize)g Fg(L)p Fl(\()p Fe(\001)p Fl(\))h(and)f(to)g(pro)r(duce)150 2439 y(a)29 b(primal)g(v)n(ector)f(\()5 b(\026)-47 b Fg(x;)20 b Fl(\026)-48 b Fg(y)s Fl(\))30 b(that)f(is)g(an)g(appro)n (ximate)f(solution)g(of)i(\(1\)-\(5\).)41 b(Using)30 b(this)f(primal)g(information)f(w)n(e)150 2538 y(run)f(a)h(heuristic)f (that)h(giv)n(es)e(an)i(in)n(teger)e(solution.)275 2638 y(In)h(what)h(follo)n(ws)e(w)n(e)i(describ)r(e)f(the)h(di\013eren)n(t)g (\014les)f(in)h(this)g(directory)-7 b(.)150 2870 y Fd(4.1)112 b Fc(ufl.par)150 3024 y Fl(This)23 b(\014le)f(con)n(tains)g(a)g(set)h (of)f(parameters)f(that)i(con)n(trol)e(the)i(algorithm)f(and)g(con)n (tain)g(some)g(information)g(ab)r(out)150 3123 y(the)28 b(data.)36 b(Eac)n(h)27 b(line)h(has)f(the)h(format)275 3223 y Fk(keyword=value)150 3322 y Fl(where)h Fk(keyword)d Fl(should)j(start)g(in)g(the)h(\014rst)f(column.)41 b(If)30 b(w)n(e)f(add)g(an)n(y)f(other)h(c)n(haracter)e(in)i(the)h(\014rst)f (column,)150 3422 y(the)f(line)g(is)f(ignored)g(or)f(considered)h(as)g (a)g(commen)n(t.)37 b(The)28 b(\014le)f(lo)r(oks)g(as)g(b)r(elo)n(w)150 3704 y Fk(fdata=data)150 3804 y(*dualfile=dual.t)o(xt)150 3904 y(dual_savefile=du)o(al.)o(tx)o(t)150 4003 y(int_savefile=int)o (_so)o(l.)o(tx)o(t)150 4103 y(h_iter=100)150 4302 y(printflag=3)150 4402 y(printinvl=5)150 4501 y(heurinvl=10)150 4701 y(greentestinvl=1) 150 4800 y(yellowtestinvl=4)150 4900 y(redtestinvl=10)150 5099 y(lambdainit=0.1)1929 5356 y Fl(2)p eop end %%Page: 3 3 TeXDict begin 3 2 bop 150 390 a Fk(alphainit=0.1)150 490 y(alphamin=0.0001)150 589 y(alphafactor=0.5)150 689 y(alphaint=50)150 888 y(maxsgriters=2000)150 988 y(primal_abs_preci)o (sio)o(n=)o(0.)o(02)150 1088 y(gap_abs_precisio)o(n=0)o(.)150 1187 y(gap_rel_precisio)o(n=0)o(.0)o(1)150 1287 y(granularity=0.)275 1469 y Fl(The)27 b(\014rst)h(group)f(of)g(parameters)f(are)h(sp)r (eci\014c)h(to)g(the)g(UFLP)g(and)f(the)h(user)f(should)h(de\014ne)g (them.)38 b Fk(fdata)150 1569 y Fl(is)26 b(the)h(name)f(of)g(the)h (\014le)f(con)n(taining)f(the)i(data.)36 b Fk(dualfile)23 b Fl(is)j(the)h(name)f(of)g(a)g(\014le)g(con)n(taining)g(an)g(initial)g (dual)150 1669 y(v)n(ector.)42 b(If)31 b(w)n(e)e(add)h(an)f(extra)g(c)n (haracter)f(at)i(the)g(b)r(eginning)g(\()p Fk(*dualfile)p Fl(\))c(this)k(line)g(is)g(ignored,)f(this)i(means)150 1768 y(that)j(no)g(initial)h(dual)f(v)n(ector)f(is)h(giv)n(en.)55 b Fk(dual)p 1691 1768 27 4 v 30 w(savefile)31 b Fl(is)j(the)h(name)f (of)g(a)f(\014le)i(where)e(w)n(e)h(sa)n(v)n(e)f(the)h(\014nal)150 1868 y(dual)29 b(v)n(ector.)38 b(If)29 b(this)g(line)g(is)g(missing,)f (then)h(the)g(dual)g(v)n(ector)e(is)h(not)h(sa)n(v)n(ed.)39 b Fk(int)p 2830 1868 V 30 w(savefile)25 b Fl(is)k(the)g(name)f(of)150 1968 y(a)g(\014le)g(to)g(sa)n(v)n(e)f(the)i(b)r(est)f(in)n(teger)g (solution)f(found)i(b)n(y)f(the)g(heuristic)g(pro)r(cedure,)g(if)h (this)f(line)g(is)h(missing,)f(then)150 2067 y(this)k(v)n(ector)e(is)h (not)h(sa)n(v)n(ed.)46 b Fk(h)p 1124 2067 V 31 w(iter)30 b Fl(is)i(the)f(n)n(um)n(b)r(er)h(of)f(times)h(that)f(the)h(heuristic)f (is)h(run)f(after)g(the)h(V)-9 b(A)32 b(has)150 2167 y(\014nished.)275 2267 y(The)19 b(remaining)f(parameters)g(are)g(sp)r (eci\014c)h(to)h(the)f(V)-9 b(A.)20 b Fk(printflag)c Fl(con)n(trols)h(the)j(lev)n(el)f(of)g(output,)j(it)d(should)150 2366 y(b)r(e)33 b(an)f(in)n(teger)g(b)r(et)n(w)n(een)g(0)g(and)h(5.)51 b Fk(printinvl=k)28 b Fl(means)k(that)h(w)n(e)f(prin)n(t)h(algorithm)e (information)h(ev)n(ery)f Fk(k)150 2466 y Fl(iterations.)k Fk(heurinvl=k)21 b Fl(means)k(that)h(the)f(primal)g(heuristic)g(is)g (run)g(ev)n(ery)f Fk(k)h Fl(iterations.)35 b Fk(greentestinvl=k)150 2565 y Fl(means)24 b(that)g(after)f Fk(k)h Fl(consecutiv)n(e)f(green)g (iterations)g(the)i(v)-5 b(alue)24 b(of)f Fg(\025)i Fl(is)f(m)n (ultiplied)h(b)n(y)e(2.)36 b Fk(yellowtestinvl=)o(k)150 2665 y Fl(means)26 b(that)h(after)f Fk(k)g Fl(consecutiv)n(e)g(y)n (ello)n(w)f(iterations)h(the)h(v)-5 b(alue)26 b(of)h Fg(\025)g Fl(is)f(m)n(ultiplied)h(b)n(y)g(1.1.)35 b Fk(redtestinvl=k) 150 2765 y Fl(means)24 b(that)i(after)e Fk(k)h Fl(consecutiv)n(e)f(red) g(iterations)g(the)h(v)-5 b(alue)25 b(of)g Fg(\025)g Fl(is)g(m)n(ultiplied)h(b)n(y)e(0.67.)35 b Fk(lambdainit)21 b Fl(is)k(the)150 2864 y(initial)30 b(v)-5 b(alue)30 b(of)f Fg(\025)p Fl(.)44 b Fk(alphainit)26 b Fl(is)k(the)g(initial)g(v) -5 b(alue)30 b(of)g Fg(\013)p Fl(.)43 b Fk(alphafactor=f)25 b Fl(and)30 b Fk(alphaint=k)25 b Fl(mean)30 b(that)150 2964 y(ev)n(ery)24 b Fk(k)i Fl(iterations)e(w)n(e)i(c)n(hec)n(k)e(if)j (the)f(ob)5 b(jectiv)n(e)25 b(function)h(has)f(increased)f(b)n(y)i(at)f (least)h(1\045,)f(if)i(not)e(w)n(e)h(m)n(ultiply)150 3064 y Fg(\013)i Fl(b)n(y)f Fk(f)p Fl(.)275 3163 y(There)32 b(are)f(three)i(termination)f(criteria.)51 b(First)33 b Fk(maxsgriter)c Fl(is)j(the)h(maxim)n(um)g(n)n(um)n(b)r(er)f(of)h (iterations.)150 3263 y(The)40 b(second)g(terminating)f(criterion)g(is) h(as)g(follo)n(ws.)73 b Fk(primal)p 2245 3263 V 29 w(abs)p 2406 3263 V 30 w(precision)36 b Fl(is)k(the)h(maxim)n(um)f(primal)150 3362 y(violation)21 b(to)h(consider)f(a)h(primal)f(v)n(ector)g (\\near-feasible".)32 b(Let)23 b Fk(gap)p 2339 3362 V 30 w(rel)p 2501 3362 V 30 w(precision=)p Fg(g)s Fl(,)c(let)j Fg(z)j Fl(b)r(e)e(the)f(v)-5 b(alue)22 b(of)150 3462 y(the)f(curren)n(t)f(dual)g(solution,)h(and)g Fg(p)f Fl(b)r(e)h(the)g(v)-5 b(alue)20 b(of)h(a)f(curren)n(t)f(near-feasible)g (primal)h(solution.)34 b(If)21 b Fe(j)p Fg(z)t Fe(j)i Fg(>)f Fl(0)p Fg(:)p Fl(0001)150 3562 y(and)1746 3632 y Fe(j)p Fg(z)g Fe(\000)c Fg(p)p Fe(j)p 1746 3669 232 4 v 1818 3745 a(j)p Fg(z)t Fe(j)2011 3688 y Fg(<)k(g)s(;)150 3886 y Fl(then)28 b(the)g(algorithms)e(stops.)37 b(Let)28 b Fk(gap)p 1425 3886 27 4 v 30 w(abs)p 1587 3886 V 30 w(precision=)p Fg(f)9 b Fl(,)23 b(if)28 b Fe(j)p Fg(z)t Fe(j)23 b(\024)f Fl(0)p Fg(:)p Fl(0001)k(and)h Fe(j)p Fg(z)22 b Fe(\000)c Fg(p)p Fe(j)23 b Fg(<)g(f)36 b Fl(then)28 b(w)n(e)f(stop.)150 3986 y(Finally)-7 b(,)23 b(let)g Fk(granularity=)p Fg(k)s Fl(,)18 b(and)k(let)h Fg(U)31 b Fl(b)r(e)23 b(the)f(v)-5 b(alue)23 b(of)f(the)h(b)r(est)f(heuristic)g (in)n(teger)g(solution)f(found.)36 b(Then)150 4086 y(if)28 b Fg(U)f Fe(\000)18 b Fg(z)27 b(<)22 b(k)31 b Fl(w)n(e)c(stop.)150 4318 y Fd(4.2)112 b Fc(data)150 4471 y Fl(The)30 b(\014le)h Fk(data)e Fl(has)h(the)h(follo)n(wing)e(format.)45 b(On)30 b(the)h(\014rst)f(line)g(w)n(e)g(ha)n(v)n(e)g(the)g(n)n(um)n(b)r(er)h (of)f(p)r(ossible)g(lo)r(cations)150 4571 y(and)24 b(the)h(n)n(um)n(b)r (er)f(of)g(customers.)35 b(On)24 b(the)h(next)f(lines,)i(the)e(cost)g (of)g(op)r(ening)g(eac)n(h)g(lo)r(cation)g(app)r(ears,)g(one)g(cost)150 4671 y(p)r(er)k(line.)37 b(Then)27 b(eac)n(h)g(of)h(the)g(remaining)e (lines)i(is)f(lik)n(e)275 4770 y Fg(i)82 b(j)88 b(d)551 4782 y Ff(ij)610 4770 y Fg(;)150 4870 y Fl(where)30 b Fg(i)h Fl(refers)f(to)h(a)g(lo)r(cation,)g Fg(j)36 b Fl(refers)30 b(to)h(a)g(customer,)g(and)g Fg(d)2269 4882 y Ff(ij)2358 4870 y Fl(is)g(the)h(cost)e(of)h(serving)f(customer)g Fg(j)36 b Fl(from)150 4969 y(lo)r(cation)27 b Fg(i)p Fl(.)37 b(The)27 b(indices)h Fg(i)f Fl(and)g Fg(j)33 b Fl(start)27 b(from)g(1.)37 b(If)28 b(a)f(pair)g Fg(i;)14 b(j)32 b Fl(is)c(missing)f(then)h(the)g(cost)f Fg(d)3160 4981 y Ff(ij)3246 4969 y Fl(is)h(set)f(to)h(10)3645 4939 y Fb(7)3681 4969 y Fl(.)1929 5356 y(3)p eop end %%Page: 4 4 TeXDict begin 4 3 bop 150 390 a Fd(4.3)112 b Fc(ufl.hpp)150 543 y Fl(This)28 b(\014le)f(con)n(tains)g(C++)g(classes)f(sp)r (eci\014c)i(to)f(the)h(UFLP)-7 b(.)275 643 y(First)31 b(w)n(e)h(ha)n(v)n(e)e(a)i(class)f(of)h(parameters)e(sp)r(eci\014c)i (to)g(the)g(UFLP)-7 b(.)32 b(The)g(description)f(of)h(these)g (parameters)150 743 y(app)r(ears)26 b(in)i(the)g(preceding)f(section.) 150 918 y Fk(class)42 b(UFL_parms)d({)150 1018 y(public:)281 1117 y(string)i(fdata;)390 b(//)42 b(file)g(with)g(the)h(data)281 1217 y(string)e(dualfile;)258 b(//)42 b(file)g(with)g(an)h(initial)e (dual)h(solution)281 1317 y(string)f(dual_savefile;)d(//)k(file)g(to)h (save)f(final)g(dual)f(solution)281 1416 y(string)g(int_savefile;)82 b(//)42 b(file)g(to)h(save)f(primal)f(integer)g(solution)281 1516 y(int)h(h_iter;)477 b(//)42 b(number)g(of)g(times)g(that)g(the)g (primal)f(heuristic)f(will)i(be)1240 1616 y(//)g(run)h(after)e (termination)e(of)k(the)f(volume)g(algorithm)281 1815 y(UFL_parms\(const)37 b(char*)42 b(filename\);)281 1914 y(~UFL_parms\(\))c({})150 2014 y(};)275 2190 y Fl(Before)32 b(the)h(next)g(class)g(w)n(e)f(should)h(men)n(tion)g(the)h(classes)e Fk(VOL)p 2359 2190 27 4 v 30 w(dvector)e Fl(and)j Fk(VOL)p 3026 2190 V 30 w(ivector)d Fl(de\014ned)k(in)150 2289 y Fk(VolVolume.hpp)p Fl(.)e(The)27 b(pseudo-co)r(de)g(b)r(elo)n(w)g (illustrates)g(their)h(use.)150 2465 y Fk(int)42 b(n=100;)150 2564 y(VOL_dvector)d(x\(n\);)85 b(//)43 b(a)g(double)e(vector)g(with)h (n)h(entries)150 2664 y(x=0.;)608 b(//)43 b(sets)f(to)h(0.)f(all)h (entries)d(of)j(x)150 2764 y(VOL_dvector)c(y;)217 b(//)43 b(a)g(double)e(vector,)g(it)i(size)f(remains)e(to)j(be)g(set)150 2863 y(y.allocate\(n\);)212 b(//)43 b(size)f(is)h(set)150 2963 y(y=x;)652 b(//)43 b(copy)f(each)g(entry)f(of)i(x)g(into)f(y)150 3063 y(VOL_dvector)d(z\(y\);)85 b(//)43 b(a)g(double)e(vector)g(of)i (the)f(same)g(size)g(as)h(y,)978 3162 y(//)g(all)f(entries)f(of)i(y)g (are)f(copied)f(into)h(z)150 3262 y(x[0]=-1;)476 b(//)43 b(first)e(entry)h(of)h(x)g(is)g(set)f(to)h(-1)150 3361 y(y[0]=x[0];)388 b(//)43 b(copy)f(first)f(entry)h(of)h(x)g(into)f (first)f(entry)h(of)h(y)275 3537 y Fl(The)e(class)f Fk(VOL)p 804 3537 V 31 w(ivector)e Fl(is)j(used)h(for)f(v)n(ectors)f(of)h Fk(int)p Fl(.)77 b(One)41 b(can)g(do)g(the)h(same)f(op)r(erations)f(as) h(for)150 3637 y Fk(VOL)p 287 3637 V 30 w(dvector)p Fl(.)275 3736 y(Then)27 b(w)n(e)h(ha)n(v)n(e)e(a)h(class)g(con)n(taining)f(the)i (data)f(for)h(the)f(UFLP)-7 b(.)150 3912 y Fk(class)42 b(UFL_data)e({)j(//)g(original)d(data)i(for)g(uncapacitated)c(facility) j(location)150 4011 y(public:)281 4111 y(VOL_dvector)e(fcost;)i(//)i (cost)f(for)g(opening)f(facilities)281 4211 y(VOL_dvector)e(dist;)85 b(//)43 b(cost)f(for)g(connecting)d(a)44 b(customer)c(to)j(a)g (facility)281 4310 y(VOL_dvector)c(fix;)129 b(//)43 b(vector)e(saying)g (if)i(some)f(variables)d(should)j(be)g(fixed)1109 4410 y(//)h(if)f(fix=-1)g(nothing)e(is)j(fixed)281 4509 y(int)f(ncust,)f (nloc;)129 b(//)43 b(number)e(of)i(customers,)c(number)i(of)i (locations)281 4609 y(VOL_ivector)c(ix;)173 b(//)43 b(best)f(integer)e (feasible)h(solution)f(so)j(far)281 4709 y(double)259 b(icost;)41 b(//)i(value)e(of)i(best)f(integer)f(feasible)f(solution) 150 4808 y(public:)281 4908 y(UFL_data\(\))f(:)k(icost\(DBL_MAX\))38 b({})281 5008 y(~UFL\\_data\(\))g({})150 5107 y(};)1929 5356 y Fl(4)p eop end %%Page: 5 5 TeXDict begin 5 4 bop 275 390 a Fl(Then)27 b(w)n(e)h(ha)n(v)n(e)150 572 y Fk(class)42 b(UFL_hook)e(:)j(public)e(VOL_user_hooks)d({)150 672 y(public:)281 771 y(//)43 b(for)f(all)g(hooks:)f(return)g(value)h (of)h(-1)f(means)g(that)g(volume)f(should)g(quit)281 871 y(//)i(compute)d(reduced)h(costs)281 971 y(int)h(compute_rc\(void) 37 b(*)44 b(user_data,)935 1070 y(const)d(VOL_dvector&)e(u,)j (VOL_dvector&)d(rc\);)281 1170 y(//)k(solve)e(lagrangian)e(problem)281 1269 y(int)j(solve_subproblem)o(\(vo)o(id)37 b(*)43 b(user_data,)1196 1369 y(const)f(VOL_dvector&)c(u,)43 b(const)e(VOL_dvector&)e(rc,)1196 1469 y(double&)i(lcost,)g(VOL_dvector&)d(x,)43 b(VOL_dvector&v,)1196 1568 y(double&)e(pcost\);)281 1668 y(//)i(primal)e(heuristic)281 1768 y(//)i(return)e(DBL_MAX)f(in)j(heur_val)d(if)j(feas)f(sol)g (wasn't/was)e(found)281 1867 y(int)i(heuristics\(void)37 b(*)44 b(user_data,)39 b(const)j(VOL_problem&)c(p,)935 1967 y(const)j(VOL_dvector&)e(x,)j(double&)f(heur_val\);)150 2066 y(};)275 2248 y Fl(Here)18 b(the)g(function)h Fk(compute)p 1224 2248 27 4 v 29 w(rc)e Fl(is)i(used)f(to)g(compute)h(reduced)f (costs.)33 b(In)18 b(the)h(function)g Fk(solve)p 3330 2248 V 29 w(subproblem)150 2348 y Fl(w)n(e)27 b(solv)n(e)f(the)i (lagrangian)c(problem.)37 b(In)27 b Fk(heuristics)c Fl(w)n(e)k(run)g(a) g(heuristic)g(to)g(pro)r(duce)g(a)g(primal)g(in)n(teger)f(so-)150 2448 y(lution.)275 2547 y(Finally)e(in)g(this)h(\014le)f(w)n(e)g(ha)n (v)n(e)f Fk(UFL)p 1380 2547 V 30 w(parms::UFL)p 1850 2547 V 28 w(parms\(const)39 b(char)j(*filename\))p Fl(,)21 b(where)i(w)n(e)h(read)g(the)150 2647 y(v)-5 b(alues)27 b(for)g(the)h(mem)n(b)r(ers)g(of)f Fk(UFL)p 1250 2647 V 30 w(parms)p Fl(.)150 2879 y Fd(4.4)112 b Fc(ufl.cpp)150 3032 y Fl(This)28 b(\014le)f(con)n(tains)g(sev)n(eral)f(functions)i (that)g(w)n(e)f(describ)r(e)g(b)r(elo)n(w.)275 3132 y(First)h(w)n(e)h (ha)n(v)n(e)e Fk(int)43 b(main\(int)d(argc,)i(char*)f(argv[]\))p Fl(.)d(In)29 b(here)f(w)n(e)h(initialize)g(the)g(classes)e(describ)r (ed)150 3232 y(in)k Fk(ufl.hpp)p Fl(,)d(and)i(read)f(the)i(data.)45 b(Then)30 b Fk(volp.psize\(\))c Fl(is)k(set)g(to)h(the)f(n)n(um)n(b)r (er)g(of)h(primal)e(v)-5 b(ariables,)30 b(and)150 3331 y Fk(volp.dsize\(\))24 b Fl(is)29 b(set)h(to)f(the)g(n)n(um)n(b)r(er)g (of)g(dual)g(v)-5 b(ariables.)41 b(Then)29 b(w)n(e)g(c)n(hec)n(k)f(if)i (a)e(dual)h(solution)g(is)g(pro)n(vided)150 3431 y(and)e(if)i(so)d(w)n (e)i(read)e(it.)275 3531 y(F)-7 b(or)32 b(the)h(UFLP)g(all)g(relaxed)f (constrain)n(ts)f(are)h(equations,)i(so)e(the)i(dual)f(v)-5 b(ariables)31 b(are)h(unrestricted.)53 b(In)150 3630 y(this)33 b(case)f(w)n(e)g(do)g(not)h(ha)n(v)n(e)e(to)i(set)f(b)r (ounds)h(for)f(the)h(dual)g(v)-5 b(ariables.)50 b(If)33 b(w)n(e)g(ha)n(v)n(e)e(inequalities)h(of)h(the)g(t)n(yp)r(e)150 3730 y Fg(ax)23 b Fe(\025)g Fg(b)p Fl(,)h(then)g(w)n(e)f(ha)n(v)n(e)f (to)h(set)h(the)f(lo)n(w)n(er)f(b)r(ounds)i(of)f(their)g(dual)g(v)-5 b(ariables)22 b(equal)h(to)h(0.)35 b(If)23 b(w)n(e)g(had)g(constrain)n (ts)150 3829 y(of)31 b(the)g(t)n(yp)r(e)g(t)n(yp)r(e)f Fg(ax)f Fe(\024)f Fg(b)p Fl(,)j(then)g(w)n(e)g(ha)n(v)n(e)e(to)i(set)f (the)h(upp)r(er)g(b)r(ounds)g(of)g(their)f(v)-5 b(ariables)30 b(equal)g(to)g(0.)46 b(This)150 3929 y(w)n(ould)27 b(b)r(e)h(done)f(as) g(in)h(the)g(pseudo-co)r(de)f(b)r(elo)n(w.)150 4111 y Fk(//)43 b(first)e(the)i(lower)e(bounds)g(to)i(-inf,)f(upper)f(bounds)g (to)i(inf)150 4211 y(volp.dual_lb.all)o(oca)o(te)o(\(v)o(olp)o(.d)o (siz)o(e\))o(;)150 4310 y(volp.dual_lb)c(=)k(-1e31;)150 4410 y(volp.dual_ub.all)o(oca)o(te)o(\(v)o(olp)o(.d)o(siz)o(e\))o(;)150 4509 y(volp.dual_ub)c(=)k(1e31;)150 4609 y(//)g(now)f(go)h(through)e (the)h(relaxed)f(constraints)e(and)j(change)f(the)h(lb)h(of)g(the)f(ax) h(>=)g(b)150 4709 y(//)g(constrains)c(to)k(0,)g(and)f(change)f(the)i (ub)f(of)h(the)f(ax)h(<=)g(b)g(constrains)d(to)i(0.)150 4808 y(for)g(\(i)h(=)g(0;)g(i)g(<)g(volp.dsize;)c(++i\))j({)281 4908 y(if)h(\("constraint)38 b(i)43 b(is)g('<=')f("\))h({)412 5008 y(volp.dual_ub[i])37 b(=)43 b(0;)281 5107 y(})1929 5356 y Fl(5)p eop end %%Page: 6 6 TeXDict begin 6 5 bop 281 390 a Fk(if)43 b(\("constraint)38 b(i)43 b(is)g('>=')f("\))h({)412 490 y(volp.dual_lb[i])37 b(=)43 b(0;)281 589 y(})150 689 y(})275 872 y Fl(The)37 b(function)g Fk(volp.solve)c Fl(in)n(v)n(ok)n(es)i(the)i(V)-9 b(A.)38 b(After)f(completion)g(w)n(e)f(compute)h(the)h(violation)e(of)h (the)150 971 y(fractional)32 b(primal)h(solution)g(obtained.)53 b(This)33 b(v)n(ector)f(is)h Fk(psol)p Fl(.)52 b(Then)34 b(w)n(e)e(c)n(hec)n(k)h(if)g(the)h(user)f(pro)n(vided)f(the)150 1071 y(name)f(of)g(a)f(\014le)h(to)g(sa)n(v)n(e)e(the)i(dual)g (solution.)46 b(If)32 b(so,)f(w)n(e)f(sa)n(v)n(e)g(it.)47 b(Then)31 b(w)n(e)f(run)h(the)g(primal)g(heuristic)f(using)150 1171 y Fk(psol)e Fl(as)g(an)h(input.)43 b(Notice)29 b(that)h(this)f (heuristic)g(has)g(also)f(b)r(een)i(run)f(p)r(erio)r(dically)g(during)g (the)g(execution)g(of)150 1270 y(the)i(V)-9 b(A.)31 b(Then)g(if)h(the)f (user)f(has)g(pro)n(vided)g(the)h(name)g(of)f(a)h(\014le)g(to)f(sa)n(v) n(e)g(the)h(in)n(teger)f(heuristic)g(solution,)h(w)n(e)150 1370 y(do)c(it.)38 b(Finally)27 b(the)h(v)-5 b(alues)27 b(of)h(the)g(solutions)f(and)g(some)g(statistics)g(are)g(prin)n(ted.) 275 1469 y(The)35 b(next)h(function)g(is)g Fk(void)42 b(UFL)p 1428 1469 27 4 v 30 w(read)p 1634 1469 V 30 w(data\(const)d (char*)j(fname,)f(UFL)p 2842 1469 V 30 w(data&)h(data\))p Fl(,)35 b(where)g(w)n(e)150 1569 y(read)i(the)h(data.)67 b Fk(data.nloc)34 b Fl(is)k(the)g(n)n(um)n(b)r(er)f(of)h(lo)r(cations,) h Fk(data.ncust)34 b Fl(is)k(the)g(n)n(um)n(b)r(er)f(of)h(customers.) 150 1669 y Fk(data.fcost)15 b Fl(is)k(a)g(v)n(ector)e(con)n(taining)i (the)g(cost)g(of)g(op)r(ening)g(eac)n(h)f(lo)r(cation.)33 b Fk(data.dist)16 b Fl(is)j(a)f(v)n(ector)g(con)n(taining)150 1768 y(the)33 b(cost)f(of)h(serving)e(customers)h(from)g(facilities.)52 b(All)33 b(en)n(tries)f(are)g(initialized)g(to)h(10)2965 1738 y Fb(7)3034 1768 y Fl(and)f(then)h(particular)150 1868 y(en)n(tries)27 b(are)g(b)r(eing)g(set)h(with)g(the)g(statemen)n (t)275 1968 y Fk(dist[\(i-1\)*ncus)o(t)37 b(+)44 b(j-1]=cost;)150 2067 y Fl(where)29 b Fk(i)h Fl(is)g(the)g(index)g(of)g(a)f(lo)r(cation) g(and)h Fk(j)g Fl(is)f(the)i(index)f(of)f(a)h(customer.)43 b(Here)29 b(the)i(indices)f(start)f(from)g(1.)150 2167 y(Finally)j(w)n(e)f(ha)n(v)n(e)g(a)g(v)n(ector)f Fk(data.fix)f Fl(asso)r(ciated)h(with)i(the)g(lo)r(cations.)49 b(A)32 b(particular)e(en)n(try)h(is)h(set)g(to)f(0)h(if)150 2267 y(the)c(lo)r(cation)g(should)f(b)r(e)i(closed,)e(it)i(is)f(set)g (to)f(1)h(if)h(it)f(should)g(b)r(e)g(op)r(en,)g(and)g(it)g(is)g(set)g (to)g(-1)f(if)i(this)f(v)-5 b(ariable)27 b(is)150 2366 y(free.)37 b(Initially)27 b(all)h(en)n(tries)e(are)h(set)h(to)f(-1.)275 2466 y(In)g(the)h(function)275 2565 y Fk(double)41 b(solve)p 805 2565 V 29 w(it\(void)g(*)i(user)p 1446 2565 V 30 w(data,)e(const)h(double*)e(rdist,)h(VOL)p 2784 2565 V 31 w(ivector&)f(sol\))150 2665 y Fl(w)n(e)21 b(solv)n(e)g(the)h (lagrangian)d(problem.)35 b(W)-7 b(e)22 b(receiv)n(e)e(the)i(data)g (and)f(reduced)h(costs)f(as)g(input)h(and)g(return)f(a)h(primal)150 2765 y(v)n(ector.)53 b(The)33 b(solution)g(is)h(in)f(the)h(v)n(ector)e Fk(sol)p Fl(.)53 b(Its)34 b(\014rst)f Fk(n)g Fl(en)n(tries)g(corresp)r (ond)e(to)j(the)f(lo)r(cations,)h(then)g(all)150 2864 y(remaining)27 b(en)n(tries)g(corresp)r(ond)f(to)h(connections)g(b)r (et)n(w)n(een)g(lo)r(cations)g(and)h(customers.)275 2964 y(In)f(the)h(function)275 3064 y Fk(int)42 b(UFL)p 586 3064 V 30 w(hook::compute)p 1188 3064 V 26 w(rc\(void)f(*)i(user)p 1826 3064 V 30 w(data,)e(const)h(VOL)p 2511 3064 V 30 w(dvector&)e(u,)j(VOL)p 3196 3064 V 30 w(dvector&)d(rc\))150 3163 y Fl(w)n(e)27 b(compute)h(the)g(reduced)f(costs.)36 b(They)28 b(will)g(b)r(e)g(used)f(to)h(solv)n(e)e(the)i(lagrangian)d (problem.)275 3263 y(In)i(the)h(function)281 3445 y Fk(int)281 3545 y(UFL_hook::solve_)o(su)o(bp)o(rob)o(le)o(m\(v)o(oi)o(d)38 b(*user_data,)1458 3645 y(const)j(VOL_dvector&)e(u,)j(const)g (VOL_dvector&)d(rc,)1458 3744 y(double&)h(lcost,)h(VOL_dvector&)e(x,) 1458 3844 y(VOL_dvector&)f(v,)43 b(double&)e(pcost\))150 4027 y Fl(w)n(e)27 b(compute)h(the)f(lagrangian)e(v)-5 b(alue,)28 b(w)n(e)f(call)g Fk(solve)p 1894 4027 V 29 w(it)p Fl(,)g(w)n(e)g(compute)h(the)f(ob)5 b(jectiv)n(e)27 b(v)-5 b(alue)27 b(and)h(the)f(v)n(ector)150 4126 y Fg(v)k Fl(de\014ned)d(as)f(follo)n(ws.)35 b(If)f(^)-48 b Fg(x)28 b Fl(is)g(the)g(primal)f(solution)g(giv)n(en)f(b)n(y)i Fk(solve)p 2432 4126 V 29 w(it)p Fl(,)f(and)g Fg(Ax)d Fe(\030)f Fg(b)k Fl(is)g(the)h(set)g(of)f(relaxed)150 4226 y(constrain)n(ts,)f(then)i(the)g(di\013erence)g Fg(v)j Fl(is)1738 4325 y Fg(v)26 b Fl(=)d Fg(b)18 b Fe(\000)g Fg(A)5 b Fl(^)-47 b Fg(x)q(:)275 4475 y Fl(The)27 b(last)g(function)i (in)e(this)h(\014le)g(is)281 4641 y Fk(int)281 4741 y(UFL_hook::heuris) o(ti)o(cs)o(\(vo)o(id)37 b(*)43 b(user_data,)d(const)h(VOL_problem&)e (p,)1196 4840 y(const)j(VOL_dvector&)c(x,)43 b(double&)e(icost\))150 5006 y Fl(where)25 b(w)n(e)g(run)h(the)g(follo)n(wing)e(simple)i (heuristic.)36 b(Giv)n(en)25 b(a)g(fractional)g(solution)g(\()5 b(\026)-47 b Fg(x;)20 b Fl(\026)-48 b Fg(y)s Fl(\),)26 b(let)32 b(\026)-48 b Fg(y)3161 5018 y Ff(i)3214 5006 y Fl(b)r(e)26 b(the)g(v)-5 b(ariable)150 5106 y(asso)r(ciated)27 b(with)i(lo)r(cation)f Fg(i)p Fl(.)40 b(W)-7 b(e)29 b(pic)n(k)f(a)g (random)g(n)n(um)n(b)r(er)g Fg(r)g Fe(2)d Fl([0)p Fg(;)14 b Fl(1])28 b(and)g(if)h Fg(r)f(<)i Fl(\026)-48 b Fg(y)2918 5118 y Ff(i)2974 5106 y Fl(facilit)n(y)29 b Fg(i)f Fl(is)g(op)r(en,)h (and)1929 5356 y(6)p eop end %%Page: 7 7 TeXDict begin 7 6 bop 150 390 a Fl(closed)33 b(otherwise.)56 b(W)-7 b(e)35 b(rep)r(eat)e(this)i(for)e(ev)n(ery)g(facilit)n(y)-7 b(,)36 b(then)f(giv)n(en)e(the)i(set)f(of)g(op)r(en)g(facilities)g(w)n (e)g(\014nd)g(a)150 490 y(minim)n(um)28 b(cost)e(assignmen)n(t)g(of)h (customers.)35 b(This)27 b(function)g(is)g(in)n(v)n(ok)n(ed)f(p)r(erio) r(dically)g(in)h(the)g(V)-9 b(A)27 b(and)g(b)n(y)g(the)150 589 y(main)h(program)d(after)i(the)h(V)-9 b(A)28 b(has)f(\014nished.) 150 863 y Fm(5)135 b Fj(coin-Vol/Vol/)o(exa)o(mp)o(le)o(s/)o(Vo)o(lu)o (me)o(-L)o(P)150 1045 y Fl(Here)30 b(w)n(e)f(fo)r(cus)h(on)f Fi(Combinatorial)35 b(Line)l(ar)d(Pr)l(o)l(gr)l(ams)p Fl(,)f(these)f(are)f(linear)g(programs)f(where)h(the)h(matrix)g(has)150 1145 y(0,)d(1,)f(-1)g(co)r(e\016cien)n(ts)h(and)f(the)h(v)-5 b(ariables)26 b(are)g(b)r(ounded)h(b)r(et)n(w)n(een)g(0)f(and)h(1.)36 b(The)27 b(V)-9 b(A)27 b(has)f(b)r(een)h(v)n(ery)f(e\013ectiv)n(e)150 1244 y(at)i(pro)r(ducing)f(fast)h(appro)n(ximate)e(solutions)i(to)g (these)g(LPs,)f(see)h([2)o(].)38 b(As)28 b(a)g(\014rst)g(step,)g(a)g (new)g(user)f(should)h(b)r(e)150 1344 y(able)f(to)h(run)f(our)g(co)r (de)g(\\as)g(is".)36 b(The)28 b(input)g(should)g(b)r(e)g(an)f(MPS)g (\014le.)275 1444 y(Initially)j(this)g(directory)f(con)n(tains)g(the)i (\014les:)42 b Fk(README,)e(Makefile,)g(Makefile.in)f(lp.hpp,)i (lp.cpp,)150 1543 y(lp.par,)24 b(data.mps.gz,)39 b(lpc.h,)i(lpc.cpp,)f (reader.h,)g(reader.cpp)p Fl(.)33 b(On)27 b(a)g(Unix)g(system)g(one)g (should)150 1643 y(t)n(yp)r(e)40 b(\\)p Fk(make)p Fl(")e(and)h(\\)p Fk(volume-lp)p Fl(")d(to)k(run)g(the)g(co)r(de.)74 b(Then)40 b(the)g(co)r(de)g(will)h(run)e(and)h(pro)r(duce)g(the)g(\014les)150 1742 y Fk(primal.txt)34 b Fl(and)k Fk(dual.txt)c Fl(that)39 b(con)n(tain)e(appro)n(ximate)f(solutions)h(to)h(b)r(oth)g(the)h (primal)e(and)h(the)g(dual)150 1842 y(problem.)275 1966 y(W)-7 b(e)28 b(assume)e(that)i(w)n(e)g(ha)n(v)n(e)e(an)h(LP)g(lik)n(e) 1832 2144 y(min)14 b Fg(cx)1577 b Fl(\(6\))1822 2269 y Fg(Ax)24 b Fe(\030)e Fg(b)1566 b Fl(\(7\))1767 2393 y Fg(l)25 b Fe(\024)d Fg(x)i Fe(\024)e Fg(u:)1511 b Fl(\(8\))275 2572 y(Let)27 b Fg(\031)k Fl(b)r(e)d(a)f(set)g(of)h(Lagrange)d(m)n (ultipliers)i(for)g(constrain)n(ts)f(\(7\).)37 b(When)28 b(w)n(e)f(dualize)g(them)h(w)n(e)g(obtain)f(the)150 2671 y Fi(lagr)l(angian)k(pr)l(oblem)1388 2949 y Fg(L)p Fl(\()p Fg(u)p Fl(\))83 b(=)f(min)q(\()p Fg(c)18 b Fe(\000)g Fg(\031)s(A)p Fl(\))p Fg(x)i Fl(+)e Fg(\031)s(b;)1787 3074 y(l)25 b Fe(\024)d Fg(x)i Fe(\024)f Fg(u:)275 3252 y Fl(W)-7 b(e)28 b(apply)f(the)i(V)-9 b(A)28 b(to)g(maximize)f Fg(L)p Fl(\()p Fe(\001)p Fl(\))h(and)g(to)g(pro)r(duce)f(a)h(dual)g(v)n (ector)j(\026)-47 b Fg(\031)t Fl(,)28 b(and)g(primal)f(v)n(ector)32 b(\026)-47 b Fg(x)28 b Fl(that)g(is)150 3352 y(an)f(appro)n(ximate)f (solution)h(of)h(\(6\)-\(8\).)275 3451 y(In)f(what)h(follo)n(ws)e(w)n (e)i(describ)r(e)f(the)h(\014les)f Fk(lp.par)f Fl(and)h Fk(data.mps)p Fl(.)150 3683 y Fd(5.1)112 b Fc(lp.par)150 3836 y Fl(This)27 b(\014le)g(con)n(tains)f(a)h(set)f(of)h(parameters)f (that)h(con)n(trol)e(the)j(algorithm)e(and)g(con)n(tain)h(information)f (ab)r(out)h(the)150 3936 y(data.)36 b(Eac)n(h)27 b(line)h(has)f(the)h (format)275 4036 y Fk(keyword=value)150 4135 y Fl(where)h Fk(keyword)d Fl(should)j(start)g(in)g(the)h(\014rst)f(column.)41 b(If)30 b(w)n(e)f(add)g(an)n(y)f(other)h(c)n(haracter)e(in)i(the)h (\014rst)f(column,)150 4235 y(the)f(line)g(is)f(ignored)g(or)f (considered)h(as)g(a)g(commen)n(t.)37 b(The)28 b(\014le)f(lo)r(oks)g (as)g(b)r(elo)n(w)150 4509 y Fk(fdata=data.mps)150 4609 y(*dualfile=dual.t)o(xt)150 4709 y(dual_savefile=du)o(al.)o(tx)o(t)150 4808 y(primal_savefile=)o(pri)o(ma)o(l.)o(txt)150 4908 y(h_iter=0)150 5008 y(var_ub=1.0)1929 5356 y Fl(7)p eop end %%Page: 8 8 TeXDict begin 8 7 bop 150 490 a Fk(printflag=3)150 589 y(printinvl=20)150 689 y(heurinvl=1000000)o(00)150 888 y(greentestinvl=2)150 988 y(yellowtestinvl=2)150 1088 y(redtestinvl=10)150 1287 y(lambdainit=0.1)150 1386 y(alphainit=0.01) 150 1486 y(alphamin=0.0001)150 1586 y(alphafactor=0.5)150 1685 y(alphaint=80)150 1885 y(maxsgriters=2000)150 1984 y(primal_abs_preci)o(sio)o(n=)o(0.)o(02)150 2084 y(gap_abs_precisio)o (n=0)o(.)150 2183 y(gap_rel_precisio)o(n=0)o(.0)o(1)150 2283 y(granularity=0.)275 2565 y Fl(The)29 b(\014rst)g(group)g(of)g (parameters)f(are)g(sp)r(eci\014c)i(to)g(LP)e(and)i(the)g(user)f (should)g(de\014ne)h(them.)43 b Fk(fdata)27 b Fl(is)j(the)150 2665 y(name)23 b(of)h(the)g(\014le)f(con)n(taining)g(the)h(data.)35 b Fk(dualfile)20 b Fl(is)k(the)g(name)f(of)g(a)h(\014le)f(con)n (taining)g(an)g(initial)h(dual)f(v)n(ector.)150 2765 y(If)37 b(w)n(e)f(add)g(an)g(extra)f(c)n(haracter)g(at)h(the)h(b)r (eginning)f(\()p Fk(*dualfile)p Fl(\))d(this)k(line)g(is)f(ignored,)h (this)g(means)f(that)150 2864 y(no)e(initial)g(dual)g(v)n(ector)e(is)i (giv)n(en.)55 b Fk(dual)p 1503 2864 27 4 v 30 w(savefile)30 b Fl(is)k(the)h(name)e(of)h(a)g(\014le)g(where)f(w)n(e)h(sa)n(v)n(e)e (the)i(\014nal)g(dual)150 2964 y(v)n(ector.)j(If)28 b(this)g(line)g(is) g(missing,)g(then)g(the)g(dual)g(v)n(ector)f(is)h(not)g(sa)n(v)n(ed.)36 b Fk(primal)p 2764 2964 V 29 w(savefile)25 b Fl(is)j(the)g(name)g(of)f (a)150 3064 y(\014le)32 b(to)f(sa)n(v)n(e)f(the)i(primal)f(solution,)g (if)h(this)g(line)g(is)f(missing,)h(then)g(this)g(v)n(ector)e(is)h(not) h(sa)n(v)n(ed.)47 b Fk(h)p 3316 3064 V 31 w(iter)29 b Fl(is)j(the)150 3163 y(n)n(um)n(b)r(er)c(of)h(times)g(that)f(the)h (heuristic)g(is)f(run)h(after)f(the)h(V)-9 b(A)29 b(has)f(\014nished.) 40 b(W)-7 b(e)29 b(did)g(not)f(include)h(a)f(heuristic)150 3263 y(in)h(this)h(implemen)n(tation.)42 b Fk(var)p 1179 3263 V 30 w(ub)28 b Fl(is)h(an)g(upp)r(er)g(b)r(ound)h(for)e(all)h (primal)g(v)-5 b(ariables,)28 b(for)h(0-1)f(problems)g(w)n(e)h(set)150 3362 y Fk(var)p 287 3362 V 30 w(ub=1)p Fl(.)275 3462 y(The)19 b(remaining)f(parameters)g(are)g(sp)r(eci\014c)h(to)h(the)f(V) -9 b(A.)20 b Fk(printflag)c Fl(con)n(trols)h(the)j(lev)n(el)f(of)g (output,)j(it)d(should)150 3562 y(b)r(e)33 b(an)f(in)n(teger)g(b)r(et)n (w)n(een)g(0)g(and)h(5.)51 b Fk(printinvl=k)28 b Fl(means)k(that)h(w)n (e)f(prin)n(t)h(algorithm)e(information)h(ev)n(ery)f Fk(k)150 3661 y Fl(iterations.)k Fk(heurinvl=k)21 b Fl(means)k(that)h (the)f(primal)g(heuristic)g(is)g(run)g(ev)n(ery)f Fk(k)h Fl(iterations.)35 b Fk(greentestinvl=k)150 3761 y Fl(means)24 b(that)g(after)f Fk(k)h Fl(consecutiv)n(e)f(green)g(iterations)g(the)i (v)-5 b(alue)24 b(of)f Fg(\025)i Fl(is)f(m)n(ultiplied)h(b)n(y)e(2.)36 b Fk(yellowtestinvl=)o(k)150 3861 y Fl(means)26 b(that)h(after)f Fk(k)g Fl(consecutiv)n(e)g(y)n(ello)n(w)f(iterations)h(the)h(v)-5 b(alue)26 b(of)h Fg(\025)g Fl(is)f(m)n(ultiplied)h(b)n(y)g(1.1.)35 b Fk(redtestinvl=k)150 3960 y Fl(means)24 b(that)i(after)e Fk(k)h Fl(consecutiv)n(e)f(red)g(iterations)g(the)h(v)-5 b(alue)25 b(of)g Fg(\025)g Fl(is)g(m)n(ultiplied)h(b)n(y)e(0.67.)35 b Fk(lambdainit)21 b Fl(is)k(the)150 4060 y(initial)30 b(v)-5 b(alue)30 b(of)f Fg(\025)p Fl(.)44 b Fk(alphainit)26 b Fl(is)k(the)g(initial)g(v)-5 b(alue)30 b(of)g Fg(\013)p Fl(.)43 b Fk(alphafactor=f)25 b Fl(and)30 b Fk(alphaint=k)25 b Fl(mean)30 b(that)150 4159 y(ev)n(ery)24 b Fk(k)i Fl(iterations)e(w)n (e)i(c)n(hec)n(k)e(if)j(the)f(ob)5 b(jectiv)n(e)25 b(function)h(has)f (increased)f(b)n(y)i(at)f(least)h(1\045,)f(if)i(not)e(w)n(e)h(m)n (ultiply)150 4259 y Fg(\013)i Fl(b)n(y)f Fk(f)p Fl(.)275 4359 y(There)32 b(are)f(three)i(termination)f(criteria.)51 b(First)33 b Fk(maxsgriter)c Fl(is)j(the)h(maxim)n(um)g(n)n(um)n(b)r (er)f(of)h(iterations.)150 4458 y(The)40 b(second)g(terminating)f (criterion)g(is)h(as)g(follo)n(ws.)73 b Fk(primal)p 2245 4458 V 29 w(abs)p 2406 4458 V 30 w(precision)36 b Fl(is)k(the)h(maxim)n (um)f(primal)150 4558 y(violation)21 b(to)h(consider)f(a)h(primal)f(v)n (ector)g(\\near-feasible".)32 b(Let)23 b Fk(gap)p 2339 4558 V 30 w(rel)p 2501 4558 V 30 w(precision=)p Fg(g)s Fl(,)c(let)j Fg(z)j Fl(b)r(e)e(the)f(v)-5 b(alue)22 b(of)150 4658 y(the)f(curren)n(t)f(dual)g(solution,)h(and)g Fg(p)f Fl(b)r(e)h(the)g(v)-5 b(alue)20 b(of)h(a)f(curren)n(t)f(near-feasible)g (primal)h(solution.)34 b(If)21 b Fe(j)p Fg(z)t Fe(j)i Fg(>)f Fl(0)p Fg(:)p Fl(0001)150 4757 y(and)1746 4828 y Fe(j)p Fg(z)g Fe(\000)c Fg(p)p Fe(j)p 1746 4865 232 4 v 1818 4941 a(j)p Fg(z)t Fe(j)2011 4884 y Fg(<)k(g)s(;)150 5082 y Fl(then)28 b(the)g(algorithms)e(stops.)37 b(Let)28 b Fk(gap)p 1425 5082 27 4 v 30 w(abs)p 1587 5082 V 30 w(precision=)p Fg(f)9 b Fl(,)23 b(if)28 b Fe(j)p Fg(z)t Fe(j)23 b(\024)f Fl(0)p Fg(:)p Fl(0001)k(and)h Fe(j)p Fg(z)22 b Fe(\000)c Fg(p)p Fe(j)23 b Fg(<)g(f)36 b Fl(then)28 b(w)n(e)f(stop.)1929 5356 y(8)p eop end %%Page: 9 9 TeXDict begin 9 8 bop 150 390 a Fl(Finally)-7 b(,)23 b(let)g Fk(granularity=)p Fg(k)s Fl(,)18 b(and)k(let)h Fg(U)31 b Fl(b)r(e)23 b(the)f(v)-5 b(alue)23 b(of)f(the)h(b)r(est)f (heuristic)g(in)n(teger)g(solution)f(found.)36 b(Then)150 490 y(if)28 b Fg(U)f Fe(\000)18 b Fg(z)27 b(<)22 b(k)31 b Fl(w)n(e)c(stop.)37 b(W)-7 b(e)28 b(did)g(not)f(include)h(an)n(y)f (heuristic)g(in)h(this)g(implemen)n(tation.)150 722 y Fd(5.2)112 b Fc(data.mps)150 875 y Fl(This)24 b(is)f(an)h(MPS)f(\014le) h(that)g(is)f(read)g(with)h(co)r(de)g(in)g Fk(reader.cpp)p Fl(.)31 b(If)24 b(a)g(di\013eren)n(t)f(t)n(yp)r(e)h(of)g(input)g(has)f (to)h(b)r(e)g(used,)150 975 y(one)j(should)h(c)n(hange)e(the)i(co)r(de) f(in)h Fk(reader.cpp)p Fl(.)150 1250 y Fm(6)135 b Fj(coin-Vol/Vol/)o (exa)o(mp)o(le)o(s/)o(Vo)o(lL)o(p)150 1431 y Fl(This)18 b(co)r(de)h(treats)e(linear)h(programs)e(in)j(a)f(similar)f(w)n(a)n(y)g (as)h(it)h(is)f(done)g(in)h Fk(coin-Vol/Vol/exa)o(mp)o(le)o(s/V)o(ol)o (ume)o(-L)o(P)p Fl(,)150 1531 y(the)28 b(main)g(di\013erence)f(is)h (that)f(this)h(co)r(de)g(uses)f(other)g(comp)r(onen)n(ts)g(of)h Fk(COIN-OR)c Fl(while)k(the)g(co)r(de)g(in)275 1631 y Fk(coin-Vol/Vol/ex)o(am)o(ple)o(s/)o(Vol)o(um)o(e-L)o(P)23 b Fl(is)30 b(self)f(con)n(tained.)42 b(The)30 b(\014les)f(here)g(are)f Fk(INSTALL,)41 b(Makefile,)150 1730 y(Makefile.in)e(Makefile.vollp,)e (vollp.cpp)p Fl(.)c(The)24 b Fk(INSTALL)e Fl(con)n(tains)i (instructions)g(on)h(ho)n(w)f(to)g(compile)150 1830 y(and)j(build)i (the)f(co)r(de.)36 b(The)28 b(input)g(should)g(b)r(e)g(an)f(MPS)g (\014le.)150 2105 y Fm(7)135 b Fj(COIN/Osi/OsiV)o(ol)150 2286 y Fl(In)30 b(this)g(directory)f(there)g(is)h(the)g(\014le)g Fk(OsiVolSolverInte)o(rfa)o(ce)o(.cp)o(p)24 b Fl(that)30 b(allo)n(ws)e(the)i(user)f(to)h(call)g(the)g(V)-9 b(A)150 2386 y(through)21 b Fk(OSI)p Fl(.)g(This)h(is)g(also)f(in)n(tended)i (to)f(deal)g(with)g(com)n(binatorial)e(linear)i(programs.)32 b(The)23 b(co)r(de)e(b)r(elo)n(w)h(reads)150 2486 y(an)27 b(MPS)h(\014le)f(and)h(calls)f(the)h(V)-9 b(A)28 b(through)f(OSI.)150 2668 y Fk(#include)40 b("OsiVolSolverInte)o(rf)o(ace)o(.h)o(pp")150 2868 y(#include)g()150 3067 y(int)i(main\(int)f(argc,)g(char) h(*argv[]\))150 3166 y({)324 3366 y(OsiVolSolverInter)o(fa)o(ce)37 b(osilp;)324 3565 y(osilp.readMps\("fi)o(le)o(",")o(mp)o(s"\))o(;)324 3764 y(osilp.initialSolv)o(e\()o(\);)324 3963 y(const)42 b(int)g(numCols=osilp.get)o(Nu)o(mCo)o(ls)o(\(\))o(;)324 4063 y(const)g(double)f(*x=osilp.getColS)o(olu)o(ti)o(on)o(\(\);)324 4163 y(for)i(\(int)f(j=0;)g(j> stream xœÕZIsÛF¾kü#XsrªD¨÷åèL%5®Rì,²ç瑈 HÐiYùõóÝý š’2™Ë”Je«Ñh¼å{ß[€Ï RÐq?áßÕöâóÅÕÏbqß_|^ÐáRügµ]|{áOª F¥XÜÜ]øûè‚RQpµPœœ-n¶¯ßì¾¹ù÷ü­f°çf}ñºÞî›j[ W \Ñpˆ¿r(u;¬KUH+iXoïÜc‘ÖÆ½›j8šRk?º%Ê ¢9ÞÛ·ÃN©a…xÓÜ·]}ØlÝ%Їƒð…•’9}–Œ¨B)µX2SX6Üð½Û¨ M%‹GwånU÷«Ö]¢0\èpåÛ²+7í®žË Jð¹åntÑÆF½¯Ëþf8†Ëª´¼.£ý””QóÇÚ­-©“M8y!¼Nû®n†ý¤`LʰŸÚËÁ,¦0Ôš°ÈÑAuµpn*¨Ç"KÁ@À ±(çQ†·ƒ\pŸ¤4yè8Ÿ£jëã*úeej@ÍR‘‚pònÑÞÊÿ¬ºÁYN'<ãÁ›ÞJNxX6éB[Σï×U¿êêÛ ¿¡òd¯Òi¯7+ÅR"2° `jKf ®™˜ÀpÃÔ),!8¨0| K‡hFÅ),Ý‘,ǰ²‚FL} è†05:.¾ùôMp„¸'Ü×»²i‡S@K«âµ}Wõ^G¦!rd\?Të 7a(w½ *n¢‚¿Òߊ°SKCáÆ«½$ÄÐ9¬ßµ6  tßC½»næCµ?Þ.×uW­ AÕFS'lÊW?36ÆÈG:`ÕÖ»åǶÉ!Î)¡içmÇÄ¥Wš6Y²Nð*€ uºª©¾„½Lbl‘‚'l< —xä¾®VU?˜’³BQ ­`J8” ÜÍò˜3D*µüDÿ+÷Ûwö(8t°ÊÆ" 6YtÜYãôè7bfÖ¡Æ$9:ÔƒóiÄ€mÈ,bœ§ñnŒƒÁ@±0†N0µ…|©€’dÖ@Õ×£ A5†ÈBYàñ¢ F¢)áˆùÆæÃ|ã]ŽüF#ÿµÅcjÙU«eB|ÊÁ—´0&Hß—Þ6˜I‘xÏ«ÆëdÙ Åm»¤”Šk}Û| Q+€^Šö<îVå¾\ÕÀ’žC4-¤¡‘<ïàRSB á\Gƒé¬Di‰ ùñeYr(D,Ó#øÿA2_öŸßìóÁtãòúÇ,rÀFéÆg#Ê îuk¶ÐDˆë Ë&¦§€3­‘¸¯l8ª‘R R`Kžk·!QH‚[o!19z/›áˆA¿ÁáUÙ× ‰d®¾ïÊàjp•Ô'¦Jt Í‹é@æùòŒ§ç~ a3u`ÞÓ×óûœO]yš’SÙômP‹YM_æi¨…_äiæJ‘¹§%Jý׉B‘œë ÍÍ]w9rÓaS÷á6Šþ‰ZŒ+ÀNŒCÉÙTs¬¡Û˜Í­E¦m>»Ð<@Z‰GïËî;!_t˜B¤ªïïß¾Ëù [bHÜu‰afã36uû(Ù§ôîø2‘s›ÈglRï²\'Àÿ*·ÿ®s€7Öñ©ê똚ªænB|ǦDÕº¦±¨ÐÛ¬eÀ5‚K3òéÕû¾v¿gêI” +‡ª*`™ke3'Æ>›@¬2¡½QXÁ¯ °i¼=MóOu×(ê› ’¶X[6]{¼ßäì‰WIDñû_ÞfÝ$¡çB7yªÖHR0DÚ»6ÐcX>xK¤úì\·çú§ÔÁÝ×_ÂYUÈlË–¦ë pÑøPJ,½såiU®‚”Ôqq0“k)N27#…|…Rhj±fúWTšb9TÅ] P›v•1Rcf_@‰kƒ% LåMÄ Ç)œ·QWí#òŠÓ.¤®wÀüSÞ"p›AJ71 ©âx߇‚€Dx¹[_ùdQJ™N}ß Z¡þîØ„,a!(DMõuD@Šˆz@‡¸‹ Ôlˆ÷.áA!4X@¶oœ5žj—q«V?où¡íÁÂЦGËûªëÃ2³•Ü´Çf¨9”š‰[wí!„¬Aóí*_I qtˆÑ#l#AÈÔ‹¯ë»ÇôÀ¡ÉøÛ©-}ôå¶N8Ž4ä¼Aƒ!Å6Ðû*l™ÂR$µ´*õÔ¯|⛑0 ²ø˜·ï~¹ys}óˆp%MÅæ35°LÝS½ƒšg‹Is(þ OŧC#”oÚ¹ùbã31–øºÝîc’wé§aùM¤ÊçöX{”8Pqf‰=ŸEÎETòò£ˆà/ˆ¡4¬ðû.?L àiÍè8VÑQÙÓigt–ç‰ÉoYÀX)ާ@ÐÃl­Xíóe6-˜æ3Œ6këMU®+䮄»€b@-шZ/ü© ð_™â1 ºÉ =­¤8Ë{•;C½·º]â/»ô;_ÿ9âÖ¨Û=†¦»¦š¯õWóµ0!™Þûa¾–Ÿ€ ­ ëžËÓið]%0e Fâ±GÇâ½X´ S äÁHJ§!Þ&–™ào‚“ãn’¥Xn•{/³4Œá˜ÐOL†GC/‘Z©µ\q}F(¡O€Ž">ÍL sT©bx¾pp´øÒç×ÒU1©9 ü/¤À«ªä\BR…Eí§×¾¿þÑŸ¡ØÁÜSö)Q)Èæt m†kgÂí3_n¤þT3^vR ƒÆ—!‡R9´¯0\öÚ¿òßæƶXŽú²¾ÝÆÆ z‰§dÎr,¶]u¨W¡ƒ¶‡Ø¬õý1΃ÝëÌ©YæŒé‡ÞH>‰å²;—h¡òJ<‘h!k‹ð¼Ì°‚£¢?”¿WwuLï'Y ‘,ÿÄa'g‘ü§ÇI]XxÈ·„ì >Lï$Žw͹äð"U™N¯èÜYgøûEgq›šwÖÞQfgA@iz{µÎ:Ô@.À,¶.eqÿÇó’±#H’$È‘çë5¨SôK굩ÏN²´8W¯IhÓ5¾ÈD¦fg‹5—‚ÞŠ}“ÊVkKn!è1«dë…¡dó ¯ÖSÃû&N ¡3F:ô¤k4Å}Õ…F‚¸ik\íÕþ«W¬ÊX´§ûwÕCº}܇  ÿ¥.1Y~èë$jÙ$©:Œ^›Þ6‘_„:m?¡×'©ý›^Àiæ¥m-8užhG˜ŠÙñ”«”`¶ükÜ î(å=›SžOQTNãOeƒ¹tVÕÉG&3ªžÐ–KÙBo>³–ÀV)çåšÜ}—ê| ÃõqUa|ȧÊÁ?ÿíE®<+#c%f\׃š(N†i*Ú¾p¦VâÀ7¼QôL‡¸/“ž]Núÿó_ªŒ¿>9û F(æuúÖ'[GNÞ“Asò²ePÖ‡:ÈSî£#ä©ìÇ> stream xœÕZKoÜÈN®Ê“œç9ñpûýH C,|ÉBy ”DIôr†2ɱåýõ[ý*>¦9’×k±Ën»«ëñÕWE¿Û‚nˆû^ïÎÞ½ÛP¿–~\ï6ÿ¸<ûöj7¶°Š)±¹¼= /Ð ã¬àl£$-<Øïêý‹Ë·ðW³Œ°…ÐÖšÍåÍÙùÿ¢Ø|_U³ÙN它œ€S «¹‘NNÀ©„°Í–B"¼dý6·%¼%­µ›©äcnOY( ù=××<ŸÊý%{i [þ¢Kßæ/m—7ÎmÇÁÒîSÁŸ´ßⲊÆÌ¶{}N_¿ÈÝxË„9Ø•¸“+/m­•·5 ³vØ‹Ržã¸sõ3‡rNÌ9Šƒˆ_¢9MdA8¥<Šü-·¹.À*‰Ü¶ßZŒÉ¸V6Mö–Þ½‚ÐÛìæTØ‚Ê$óúœ¡ìÜœ (XV$Ë~ºÑ„ ª8ÇØ×~Å¥>h ‰«‰H‹­gl@T$±É›¯Ê»®Üßù]wOâƒ]²Á:rh†ú¡©“ðp•t‘BàZõîP¢ï…(4äÿ”1¢%Inúï}p+ ‚*((¹†Pšódþ›CÙÔ?ùœ†"˜/5z®ÉKv"äŽl¯†2ô Dªd阘ßþn› cþƒé£Í ÁôgÔeØ’Š"=tÁ!ZÈѡԻlý¡”Â*|*ì¯rUŠ ¤×çyšcø2Â颮hi°(¾Høgñ­ =у)É]Cb˜~ÂΗŒßUÅíTîYSHbcd²új«fŒÊó¾ÈQbfÅx0ygÐ};¶B(™íÔllŸ6ïc·à[’¼iTc¯%‹ê>ÝÖ=ň}, ®RŸÔ/·\Æ–dŸe›µ>åV@;6Ó£³!–áyÕ–šL§Ï ”£†~…Y£Üçµ8òY}:?L|gkANRê_ßœ_´QùÒæ1îê\N[¹ÿ£¦ã×±N¶éØ2b Ö¾»°*ñŒÐ\p î¨ÛZÕ*b°j{ݸã2sJ0 !©‰ø:¾À NÈ%N{Z æRm?ôYë[ i÷µêG¡²aϵRý„ úyµJ³ãÉTf &%ÅjÁMôÄ@Aó#“;rNâWÝzJyŒèô4¢¿ 4œO:㱓 ùɵ6N'¢ŸVkÔíS±zر#rçñ O)K†ž]!…wKÊÕ³¸wR“–åá¡ñðÄ ]AE 9ö<×Uh™@ØúúÈֺ‡®Þ•MlW´A`zâRûèÚ »ñ‹0jf Ð_?<Š¥Nû=æÇiº#ŸØHO,;¯R¡)š$YÏ”îKßC ЛªÚÃ*hA­0èŽhd0‡Ã5ØžAqÅ·!ºÊ¡Š­šUØÂõmspݦ¢ ­±©Æ\1;6 ôõ‹­†…©ƒrpœ´ùw_ïïüÉ@ê!kñ:QõÙ@cÍ¿õjê®L:IW]ð¥µNw+´«ÖAMŒ¢;ìc¨2ÎÓ1иí¾:tu?Ô¡–‘BP¢Ž!GSÞÕ>¡k5˜Òa^åÇFÎ3/ûû ÀtT1TwU—F0|“gŠ@ÑÝL‚H̘ï÷Qˆ=%u(á†HQš0<òI‹vûÐÇÐaÊ<=HÐv2¹¨ú뮾BJ"O HΆ 7õï€Ò¤¹åxå!lŽÄ;}G<–h93£‹MŽ‘< 3Á0bnêÎÃOE@m‹ˆ‘Æ}ƒY(}üf†x2¡î‰"REI§’pui1e·MñPvYN—$¡Í‚N΋_F]\ßh:Þ5’I¨8hSŽkIâ&9a`w«fyÌÐÒp BÂ,‡k{ S´/wÕf’€2b™n¢;5ç4ëÚ&±k¬•r ƒ²¹k»z¸÷S!oãˆÝ²Ìé§,½®GàíÛ]3ᵄß0¢í®¢M&_ÚÃË;Á§è’ìr(‹È€l\þ®¼Ž·œì}€`:.mê=~1àÉ÷ešÒìéár±+`óIc=~¬>~h»›‹÷es¨²AKgXú!õ ˰zŠCõ¸m–§ÄxèïÛCss þýPv ˆÅo˜îZNÒ=™€ôë›®O ÖÂ.tp”[hÔhòï÷)qžÆÀÙû&3£€O >þÇàfh<±AÍ»$Lâ׌ØJQZƒ®ïÊë!ƒâÞs žaß)l¹…Äø™#ZÙÈ æ¦YB'%ê»}ÛUÁ³ÐÉDË× ²õõMÅ…q_óBÅ gà­± ¦dÓþ³Ýíð뎟lQDûï/ÃÅü b„\;Bnî[KûcJCHlyBËÜg&dÀàYœ%*'@!ÀO[÷M ö]U.Üá°Í嫳ó?»Ï·uS]¸¿Ë?(åcÿþ+-&ï:é7}ù¾Šïú‹Î^„Ý¢EÜdÏÇÙ‚áW¾põá>‹z?ŒGÀ?ŽÏxÓ·ÇgÄsçg¬Ÿë"š|èþM ™rA ‰eÑ)óÊÓÌýpÛ”wl­çëýûæBºEš„=tË”Àºûß°x×UÕ~¨úð½ð±nõŠñˆêñ¿ªÔ”»«([õpÈŽÚ0àŒ@qˆ1ÀÜ¥¾»ÜüëÌýþú£³Àendstream endobj 33 0 obj 2533 endobj 54 0 obj <> stream xœ½\Y$ÇqÖóxå÷†äÁ©Íû°¼L[„ a‰J/„Úžê™"ûVwïrùëyEfueUÏj5ŽTÝGä_|ÅŸW¤¡+âþ‰×»›Ÿo~^Qÿ,ýYïV_ßݼþޱ•m¬bJ¬î67áteÉJiÞ°ÕÝîæ‹vûôØöûþôFüòîÇ Ï¿ÏwýBè—ÿrCicLþlÓ®O‡>–î³âGýþôFxÈxúÁ®ýåø0ô§n8¾a0\þÅÓÐïÚí_ÛwÇ¿> ݺ‡OŒhá–zwóű?øUÉFY¢ãÃýÿŒ4‚Ÿ‘¦òŒ¹g·”‘Fs¹ºu“Âã‡ö)Ï'Ï ÛžÎê'¸µ¶1V¸Á‚=âxC·ýäñÈtÅ4,rZ,xh÷çm üø&ìóõwԎξÌ`AÂÿî±s_‚ms#Ót¯†ã)>UL²øôa8œŸücÓ0«âÓÃÆ/6LYŸ=µC»ëܺÏ$m¤€éÂgíà'¤ªQ9úqm£©i` Wk?h,·4>>…Cf c*­÷6AuC…áñá÷ß|ûG÷”ÃÖ¸Iæm÷÷þ«¶áÄ.þþ|ì?=m(I‡óÖÀi£žÚ}÷jßEÛh#Txaì` æ7*ÙksßžÚÚYÝ "ñðxûc0”áBÛÉê ÃÕïáüzLÄôåaQaþjÛEÎÒÃõaïŠF ÜùÉQÂþÁ›„7BJ³4®ÛhÝ ªV¡9ÏívÓ‡5\ÚDM«ƒø“0 •”²Ï4‡Ô2Ï™7J“ä ŽLûvq#âÆíß»· ªñüß{‡j'Œ¡Ÿ¹z›¨„Á ¿ÝDÎzHÏ>¸Gª±’#¢ýÆtc)çÉóÚûä#J¡´i³0wZ÷Ëih£Q ‘é÷ÞkEC-G³<#¬OÁ¡¸m¤iùí)ú³Pæy?ïÂÖµ´,Ú=ôûdmAIã'?|QD.“ÿudºœ%ÎùáËd7)3ÈôÆVÚöà)Ñ õG!Ò7û‡ýaèî¿ò1îàôtdmpä]×îD4­EX9=32´FÓ÷‡xdŠW!+gÈÁ–Øôõ9¼ùoBˆF]îQ[‘Ná¡× -»}Õÿ!St­´˜?Ü­þ’…:¼"¹Y1-Àºf%‰áî/蚯ßÞ¼~û?«Ópîn^ÿeEo^ÿ·û××üOøóö¿V¿¹ùÃ[?Ò§ˆ¦5 MÀ<ÚGK@Çö}7  3=òÂÖÖLy À..y‰Aè¹ä%k)MÆL¼ÐÌÆûðØ…ëøÀ¢£Íù>ø>¸8‹ŠÙ„oqpq5ÙQ9Žì "Óš#‘pã×á–è)½ ¥ð)¦> ¶Ã¯âùÐ|>»þx6I.Éuá’Ý>®NwÌòŽ?mcIß°© ÛNhZõ‰u_w7@›EÄ€Ÿõ6A]Ôƒ¿V½¨· à)p˜G>ÓÛ¨šzœæ4ˆ§S¨Å0Zo»†H‹mÆkþF4Z¯¦H?Å4H‚šˮž Ñáp¤2L éBïÔ=t‰¯Iæëãa{>õAÂpX‚$¨Fç ’A“¥Íx LÛ´ªa2ˆ.l²øBH?vç¡?žúu Ó@@iOC QZ``^w÷ç¡ ^‘Ž¢.é7Aë1nðYáò‚Õ\ÛH®»¼g.®/Â-Njsq%V23õqÁ'>nŒþ>>Ceµú8O‰‚C×ÀDìã)™î˜DSøÐ{x%á¥wÃB”!ï–²KeŽ û DÏ»¨º!/Yr¦]Ø$daj ‹\©ßuÇ­)a+Q~ÁÆb³Î`,™ ¢ØæpÞGThŠbºÝD³_Y-–¦ûsú\2šöõq[L£&{l£²ô¬£_íûãcDWQcˆ5ïrX3º]N}€…À8yQ€ šI9hL?³*^^–\ùa’>K«EKÔ݆AÀC| 8n¶íC5Y?^â­j>8¶Çˆ ©+K¤Æ$?Þvï†(Ⱥm°…Ð| LâôEæá|z:Ÿg*‰ô§@!TR²y.b@.Á}-§ ·š{LÕ¦ƒÜ¹Årô‘YåÔ&‰+…œÝ¦g5ÍÚ%È®ŸW–IúÇú.a „! ²SÍ)Sž·§þiÛw÷Q‹…‡:+½KÈæ¢¥xð±ÛnÞÆçÒß¼[›3£-œ×Ð"Ô³ÐÂõ´@t)ãë5¸HÉÑì+Bv? Ñ0-˜¨b¾\Ö^†”Q\.Cjt{2)k _ªz_…”Fæ…”]‹WL +Öiƒ2jèâ Ih?u¶)¨| ?9@>ƒGŸ^TÁ‡`6Ïè·²±ösÈPx…l¨Ó/Ù”ëdcÍu²)˜hRׯq ¡¤(¶íîݽ¿2žp9¶¨ÏKL®ÆUl’«ØKæv¨ºnnI–ÍíD+f/U8KÃÿÁéã­yu0—ì!Á•×Sº)®B^pû*£íªú2…®_Ý¿»L²Š—û›Úˆš:¡;–íÂ)¯¢RïÀœj„í—ª1j£& ; Ëå?¹,ýw–qeøZ¢Žù{¹2¢ÕîÕºu hAðÓÄ]CálB2[Ù\@9xçwס³º»u¤L \‰w\Ÿà™17çýKŠ@K\¡Î_­Á:_¿_]{ $˜CÍÕZciÐxsH]Q 0à)®‚CÚ,ýgŸ»[¹ £Ò*i¡¹ÒÎ͵¼m|8É&³’ýXó4Ÿx»ý&àUͱ¡¢WBö”~\OFªºœ$%4«€#h-Geλâ" ”2Ú€E^nsÙÔ9Šs¼ÈÌïú}™‰jk0 û>Ÿ>4@ÞE¾éc J%ÀXt‘»…ªÛtÕ•œ',Vu®Wàý·«¥DíÃm‚ËäHÊ‚#ܳ ŽÖØ™ÜïÇ•9.Kq¾ðˆÙ<¨œCàQºË¢ÇÃE: JÅ/#œ“€`¡.B³‹9.E‡Ð¤úÍ!ékpTÎò¡ž·2œ®‹²ËnáΗ;¢XrfìKÞBq…hæiD¸…jßç—¥ˆvËyñe€~/V•ÈöUàSÛ¥¬_>°4™þîV,":Ÿ–'2h,xã}آ˻ š]*×J‚œíty{C n1…(fUQ×+j8X1¾t-R\°2‚tþÃû®n7)úwÛîŸ<85 &0šÛU¹ÇWÇ1|=´Oó¸î‚þRø¯T8ø° W§F•ÊÐ-x‘¢ ÿËÒ0+W…p}S‹†’5…b­–Ú¥ëDz _¥Ó¶ˆ•m:³ I ¨ð`­ PÃ+Ô¹ò÷¸•Õ“¨VP£ä\¯¸´,î›E®ªä1yöÉõybÕK»v2T°A”0@@z„¢ ¤tÏî¬ë*Í5üûªÉÀÕsßÑSÝd‚Ókó’‰O+²Åî–³cz™¯¸à}ѧ7ZÉcQš«ç#ðP®mŽ€ftÑc­ÙÄ(É$Zóm”ZBŽ%ÌŠvù±foæL‡ù⯵Qú™K£H Ùœuý¾vjþÂ/:H}æL8ý·Ú(a¹É´¾ã;dR.èäNE×x'Ô÷C´€@vÍ"bÉ"®VÃðrð7µQ¬+ðäKȺ]Ývyi×HœL›Ñ¹¡Ò1'3ć¹ÏgÎ ³Dæd`¯`vÒâü[íó ÄÀŽ˜+BfÌ]u×}ñߣ›8 ZÑ ü®†Š[æªH ùà4`ôèò©k ”Þ´Á¥èÁˬ[ÔØ}<žŽØàŠÇ|6Ï ÒL0×°bY¼`ßƒë „8Å$wšàš¦d*´a¼ø²”K\T¹¬çDiûõ(m-•Qºä¥~–$ I~*äÇ“ÿö³H1²@ŠiîDŠà ,w0Ì2bù*ÂÂæõÒæ^§C pót(—–2¶h¢ )ñЩР׳E‹Öé/Ì—Y\{ö.41àÀɩܕò ¤¶ÛPm¿Ö›Þ+0ÜÎp‡KgM¾o̯ÒÔL¡Üé²ÅÛq7kNt¾ jgT¯£¸<,w¯ÍJÙbußÏ€YJ±ÔèôéR¶"Ì$™ 3¥&o”(÷êÊ3ZõêïÑe<èUCóeüb‰h8«w7¨8ÖÃ\s£ïï°Ý@,÷3T+åcÆú¾ê×¾…7mÿ å×p6¶Ð5•p©X™£Õ•A|+3 gÁl²¯JH g ÊoÖsJ×!€‡ˆ¯5MÔ±uW}x×YÉ)esgÇ&ö"»—®øE+1k¤AÉ–ð‹wAç!ýUmuܽ5c/r›é=1Z÷ó—H'HÍQSè\µoô–áÌÙryUõh'úS¶öªCµS½ )#1.ÖšðÝð>½b ~Ž\“ö^Û¥àîv‘^=¤ÒÍpØE.¡®ZºÉ2©UàiŠ«øÚÔ¼:óI=§ Õ·ôûý}¿Ä0s®m–æTîneô<8¦¹é¥Ù (j5íîßÄp‘¬é^°ÂÐzËÜhV·o7‰Ó$“c˜³ò¨í«Çìs“üŽßï’¢VrÑÝWò‹¹•ðâkBr²½;ÿÜ WÂweÉ"¿–8ãî?û@Ÿé€œÕ°ØÎ±KïŽ …ÄY¾Æ–¾Hc=ÌW¬ÇõJRÈlx´¼®­Ä¥c`›¾²v?½u.¤Ü=÷•0÷Ïÿ}VßÇendstream endobj 55 0 obj 4381 endobj 61 0 obj <> stream xœ½Y[Û¸îó ?ÂI7æð.rƒyhö‚ E¶Å4-Ð)[ŽUØ’#É“qÛßÞCñ"jD{œmSÈ4EžËwÎùÎáÇFd†Í?÷w±½øxñqFú5ÿg±½¾¾¸ü W3B‚ήWö2Óx&3†`m{ñœ#öâú_°Wx/ÃHh‘ÁþëåÅóýjƒÖ»ÝHôL#-©äfãÜ˜ì·_¯ËÖì¥e*#îg›Â,—PæuÕ/r”q¦Üb——•=¤ãØ/÷Í7ý¢D˜péØäm[ô»A’ûƒÛ^Z2¹pkÅ¢|¶pçj¦½`]Ý‹@ÁÒkÜ­­°"\ù3ÿúãÛ_œ„)/2KsJÀTƒh¿úcÙ´»+ÃÄñÉ,I°Ã~©¿H!š1æ•Zçýå1‚¹[»7Ka†)‰c^ÅÜ.Õ -ÔKÂÁõª¿ƒ %µvk»¼É·EW4ý~A¦ê<ƒ ÄÉÔ YÊ ’žcP ¨ÒÒo¼¶_SŒ´ ¨\í¢)w]i1$✜ÐDh‹€ ©’JÏ™bpŽ ŽÌ-î‰D ku‘ÛÝ ×ÜŸTVîRÉ”>¤]S,ŠeY}0?qŽ÷^n‹…ÑÙPOÇ¡F@`{p¦ƒUoA©­w"@Á›å×^EÐP`FƒŠ»ýݦ\|ë¢33?€á”¨kœœ \‰tµÌ»ü•YÏâ4¬_^ºc„ Ð]•owB±·Ì§²[OW»ÁÓž†»l”a†218ç˜tË}¾1·z™&øoÌ+o'¾/«²+óMïM°!2’czD[oöµs*YJŸ¥Òm›ß#½8c_¬— Ï‘æàéÎUYYùÇ‹´ÂøˆVB uŽÊª›j%Ø—{ë|­vM¹uj=¥øP4S/Ž5Ë$ʲà.øÈáU‰€×õm ù¤WGsHmᤔ:Õ~{goq¤ â¸6ÚÛ•Û"ñÝ:ïN…R$Ú1åמ)Û®\¸¤AYˆ˜Oå&â»ÂÁ×ää!—¤4löÕ4¦óUç´&PûUŠf ¨óæ–IAåc“D>NjyÛS›æ›ua½µ©(Kjn*£çÎCMl7A‡ »Xçͧ.0 ¬ ŽÜ¼èÝȇ´®DÿŽ¿yÑk—!%Ö'çßBv¦T‹þö*Å»ˆ0e¹=¯‹UÝNªL 66TŸl¨>UñÐ9>€‰ zšÀÖ¡ÄŸGXÚu½ß,ûû:20¹mQ¹ûµAà}kÄÇbJ” ¢Fìîq5„‹Xàïß½5{~¸žýÈ0üÄ{®;̘Aµç"þc~ýæâòÍϳ®Ù—›‘‹ËŸÌ¯ùþ¼ù~ö‡‹Þô'¥iõXO«™Ñ¡6Á=Ž[/×MÊ}܇`‘¼Z¦TLc8Ç)9öƒ¿¾Žœ’”Št,ŸÒq`kϪÂBX,e>XÒ4á:ÐÉ È£øy_oÞ÷q}¬‘ JÇIɹk‹ý²ž/úúÁ!&˜Aæ’ Mýö;ËÃ3¡Cà›Ú?­¸OŸ…*4¤Ñ=”Á¼³€æ2¾ à_6ž¥Ë Ä¾-Ò\r ¹CÇI YŠª+‚ñ+Gžì±Iß½½P:ζ7Ï+—ÎL­dR”£4œuq  5ðJŸ„£R3Ü7^Oó­jzpQ™°F„Ô ½œ²åÃF¶ðjèžBzN‰Ü]{ÀhZÔrWGE-’ („"ÕhA¾UCbgõ3@‹SÄ™íIE¡c½/ô@ú÷ ë3(KŒ…ˆY2tzXϲЅ}&ñ350E&Ô#èŒfÎ~†jà(²GŽè1.&Ÿã³FõÓÞR¼2Œ!U{Á Ò2Ô´_§¹8U ê¦üà‡”ã‚¾ãÌmõW«}µÈwù¢ì€eöÙ%ƒ.0óš¯à—MÙõ›ƒM†ºÛóR?4ÜUŒg特úälµ¨Û.p3>¬*a›ü%•¬w…G˘×8ýBCÜIfêØ„¸X@W]oÝàv„ IÐÙØÃsX†@Îî’WåC°€<Ù(cÇm~HÆ¥­Sù>oÊyâÅ'šÌ&¡¡  Ö,þû®Z‘ÄT7~ôḨá„+ËóÆ·Uu·Àuˆ)F‰e^êÑ(=ä0x9µ`úÊ#žŒ¦ðO´.píË)>¿äŸ?\à™‡=Š»òè"Ì Ã‡”ZwE*êÆ/‘;VEÞ–®µçºø ddm"ÈVycuÒ@†\2ôÒ<Hÿ‚”wŸoö~ÒýD }Žòq"Œ•¤bü:Ù—þ§½¯o~à?ÆÊ·‰~ÃXâæù÷¯ßÞþü§¿ÛÆï|î•€€„$z 5 77£Ëžx]Ò§(0Dã:ªý>¨Ÿù÷Ét4 endstream endobj 62 0 obj 2334 endobj 65 0 obj <> stream xœÝZ[·îó¢í»‡ØI,îðNÚIº‰‘4 ¶ ,ÆÒìjI#ÏhÖN‹ü÷¯£¡´ëuÓ‡Â@¡8äááw¾ó’of³Âüs›³7gofxhó›ÙË˳óﱞi¤lvysf?ÀЉτ¤ˆÌ.7gO/WÕö“ËžŽ4üPÌ.—gOßš4§uM•i’HjJ…kZ•¦ ˆâ‚¹¶;ÓÄQA BÒ/Ï¿‡ÿOŒ™ËiMfs‚‘bC¿Åºì:Ó—bD5öŸÿõÕ7׫¦ùÉüÂÀ&«²¿×ÁÉ0~½ÝO=ë&¸nW°’zPQÄ4õàþÔÁ†ó›Ër_>³ –ÇÒí^4ÛnïZfÖ¥Ã4×]ÿ:ùX1³ÞlãjgžÐá;ë|ÌŽË÷ÎObvê|Êy ÂÔó v3~TÅÔó#è=b Û…µŠÀ2 ­Z6À ÕÇS¸® ^Ÿå踽ï2ö¦_ÜY+0€Bq‘îØQCvÆ&Ì!ØðéÐܵõ¦\O-_U}[w{K«sNaXé‹}ùò›ëoÿøið×Ûé fÚë;kИ÷ë ëÝTe7¥2@îÎoËnûdþÖ~á<àÃã¦é·K»áR !üNÇFpN÷hºè ¸»ðËÀgçà¡ $Uœ #þ]†´Ž‚ÌoR`-^ ©Fýå…Íÿb„§©ÿëªxŒѲ_UÎÍTØ ~»Ø×Í6§)(øD‹L¦ùêröIF4М!5#X)ÉžÁfBh%õòâìüâÛÙ¾í«³ó¿ÏðÙù׿?/¿ûü¹ørö›³¯.†‘òrkl—[–)¨™g\í"ë’z¼À©`;™T6¾`@®$ön²Ì‹QA„œ®jD©ï›$Y n•”„ É¢ap-ü[78‘\ì‹@…xľ„¤•Ý&a¿Õ¯¿+L2 žnË8ÁnÏœ*û…®ãÄuÐÈfµÎ[R 2îÈ9¥òÀ«áˆöq&g ÈTùœ­Ã¦1l*øhÓ&+'6¯òVn±œ#&%=l¥mo±¢‰«*-Š|ûŒÒ %€ 1†2AД,Ó©ɸïhP<€•‚·8L@’Ó hX,6á(¨S™~öê¶²ú€X¨¸ƒóÚ†HŠzlݸ#ËP)ß½ª· ùæ„DÀƒyµ%Ì•»nÆ.„ökþíÚ3רŠiÈ6R“ô’êê®ãÜI¥RÀ*"¿"w|âa†™(Ý•í¦{þü¤uHïauÃ'Æ]ż+ .9 •̪l§åÓ›z]mËMuõI6 Èœ+â‘Oß®|ò„ÅjF— o«Ò§…TVòâ*RÞ$Q_?»©K;4š† q•0 ˜>uÌp˶ ª$Ǿñµ]¥ô{C«¶ ¢/°‹-'ÛÙJhýlR_(†Q@LÂ<#¤äö›˜ò'%²]˜šÁª4‡âÚ¤"SÁ"Õ+(†˜íÊqÚ•‚îÔÜû«¿Y£Ån—Oo®çÜØ¸4GC–œ@•ɨ7"9ižªÖÀÒ\û²ÞzlPVøæ®²È$XØ_KÓ°!DëCUѹ$§iPžá숡Ðú°Tµ¬ºE[(ƒe+ÌOôÍaqí%—V1ÞÀ0 Æ,„Ì«ºµT0øßOæú¿Fæé*bí¢e¨]6°?Wþ§q‰U¶·¶ðW!†Á>Ðûî‡óü ÒX¦x6¤…_·“˜ÄÀ/ªGiÂßOi©Óêm½¯Ëuý¯Ê äod •ëpìXùÓ1ì:[ 2ƒ<¡“Ó¨#d¤u V€«|ŽýôÌ.'~*ma "¢Rüm §CþƦ´ ë4õ¦Wø\ ïjþ{h8ð Šò®YïЮŸ^=Ío³Ú!Bœ¨1Àe1ì÷Ž7aÅ‹)}ÄT S¬ß†Äç[úcµ'GˆUå—ãŽMa·™Î*E©‰%9¸×%Hï¯ j#ãMšœv3£å°NuâàÓå=>ÅdêS¬èSÊ2>Mÿá>UbêS^Ÿ.{ëQ@'-4›z”xÔ3 Iðh¸ŸFê¿Ø cµ‘X.Oaæ¹ñ'[ ˆx"i˜@îƒ* Ãâôò âë}%<5àü{:.( RˆHRïl7ˆ¢T ™»UíGÿ}n${J®Ò]>̉̔¯Ê;ä™§-â¦Ë@}à‰{©?r$*’à‡°b ]Ì%¨¹‰Ç|{s·aGBÚ= ±˜HN9ÂBm$(䟠“C0˜ÚêÁd!ªXJªv 0N†¸Q^ÁOò Õaï/Bæä~ù?ÞÃ¥£$•ÐÞ4M„"µs JaäÑÅEN%f•õûÏã}@Ø™Ã˨uŽÄ„‹ 1÷»lÌ™óÈ÷Ž9XrbŽ‚Õ÷ÆÜØïs©¼ËÕyAœÛ´Þ–aæ\^K¿½•×. a ºÄa„¦ö‡Ê¸–ÄRLÿ#aP° Bb, $ð4]2qKÔx3VxµÃ8ô%„ºÁð/<Œø!òs%ÀT8.›­?”—,¬ÔÞ²3NÂÍÔ¬Éé஫úe3_ +e€.bbY¹•bMä ;ŸÕLŠ4¬0Èj™^Lf_ùø#ñ!ˆ[Àøˆeݼµ˜÷}4¾ ß7Óéæõö&søýБaàÄï<ždØÊ0w½~œ¿÷h¥.yîaïÍÛ’]Y¤aøé×h9íÅñ´£;'÷t¯$Azx:rPeÛµ pÝuáGеßWÛáÌ1N3néÿÜÒ?Ì-G½’‹móÖ…BòRâ6ƒÀýªmúÛÕÝ£w1˜’’*ðð‰˜Kï6™o]\É|ðJlUno3oܲóZäŒ-Ͻ¼Ë~ló¸ã¾˜¶ sÌ©2Ñ|Ú»aµþýJòz$æEæmÑ#’0[ï’«mïíóTÌa[t¬³rï ®ž~£ÁEvòP(cbÝMGyòùO¦V|ä(fÔÕ™F¡‘ò,WþPÿ8PåèUÔQ—Îq¡‘?¾ü%§J±ùÎ Úwã¦ÛpÑgþý¡¯’=endstream endobj 66 0 obj 3020 endobj 69 0 obj <> stream xœÅ[[oÇγšç¢BÛ×sŸ¤.à´I# ½jò¥M®¬u(RY’ŠÜ¢ÿ½gngf¹Ã%•F) DÈr¸3s.ßùÎ…?œ’Šžû/üÝœüpòÃ)uÏâŸÙÍé§'Ï¿bìÔTF1%N/®Nü(,’•f§JóŠ^Üœ.ý·}4¡ry:¡Ì=½[-n«ùvºxµxýmû]SóJXâ¿öbxò‰1•^E«ºvŸüÇà®wpÏžEMOTpFáÿÝ’‹ëÆ]‚V²–:ìrµ]Î6íjé¿Þ—´ ‘*ÞÌÝa½ZÜ5¥­¤ª”b< ѽ¯®¯ ~ß>’ðˆ°xÅÕ÷áÚDѸ¬ñògpÈ:JgãON늱:îñµSgÅ%£qÝËÊ-•–4ªøåÕ¦éܽuEL\9[ÝÜ.šxqÉ*"ð-?úÉIÜ«ñ×Ñ’s½a»q ª¤ƒ³rQNj޵«Å4î&Xũ޻­®Â}…2¦ÿމ `­L溿ê¦N_Ó…{•¬¨ñk·]{ãŸsV1Å£@iÛ¸9‡si4áÕë 8F3wrªÒªŽz¸¸öžÀxÅkM÷+±™mV^À²’¬V=?8/©”ñ`·p²’1‰’égðXÍ2¸¢‡5Æ4çñD3wIGÉ\7³`1TÄeÎ&MÅ2H¸ò4­Å®šAA Mr»¦êb,©e6aJ*´ˆy3fÉZkOóà¤Ñ½—Ó›&\ÛÔL÷m‡‚(Ðv¦þâŠÓxÔ÷þ¨ Ð=t³B7Sñuëð]-¾¤pûHW†r¾ë º’¥añÎ6Ñ«à Ê(“ó+DAÉqùYY¡¤9¨oÂÓ¡rþ7ÛM“¼+³<^¶¼ü}Ýv0AS¢Ìz.L7h¨Û®]oZoäÒ¥¶]·Ë7%_›RW†P4¢½î&*!Ðݦ€¹PñXÓe.*²]þ99qpW1õ/+8fž "ÞwºAç  Ÿ†€k¬‘è=×U¯{ÎX£7MkgÏ øG°zí•­¥ÁÃ5^‡îÛj ¡Q;·…ïví*:€H´òv6],ÞE•Ñdý]Ð ˆA×¼¨%àhî›B´€øEѼOà°˜ÈBAÑ€öGE‹8S4æˆsÒÔÜŒYi†sÉF¢bê ˜™B{>€}”ìb_«Àž½|úi4¹qäê'!_ßµ‹‡.ÑŸMó¦‰a’Õh|#Ž‘ò,|T'¤Ü;`&`W<¹ü|t¯MrÜM2D·ÏÛ%š1¯êdé‚Tàï|(Uš°øÖébë© ‰áx?ÔˆbhSÙ+ãm×Q)à„ˆ>óœ D¬WÁ0zÛ­7@³¬8ãk¤I¯é¢5@$IÚFD”'eyJ4a–¦ƒ3dn—h4H£—Íý&²%•“k€Ë‘LïaG¤ÙÑݪÓϲŽ|þ¥}øÙÅéß!aȱ¯$§QÕ§L€îàûRw\Ȫ>=?y~þçÓM·mNžsJOžaÿóéßþÎÿxúÞÉgçîMI½PEÎ(·9ˆM¾ºf:ß.U†ÿçÒ^Ÿk>ÝL/Ÿ¸Ðù3°­¡`v=히æaãÊ‚Žó:® *aj2&zA9¿~ô+BšÜŽï^ñÃá-Ü͟㽸î,b‰Akþñºñ¾Â€ôrWŽ¢Dh Îv½Þ%F<;dUr+Mªê|Ùr±š•®#ÁË)‹^èê/v#KokŸùÁ2 åÛ›€‹R⪇èB©Y=Èâd‚¹Å*F¢1qYàú¬xeXJdïÆ³­7ÛB¶­“ÿÿ¯×Ùó.wë¢N'@5`£,:ÙK^ÍV{.) ¦î\²¶Œ\Çí¦>T‡• Z—ÁP1[ER«EbgGÚÆl gWžª"‰¶Å“[òÊw¤1­0Ѿ ϲ8ÜÄlâ,Û4ÓYЉ’è<×þ¦J\·ß¼Ê¾ÈLÏ¡æmYðÂ8þxXðÔ-øZ-xÈ[hE%+s]-â·å³+~ |Å|õ.ªU¸rÚŽ½:¶`©“Æ Ð­n¿ ¨²«é¬]´›¶ñn™:CÔ|¹X±$%{N­)C¶¹éÚ@•ÀÄPÅ‘žÀ)=¡lÚé¢ý—'̦dÀdëônJ¼FÁpáÚ’{_vá@¿Á¤Ü"]Òº-–0I\•h—I´kŒíîvÚçÚ.¦NÝàç¦bYõâè@=ŽV¤è:ðk¤mëÆ»#øSªÔüØn®Ã>*¸ÌA=67MäkÄÖÞÂò"žQ€(­Ó=­C}{ù¤Ð˧Ï,x;7×Éò…( ‚öÛ RbÅéí„~÷š÷'%M_Ø2V¯&Œ!{÷ ÅÞ–5_kB£ B4‹¡ƒhbÙS–åÌ›{'Ù^7’›É ¨÷ד>—FqKp"EË|û€«ðF³ÎCW“d¤ÞA¥  Âgü"ò*nyÕ´3ï ˆŒFäí6˜HŠWÜ¢j<­?ã½jbžì @ÄÎýå,𕾝§h!d¤º_øf!G‹[î¥Îž=´÷Å,YÐTÒòå!Û@ŠzjÁÛçæ*Š™,l(†J=ˆŠWaHé^"KC×ïã& ;7Ø¢È@3aæ»€Žº¦»6-%ÚtÄAKVÐõK_â_ë°ÚXo’UMšL/Ç}¤j4úðúzµ]8iCš"Sà/»gyy¶X­›ùYpʱ~ØnÂõ‰–lW$DDÒ (JRõWⵉu1ÆS¯ @n¤Ä Ñ»¢RG\ˆ8¶'Êñ,*R#NqY0D¿Òy.Æ0åšP„ñA0DVÀÍŽ“ˆRù¥¾ö9K­™é×BÀâø¯é7»š¦ ®HBÒ¹'EÀ69MU¨E φ’c9‘£ôãhÓ™¸µÝ_Xоs¾ k¹ä=kÆNÀ$4—Ï|µí*°K[,U@Z-íˆÃVe«TA5…ôŸÛ}b‡~s‰U-[&¡èÆÏ‚¥fýïXdÞSé’3ÿL@ÈHNw°Qç,ø8Óư´S„qz.¬ ^¸³\±Pcúú¯#5&¢\í±/mûF6FeŠ»s1ùÃ¥ŒÂÐ ¦V.2M¸‚\§¢Ð>náñTÖ]Üŧۿ0%ä"‹ÇÓ7Ýtù¦õý*à^Àó°£Ó­@7±ï(¤Š°ö‡.©ÞÁg’µ»fÖ´îl‰;g« MÞÙ¬á àèj ÌDÖˆž]3ßÎ<5ë’'+[obW^§VÜ4€$A‘¹ö\8-„™á~š §ìšÍ¶‹1[§’]Hód+ÃHÓ9œ-͸ì!rUàóu"·©„N‰Ì4¿gJã˜N´½˜ ±hØWÈzòä—ÙÞn)Äš’xj?œPQj°v¾‰#DBéøðýn]Ì!AŒ¡--KöfŲTó˜­º®YßFÆÅRó ùƒN&‡ñ̵ëb½¢Ë¡ª&ÄcA2GˆÕ^ãÈKÒñmã¸Ѻæ&‚i$ÃMŽ/"qsZ¸yÉÍ—Í ÛQ’Û„=~X¢s› –j¡%¼Ãî³Â,dDžî¹9JýúE× Ó@jöhìƒÿóà~-Q2c j“PˆØTú˜  ©SÔîSq½®W«ï?þ8Ø*S ûMñødl[8;`7ûÙx‘±=Ä_àÆ6‰u~‰‡£1ž¤ñ1®ÊMï{yÎ6Ž!e³ž£\Mz‚úØwH„ž£.vVæjÂŽ:õ ÷Ñ5K²™ºl ¬”Çã2€Éi p«Zã=K·I| ð„w‘Âè4ýÕ†$¯Ò_q\Ž ¾3áB)]Jà¡pxh¿0Òç¡5ìVä¡n‡˜ùÏÕ@îlúi'­DŽÖv—/L¿ò˜èÅWO?:©Eù5 ¶vRõêõíðÜ$x…2ÂÌMoáÍ¥çaý•«v¸rîƒ|ðWˆ.[˜’Ùäs0î€s¾Ê=AŸ0´ tgY£;ïGª‘u³p*;W×ÃìüÃaî·°ö^ÎýFvº÷Qpi*Sa®ð¥lÀý®[ýseÁæÖžkB°ÜC÷æÉ.„ {ó·žßì™9: ü²V;>Ç,ÐвÚ)ó|vz¤”ÂŒa6·}C;ýñh‘Š€Ô…}ìŒv¨¥“…ÎäG;&•‡¨+¸¿íÖ¢u½µ¼ù.(%Åg[™¡BU¦Ð@+³¶^‘õ4žìñÝ G*B{éÇ]I¦¶oÅ0&Í›÷—!†‰ D9›… ‚(½Z,bã û>Ö¹II¬8àð³J…ìÏMìCúG±ÿaÛõY§®P.†•lü¸W¤ïåæÚŽãÆk¿ñºvMhÔµbÜ­w’¦lôä]Éùl#-µ F}+^[ŸƒôÙ ½=šï)¯·ûg&?Å÷°ÙWe¢ñeФ;å#£dS|‹k÷½{4GYvZF¶W ÓYý~x©òMP–~°Ò5‹é½÷Љ vØ žíϯœí@únÒ¨¯ØIM²nè2Q´Ñvý¼ýUÓ5ËYS’ŠdI‰óŽG2¯h«‚„mW¥w½Ø¯§º¯§¾²•A+Þ+½Äj- ^–¯E8úâ>Q@VÖÞGò\ãÏ>.³;…Îl¦? Kì9Ài˜ŠªóAÿYXbÒ,ì2”¤Y)¯ÔUJóÜY;¬²î‰´jçç|À(¤ÈZ+yЩùÄS'ibÜï×G9zqžÈUÖÑó÷½È’<Á»Ò{lxO³$—OÏ|˜ghN‹Q„-Ñ«#vÄû…ÁJ²¹6Ø‘ — Ù_0ü:+,MU\ÙùÂý5›à³1›ïoC d•Ô©ZzÄ “Ãy¼>\(.‰¯?|Q °&­pܤŠ77h-ûûbùhÆ­ÿíŠýAMåïýY32l?Ÿ«€Toî§– ­I'ù§”a×þ<GºRØí‰XIXöWQICß’ÒNö5DGƒ-ºšõÙ$`ú]ÊŸp´¶8ÝqUæù FçU“ßäwEo·èÛø^ú¹ÑߣZ»ÚÕaßÓŒ€!ä Ã$­3s@=Žö®t ;26n̶«LŸËõžñùjvçk& œ˜ÛF ÷Ϧ"öß«ãendstream endobj 70 0 obj 4186 endobj 73 0 obj <> stream xœÅZKo¹N®Š‘SdoÂ^"'š^¾øà$b@Fœ²{ˆ‚Ek¦¥é¸gzÜ=#ÙûëSl’Åîiêὂa€ÃG±XßW‹ýñ”ô”¸¿ðÿrsòñäã)ÚâËÍéŸ/O¾ùŽÚS[XÅ”8½¼9ñè©%§Jó‚^nNΖMÛW«——ÿ=ᤠ–AËÕÉY»_WÝ}ÝW…ûI’BZ)Ão?¸&[pIµ M•k2…âœÇ^]µsTT¤~å~hÔS„†Æýºî]+#Ðjuh½i»¡«,¬ˆsVw~i¡¸ŠMÝç0£¢ǖ˺©‡¥˜(8Çõ‡¾¢œ°¸Ósפ ¢-x)Tm‡±¼DÇ•nëauÊ Ã¢é¾å…¥L¥ÑÁ"k }å7® NDÝÞ„ )±6¶y¯‘B["¦«ˆ‚pv´Åº\ÇmaH4àÞµ¨ÂJNøô|$å<ºâÅvœ®’J×´LаÓeCë¦ÞÖ›¡³†SWñ4›°O*Môæ²í÷aZ®e\¾ìûúv»ñû¢`‚Çûh¬”vêê¢!¶-ý¾ÝT]ã숿]Æøa…R::÷æ°]îëvX’›ÂH<^߀!…ŽsÔ[ï!Âý†ã–Д‚¥ýN‡(Ч³ 1@4žÎÎÕÒ2 ý®nCj£gVõ²lš!,9-zÌÛ>ÔØY`†ÿÞûKFã¹¼6*v—þ°) – ®½‘L£5Ÿc˜&§‹.,kà8`“1>,Jo%@ÌŠhä®ko»rƒA‰Üì«.€JX1Ûˆ•G¶¤-Bo]öa¨RaP×ýºZ Aô§N4\(æèoA ¬²à,nAúްÛQGØã#¯­·‹ïÛæ÷o8@ƒ¬P}*CìQwµ‰Ì§FDSÍÛúoæmß·™±‡yÛ&3ßâbÞö>¸b’ L( {qº`pšbèø·ª«Âùwò•·ÑDõ7­À+R06PhÄ€G#øÛLò’#6$»¿´›ëz[îÛ®.›ay a„ ¸¨·~ç‚Á^vƒ mß… Ì"ãzþ—’bhÝvÑx±UnúœÛ†´%'‰baš8zïDÀ¾VȪ޳€|@P œ6âÍVµ£?¨TI)nò~È„ – žæ)ßlÊ}WPÈ Í‰ž¢f€3ƒÖHñä<ð œD4›žZŠm y‰˜èÁeëùT4PýzY‡$j]f޶öóe7ÕéÙ¦ÃMÝùÓSš0®­Ëë&$AUÉ«™Ó%G§_Ïy¹=lWAp Õwõ9Ü8“llË!$äk$( ˆI!ðådZDI|~é}áRª‘ȉ$cÓˆ÷ç$©˜|Ä “éØÝCþ£)‰}NÕÚ`ã¯*È´wAC*ƒ‰1ˆ ívœ8‚dÐ¥°GòBKW‡e½½ Qœ²ðMéEÆ2({Ê]˜øÛÐØú©(T,Ægß6§<Ì(ü‚ÛÞ·sëÆÀ–}ñ¾?œ 3¶öUŒ¤h Š•ëº=4«(PêÇ\á» ŒÔâðÖ²†‹G¼Ü¶Ú!ÿÆÆöÐÍó|ŽrVUÈÔbö»ºB0©“üº ™‹³‘Kêíîà­œzf?Ó)`¼åxg)ã­a¤ñß½ÿgˆ]MldÖ¿A¾†+‘èÓ·[þ(2£)y} àPé6µª;iëá+@(cp-Û-FîcÒ®öHƒL”XèŸ'#ûoC^gãt cEÒãß½yý×woÎÞ”E„¾+?T7uS ?IŽô*¼ÐT`·DJmvÅz·‹JG?,à nAœ26føyWvçA¡jãVå¾,6»¾¸ýÉçv톜uY¬Ïcžèo×—UeB¾«ÊUÕ…AÓ…Ÿ`\Ng@_HqÑ¿…gzM­ŠM߯Ô&ÉÈ™¦hÚ¿¶^8AË(ú3ÐÄ&0¢U˜Æ[VŒa ¤@_,g®XpW@êü¼‹éa W©lT¸ºÊ…‹Ë4”&ó¡Êù¸‰]üµŸ\Ž˜­Ä{­VÁŠw6բɉЅHÇ–å£løŒèf|fú• \³’\ËóYÈØ$v¼Œ¥ °GÉ/Ÿ2B=Áè¾nš(/°ü“,¢Ð3ÏšD,åí Ù ï´3ãJ/‚x;>P¨€\˜q„Ü]ɼ)öŸöYÔF :*;ã$—/+ž°ÌMwo/Zàžg MièôÚ“êþuÂ\m‡Ç™Hy3§j÷ëàk+Ž SBgtÝp>ú(í"öÈ_i.ð=A@6× ‚"AÀ†!õo|ªu¹Kă|¨‚x”&ûþ௹ Ì™åôø,œƒéSU¯éœë2H.NÉ#už0RJ>ŠþyÒ¾xx˜#ý4u,I1å@Ò‘ÜìH®b>½g:„¥©å§\xR âUãÕ™ºz™› seYp¾ôò2L&äd2 ~‹;ø]Ö$⊦™3·È¥8é‡, ͨÇC“3 l²åÃož¶*»5WÍJlóŒYßf7glaWgÆo’¢pÊr8Tá7sQí³«LìW¹E" ^Ÿž©%SÚGqjÍp~\k†Ð3XT½(o»r{;Ì “)¬²lü¬ãjè¡Ù×»¦®ºxeV¥P¬Õ3–ªÛ~ß.tBË⺡ 0), ñR„¤c±løÃ« ˆ"Æ:¤+ž²PÙÔ?EvUVŽd¬/gƒ‡˜fON:öw{ù'^^¹2­mùº©™èÏò6zkTׂs¨=Å«$fw¡<±“ÎÒÑj.Æ,¯«êÁvÃ\äâLA(‹¤ÆÎrSÁ’c´²ùÖ‘=Âý%²#Žzî *+0¦ÒHpÏ0`™ƒ¶«½!$‘õœfzÀùÊÊŽže^ç6楟ììQë²= ‰ç?˼ë? $£MAÁ_Hâÿwº„kÇãt tH‚q£d÷̤¿Ûù[­{kJ…»tódê  r•†M Ê+pÃñþ\[ ŠÖ/ÐÔ““ùeö*ã¸]M¤!©Ky$€ÅH„eöó¸ çò‘bRTpîãÑ篡„™“˜¸Ðo³y”#1F±qxÏIGá*êttÓÍz`¤YA&Íú„Å ¾ô3,ÆNÀz м­CÝ=ŒñT´É)ÈŸU´~^•död:Êîƒ&\ RÅ‘(‘דÕÛmˆ%ž‚î>îÉY/'7mÓ´(þ1CÞÇr%ÀòËéªê—]}2©¡ò‘Lž}&|èæ8èÁé«=¹“tåþTÆyà¾8­ÎÇ Qn:¸¦ÑTû / ÁÙ€hÿ * pãÔ¢ŽÏn² ¾+èïQW>|q¡ŸÜÄ"v\¸sñD›^ ÔgÏ.þ1–ÞiSš\Ì•æèù¬/7Õ>ˆGéPkÄCB=qµîÚ&Ä Àí¸ü1‰Ž²¹m»z¿t’Ó;IöÁéñ«üäé¥Þ‚Þ€$JÇôøT^cB·‡øÕ‹:þJÄëÃÄC„ K*'°ã¬oÊeÐMD¢d\e8º 4éuÔ`±:ûRžušßW K ”†~¨>ß·ÝêÕ]Ù²…ºÅpåG¦ÁÇËYEfò˜¦Í ,HºxR×éjÖïË.ÒIø=…–™ï)F§£‡ðVú¬¥9l¶E¸Ê0†´ñö&7¤í§ùoüh^®bÊT§ )bRže€Šž|œ‚„I1ÉÂUÐkÀÝ2|x† P-Ïu{†Cbž ùÐÊFföKœÛmÛ…YPh\¸bº¥Ôˆ¾úzU…î¸K&Öû$“Ž´Ï˜Â–í&|—«iŽU}üC¸_ƒ'F/DY^m EPß·" G7眕¹‹Ƚ Œ˜ÄÙ ¨œ»Â9¾r¹q¬òjœ¼ÜI]œœýÁ)?÷ÀòÊWB_þþÄçŒ_]ÄFd)èýc_ÞUaì°ÙÉ@˜-xEYüø`ÿ)D·`ÉÛK“!ä弨›V™¯=æklÊùM‘Y7lº¸‰´õ5àåÕð^vWv?®_A€gæ/Ü•|îõØ'^í½¹<ýljûûÔ6¯ºendstream endobj 74 0 obj 3213 endobj 77 0 obj <> stream xœµ[ßܶÎóÕíû¢@§ðÊüM±íhÚ5iph^ º=Ý­v£ÕÚqþú)rH­¨ÝKœ³ÌåòÇp¾o¾ò~\‘‚®ˆýën¶W?^ý¸¢®-üØlW_Ü\½þ†±•)ŒbJ¬nî¯Æ/Е!+¥hÁV7Û«—û¾é†û¶z¸æŸÝ|EiQ–«›¯üM÷®½fä³O¯(s­õ±w”¸?ðI) Fx CßÜ]½„&f׌»ᓇ¾®»¡>øAm·—ê¶Ý½O?½zÙ×wØ@í~˜½­¶·wUÓ5Ã5ìß® —[µûÇð ¡qÁ®}Ût¶™¸Ʀûj3ìzh•¹a†ëÒÍ,\ã¶úéðÐ7CÝÀnÓ;m«ö»êöðݾ¯7ÍÌ"‡fç,+ eˆöݵk#…`DÓ™6g§5e¤Ð\®ÖvWÖ–Õ>Îè'˜Î žÏê&XS”FØÁ(ž Œ××í/ÌWLÇC#§É‚ûª;¶ñÃõ¸Ï×ßP3ñNèÌᤅëóXÛN°mÅd˜îE|«’ùÖ‡~wÜ»æ²\ùÖݽwgIŒñmûª¯¶µ=Fû™¤….aºñ³ªwRUhm 7®)4"ì ôb㦓Õ†úæaŸ…R¢ñ|¶Íád2BèX— u~ .ÔlÇŽO]ºÒËÌízŠÂdp”,¬Û ~"x}êAÝåᦡz̨ '‡H €SâY'ˆ*èA˜ç‰€£À%v›P°H¢Ãxj•)¤ÜjôQèz}4be1‚¸zÇah6Þ½•$稲?vÞ7„ŽzöÞ|SÑyÀJ¦ûß%Áð4ìëï~Ðs!î>VŒu¨'_tÍáÑ;˜° EàÛ…\RÌPêbDÐß5wa9:’U†ù›nÓïÜ\@ ãžl¢@˜Xo ª»°~¨¬éÂ)B’1l’ 7Û}[oG€ {꼡²ä“E•-&D›½«úeIGa'6°ÒáëÙ$°6ÁΊÛáêx›CÀ(šƒ£Ñ(æ0"Q\÷{”c¨Ð* ‹ÂYgµ;Ž… [ÔÀø)ÒNŽåªmç3'ÁaR–p¦Õ„Å:KSݶõ!dR¡DŒÓ …õ¯5 {Òèû~ClY³§|Adޮ޹zÈù 07IS†:ç5”€Prª‰ýù\^¼)nc¾ò^sM³l 9^‰l<æåp¢ÂÉÔùÊš©Xèëm,€²1„žÍ€ÛçE3HÅžZ4PÊÓ¢™•=³ä[ä\BN‹f (­ÝTíîo†Ç­G›aè±M,¸uAÍÙ"¦D›ŽÞ¤8"·î?,dX@†/fíáR [dJøÎÊ<7ù!kog¬eØÞe‡·å †¢6š¸’ÎÍm‹ÜtŽ/]æè/&N°ñT¡9&ÒÈtÇpFÆ BK «.Ø8˜cґݸu çX4pÚôŠ,j\B†£#èSË“³,%èÈ(Egõo^”¦ Û¢’Œ[ê $~c„ ¼ò—&”ãöåu8‰´…[ž›ÑÈé‰öoŠt#˾þ†OeÕ¤Îþ‡ü.a è¹êþvΔÇvhömS3¥Uå'R+Iq>„ïÇ´-…2Jñªíä¦ÔÙ¸,LðË7°åœ·ðy¼E¨'y ×¼¢K\/¹‹L.>ŒF›dΰûy|~ÂxÁ¥@ ñ™Ki¨žæR¥âò¼K¹’Í—2I$¸TÉZÿ¢KÀ0Òî¢KIJ° ¨_*të5TzÕ¾À6 rÖ©&¾L8 •Ÿs¡#ŸÀ£Op!ž¤³ýh9GÝßó1|Žxo¨•0¿‚oÒ€õ¾1åe¾IȘRç/A…Í¥úãc‹åð.2 ?)#Ž…Ÿ$éOo€’»ês¶vWàm~²¶¶¢S—¬¬™á?8½R’̹àÎ\OoõŸqû*ºÚï²úÒ…ÐÏîßæÉFñtÿþÌ}nDM­ÐÊö á$…|^³$aû©dôš¡T³Ú»q™~c—F°sÔ±\uHƒZîVºÞø˜FÑ~˜Áu,£O£Hd+Cзvü`ørð–ïë§L{k‰‰·_ŸHªþ÷ÇnÒàÍê|,7å&eÀ¾®# f'lk‘ƒRƒú{w[—¼º…¿Va³ôO.5O"II0±JXh,WòòRê6=œ„dƒÙG’ý›K¼©‰¤–Å›eÃXî]0ÊœlFʢλŒEÀ‚†Œ<-òà%,(5d´o¤¸‰uoPç(Îñ 8ü¶éÒLT¬ nÜk¸¦ Õf"°ð¯Æ¿ÒÊD#.⛺ìmi%æ Ë× ®4]&ƒ6[Ü6®Öß*hkƒ¯ÌÎ#½{`ÓSËÜ=Ø2ÏüîÁ”f!ñ[ÝØ2GÊWá‘|O`B*g7R)éeâõD8±H\©øéyìB…œ«“ÐlÃc MÐà4%²ýý.Hlª@°¼Ïç­ãUtRy9wƒË-WÞ)è”笯s…h柮RZÝ–—¥ˆ¶Ëyöe†~OVžYvYß·"§Êbr|ñ}’& ¾âú¥½„e³ÓrD&€3ðD³kò€kI£œ µZI°­(oîFD@Ìíˆ×#Ǫ¤®—p ±Š÷F'0‚\þömWWýúÂDsÛÖtž©a0¡ü«|mßݲaìz¨öËN!™{m@5^§ŸÄØy‚WôõiWÛþei˜¥«B_½Î…BÉŠD±fëìô5Á1^…Ó6è+m8³IËíûÉp°?g(8*Kåïi-*J'‘­ @‰‰/OªkáÔÂ&ŽÉ# 7Ǿ÷U/ ~ MÉ{KÆ0 MžVpc^Çþ]Öd¥}¯‰·y“ N/YÌé%>/Ç&»;ŸÓÓ|ÅoqúÄ5YÉcQ«çpPöÑõ<Íèä¾·fáC$‹7ùo¼Îrªß`V´Ë÷9{3k:ÌÎb½Ÿ qn 4³®Ïs§æ^ àEÉBÀœÁOÿ’e\n0­ûuˆ1“²gò2ýkºj€þ!Z”öß Vç¬b‹5 o?ÉbßÖ‘x ™·­Ý2OmëÉ“érrÁ_RÇš o¹<{žØÅ³'3àúé™Ó–=­žà6°%fkˆs[âµÿæ±–8˨íp¾á¯9×X3[GÕga¬îqÿÔg‡x£5¦Çt5þvÁaØíGé^„†q–#uù´HÍŒgU%u÷žïÕ†vIv{¸—T%SÌ= xöe)›½¨tYO Õ(÷ó¡Ú*OBuJNÍ"SÆG¿¡ËO'ÿýG1cå 3†¹3X|ðȉö*__Þ¼>·ù‘/ó!F¹e>”ç–2µh  )ñž)ë€gNeR|ÊðÂr¡E%Ï´-ø’…Q¶p½Z||Ô)TöïÿË­.sendstream endobj 78 0 obj 3689 endobj 81 0 obj <> stream xœYmoܸîg·?bá~¨}—eø"ŠäSàzhNr]÷Ãù>(»Z¯|Zi#ióÒCÿ{‡"9”Vò¦mŒÀÀhHgžyf†þ° „-¨ýñ¿W»³g¬—…_«Ýâ/wg/ß1³0ĤÚW¥uê•›¬:”YSt_^9m1²"…“®½ö¯Nel¨=•¦jhHBÌÀ¬Z[!ÓDQ£Ž­Ÿ7¶îsç1J¤LÂæïÝÅ•4henEŠ0#DبÛöB–¸LXúÑ™š*Ê“`jyè9œAEÖ›~1%ijÌdG™èSÆ´ý=YBtš0/Üæ‡¦h»be? C48Ð**+Ó„ mÂù]þ˜7½Y ½ÓÖå¡+ê~H‰aûM}¨Ö¤3°Y…}î¶y¯¼L¨&&á‹%ãîÐÍ\, aL =ŽE"bAÆâwó»IU°ù_.6†qØÈ‰®¼sAOâL­hT>Y¸´TŒãÙ‚qo»zß;‚JÜÿŸVdˆLF @³.nJRs/¬êÎ Á.ŒÙª<¬ûDˆ ƒÈ÷wŒ† |qñ…œá³pHÀÇp`FÀB¯h{©4cB»}™ï\€FT‚æu™E ññÓ ØÍHÉ­O—Âs±äŠè¤W–„;EɆŠÂÈpÖ:ë2²Û·saZÕ%$<øÒÏYÌ9xG…k;\B%ï1aÑ<öú§[~ÎM@ÍJ—WÃz&ë£Ãa”¥'Îiòlí5cN*º­7“i„ìªvËM’ é‚Í8Ñ‚C5¡[fÑcÇæ Yí÷³LÊá¼ qO”Iƒ'®7á&2RVÈ(ø‡Àý}Þ8$¸Š@ÆèÜ–©‡"aEiXþeï1G£»}z& EÕþà"ƒ!!m³Ö' O%SûcT‚Õãy6ž|hóõ OdàŒ4Y]å¾ÔpŽêí¶>”k¤C”»tëë„FC«GW4IeÂWy`‚Hö'p!`S®¾†‹AJÿϸ•t¹+ìímÖ` ƒ#–BôZ©?Tµl d§U]TËûº|iÿ÷w´EÜ石 XAv{_Ì€^b%ŸÊÚ—SÙ}=³öf*›uÁ’C¥M©ªÀð1«0"5²ÊÉtå1];ðyçÖ+B5¢¿,ªSÊ2MËGuÃæA¬>«€al¶ŠÎÕ= ç&+‹¸ö©á…”`§±:ºÚ6$€E1‹'—Â@Û—9æv”âÜþþP¸^ÊNTRýñŠTp1¢¤2fvì%%á¤çº¹ç[ÇáL‡ó…23ó…¢Ãùb¾Ñâ–³µÂFK}½Ñ²üøòm[Øÿ÷ÓFˑǤãa6/¡ƒŽçºò}Œb±¥$M1Lë¢ÉW]Ý|Áv%ÎH!•„$ÎÓsƒ*4Õ^39¬”ìEëò¶.?æÍuÕåÓ¡ÙdS&\ š„Hà©âlJk˜´h$Ö] , YÖ~7‘IJÔúÜ”TO wB(¼ßT$GiÅ¡¾Ç´‚ƒz) úñ evÏ{G=Br®üƒkQDÀ ±CiêÃãvÎ÷ýã h{{{=縲fè@â²…†ËÁNÓÉ.$ ¢èŶöƒæeÜ;¿\UëÜ%+ìÊctÉør¸Î³Ò³€Ðøö†39ƒl0“ï¼'%E¾_T@¾pÛ@k–R†ƒFìêy̤«'¾:‰˜ž”à’&’ÒÉé"QüÔ [†K“å'·‚?ÚY°u Ð³÷1ò)òÒs#FòãgØqË @ QgêøqsÄæÏÒU¬¤˜ èLä–d¶Uc)$.Ì*–çü#Ô/j €;Å–á|–Yú·$–)‡d«™FŽlg:¾ýyïy¦`<d.ù× º*êÖŽ’»?»ùK(龉)ªÎÃZK<ÜŽáÓ¸+ÊšÇÕ _߸Â^kµÅ©*CPþ´?þüËÃ¥38]p9l¡~ gk¼Ì± ›‰=7\³ c>t*Ø‹´E¹ÿÞm¡]\¼ÿJ,œ_ïÛ‡‹óM19¨œ!üóçÓ`Í”í¹»öXÓ›“؇½tjNQ0„½ýÄšüábzÊÃ¥ÛÑ@–šdtAhêÜë>DJŒÔlÀ«ÃîǺl_9+Ý_?F§¿9L‡5Ó–팕Þ#©÷…ÖÐèÁ,4köº>¼wñöøððÍçh4\ávZËëò0µ²+¦öÔÕ¼åóvnêÆûÑ(Ü“fœO¯è÷3Ò+ïöþ›´uéðÛoŸ.sSc@‡iÓvëï¾[Õ®•ýÃQ`¸«+Yá)Ü+Îl¨¦(ªOÕ‚HÊéÊÁŸ~úez¿Ù3ªsïP#<8‡þ»ßÁÁ÷ÆšîÐT—:Š·s伕pŽ7ܾÔCÄìàÕk«õ×»ÅßÏìÏ1Èöendstream endobj 82 0 obj 2359 endobj 85 0 obj <> stream xœVKS#7ÎÙ‡ü†¹ªl¡÷#7^›P@ˆS9,†ñ€'™‡w9ºe:c’©y6œ„,s4ÓF°5“ƒÛò±ì˶(ׇóÆ#.sÄi®åx„3báËÉÁGvø¬Û7ëLi¨·óÅäà}@D-˜ˆ¶“¼Ï—]›+JË(+y»œ㨉ÆÛàÜj‹Û‡ªÞ›%ÌJŒ4 [¸ÝÝ¢‰aNã–ù²ô!)1¨h|îêMãíBI5¦’×O]_ ËæçqM:¢¹Â3«~´Yb¤’,Ú:¿(Ån[lŠª}ò®9&¥ºê«&¯£q…ö5¤2T]ë{!aÉa2Ÿ!‘X- y`Š£É.&±Þ<ÌFãL8K´bÙŒq¿ð3æÚpÜœ/ª²|”‘:Ó”ÃÒ߆+ðÖž(B!ø›hÂvJ~•KßS>0Uæ¦ïžú¼!þ„Ô€˜tÂA !Œ}wÀ)¥w‡~»D… [­d a*AFXõ*œó+3(áFB) ñPü~\:Ÿgy8äÆ=9f€P UÛ Òõ_ ØÉÅäèâ*úM99ú;c“£_Ç_'7§ð¹8Ë~˜œ_xWßàá[ÒD2À¯p™†´¤ôdÜ aEŒ‚âÍ®[[M¤ ©é]À/´‹nk°¨~,6uh¯ÄR]µedç 9¹ãÀ¼mm¿æ{±Õ¬#ÕM*ÂYj¸CS×D†|Dëcd˜HêÒ5Û›cäu9¤›$n¾O0ï‡jäU õuC$”Ø¥ºù&@ÁŒÓú¬Z}9‘€{•Q›V«:À[É]ÌO#½é¶ÄŒYHI@‚¼Ú-À9\–÷\±-À_ᬠ¨%šç˪_D³’)ÿãË‹ëÙù_·QÈŒJźö®à0IðUY¨ZÐzžbvm”w¦èîý«Ò‡†ËÑËihôŸÃ4ˆÆ‡ªÍÕ }Pv¥¸^ USý—}òÍ÷¤Å“wç}U”Ó mÖ…Cmcι»Ã@öqtØ7T÷¡çß1¹àà[“‹ºw“‹§RÙ’ m’‹cˆÖ<|ºÜ,"`èVó÷sd£o€ù^vúgW?cï$Ôíud7ÔTidm ¯¬²È§"0™I£q_^£Z€  qÓÑÈvh¶ ó4ˆ£Ç¼¨†<00 ÈÇz-B$`i*×#l®«áKdŽ•Wj¯:f3{Äc!v@•0Ûi»GÅê²Ùÿä±ÀI¦wk>“ÐVÎÞª6Ó9ë¶DèÃÌl¦K¾ÀœÇ¤$ìשúC€S­Ó”/ºfU—/Õç?µ©6_¬¡ CîK£ âÅÃð¶æDÆÁÃÇPL¡ûŠqjG›ywðKƒbý\Õuà žÊÿár/@“-qŠ/Šíóå9¤Ea¤£©«‘;r"y$‘’iöwQ4GXÚ]Ñü½k‹: ÅðÄ‚hè¤|‰`·\àý½âÈAÅN+k‚—€·fü[½‰˜·[ãç0¨œ ¬%rMQ‹Õ<.òêµd 7›‡ ÆPS8ëúE_17-Ò¸\¾ëï0 ¤3Lqt;>–¦(24M‡½O%i_5ÚI!–tð 2rTQßRšJãÏÿAÌå`endstream endobj 86 0 obj 1291 endobj 5 0 obj <> /Contents 6 0 R >> endobj 31 0 obj <> /Contents 32 0 R >> endobj 53 0 obj <> /Contents 54 0 R >> endobj 60 0 obj <> /Contents 61 0 R >> endobj 64 0 obj <> /Contents 65 0 R >> endobj 68 0 obj <> /Contents 69 0 R >> endobj 72 0 obj <> /Contents 73 0 R >> endobj 76 0 obj <> /Contents 77 0 R >> endobj 80 0 obj <> /Contents 81 0 R >> endobj 84 0 obj <> /Contents 85 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R 31 0 R 53 0 R 60 0 R 64 0 R 68 0 R 72 0 R 76 0 R 80 0 R 84 0 R ] /Count 10 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 52 0 obj <> endobj 59 0 obj <> endobj 63 0 obj <> endobj 67 0 obj <> endobj 71 0 obj <> endobj 75 0 obj <> endobj 79 0 obj <> endobj 83 0 obj <> endobj 90 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœT}Pç—½Û]ÐÄ™5´&{—T,jÊÍÔÀž=’ EïN¸ppx|˜ñ+@€‡«ÏÂñ! \‚ÇM‚$¤f¢iŠI°™)¶ŽMJ§M2VGŸ=_;vb̴͘ÓÙÙ?ögŸ÷ù=¿†hBÃ0Y©i™‰†˜dcRVÜâà‰^™Ï(…(³^šs3*¦=þy`ò0î~Â2Œamv²£Äå´å”飓ª[¶,AŸXduÚrÍÅz£¹¬ÀZd.S?ìú G®ÍZæzLŸh·ë×ÿ(Õ¯³–ZÖ¼Ù[“E%åeV§Þèȳ:‹ !÷';J¬›œj±­Ün^_DÈ£ä’FÒ‰¬"äi²š…îAæËÁ Ž}¿ñ€Û½{ çE¢—;Kcµ‹LÜûK8 CðOèU ÆÓËJ•ˆõki5Ђ¬„ú˜ dp2¬ÒgÄ¿[Þ¢!ÉÆ‚§lR#†ptùKZÿA äéèyƒ‰ïvýê3{µm<’?Ž;â-]!Ѿïð·Cï µÃÊ| `8îÇpVéC‡ˆóÿšÆÑ„øÓyôÁéE‡ —¿Æ¹uÓt‘Μsñ¼Ý1¬ë:þÆAÞƒá’vGg>dB¶°¨@EI…@×ËåSžÑ¬vÇ×iŒhÀg¹ÞòÎ÷AÀ‡oü ¢ôØçt~ZÖ–Â\Ýiž&þÖ­=÷NmPüâ‘7ÇÚŽðá™4I£’³Ö˜L]§ì: “:V;Œøä, ]Ó¬’…›Åîfè=\s!ç”Î<’q ûó(:—ê¯Æb Ƽq½½u+ÔV5Öo«ÕmNY]‘­VD5âüqÝ€Æío:æîz½K†à¡áM¿"n3™cDUÆMK}ÌäµÏQ`±H‰‘“iØUîÚïÚ|ûÜ ÍÒÖ»*¡BÈrên=áÏYKY+¤¨DÓ$½9ð‚ o¦ G¥%^¥…9W]ò ÿ×®[ça¹èkÁ%8GªÞQS .Áâ«ìíõµûG3û³a3˜«UI°]z¯$îmdœæ áâé C¸í5.béõæ‹,ÎÃñÍÍãЪ²"½ûÙùÑâáí{um=»ÛÝõuª¾· ¯¾xèЫÞ×Ùd©pUH–ž˜º7y«Jke°NHûði\‹Oüù Ipî—²{ÖÀÕC¡®ÉÔ²ý(tÀž¦Ö} kãaâäI˜¸| 99`ˆ×ÓlñÓóÛ2 ÒUº#óÇž; ­º;ÁçF¿Ç$ Ÿ_YÜÈWÜ·ÕôÛÿÏ$ÌÈŒIxWt2Sê]÷°˜${L`†™kŒÎŽŽ®^˜¢ƒü#Ë>™<1>)™3ùÕEÅögà£nIí²tGP1Êè\ ÒÊbi€ý/ æYì6«uÐæ?æôKt%]-šø3ßbpBM“~87àQ‰áUäµ>E¸ ¯+©âÖ³øR—?õrï»þƒ§†»zØÉÿä£â=“0%KMOp˜Ø¬•yc Ó)þÎ|Ê—£3ÃRÄï®îcu”>øøn|{käD§n˜®H£œwtywAµnm´A·@™qqQ‚«ðy‹ïä_‘ ~õŠ4›Î»¼0™ ˆØ|`÷ÞIÚeÎÞ /VB™[0ñ]púwÔUGRó­jWvjÿ&s… 1j4B48Õš/xøW˜g‹§± ~Ø{ÁãUMΞYÉ71¼qöe—T•M禚…¿^UX%U]ZÕºb ÓX‘-ü¹ÌL>{¤«|ù÷Jî¿ðÛ÷’öÓnìähN /‡"&…j:Ãç¼æ G¦;ü¾¦ðBþ ‰‘¨­ endstream endobj 91 0 obj 1602 endobj 18 0 obj <> endobj 17 0 obj <>stream xœ­Y XS×¶>!’sœ•x 8œ¨užê<´ZÅyFqVD™‘y”"H²’0ÏCƒE¨Š¶ÎÖ[km+¶jµN·µµµõ{ûö hÛ÷zÛû½÷È÷ñ}IöÉÙ{­ýÿ¿ÖQݬ(‘HÔ{ÙÆm[V/¿hÓ”ÉÂCùA"~°?DìŽu/íIÖõƒGM·áGõGнՋDKWm_ºÇÛ'|è˜Ec‡N™3gÖP‡ÏÐ=î®C׸†ûx¸†“7þC7¹ïñ ž4ÔÁߨ“pEØP'Ï0Ïнž–›. Ž÷ º&ÈÃ34¢äkV;Dº¯Yä±vQ°§ãâ¯uKB½—†ù8- ß³ay„ïÆ{ý6Eú»n^à¶eúØÃwÌßkÖ„³'ÆÎ™ôö[“GNq™7ÕyÚ˜7zöéV/êÑ@õßôMíû°ßª~§ûÛôWÚŒ±1H·IóLPÎ:½1à6[7»!v1vŸÛ+Z9ðàÀ_íÜw°ãà ÁíCú5äè›\n%w^V »7Ôj財G†Ív}øäáKÞ¤GXý"Z³i]Ÿvk0#w=Ï™EÏ ¯LbþÊcC%ò‘ñ¸?^ ̉³*«NÆï§@á7\Yâ­œ nàóÀGÇøWÐ7µroYGí­’¿Ë…ùó¥’>íIäW·™ùz´;ˆùáí«ÙÔUV,Ä‚R‘Ý;¾±‹Þê·IÍøÓåš#Ú0C«ªV͘ém¡¦J&W£•G¶Ö$§ñDMšViö ˜ó§tÃA8ÇÕÍ*ÆM;B|–¼ŽÁF>—EÖ¸ÍGHúübÕ÷B?ìj,½ËG˜EpWÌOCØÊ˧4Å@î® T‡C48k#4dfuq „Â>µ*5qVÛa12¦åªÒ!ݾ²Ê83¢^¡Š`p×hÉïAú q"»Ô„x_EBÄÆ ¥« Â!ªÔœžm„b¦2ª8<2"!À¥ÙûäåÃgÏVpdWãu“ÁÌ[7GmÚ.¯¾†<¯ÙJëzÊbí"‡åä€õšSÚ*¨$9 Dd¹ŽÉÐjú§ë\¹œ·É‰Ãñÿfårõ~m á˜ýâK|õëa!8ïZÃHoüLãarkúãì”í²>¿ˆN„œ–›PÝãF“î -Åóo°nJE$0!¥‘Õ•ú’ýÍ?ô.îÿ¦p?<àû1ˆAkQ¯ÜÜ} LR¥)T\क‰^ÀlžvÍ@³n7ŸÎ¹¬ö®'¿/Î1ÀÜ."تæ+¾#EûX6ɨ$1bð<ÿ I't”t08°æ„¶êà„ª^8Ìh©’ñ )þi•‘‘” öy ËNÏCêöÞvšŽë’.ÌIuÁ!òú4*sý®*¯AÆWÐ Ú¼›\…Ï“„¨S¢qPÇ;’„³›Ö„^5¢Cf›çwй§ ŸÙJyÊ[±HM×i³Z8ÔOò´~ææUÛga±ìQû´ìÚø”¹ÿÖmü×aõz÷´ôçWÐ,AöüýþœÏ°8_¶ßbqÿÎúA•hý}ó¤å‹·ÌÑz0ñŒ"໋ùüH6'´Î$C4‡oHäx†µI’ùcY#²I$¸¶£w’TjŸE ‰îHJ£u¨$ ÷Ø» 3$¦=$}x¥ÜÄO6 ùÜGÌû!_ ý÷ÆýÇa©iö§ñ¨;êýÃwHÊáìÌî†]†àã¡Gá"4ž©8Zu¼ÅÐGáHDåîÊݰ<Á6EìŠpÙ¸ ˜NËͼ½y5Û{•]µ•ÆñýÞgWÐhtžµ™^’œuBÆÿD㯇ýi鉆ÀÝ•›áÃÇbK¿ƒ$Wލ5É¡v¥IAªä1;\"vƒ xW† 9¬< ‡¡Q{¡æ˜Á|°î ÔCsœÙ%/†D"š±PMÂæT‹Q\ûT6)_­‰"Ñx׿FRzu‘º\©QCÓQö§H+¡3R5êt?¡ã©]N¢FL!d•Éøt´<'$à£Þ®ò_Ø®õXã98Ë:æÓ$"×ganŸH˜æ9¼_Ü>±}[Yò´4HLæ¶9x5l=9ì±#ž§áÝØÍÄSÐZ4ë;$CL.d%ÈA±O-KÆoƒEÀ¬Å[ S¨m9p‰LÆ£ô2m<( )AÖ™¼ÙŒ&yûæP“MÛ5T|ÇVú%Z„²5§NÔœæÆÅiØ÷^2ËÁÝS8Xo è™Ý2b›7}NpÕó§ï‹¤ã¾ÇÝæ¹îŠˆ”IŸ^íJÚõ,Å.Y‡Ï+ª9 iÕVBœêŒY')Í¥_ÓH€-´à.é*4Še:0|¿é)ÁóÖòàÏãúCâ²Üdmj’J‘¬’ùŒ˜û`¸ïo x®B£1°™hì]Ó`žçâA“t¿Ð/¢²}¶Iï®çâvOô˜E»ñxÅ•xžˆ§c7ìŠ&áÉh)Z‰Æ£iÈ…Ã_á¯Ùñxàרå£QݹÞ\Œsp)2ë-!€økyzîñÒgâúöùìš•ÍEƒÖ!'<MÁóexÀ?‡²Âx°“.žI.ÁµˆS‹¬Ë™A¤‹£½·G;­e)A‹:S5Ω*¦˜ðþ—|¿‹,^ögæÏFО“­¥O«Ü.¿33ÃÇá7pÿ§£óñá#5F™ù³x ~ÑAa ñ~ÁÎÀ,\û€DºçÇw>ý¢yúfn¦tªŽM¿›mݺúø¾-åG°HbÆÝ#ùú½÷ŽêŠ ¥ˆKL‹N€P&¼8²ª¦H_ÑèU·yÉÌÍÃ8LÏõ¿…o¾Úë!M‹¶š šãî¥Æ%­n„V¢ËBTÑÉçb‰®±hžõBԗϾó5"Ã/~߯H¼^÷)‘õƒðÔÿJâJT¢òÎ? i0l»3-šöëÍ.˜QÝÁ¾l7‰Û‡ZìK(ž¾/ $`ßÅ¿ú‡ôÓ<¿™2* •Ìû㦠I'Ó³4ª6cc’¡ëŽ ¯·gx ƒO‰§¥ ŠÖ¥ÞW_ܳ•C ÚX4‰pûƒÏ³´ ÖrJud"„0A†8c©)¿¶Ö¿f÷Bïå»ã9éMdEcÙ¯|høó`òJìVŽœÎÝ-GPn­‘Ÿ¡…ŸÕ·ÚJÿBÑv:<+¯ÒÔ™dÙùåÕMÀ܇ÑáÁj¿¸PYrbx;0c²ÙCA‡•eÀ<¹vífclch¹¬á@CF)š Щåi©rHdb ‹s˲ÊKk="w)Ü\9×:W]0“–.}w—ÑÓ´W–í >Œ´ü <Í‘Ž1~»ÁYôýFÔõøéT[}ü©­ÕÜæêõ°–8Ý¢ñKßk†ZH‡ò=ƒ¤øvÔÒS§l<ª“—ÜCÝ`ƦÅÛÆ YÔ\èG²ØbFÇ-YÜhBo >´}.ÛqüæÀ¤ÈÔax $X¾ô(¨—!õ=úÛÜWùµÏw<7evå·—Ó†bÌ‘ü’$ª _ù™e6PþŠ%ÿl¥ÚÌÓnÇÂ"f«û¼YÞg¿Šâ”êô}À$@J´ ÛÑ1’—¡Ñ”•qZ-hKËŽºS‹ÒÇÿöÉé€ý‰ù2ßZl×lFzsCÞò‚së+ßCVSüµœ&)‡Ä)€Œ2Ù´  ©*HLà”iû’Ò”žÕnGðÚÇsùŸâ ªYmHµâ“xæµe´h­¨MpŒb~'Ê`kñfÁ.ÇXoF~üFq;Jþ¿%ÙÅWƒƒ#Œ$Q§¨•¸¦{H¬ç?ÿ¶ÒVƒÂÑ åÓPùF]®¶ôÀN5n‡§’pˆgM6ûô¶`Y^Ú©Äc铪”ý)Õ^†\b´˜ÅÛÍ œŸqb3·þŒòŠºA› ÊWõèl©Ç,6/‹NWwÚ¼çŠ÷RÝ¿øY=[q{–^ÖÙŒ^2£–·õ˜oçd»:‰ÒØ[OXðÛn'àV”@ÿéš¿.T„ZqÑŸ¯ù“¶n¶iël£øA·Ø)4ñÚF‘A4ý«p,¥§ïX¶pVZK+‡¾êú¦ ”Sex=&£ ­¾TÃuê>é‹¿æÃ,€€Ç­?¯$x‰¼HL.¼™#0ÅPÚ%iƪÔp(áŠÒõ…PÅTF냂¢#C¶|tö³KWqÒŽöIÝjÂ*ÃÂ+Âjj**„»æ—`nŽ94ŠÀ„² l"Å“Úç°H…#H#SˆfÕ¡ñPJ¨%WeH9„3$†{ ~8çî/9¬ûŽ“×s8LâãN‡ÂBG˜¤°4=PRË‹| ñŒNß38¸Ó¼!êE9ÕåÝâ*…|Í%Ùò€¹–|UÒ·t]ùRÊçr!B.n‘L‚[–\„Ðs•¹ &MnàÏÇ‹ùéè›S^räªæõ¸ vjcãߨÎ#}>þ7M>gÛán¨VQ@è]k_yJ y¨7¨Â\†tE?‘]f¼6µ ='=·Ë’àÑ5(„°ûU1jBŬZ›š :H¿~!7ûò©f­AØC 2‚H'¶F/ì¡L+‡ˆŒOLNÁÃp;>œþCî¯#î¢öC“ºIõŠûŸÓWÞ¿9¬yDÛGŤE‘UÕšóZÔ@ºFXåàyZè¯HÉÛZJ§Ý,L‡bY<|Ü;œqrâøþQ%½i< 1X„#úá$)átzÈ&Ý ëà˜ÐTy«w¨ö€ìÐz¿nª:AÕ• a„ô zÀ–ž4Ô ‘ˆ Ùˆ€@pÑF W4¨ÑäT© “qŽÝT›–¯&ǾêèÉÕ[UaÉh„bUnB†"/ +jNµ›€ô©ùBóýj}gòÒ`³Æ[Xò•ù~ÈÿÃ.#^—,$O›™Qøj°û7¦Ë…ì @×™ÐNnufsIûJößdå´Ö&Ò‚6¾Vd¡{7Ƙ‘Ÿ¡êá{F¸¹ã1šuí†ÉV+G÷>gÓÝ«\[€1\,üRöAèz}¨Bî›v,ƒCÎ4‘ÇCÞ‡¶ïfÎRçú˜ÊêR}e~jÝN¬ªþD^-0'ÎzL•yE•oU.Q®X°'t ìbÞ~zùêñ¦–2.ÍfGÓíqÙîVòýæ;hN&' ÀÐ>LHÅq»ˆ¿Í6VÕ|$¤Â_å®!¡]¯ RѪ6„@8$+*^Õ±×oൊBKeÔœ“nåR‚’°»3Ý ƒ4O×ñÒ.+*CY% ÍÈ(d:›¾®öŒö~‹–#‡ììÓ§¾Ô؛饩/op‚=ot“:3’ vß>RWq«ºþ$ðE4bZ ™I9 hà‘‚C²Œëá eüHo‚½éG­dk?4B'²ûüIÏs§U>Ã]açÕÈê;´ÚˆlïØÀ÷;Ì(êé˜ùMh'‹zÎy†©»c}¼9´…Ö+êR%¢¾?*ÈTf¤¨É¯¦Ê"“¶G.'®g–³!Y§"·böAr¬ Ÿ £!¹0K«ËLçòŠÏ| ­`Ú™]ì¥õ€mŒô%‘0Ç0×0¯œN§cÎëHRˆ®+1UTĘ|ã}Rvθ6uCÌß"©@÷¼Ì€¼}gD Œb4‘¿Ç^;¶Û':8$¤$¸A_˜›Il´V£Ñ£…ø4¿”E«×È;’‘–‘wçsÔƒC›ßøß\Ö©UX×ôrB“šÄ(ëØ¦q/' "#‰ÀÈy'‰‡(½Ê óÆœ¬Gôƒ£Í­«hõcÁŸDwH×u<+ÁM†ËÿL­y1m’bÕäìU=ñÀHïàÈZòý½¦Kûö…ë97•"bßÊ„²òòâýç76;LÂ=·b‡%¿¨ýÑÐMK ü‡7óÉ™{=óÁü 6G0+§IpP¤•1¡_ìF\¶®8çrA~Vf±( r—ÈcçbQ„ï<ÈË`$A²Ëñãp,—;EÃûº÷³Ï¤—Þ;z©ËµàM0~C¸¬˜ÕhÔñ«‚Öîr–)ä„iàäߺ…è+a‡Ý_a­8?3;÷÷HzJ4­=‰ÅCÜŸþkÂ8w4DbAR{_‚¢“áGQåÑð“¶Ò›h¿“ݹ?í”0?l¾~ãÊ–EN;}8cûIã‰V¸Ê<žzvòè·&Ek]š¹¼ÄÆP鬜±aÌÀa?.ÿYsç òcžÍ\”!6wU3Ú•­Ži xÏ¿:ª%Ö2 ¶Ì™±èÒsµW¾jvºfÓ:äxN¨TŒj#{—®⌲…§1ib> e³ÆŽ´ˆÎhx|·œ!ÀÊÇÈã¡@&btõ£q›;×ÇlÒæŽf×”˜ÃŠ"b’<–ŸqûŠHHâxýþ‘ÓMݸ=Úe7çæî Üÿ뱨ÛÅÃÍçÊ9Üï]6v‚ÿåèF8 'à ´«N,¨'ÝPÝž—|¿ôÕ°“™½gÜ´Wýý ¼£§Ù?hÆ:  ®5|Ÿÿ¹·ýAÇ+»8x[1¿²Ý™Í –´L^RŽ<>mß>%‡ÿþ¯…© ¤ÿVÙËs’ò ÓssuÂ…Æv;Ëä?ûŽ˜ßn°ðEê>ŸîüvN±+8·I~KSçÁ;° }ÊáùGÞ¾)œósÃÑoj¯e´Á-{㬬3E+¿á<\«ÙgÊPÏÏrLPW£ËÆän€ù°šx¸eòUqœ\ Ë±l0"l#ÒïÏ| 9™ÐÛÂ[i«¼Ý$3G«ƒLËAö¥¦¤(¸mË–/„%°Æ´±5ªdo‘0óÏÂÝqïOÞþìÆÙ¨[!´ìm•}èu2µ>‡SæÌtÚ®cÓ?§$%@ªpþܤÜ\mz^6gâ'±‘+ ÐÛè §O9 ÇÔ–E[dÒ»rÞ±cô~GౌEôºû‹ÿÛm9‹ôò棤Üm?£–ölhù5«¦Ÿàõô$8­•LGÑøÄ)œŸà^ïCyÝ·¸W?zŠ2¯Ñ¢-†/[ Ìõb¤ºxpi4‘D,-µî$Tdß„&òoŸ(n_„¾`‹^qiÇ·’.î,’ñßàÍlËÆÉ:þ.‰{ŪÂvo¢ŸþxœŸÑ®Gb¢³ ÙPIj@Ê®}q)É+HÉàå’ÏÑdÄ]8Ïì‘dʸ¶vxkꆓ +©Ï?\]铬µ’+ÿðLã9`y{Î;Ûæn\#ñ¯\xèfÏÓðÜ ä@@Ú)˜&~[Så¿O¡àÔ*Ц×f}rù’,_ J“•šž*Ÿ=÷p¬p9R_ZU)æÿæ2 \']ÁˆrÔã‡K„P·™?¢wÏn+Å:‚~foWû˜ úö´Æšï8ß×UcÖkN:Cg>qµ ˜ÃïGLIT­Ù% رGªNV‡©R Y¢†}Œ´C.Ï‚î¨ävã²±xðÒÀ]»”œ÷‘Õ§špiÖ†ùÅïšüd¡>ýx{uÛ›îw¾ ˆ­º‹SX¡€cJpdã‡ÖšháA´õEý ºÎ˜¦S웲 K×q[±U"‹=/÷~[_À}ï­Ì&3]—eÓ$ÉèŸb~!ÿkÆÿô{.ëlÌ(Cxª„¼®>¹/æ7 SKÚL”‘Xjð9°aÝ.Ï´T.°qCF000³S²ÿH‘×_<‰"Và‹¬é§·›?àqÅx¿²§äüOÿ±ðPnOK†iöÒ»”ZEÜÀ ¿¶ÓœÜ㢹ðzWý6`&âîÄü‡ðþKç°ÂÌb_²g÷¯¨O ªâmîq­'×£Û,}¯îÆœ^½®é{õ¦¨ÿ½¹Ó endstream endobj 92 0 obj 7490 endobj 15 0 obj <> endobj 14 0 obj <>stream xœeUyTSg„¼' *úDFû\FëŽ:¢µÖEQ*u+. !Êe‘E$¹dÙDD FY‚KQ{¬ÖV[œ3V뜎­s”ÁŽÖÞ‡Ÿg:n3=÷Ÿ¼œïýîwïoy,#wbX–¸&xYpÈê ~A ×ùLKÛÚ÷ŸJÎJ#œ¤wdÕdãó1½ÁÎ-#úE{ ~ ÀéËú/õ‹KÒë""TãüÞUùÌží«Z­ÕëÂ51ª MB¤6Z“@¢T!±á:mBÒdÕ‚¨(Õª¾7v¨Viwhõ‰Ú-¯úúÅFÇíLÐêUA±[´ú†a†Ä„ÓŸ[õ;V%èvÌøÓL_ŸiÓf%³ˆ f3þÌ&„ùˆ™Î¬f–1k˜ñŒÀ e<™aŒ3˜Ât8FÎlc®³ÙƒN¼ÓV§ó2­\._&/”?tžàœªðT”r®Ü*î2¯‘\Ý{Á!¹ØØ¯‘ÅMÈʤ#xIxö)qò Šœ¯Íè¤ s÷9«¹+ù°EI¾ñWsµ–›p„Ö_ ÖÄ;üQÇ!ómçÕÕ;扤þ÷8wɘe—<í, .A™‰ý„â ÈL1›Ó³EÃS€'Þ€O]ÊEOôÌ¿dÊ6›Í&³ÒhLK=¯iJ®«>Yræ.ᬫ‰ÿbÂŽŒx8Ç¢O#òù¢û¯NÓ2Úç¶—}ŠÑM&Õc¬€Ã§ôâ;cJ<LBôý¾=Db! d(`¿»gàÏ•veMË©ƒø ìq±U°BùY@ "ÝS–"ãꎗàVº*|Ü»Px³—MÜÎÊÍ þtˆ‘œNTdTÏLôºp¦ÒÖ¬\Ë¡¿ÕÙÁ Y)Ia_ü hV¬K‹ §þŠv¯9©l¼xÉZ ­ÐždÛÌÓiØYv iÀ^ ´÷LZ‡ñB­êŽnm<£Ô´…”|HA¦ÎC<ˆêÉTœ€N=«(K…¬³1-K¿, 1”žcÆá• rKknsµ½òØñüÄ-w=mÅ®ídÀÏ¸ÃÆv=½¼ £¥1*Äõ‰âéWå¶"‹ÙdS3÷&C"~,ép½¬½5¢mÑT"Ó^³@ÝEž¿äþe¾îÀ!Êý Ž¢_Ý÷ZdOŸôAoÁ‚-§c?qO†!’ø0[r]­¢µcí‘Ð÷uþš=Tw2™õÿºûôÙN†ò¢:ÊÂuL¹.“úKó„JÈOÍ2ÁÞT1ǘaÈ6Æ–oµÒUG“ñ@†ŽÄ;³•õÙ¶¬ýв·Eþƒ©¸nyyw¬˜UeÎM>Œ JÂq»ÁP–oò*ñpå©Èóp¼.à bô:oÛuPÖ¤³®. ,ZYgù/ïC5ʬ‹õ17í_ yµJ÷_eKÄé¶Dž°¡Ýáñ ãIôöœ*ÆRqÚm7á<ÿxä=$¾pV?{Ñí­V4Xž‚ÖÏÐ@GõÆÜàSèªhcé5ñGu°–Ò ëЋ¼k®þßÅ?”VìËKÛm6¤™•Ùë£c! ×ö=Èê4tÆFÍU%~h§(è›7;ø#ó 2‡^m{iÎóªØ;4ú·É0¢üÑ2C4 ó¸ÐqãŒü¶;¤‘ó¾›p³«ýb—Ø©YËDÇD­„kµÔz쬌>I?áhJ³ wôÊ„Öm[¢tZm£®µÙÖØ*’E$€:æÒÿ0ú5ÔSN¯¾d4HšÀ½2ßñ6ð™´â­ËÖqó6­˜;?§î‚ˆ8âÿ›>2¹±×b~9Ôwbî{ \ð›ãä}B©¥NsHÝå8L†Gz=”;¦± ¡5",¼å/º‰\ÍÙ-¡Öc°Ók‘>€¾l¡*Ò²*O÷%åbôºã¥Š:ó~}’ RÓEÒýb¥³OaÕ\ƒ¥‡rØ=POqÆSçK±¹Aà5`zË „“l?¡sq{î4ÆöÝm²T.4í«‡28D³èZkcå¹SPËÅéfdgŠS>ÎUZ´¡Â`1ZŒÀ§Cf²’´SÅfTZr ˆÅ¥öö¿ÿ&½ï£È€­ËK?Ó);KZjìñõ[£·%m˜qÛ]qr÷}ˆî³¾'îÛ®V¾¹Ûyt9ÒÚFà`.Äÿp9ïÊ‘ó5mÍ_B%؇ôÚœ”Xˆã#ꎶU´~y$DæÎ%¥K”a&û×ßP…ªñ]ÄuW Ì ‘%Ÿ  ?Ÿs` ¾…tž»ÔsÆŽƒ9£^'yzµTŠ.t/´=ýbؤGBA!X€J9Baòî'éý~S‘©×(¶pnSй¿©(*°~åÀc€‚F·wZJTp0á÷úÀÇüÒ8PWZ’Ÿ/–”S‡¶N*Eù·ø7üJyŽvÚp,:˰§—L°]\HdÔpünu¥â8tZ[Jø5D©æÚ,?ÃZÏ ­O&1 ºàUôêpÐÍya0‘IÜ.hÆDCpjæ>Ã\H¥‘> endobj 11 0 obj <>stream xœ­–iTWÇ«h¨*͸Ô©Â$C¢15@4" âEeo@Òt7 Í&ŒlÒÝ\YÅî¦A A²¨$Š.‘!ÆŒ’c„cÌ2q'™Ì¼êyœd^ƒÎÌómÎé/Õ§î­ÿ½÷÷þïÒ”³EÓôdïõ›ƒ¶½æ´ðMÇîÒs´4ÛIz^fÂaö {ˆKëìI/LC)SÑ{Ï ¿¡d4½z]°J¦Ù›äþЇûÂe˼ÜWÅË5»#ÕîáI±òøð$ò pߤŠÜ-OJ{Ý}•BáäˆHt’'Ê5Éò¨±ú¨âÕÚ$¹Æ=@%×()ŠzÖUš2Ò;]¥Ö¬NŒÝ­÷š·ì "šO½@Së)_êEjµz—ÚHm¢æR›©µ”@ySnÔdj5•šFM§ÜH…KFèúïNë.Êž“eË~vÎw~è²qbôÌ0;‹µ²£œ/70!`BõÄI¿Ð«#ÔS~qŠxlv}ï–LDe¼–Éžû<û·ˆ 5”¥Ù6cå¡ÙÆ( ž ñð&$9¥…ý¼(;Zmb£õÙ>BŠR†¤q¾ 6f“|-´ô¬ÝŸ×UJ2! úü=X>zÏ-3B•°®€S²—ŒF8 MÐ ÎÆ†jjÉS ‹«N¡™n¨˜9‡ïègÆo dëŒ7É+Mð9Ô9Bü 2»8l–¬<âðW.8áÁùB³˜†¤,]xC&y ;|ãàG…f 1JC&|I$ë&R{ÌP–D²äòuÙ¿ÃÅnX†ï«&* g6´‚E°± †`Pœ9úá@~•yŒ:¹…΃.7=^-N‘jZ÷·Ö§V¥¥'g+åǢϞï:ýIƒH$‰ö `“f[è¡9 “6"ßCSÒeÇÎ’Ýð*È—æ¦p?2xv–‹’ýô@^°ˆëÙ,ð#u7ûHÕ6èoÕº½Ð-¢@ö§«ç/_®Þ(ཿòævÐ@A37åºsþÙl+² ÷YiB!#2ô³Äð{£!"ñPz}¹Ú6ønÏr<áõñ4<ã¾rAnÍȵ¬,ô9ú½zQë»%~ pËÏ¢yhùí®ÞösQuŽêŽËÝÉЯZÐq‚Òúê;Ù ûJþ)ˆ¸2ˆÿöÎý[Þ_âIUâ=ÓÕ+pƒûjÑ~VÀ«ñ5Ù£ÆÒ“šÆPsʺ¬‹¥ª±YݶD¹ uŸP€d žõ”CÒd<ÍÐׯÌ!…õ6T´‰SìÓ š½ä×B\m¶Ê¤Oí¿çG•fœÎ†'t2õÆoH‚Vøl$A<»ÈPÙ&"ã×ìÝò8/ÑŠj´ŒWvÜ|Á•3ã˜NeÐK`ÛZçpV<9K‹ÉX—˜hèFiÝ2tKz‹7Aqvnª6'OPV”|àà,fíæ,ˆm¨>Ì;•s.«J8Å”Q¥¦Ùá¹vGû#­ 3AaA¡a¿ôÀeA~šˆg³i_^\XX{H(.ãÁšö}p¸ŸÎôßì‹;’S&Æ´¨KÖVÆ—xWÃE®¥öÔ·ˆ.y]a sK¡¸ (6ý¯!9üOZ ‘~™ ®ýÀŒ}¬ß£µÿGSzf4Œ¨à:Ñôò–Fù†ä:U‚6Y_ŸZßbj° XÀäd\)ÛG¦}ø¿Óî!+ >» tÅ¢äÌ>IjwéËøŽÝªú&ãi2ìfè…¦ÿ¨|ü-(Ý|xø"±€k(b`ˆ ó[dá‰úÎÐŽØ#!Õ¡À-óßâ§4gÖÕ:TßbÝñS'p§.ÈŠ‘,Þ¥_é+¸·ÿ¢¹ô§îγ°gKÌ àjû«¿Ïk7±A‰¹™r8{Pð;Í{xÇ…G´õ 7´¢²Í(ŒËH®•>»Vi¡Ñ”™¤²Ó|ÞÇâÉ`¨Ò™9-£À;‰µ™Ê.WU(¹ÕäÀÆ2sðã»`Iðª u"ÁÉ.‰ÍNI®µ¯¬Å ‘ªœÁá¬mâÀ$a¢³—Åu‚¥ÌÕu Æu2Eý˜¼_ endstream endobj 94 0 obj 2437 endobj 27 0 obj <> endobj 26 0 obj <>stream xœ­Wy\Sgº>1j©bÓšê=‡Z[±Ö^µŽK[çjÕZWpAD-²E$D–@$d!É›=$„°%@X‚"("Ѝ­^—Zµ­Z;mÇÎ]»ÌîaÆ{ö7δ¿{Û™ùåǾï{—ç}žçe`ãÇa #tóêÛc·Ï_³eç†E ƒß„f2³Æþ‰)¦þ'b8z‚ÖôiaÈ6 E?MŘ Æ;›÷®Šòļ”Ô¬ðˆ5ó­X±,|uWÌKJ„oIÈJåf$dÑ¿¤‡ï&ñ¸Yy¯…¯NOßvè¡/ê¯v¥ªñ“iþø×R©µÂ—ÁXn&ìþ†¯‡w:µ™"Y2™¹.s5ÄàK†§{ýu.Aoñ²«ro`—«.0Q>Zöx­‹×Նʦòºž›·?fŒËÙ²Ÿš,K" yÚbÈÁ÷7¦œø]+šgq(AUº‚B)ÍÛxŽÞ]^ïðÙëÈš.4†ð»;½{V씪>^s<¤@n–4C’T:|,`ƒ×BT]«îóî\ª•”HÉUÔ€N­×€–#·Ô”UÚªmDh ^îEŸöxp %ÜgÖžbǪ!‘¾Kê”Ö6Ôy;úâÛ7QS)65›z9â܆ÏÑ3Ÿý§Û¢t*Kôz…’X½`qI>àÑâž¡†ï|'ȶK'÷€ztîDœnã£Y¢±ªÐO”]c¬ÈÏþ:êê’îœóÁ–ÏÐTÄF³Ñ\‚²R5ìäþë'}ˆÙršl¿p¢ùà}û£â³çð#IÁÎÝq{àÉ{Ñ£ ¸Â œ^Ä6˜Œv0â¥j“R«ÐëµD„²H/׃„#w@ù £J¡Õ‚žØFøE À¡˜Ô$êUê好ën¶óôu’Î=í9‡¡<õnUGÙ}_°-Ez}¶šílæž å6p[ëȨ:¶2}ë›;ß§<×|ÒBªŽ’õzOvjõUB‡Ô! hõ%:5ö¸‹†lÿðzÂ0‡û‡W² fƒ̸QoWè4 /&6¯Ž¿º­"–Ž-‘âSÙTµüsb¥p(@£VRKî¦VRÓ6-|ÙëƒhöûõhÑm4޼òÕW½þ}Ûü%™>hÉ &œ&C¥™+µË^mH`õeæÔ3tJm²/.‰Ê¢±54™ ‘lV- «‹žzÈvƒÕaµùÌdzÙ–_Ÿx 8t<“Qš÷‡È¾È=ñ)<Y4W&þTƒT%$Ïe±í­ïzðÇv~‚ˆš,ØD‰ã×í|›â¾Ýl'9R‘½ICè*Òt0‘IÙÍpÙt¢úÓ¸6¼÷À‘M³©_¦Ö-:±ôëŸFèFù‡G:=¶Òêew£åߘ€wÖŠx/P+ &œqò{²}ÃËëðE€{Ÿ9܈b£å/ýF%PI”‚* æ? G³Ð>te#512wd3{Ꮋhro9 ¿†Bɇ_~ôðO®GRÏ¿žBqv-$7RÌÅQ«F!»Øï¡¼Õ·?Zð‰‡Îçzÿ5æ°ï²*PåRB>¹’U~ÃTå¾fow´Ñ0òè\Ò ì äâÙUŠŠúúšÃ݉µ‰óÄÔ³<‘C›°Esm.q7ù>ëí‘¢-ŠDuGÉ+ŒIHLrw³¥¼jpožC*ç¦Æuç´Û…´Ù‚ÌÕMÓ>êð¡üŒÀ­Ï™è2ºÊFÿÌBahæ£{ë/R ’`2úÿI÷N0ut™àÙ ]ZzrmetR*ÈÝöR3Íå$âzØ¥m68øoX×ú37åÌãî'S“c%‘€Sa,ºR¾f‘܃®~ê¦Éô&]!'ꢇ»±h„Yª\Ë ^X*ñUùËœÚèL{'%6[JÈ’«ÓþFVl¶5ÙAV¤»TöñCo Ô«ó†Á=ѕ禇¾`ç,+ŠUçyœ¤}IP…"g½Ì•¸«¸:3/]–œÔžwï»[ÿz«š@ŒÀF³Œ`æxò-Š¢,¥ „˜þu“LÔ?“OM¤"¨–_³¿»«¬Œ¼„ÊÙqÔF%ëÊÀ‰ÖÝržhF!žãdýéc=t)Ï—.SuÑõ€&¾³·ÑkWNzŸ ¢°³A¥žÈæ—(E ÀåÖüºJ_Ywoâ‘ THâü˜__’5ª‰cŠDã|Ñ›s²·Yú¥D¿ŽÒÜV]èÊÉæÇmJù½ÒB{¬¬J,%„Ö;tãuž+·ÚÉNâ¯(9F5nð°.1ò@¯ÓƒŽ#/-¨ö¸*&ÂìnAÏÚÇt²´Í`¬j©iéþàÚ?B'ßMMÍH¾yÙ8ÇÖÔ0Ï3‘‹¸ûcަ¤ä›¬va.§;eí”X‘C_L½>a)+ÿs›µ†êÔ—”HAƉ=”tê¿úRú<%‘·7iÕvÀEP_aƒ [#96ïcõâÜ ë<~&áîsÓèz‘ýDÑ|:¥ÌÐàsrµ“Þ³úãh¢kZŸáÖXÀ£æiþlEJù~7jE4Yå•„”§Ëʬ´"ú#ã–ÐD€'×%žzx½b&¦§ d±ësí²Q®P\£,¯i¬nzìVh!ZØÈ@Ó® ýW˜Ã“þRŒ4z=-Fq;’/¯5äÒbô4Å &Æxw ‰H«Ö«v—ôÉfœ*°k+óœ2g6¤à WÎ]¼jUÛ·µ–““£ÁHÃÂY ê"]0ÕŠ«Séµô°©-%V›Áè°Î2_‹ÃÕ}±àà4Ý0Ñó(¬IÕ•ÙBŠýE¦W%–ôR‘çÎo.üîÇ¿½ÿ°qýêL½ª$›ÐË&<)nãf<.7ã:í™G`&Ûh5ÐÆÒøõhò@W\È‘ûÿ{Ýß@kssQÝ­®þY¦a AþÕ΀áÉÌ@_±mÍv£Ý`76@%àßÖʶÐr¬ˆ"urÐÑV Æhª2Íh½ÁL³ ™Ä.1â`å‚ÔyQÔúšÂÑ–—Él“‰0 ‡ï8z¡ÑƒØ€·²j¡D¥ÒëÔ$õüHkqj±âuš¹ÇP^–þô“§à´¶ðÒ2¨q* €,`I!ݨ¡Ic†r0yÕå`µ?ºP>ˆB~Ë (S؇‹ü‚,qVV¡MeUu™&>=·Â}”™š-?yh¨åAÃuÂRauÿÌJ§/Í„}øÂ‹‚sè­^ôG_°Ñ.Ñã§o\p Þ¿€ÖÐOEo±UB}Èpyúò]ëà†ë´ï†ÿ.a«¶üÜÇb©Y "àÙy¾ƒ-Âm%´ÀaWs¿û@§èœ‡£]Í6_9‚^ƒü§2…$þìüÄì~â{€ÇJ»Ž–êœÇÈ£è-«×ÑI·,DJD1ôöȸPîfÓöõü/$Òi#´ŸÔäBgWÛ5 õ.¢òpùEêAØiÔ Ñ*qþ:I‚8v«aÇiÏœ˜Ìã=<È{|O£'$Ýü >-ć3‚<ÊÃVò·¼ñSÎ?V“ Ókh†>b.z¼6~´6õ±ÌÓt²{è*཰»@¤èŠiGåúÑ*Ó‰–ŒáüèÐß®!÷¶Õì[»¡¼S‘°'÷Þ?hïúau9‹D—Yû#FH½V‘\β£ë?BãQzÍ ºp./‡Ï#´#¡lqšçæ±ÒÃMˆEÚêÀè®iêìhíø)§:ºû£ÈA +E‘ìjš^LeF«ÕKkÁ(ËP14Ëè ¤P§ÖH‚¾ËUĘÂÁ÷Hø} †1ž›~‰?`{¥!?-#-³*ß×ê?ÔLL¿z}®•Öyéüô¬ŠÜÆV‹Ÿ¾€™9j‰«î|4*Ï/~>fŠçßCkï¡çOÑ+éZ«Qêâ„|»§Þï&þÞBgGw#Ç©‚|‚2³£ØÒ3h&Mc—À'L(Ö'ƒ~ÔFVû+ºnPO`ӻʭ{‰ŒdWL=ƒS%¬V´Œ¥µ5}}®NÚŽ…zI¦ª0$£v¼¡ÖÛ2ø¶s/53á×/åy¯Òn<_yt‰*i7¾v+Ž+Ž+Šã§îI¥©:dUåÆßëÎmû¼…£¹ÄôáTÂÚ@ý¾(R›—¿“£«²E¢´´ƒA'bkAYµÙ[ £§EYÙüÝç¤G^î :.øÐ ƒÍöÿ‹—jp¢ƒF•àœèŸte21iü²š)!ÞÒ)S0ì7| endstream endobj 95 0 obj 3675 endobj 24 0 obj <> endobj 23 0 obj <>stream xœ•V{PSéÿBàæ"•z§¾zoºõàc[Äm»*¨,/ˆoE£€@b —† pѨID%àkÇvÔ*f·jXª»Öµ>wª+º®V;ú]磵—HpwÿèL&3_s~¿ó;狹»!‘HäµlÞ²¥‹üC£cc§LíþEÊñ#Ýø_‰Ë‰’ßû.ÂãÈH¯Ñ~¸p0Žˆ§ Bb‘hnÔÊP¹"G™¼!)S:.t¼tÊôéÓ¤³ÒdÊäÄøtit|f’,->S8¤JÉ“e™9ÒY©©Ò˜î72¤1² ™2K¶Î‘5Tž¦PeÊ”Òhù:™2!4,*=Q>/T!›¿~ÁeF²*|qjüuZÀ$„Ð|4-@“Ð(´ÍE“Qš‚Æ E(E %h BÑ(MCËÑ<ä‹¡áS$A+P»h¢H!zí¶Îíïâ©â}îÈ}­û]¯©@juO"ÙF¦Õô{O½çÜÞ»¹íA¾öo°ò«è¦ kmb<‹?Ç\ jáðáMÏ‘ T¾ÒÓÍPÃ5wiRœ'QÍUÕîžd?ÔoLUA´’^H|Ó*ºkñ61„Ï2?¬>;=lLˇšD6œÊß$à4 8§HG‚ó„Ç:s'àpêyGëE«.%†%›$?E9Rj­ø¾U6¬¾-æWaÓ¨Mæ6M~ «Š]¡Í:(ôFçùÃX‚i6”•WsUeåPR™ÐT¾ hãÁZó߯À2#–H§ßαØ?ú¢ŽûÞ`ë†OeðàÉ/"hò82˜ø=ñûöÉ÷Ø%+I0}ëYçµöëׯ…úGÏ å\…¾Ò†mb<Ÿ¿É¶dCÐTž²‡™±K£r¨ÑµÜKªÆ,ÐT4U¼º‚ª,ªÞt`ßÿÀ§ýð›Õk¶låš¡¶¿OºZ\|ò†Ïc.·µÙ¾²†Lñ ›=sýÃsl_§¤—ðf>Ø.æ‹cÃA8Ž=ß ­¢Ç_â÷¯ñx fþô¨qW™1U­-ÎÓrÊ…%j†ð«EßЗ˜}mç®ÂK0íXþ¡~fÁk°•Ág²Ì$œ„g)H+9cPàpn0ãV–Ä3T¦¢³çá1\†kpcïŸk.Ùwþ–š%ºUðG˜ÑðiÑâ¢eªŒ@ û¦§ÃЇXEXj{uGŒ÷d°ËPúœ£n_ [¶{}s]½îÐå7ã÷k§²‹ÇIìÝï–è%é˜è2X»ïO¤úòÄX1XE6\&´æw¸‚Áƒ(L_ò¨3ô¡8’êt“¹K£pž°—Ó› Š×¸¿¡¾o³$&î³î×Nü\+N´ãµ]·g8Åà¡T¨›-P€} 9`_ê$– ʼn¸l•™–f0dÛ%MÚ=É,ùïÏ•Àql »= *5Iô E˜¶á¨ÛbœŠ2ØëÁ‡;wAùN¶ráÒ* ëëö[ãë–“¶h5wÒ‘oŒS³[¤c†‹‚åN?ê¿t¬¸Ö*æƒù1öyÊÐf–³‰¦Õ- Ò4Upr‚IÞ¢æ,9‡Kîœ,¾S±ôúä¤ÀÈø†¯²Ø’šÒ½J  ²¹Q’Í :¤«†SµìYÙ…Ò& q4`ï=ÿ&ƒ +«¸kçïÓ´¹ÉòôÙŽ¸MÛÙíÙJuýæÍÎû»Ç"»¡A¯o`ÉL2’écõ–tÊ¥­MN’ãðCÊ.IW—ÎgìÏúmò4jz˜*îp¬‰Å&ÉŸë¨I_È¿ù뉆ýzvƒ ö³í?ÞãŽ%‰?Êoî¢W.¶7:±^uiF»´ÆèŒMõê»ó „r#$³Ó°ÄËÅSä9ED‹—.‰¼„‹Ÿ›%?÷š">÷^¼¸ÿû°ýŠ ²û¥C2Ö¥0ß. ñu9_q¡ãë4Ñ'Ö7Ž»K¨u*>ÎÜŠ¹CFÄO€¹ŠƒyÆ]ÍÛOW°°³¢Â°]W±tP-Ь<&9¤/([¸-:{ynä£g_ßi¹²óØVŸr®ìÐ&“#Û¦ìí»ò¹ˆv2!+A”» J^°Örêó·-اÇ<[ ü ¡^)æç Š5Õ÷”àÁG¸OÈ­‚e¹s´ ÃÊ)íÉ¢Ó[NMÆï‡1õ(ààZ/DVPxXW}õƒpO 3‚ª[è~³y+á6ö÷8ê"ŠØ`7sÔ§¯=êM<é–ñ(…½ˆ¿°Ìƒ=’]¼ëæÀÉ÷-ö{Lü<”½Â‹9’(×?)Û0ÝýóËqcìþqRòæõ V[«:±â 5]³µÜ’9@§õ²kâH‡d£ªüAoÞTGIûË™C»“V±D#Éí­íëÿ+ÄQn´ ½×íˆFfŸ,Í©Ý:|Il„)MÂ+ޏ`ûL½9JÌ/}7„©¬ª¬‚*Ú«ËËÒän)aÉÝÿD•—Cñ°¬ý…µ†Ýu{w²¾…:ëHl5Erª$Ö6/v€{ŽÜÛÓêímóöAèbÍRX endstream endobj 96 0 obj 2088 endobj 21 0 obj <> endobj 20 0 obj <>stream xœYtÇÖ^!{µt°Yl²Ëƒ z¡—0l 4 î]–‹,ɽI#wãnKîÇ„Š SDIHH …˜@ !ï.¿sþ‘e,å…÷ÞŽ|ìÙÍ̽÷»ßýîXDÙô¡D"Ñ -ë×oqÛ8q™‹›Û´©¦'£„WDÂÈ>«â4,ö?_mÛ8rÔY; ±ƒaÚJ,­\»}YH¨\êçã+õú²7FM›7oΨ%A^R¿=»ƒG¹ì–ùzí–‘Aà(×=~^2ùäQKGm4}#|ÔF¯p/i¤×^ó®ËB‚B#d^ÒQ.!{½¤ÁE­Y»D¼ç=—¥1!{×- õzwy˜÷úRŸ•á¾e~®þnΑ›¢woŽòŒùƬ Û's'ñ˜?å­©ŠÓƽ=}¼jáŒ×)êMj4µz—ZNÍ£&Sc¨íÔzj5…zÚ@­¤¦Rc©Ô*j5Žr¥Þ¡ÆSn”35ƒÚD­¦fR›©5Ô,jµ…ZKͦޣ\¨¥Ôj+µŽZFyP,ÕNõ§P¨·©ÔBʉD‰©Á” µ˜z…B¤†R;¨W);JBq”=ÅPîO £úRk‰ÿÉ47ê‚h£èR¾O­x•ø´Í(›=67lWØ~@¿N'Ð’¹’*FÂìeîõ}§ßkýòûO诰j@Í@ÑÀ¦Aƒ4ƒ~Qd«jTÎ?¥ËjQcQ꾸l>%3)ƒ— áì'øS[ìH“-q´AØo•Ý Kšm¤KjÈjáHÁã¾´RŠ‚«Q)_O/Ã~±Þ)òä@' Z‘¨O®˜ ÉŽ5™Þka £ñó¬¤F'¤–΋•»ù¨•¤ÍÎCEL¼\#Û½Oûã£àXÅu[ n»oàft°ÿæ ÃØfT²‡[J+¤déZTÌÅ=,#˜A›¤ä°‚¶?úøæN‡¼Ëᨽ’îyu¦yoZÏSÒOÞ;²àw¿èhÓ¾)øÂ BFï Þ bëƒQŠ"A•Ì¥ÄFïX‚˜ÙË®ýp¢$ðŠþ”Èk}+TÕˆ©Ö—5܃ÜñâwñÈxÀcÁøý¿”ñ½Ð(ÜÅð!|É‚-Èl+é’ÚtŒ1û¶ UñËñ¸…0ÎVW…š¥æWaäU-ñc pvÂe¶ïþn^&Éø°ùW¼ÙVñ×W¦d´Ù¥cŒÐh1lÙ8ŸÄà”`FC'Ÿ…꜄j)R!ÆÕ|"=jæ»T’€Èžïš#‰x!L+)Øy»eÅæÉŠ¼²“s’ “ Q*ÎË+ÎÌùr O3Ú®0ú¥_VIšõ=ºÒž(M•ƘOiwƒÝU#(ÛIܘI2 †ÒßVºø{8Oà_£aS{¹òÃSè"scÝ],æp$­2y©†€³®KEÛ? µB…†Û ·Û¯Ì¯àq!‹í!8úÛÆ¥îÛö®ŸÉ¿@›¨Ô‡Œbaùùឈ™:ë˜oÜû£ó™ó‹ù̘ E#bLá3¹K 0ÅäP3ǘüyæC{þÜéK7Ï-9qÅêoû~‚Ããlí>’ØŒ=ú ìaðô_þ±Ý]èÇÛ?jP{ýÅÕ]õÿ‰‘h3F^€aÄÊÏ âºXX®¬¾µ½æ<÷Ÿ8ƃžŒ߯1q<)=:™xoSbZŒŸT|Çh/°Å7Ο¹†H Hó_c¬}WGæ çX8Y]°Kd(>‚ëCÁÖVÖÁa{âWµUéy°MÒ ;xË‚»môJvã¶y󖬾vÿÁ5ãW·Ž.tî­'0Ô ‚ÑÆG÷ÄCê ²ªXƒŽÓ·?E\ZþÞV]Uiý…·â­…;gr›Ç›K‡ ªOðÅqF†j ÃŽëaصH7ˆ®AMTÀ|P›¸ ˜÷>\rKx,³|½±Kdå7Ö²X-¨lþ >²róæ]+'’d1/aƒYÜÁxÔ¸ƒ@öÏGÖj !&z h%ÖIì» $žHѺUVp{^+<9ì ÞL÷2Û I7{tõµ:'mUa VÞs°? RXÇþxþgÈiÃË¢jS©+­ÓÅžûÞùZ7Þ޸߼îc¡ˆ;øâ|ËŠ-&cq·‘_€%gÏ\€ìйhSíÿà܆Ïìÿ*XÎnÚ}üôÙ?<õñá›7zxlá§ù²™ê²vÄ<¸ñYgcbCL=¯/¬Î*Òæ„V%ïCLYUaCUtÓ¦øm¿¼¢À·b'bÞ\¾xö®2ÿ’hÞSñŠÄˆ È·Xš·Ä­Bñ̬gë` {vñÛ6ùÉ÷ê¸ØÜݕӳ‚NB±()C‰RP\q|±F‡2PVFqÖ>úãKìøÅG>,ÏonÖñ5¥ùèb:ÁÍòX¼k|Oñ7}D70’ÄO ‹ ž…‘ôKã2ü!ó%qj‰vK—Êß ?“-`ÞB¿¨9vd×8C ÁÁþ |y¬,+*Sšœµª}ÀÔ67ýôuqPX&§Éˆiê!G£ÄÄ»áiªd5ç¡÷@Ñ$ß’Íó™ò,抷ØžôUìæÞÞþSw¸Ü–r©åiaˆ1¡Ÿ Q ic~©¶­k÷9­®'¤9½ùë¿cVÝã…î"&êvbac- ÖIþV¼ºTÿEãý?ž¹´líñ¾Ý#8wu${0•ˆ‹Ïè®ß¾Í}ÃT~ nì'mtˆùnÑ]ÜÃ+¬ )w½#èoUïÀŸ¶?y›®@¨9¤2E Ýh5 ª( ªWìGÌ¥êO4“• CA>Ií‚޾„ò«¸¸™^UÀ˜CvÕð›NÃŒ0Dj"©¹V$5÷.Ý›ÙófZxé{œNO¼êsãæ#åHï믉Œá4.ÉvÌBtª¦WãÜylWãÂEakÎÐÑVœf‹/âV°:aÉÑÑ´ýAmSQRQ__YYϽ¨?vè ”^ñºbZ¼êØú”¯£ÐLfË®õ B¶eÕíáv×¥Ö”kÊ4å=€ÁŽÝˆ©Ì)nÎç— b˜Ï¾ï¼ìs8®ˆ÷<šûv9cÿd~ùîB¯VtÜé£öס_É›9\fDAŠ®´àhFmjLPçÙº©Ð V¼xÁìwŽ9ÎgiÉŠÓ™2êbo_ 6³Ú=*GŒµŠ‚»/QQ~¤¥˜6?.`jiæ êïPÅùôDcøC‡öÕ·q½ýñ9êìñú3Á¦×ëÓéÞøÁð®7iƒ¼Â|C½I[Œâ2”Dƒf \¦^V)‹ˆ ^ô :c߇—9{Aøí¥0WiRMŒàH tÒ$Ÿ_B$¯˜EíR‹¨= N]ª-V…uÉ¿1ŠymxãŲ”}°‚Õ¥Â”Õø€Õ<Ê´PÚ)¸E)„þ>‹ð-,‚[¶õ/o-ià‡…~¤uFN¨ ´0½µ¾¿AÔI”ëAÂz0$¶­V§˜lÕŽÓx6žd ÏÌ~YmÙ¿½KµÍªXYñë¶;ôW7 åO17×ÝìgY>°GÍš…@¼©¥ îj|/²?kU]ñô(ç-[6¯>õO~l”e^6ëW¾7åñã{`°)ÐizXb±Éñba§É¦–*ɉà¢åáÝ eßNoÅÙjè´ÚØcq‡ä—Ò |Qáôøˆôä=˜K‹"½ßøÈ¶Ý|s Cѽ_×£FþîÌ’e*"§ƒ(3¿ÜPó½¶8³’ÑÒÙ[Úp߬¤Â˜rTˆÚPfiV¥E$ÂÂnˆ|úW wó÷p‚ Öj|×*²Ãé :ÍðØÔæìê’4‘BŸf¶2ð„æbê+Í}ãî„ìÌ$%×7}ƒ_Û5- Ò+ªKêóÛ´ÊÓjuÅÚ"”˜ÏO.çíãéxðÖ‰#V^Zý´íbnÓq.žè—9’k‘{å>1î( 1.žû?hÿ® Æf™3Ioº A‚Ò¿÷õ=qk‹µò ñùØÍÑ‹’w™.BZÓÊÛ&NŽ­›ù>!¨®²}^¥¨9Õ¡ ”ßÖ T²ƒŸ ¦RhxÝö Õ­QO2T¢:~ɸEOlk{Œï~ÖSìÒÐ¿Ž‡àY¶{,O¡ï‹v;ÿwâÁ¶!/.È»Þ=öX‹»³Ðßô1õB"a,«nŒBrÄXÌÀ%>‘=[|oF|$òáa•ľ½óÐñCUÅ1«9¬’D¿(Å·þ2éNI•èÐÓƒélb,R£(Æ??¹‰ƒlL¹XIw,YâÔmËèmxF·$çùq!t8JÕÄF­ÖŰDœ?µÅOMWóôÏÃÉ&[HF>ƒó,‚þ;ïûžÜ|cqG8b¤)QIÊ‚äìtæbQ žEDËxoÌãW¦*’R‘’Iʉªi€]àùæ:M˜E’³s³4$ Qpb}‘G²g!ÙÒããJÚ?91€Ç9’5—geïËãêš•ŸCŒý³»G—®~kù»sBÖä á³³ór‘Ži•F*ƒ÷ÎýfØÀÐ_ïƒøÉÂ_ˆ#{ß× #ˆ%s/ˆ…eÅæå¢ & 5ìáðeµÚOPƒS>jñ÷Gþ‰ÁZçŒ0S—Tùj”Œœ¢båÊè‚”¢dDë1µ>.96E9¥¡àƒ ùL¦qFÁN‰È¿¥µä7h>Q×r?oݵÝuŠ ”‡]QyIY\¾ZËKËVµ„›b8×ð|Œ©ØŠ…wŸd-v;›íþ×I`NÂ~œ­HnÒó1¦”»£‡·¯ÁBbφk„+¡š…Ñta+jmõEq< cèBÔêë‹|ã8<–Ä‘?}[Q!£ñ:ù¶’É…&¿ÌÕ?—é‹LðçSØÔ}Ieˆ‰RÆÈ“²2Sxøæ_«²òb*‘“®¤¬˜Í-Õ"”Ç”+Ë¢"’•±)þú_+“„’œä%1ºÊÜ’¢ÎåîMuÿqÓõ]6lì&¯heRJº*)ºQ^ùóÇ`óIP³—OXˆ_H™o{o;cRÑÜ6]§­ ¸¶ß}ó¸î)v€>`óF)f¾8}{59Áë0ÎøëÍ×ÞÀãñë«q¿·ùîl“¦uË¢2–@ä`f^ùï3Z“£Ë©&Ô _E±3bxM ÚŠB˜i䃔> åV iâR¢Rƒª5ûøZ ˆÒ361x¾!÷SÁ‡eg’O †¨·¦©6‘Ç#3Ñû¨‰YT“~È­ñpMI‹¶ÆÇ½à¡3o½ ` r‹òVE*Ó5‰*ßÅ{Sb“P´ŠÍ‹ß— ßa/ÇâÄL ÑQ¥…Uäi.‚³­Yë 2<% ö*1ërÏ}mtJ\\*ç5{K|´Z¡‰TS¤å©%‡r|ÈuÍŸ*±µ, +N5+f¸a€á&¿çt|ÓŽbaѵM–yS^pJºÜVèæX½ç¥¨Ÿë=¬,zlÃB û…w›§¿<,\‹ûd¨;þ ס–ÍÏ1á%$äâïÀËQ•Ÿ®MDŒ":NMž p;còŸÜ vYE\i~¦6¿¸Gád\0ý u¾Û ¡Æ=¦%ˆáÛñ~ýYô1ssé§X‚¬Ø¾Ò¿F¥3ù¶8e_z&×ÔtÝÔo\=éã¤ô à¤jõÆ4%BÁŒýo¦JÈ£ýè ë\×Nݳ°àx‘=¹9DöTG뤲eÀôGH¯êð탇×wœwnäzõ›Ic8obQIr–¼ùf'8!°A#~(-ÈÍB%L^ª.,ïÂŽ8÷?6­u+wzé-Wâ´Úl]?(¾@€ìšOcy®ÄÐÏØŸëg#Ð×0`€qÀ@Šú? Y.Ì endstream endobj 97 0 obj 6192 endobj 44 0 obj <> endobj 43 0 obj <>stream xœumHSaÇŸgÓíf²V4вÝÛ$½P)®"Š1¢Và‚ˆŒ˜z±Å^ìÞÙ¦57oùRgoêœn6פ…Ì0 J(ˆŠ>ö!"ˆ¾Dõ1ä¹ëÙt%õíœóÿó?ç`T¦@cñÄI‹Ñ²Ýd¶œÙ³{±ÂÊë±\£7(†ó|^*¿¿³†øW“öUä´©1>rül³Mè6¹Ú;[Û7·ÍTËíÙ¿ßÀ¼`k±:9³Õ}wXÝÅÄÎY\-6Þݹ‹3Úí\ãb‡È5ò"/\æ[KÆ&—£½ÃÍ œÙÕÊ NÞÎ;x§[´9lv«`çE‘¿Ôaµ· ¼µ-ÅÔø"Ú[µVWžA·0ƒƒqè„tMà›p‡S¼)ÐVtyÐ{Ü€'k5 X÷\KÎÌc˜W’S$¬›³N§(:Yqr2›Ô—ÿnIcÈ)I]ÞªK@Êã¯Oÿã€ÚÞtR‰"©\QÖ•Ã e¾–té)H§½àc T>/x<)H°šEòîxK®H.ÁÓJyö/öj”ԊϤR¯Z¨AEë骡鲉j‰% èu*ÊUõ“u̯mªŸÍS ùÊêÆûâRÏÀ•ž›ú¾-¦³'à84ß7¾>öì|ª ˜Íæ;Ä¡kCñp:ÌF ónj^ÂtÛ›£¯g¼³À|{1ÿ…- ¦rd׸|/]:vŸüI7ŽÀ—bÐÐæh²§Oê‡îjðôÅúå'4Yï A˜x,½ö²… –ËÃÏï\e 9•ϳü®øÈ[],2…Q“"=ÑÂc’¨êºÀ$)àëeå nÑÔ¿´D &Å#!Œëå)Úô·ŽLþpFEµQu®âÃJ}E™!]¹"—¬¬Dè'&,l" endstream endobj 98 0 obj 712 endobj 41 0 obj <> endobj 40 0 obj <>stream xœîþ LMLXJH+CMMI7øøø‹û`øKù+©øb÷7÷2÷.FKZCopyright (C) 1997 American Mathematical Society. All Rights ReservedCMMI7Computer ModernijJK˜!ÿMUPÿ”.Чø§÷èÌÒªÓ÷Øù›¡opnqnz˜v¦¨¦§¦û`ü‡~†‹z\³eÂï·÷š˜~‹ˆ}Š…€‡t;_bd‹w†˜¡¢’ž”¡•¦–¦–¥”£¯æ—ޕޗ‹•ºc±T(]ûz~™‹Ž™Œ–Ž¥á·¯°‹›”ƒpt…|rMÿظàû`§‘ãøƒ§÷è‹ë÷zÖøKùœ~ pnpop{—u§¦¨¥¨ûhý6zFVQP‹~‹€¥—“£‹š£x˜wlqpke²rÇÇ÷ ¯÷ªå÷úŽ–”‹šÂ\²OûKû}~™‹Ž—ŒŽš’¤Å¿ÉÅ‹¤”zk€‰}ІwŸù?Ÿû¤••—û`•« Ü  7Ÿ « Ô Ö½ endstream endobj 99 0 obj 505 endobj 38 0 obj <> endobj 37 0 obj <>stream xœWitSgz–P0„ÅI;!÷: ’…™v(†Å!,ÁÁ˜Á`ÀáKÞd[–%[¶öõÕ¾ËÖbɶ¼/`ƒc–À„t²´Lh€tΜNÚô“Ï¥'ýdÒN;Óô´ý¡ºçÞï>ïò,—Ízb‹Íf/ÌÙ¿;wë[–™•µmÕÊ䕌ÄsìÄâY‰ç9e oÚ<}xvÏâÔܧqä)\ºoLe¥°Ùoí8À+)ͬJkøGKEK3_ÍXµfÍêŒÅ5üB^eFOTZ\Á‘?廫 ùÅ"銌åå9É'j3rŠk‹kÄÅE_œYU!¬×ddU×T–ó*ŽñxåÂRžÏb)žÛ±QZØP$,©9ʯˆËö”ó$GÖ¾¾î î“éœA6Œ²Mãl3‹µœõ"k?ëMÖÖfÖ.ÖÖnÖVÖvV.ëmÖ^ÖÖÏYY¬M¬œ_9ÿÔü_-xutÁƒ…M‹}ÏÎÚ“½ðûYÝÖ•Ð;Íîe'æ%~ÇuY½õ¸ ìS€N°Æº6Y+iäP¯pCØcÝ&h½É`3Ï>HSÕë5(gî щ”v0ƒ#ø.O³yÁfd38U*“®QCñÿ¼€Ia6ZžÒFК•fƒ\`‹=„N« ç÷&6GØx žÃ-ÜZÔT`›T¤µë\ñ^+tQý0hèäðCØ«2kh‘¥Öàsx]§Ï ¿Äa[ŠE`ƒUì5Ô7%ñùÀrâ”NPpÍÐAðAÄ«„æ,pvèw¦g#`k€ôFÐk´JÄHmãâ<|§¹3{á÷ìo¶´1¼èÉ»'£‰åQög×½SœDCâ)®-@ªt¢P“[¦lÔÊT”Q§.×K5Õ¡VxˆÙš¦—Þ¼ Ð>Åéá3Á«wéÖ¤34Z6œ·¬„Y¢RzÀâ1[ZíTüáHÏ WÊj”Õ ]ø‚4¢Ÿ^«¸|| ØÕE5ï•ï/Ì­æWæC²6o?|·‡ôõ mJ‘ qÞé’«ß~û5žÝEèÃ7(¢xàîH” ãÊœDF"•ÛHhjj”@ƒjCŠpw¼}düàð›ÌsL:óóªÉuÿ„_úõw>‡Ö©Õj-µn)Ã9 Âñ©‘ß \¥{/Mœš€8Ö"ò®[óW*nº¢ØuÝdãô;Ü‹“ÝC½`¾zahè›Ñ1°! ŒƒQ¥£*ˆk¡ä-² $ÖÚ¿B¬³jÝn‹Ýa¡Ãg&Í.hƒ°&¦‘y¡Ž^)iÌ;d2oÙZšCÀ'è²X¼*6ØïƒxT•Aq¨±Ðo'ñŸÄíz»ZeÔj ´hûÛÔƒÔ!vòý2›˜,b#¨ û,$ËV$§‹KN²áCNÂ?½žkO³l™ÊØ@©MZ4#¹ZÆ,%e¨ßÉ(¥Ã•ñCÎÌeR™W˜Ÿ,ŸØöiä]Û‡S´‹7(ƒAˆÅZû‚Cþ+`I–mPšôMªa»4û ¡¡3ÒnqÚ‚ôÛ®N FYCÁ/Ž4VÊkš8þn^;C÷^ô~`VkÔšt4i2Î`1¹½xÙÌ*&rosF™…\5ߨ)$W€Dm×»âÝ„,t? $Éb÷ÏìzS8ݾ“xµ³ƒöWv•ž„~ ÿ¿ò0çÆú¼G‹´òâá¶ÈI‘J*å7ïz¼¡æ¨ƒ ~ ¨‹E…¾¾®à:ãñ®PË`o·3h¤½4;[ÀÌ‘ÓüÍ%€¶5ßqXÀbõ%‘?ôd…ï&„½xɽYÈûø—÷9 Nâeî—)Ï Ìú¯R¼“&£wÒÖøÐás‡ƒ-m`#ÃK ôÊR!QHîìŽ;“;Âß!]ZAiÅe-ó4z+EB:@¦¦o¤lxDK_kX¹ÒõP’Ы{ZPLê“TWÖ:]{bbäò±Õw-†˜É ~oéaE¾rÏeã›8w/s 2­tHPµøB®ˆ“²Øðb[ÈÕºåˆÛü]gÛ£.gwç)‚°En† ]]-T£F¯„t&64XÖ³o{Áþ* ¥=ÚwðÑZ±AѼ7Ù®¿ÅBÒ.ß_F/FÙ“·9‰²Ä®Ùa±É Ê= J¡æ¨ž’—v"âšÊd0//½’}ûòÙ³^m6‰*?Æt½Š¿ô€À\åîq{;!ˆZaa]™´ðÈpý?à§n:ÕBIð^®¶ZTS'KË¥•deçGƺñ¼ø9:>~jä$ ×u:²‡ú$¼}ªæOï±ÏMšâàáéÙÜHS«H(¬J í±žXµþÑ|®¯›ÔwEì"SIé[^ücÒ'ÖˆõJZ]}ˆA‡•ÕÍ£ƒ¥c‡ñ÷ ‰À ÓQÒ‚wöïÑxbŽ@ì 4kè‚â÷úŒ¿}ë=2X}êÇxØ´[²…H¬ô÷G}g]ƒ´{È3Dì°ÅsÌÖbyŽcFØuÕ&¾š’l*`2å¹&}áÚM€ö*G‡ßëú¬óÚ×óEýžw|ulø w«©¬VQ©•Ñ%KÅY°-û æâ¡Ñh0©Î­7YdÆž¯Ö™>BT^ã$^ 7kE¢Šú@c,ïŒSLþ¿®æJÖÈÙ ZÔÝãlé$V’eM¥øháHÝØ­~ÛAÝO̲G ÖôK¼Á¼%9?Àr›ÍaÕqåÌ• @ž÷˜ÄŽÑ/wîóëž)üÌCN¢4¸«[¥5µÕuÍv­WAµÕû«á(â½ÃH™¹ûDƒçß‹Ô{‡rl¨Ýÿx*Öýï~&ÔHé5çÃaİî6žÁë.á_Ÿ§’°ƒšú{ߌôbùÍÉ<òƒúŠ6©ÕD}&þgõe–<úH?“#ÒEÛßâö9(»{g9: ×Û@zƒÒ(7ÊA²G Ï÷Ä[‡£TÇiïÄYƒúM¢}D9%ÍÞ¡ -fk¥mA¢6xG÷Ͻ½¡¾¾XûØ…3§ÆÁA²Åä3’Тµ˜Àd10¨Š@>Cu"GÇ{Dý‡ªòÕk3)~qQa±,é*½S©u½ÓÏô²ÍŸp¦%þ†ë9êùÜŠì>s8YŸ Ô|š%Vâ~ÚdÞò€‹¾dòŠ¡ F™É°Š™Nã3Ï2sþâ@[öœþÒ}ÞÓôoéî!‹ç#HïtÝT€¡*ÓUt%¼i%ÜU+þ›è¦U𴢺Ÿ¥©Š0»ôMY#b~½ùŸñÓ8ÏÆiýÉ¥|í0!Ò4÷$Ûrƒ½< "([ÆÌ*urO?2F 4¦çœ.=Ûß R¡c¾É?0=I6© è ´›íöp’¯©^ûã­KÚíÜÄBîc?Eÿ?Z\¤5Þ“ûXðº-ÜrÉÙEšmF-keuuj;ãû¿¸í¬µºaEÔó’–@èyó>…'¸ŽÎØý[`‡vhk®ÒÕ×@íÌDûB#ç³ü]¥¹"9Usc‡ 㥆[3“S¬·…øîFQ»ð jWyÃÖ&ƒnÌ*åV‹@ìï°GÛ  Åë\²Ššê²üwëOߺå°R¾’¡¢)@ß^ÂÜŽdõ*£^c¤[jË5ö DQR=™ßÀkm¿2SXq›ƒÕÿŸ4*¾NL­a>“çé¡4}Ù…¬ñ<¼¿Š_þ:÷ƒµùG*Ë+¨ú7¸Ž(Qïøû£DxÐP¼âíÌ^°5ÿh ¾ þq­ג ¸S©Ìž6¼á;ö7Q.0soÔ/Ô×T #Õý>¿Íí¡¬³Ù Èl65m,Ý)Ð a´iHbó~þ žK=>¾cÃwü‹ ÜîÚöÊÊÚÚÊÊöÚîîöönrgîTjQ[b †æL¯Nè¸>‡Ó^äU¹#hš©G瘀B§Ö<ä.W— Òü ùú@^·ÛëÕØåúQ›gÿñ‰XÂõÚ]vðOmWØôf' H¡R)Tvm@C'¢Œùù5itZP¥+Ü*¯•|ø“ ·eOvsÛôŠäy*žÆ£Ü/Ž1Ë[E­uˆЦà X¬F‹Á¦ôj[4æpâFšxrÿ ]3(Ô.£™î'Y¼cKgæyø ÓÍÄÓär­–äÒ†€¼µÕíõ¸’¯“¬üWã³79‰j¬àâU+Æ72Ï3iÉl¿bjýï®ÝŽ]ùåÏí/t¡w¢Õ©µ’ˆl )Yºÿ(*‡OÛÛˆ˜ûè‡x^FäkÎbr)ˆÿJgüwýÁl´u÷go¼¡ ÌÞY1z}¼³úÎÑg?º$Ù˜gþºvY’3ëõ”d°ú~’¯Žsp(1—‹g§˜¥ªÃ°•ÈÐÅ÷ÂEÚBX´ºò6¼]pÁyÑ{á”ÿ ´‹AB3wSê  –Uç“lf•Ïe±¹Ôø'“t)¥ŒY°‡YÀ[©–‘R4HÒªö÷¸º†}Tà XüuÑéõQ&îõúSžwNï¼ÛORóžX™?·Ã1>‹õoÁ…7 endstream endobj 100 0 obj 3538 endobj 35 0 obj <> endobj 34 0 obj <>stream xœcd`ab`ddäó ‹ò Òvöu04‰(üfü!ÃôC–ù°Ì¯ÖìnÖeßï}÷üîÊÿÝI€…‘ÑÍ':Û9¿ ²(3=£DAÃYSÁÐÒÒ\Á17µ(391OÁ7±$#57±ÈÉQÎOÎL-©ÔSpÌÉQé(VJ-N-*KMX뜟[PZ’Z¤à›Ÿ’Z”W\š Ò›Ÿ—’Y\“XÉÀÀÀÁÀØÅÀÄÈÈÞÿŸÑ74€ï?ë’Â@÷=’aù¸›Q†å-ú÷ûÖ"¶eE÷ßì¹emš…¿Cº9þ¼gû1ñÇËI“{ûº'Hv÷v÷µLý“öSPâǶïRÝÏj§tl~Tu+rIõù¸µVKØ~ó~_Ë*ó;‰­¤»««£µ«£»¢»áÇÒ¿fýùÜXßÝÖÝ%Ù0¥{®_ù|6™ß•óÙwqíâ–ãb©ÌçáÜ<‰‡ˆyeÅŠº endstream endobj 101 0 obj 358 endobj 57 0 obj <> endobj 56 0 obj <>stream xœ7Èþ NSIVVS+CMR7øøøÑwøµù8®÷¦÷1÷.÷+FJYCopyright (C) 1997 American Mathematical Society. All Rights ReservedCMR7Computer Modern7pÿ€ëÀÿ9qÀw øÂà—Ÿ÷êø«øð•—‹‹¥ûšc‹€ŒgŽW‰’ˆœihûj­š•Í›•“‘Ü‹š‹÷nkaXMvoûû@û3‹P€‹]º»‹¸˜³‹÷V³ä¶ÁwŸù?Ÿû¤š÷n•ûa–¯ Ú  7Ÿ §“ Ú› ¬ày endstream endobj 102 0 obj 322 endobj 50 0 obj <> endobj 49 0 obj <>stream xœ•T{LSgÿ.…Û«BQ¶f‹{»G|Lƒ·µL¦‚J©nNA[,´Ð—(‹v ô€‚ b©<„2|²¸„9ƒw›[µjœaNM¶„¹é¢‹ûîrM¶òÐÖè?Kî½É¹9çûßùýÎG ÐDÄ´ÕÖ¬—0_žªT.Š)ý)ãgüÌ~–È!°ü¾V…In™Ӱ<¿9‰bEÊ&¹Élcu9Z‹l®|žlQBB¼l™AÃê²TFYªÊ¢ÕT —¥›²t‹-Z¶L¯—)F+ d M†-Ôl–› f«EÃÊRMÛ4¬!‘µÍœÍh-V½ÊPz¥¡d”Ž”h%Z6 T´­A‘Hâ'‚Ä( I„'$*äˆh–¨LôKè¼Ð“aéa…ÿ†„4!ÉØ·‚Ã?sxqñu¿Òvì–]ö²JÚªü°¢¨8ùÐÈ]XŒ_ê8\íhdªkP¹[Ýí¨Êu¨¹ãûÙ°EHT ²xA22‡ãéŸÞkaž?Ìaj aWÄÇñ—¤ÝM:z%Y–Fc;ìgN KÈÒuï ^Y8_ˆ"oÏ{àí?á:Ĩ ü$}‘Üß]]ùPƨÉUøeizFÂRyÚ•_÷ù†¼Ÿ¯{ŸÇXÇpø*Gü4†3V(ʤÛ|Ì8ÔÑ;ø÷µå[vìd<МõTCzÕè!¿]z~pÐ{™[¾h~rrÒÒì[ˆÀa‡_ä,óÞaà'IqD ]!b€¼þôÐÕ{³=-mÎÎó‰°=ñ­­1ôú¹â2óÀŸ‚oAï Ô/ ƒpLyqÊuÖã4)žrsèV]=8êèÝ9U @µµpõ«Z6¾§0¤g0'ÄcSž8÷šàK BqP^%Ÿ²‡›9¿˜Ÿ-m—© Ââ ³ÜP”o]¬S»M½ÅL­«òFù‰‡ËAIeë´Ñ«UG.Ò•û«ö±@åBq󺸬ÎF8ÕLŸÑœ­ê §oúK˜zxSÛ¼¶ NSÝ=¿ÝÙ“™_K׬r僭ÌÞWÇÜãT9ê|Fz7ãLBòMq âg¬ôȤžä¼’üÃ׎sæ*h¡T-~~V`W¹­ŽòâX¿“ô£ÂÆ wƒ<my¹`±Ñ q-o udôwºËçîuÜoWnX iÇZÅ PïÀ€› :ÿ +~úsvÂ@&$[3߆¾n»Ÿ%*8É…_›~üæø‘­tŽ<½&çÇÛý¾‰ó3è¼xœ IÙIP|!ˆ¢$0‹%ÜÃñ;Âßm >&½¦f¨Þ€æCÛ]õžÚÓ54ÔÕÔ®uÖ|Nhƒ^ð°}&0q]uÚ®Ô¢%«s ™JúvíHÏ…º¾³tkî@õq Üîq´ü¢Úú2fÕE)X P]¬-Ù U@­ÛÚsê«¿{qD°ˆsƒ˜}DüF<(uÕêJ³ÍtE³õø&ȽѾÓÑS6  ãÜÚ ›|â<ëÏ›ã4- gpŠøfß—ŸuîÕn¦»¸dTÈÊ•ÿ•2Ñ#ü¯_”zÌncËæÚózÜ]´ä#'‚²‘l bn²w =9Ôf ŸÄ…‡{Ã#ú]•úô endstream endobj 103 0 obj 1266 endobj 47 0 obj <> endobj 46 0 obj <>stream xœ=mL[eÇŸ§·/W¨e0jF”Û»LãDÍê¡Ùt/d„e RжP\¡/£ëeÄRA¡œu²u0CjÃ*¥JÛ‹5f#q|IœÁD>8£ËL”°}М‹Ï’ÙejN·s’sþÿÿ¥‚PJók_jÜÓÔø´±®¶±¼âŠöûKƒü(•SÈÅÜ kùû‰zUrã‹|9ŸÏÛGéÞƒ&£û¸Ïcý˜WÜn|J,¯®®kœ6½Õâë,Þc6§Å›âaw«Ýæõ•Š5‡Øpÿâ„Ø`;aótÛÚèÝÎã'½6Xçn³y\„õ®gKË+v¢'ƒªp„^Í ·pX*_ÔÇ¢0ïÃ5ø6›¾ú)Ìòï@Ø?„·BËé¦þÃЦóÍï ††CÃÀû!Ðk`Kšèœ 9÷®žL,ý üo°ã#lcyí'¯Ù Ë’—]Ñvg‡¯y×j%æbéÚMÜ„ºª_Xq«i ÓlÐÝ£UÙ¬ø8Í6‡=ßëS±¶¶‡Õ:ïX\œ¥„ÿpÈg¥¥,'QÅáú†F?„N¡æãà$ð=æiõ,%/ðw/1ƒY“ý Ÿeë/Hgi°â!æà7XtEÊêa=rr;õõp÷`}_``p7ôÏÊÔŸ|tëÇ©óÈýtý üÁcŽ¸Â¶0UÉgŽJ}³±ÄL&í˜qŒ ÉÌòèL6øÒ‹ÆÝGV³9Ù©À›_Q¯\õ?úE°`á¦4† ¬Ã­Nâ =*a›éUØÊH÷¾³q“Aš˜ŠÁe>åš³Z\.KÙí#˜‡Õ«·nîù•E…_£_~«üƯ™)«ëŸ{eñô‡s Ó™Ù@¼y\H§®Ãð7a¯Ó9ÔÒi5tÙ»‚¶ äÔÈPð­a„!¾w "‚ÎÞ¨ ³ñ |-¢f-ã)i®£¬ŒhŠOhµHgµŸÑêù°'}û endstream endobj 104 0 obj 843 endobj 88 0 obj <> endobj 87 0 obj <>stream xœ¥UPçÞå`w£ˆhfIÍíµ’T´jʨñGô­ˆZ‰5   Çw<;Ù{ï.w(ˆ(ç-?r V0 jÖ`kü˜–Œ£ÑÖd☶‘Žy÷ú1µ{bÈdÚæŸÎÎìÎî|ß÷>Ïó>ï³4BÑ4=z™6>aéºÉÚDm’vú+ÁO‚üZ"¿¨j5ŽRÃü㹇c1k .±‘”Цã×ksóŠ Ù™Yš‰ÚÍôÙ³_×,ÌÉ0doNÓkÓ ²2rÒ ”&)wsvFAÑTÍBN³:¸Ã¨YaÌ0f¤?­ªÍÍÉ3d4‰¹é=EQcêå¦k ñY«³MÛti›¦RÔϨ•Ôjµ˜Š¦’¨ŸS¿¤fP˨dj9•H-¢´Ôhj¬B‰b)ÍÒ»èOCf…S¥«zC³Ãb ÃþÆÔ0_°éì öÑcºè÷‘USî|~\ï—ã=´¬ ,ã+êmïí€b-ÖR’?x\YAñÆX§cìŽøºÅC6ÎϾ]ÐèsƒÃµ_8ƒÏ…áa¦›Lq•‚•Qú$ÈWëØãÎ8pÊöÈù‹Øؽow3GÚå#Èí0RÉD<ÉX³ $9]¢ûšñf³ ×È"_V+»À‘pãƒfðTpƒcØHÖª Ž.‡ê”c%‘“X-œ?"à?Ùê]xupé^³Üuª òóì8ß§–ØBÛFq;ì„ vƒƒ3°}\ ³¬Â?¤÷ºÂÿŠÛýôÀmüö懲¼ÎÇö;̙ ÍÍóÕF<‰Aõƒ{÷?ŸÓOF× _×v ú¹{o’Ôä-Òã=æ¨:­ÆñÌÓ³“¯šG ù ¿^¬:&`#n`ÎÆÆ-\9W#(¤‹TI£¼K¢á.þë®J¾…{yŒ!#1’L$1d‰Tî“q/+×(“ÕÄCöðq$¤Sp2¿¹z ÃRÈJ’BBVÇOÍËûæ©”×±û¶ªK®á ìU—e“0Ȱ›¬–¥j¶²øÓGÈá‹¨ŽÆÑ$Z š%|‡ËÙ¦îgîBçúEÞ\o¼ ³w¦n+6¥¦Ln>“euv(%Tc_ˆ4ùSü4 È{›T yü!¨2ïÙ»ÊÕkçom]q!¢Lsɫ䒊Ê×á¼G8GVCU©,»mB9y‰<ó nYuáL;qýÛ‡³ÈÔ#‚£Ä^Y ÜAp6i­›Yâ±H˜ïÅ|i¬ÂÍx÷†ôü³;ñ±¢ZOý¥.ø˜ë‰ý„ŒR“ óC¾ìûö3Žfhsb£M±ËR«û¤€‹ØgOÁHÐhóëL`„w ŠŽêê‹:vvw¹î’ÇÕ¥f[Ù¡bE¦­¶CY­¥¦ü ¥¹ôryÛîßlábkùπ䨮vU9› ¸OïTjÒ­Zò\÷Ç%Áá:íÇS­ôÀ=L•T°À\~ðªÎÇ ù«á;1mÎÏ N—p¼’óoeµmÚî³ݯ›)HXo`fîÒŨ§ ›2ZƒÓ yÍA¢á¤á9Âf(ýïÃò>•l•Wð']î«Êèm«E˜ É‘cçžš‚¼FÊñ5öGV|/c‹½Ûá/|$¾ÿ½Œ XN~lEDà¤É«hpÞ‹çücîâÅø”ÎÉ[ñ+Ã[._kÜ×$â6QÜÝ?,ËðØ1ǽŠ,íÐûD#;_¬9. [iŽa~ G·*>± °â!³3ý×Û>*kîæá[Ín¨Q¬VV¡XmÞ&s!$CEWræž=Ò¶£…Þm‡Ók¸èZžŒÂý 49öùœûì~ð÷g$F—ª pÄczê¬È¡™úSŸ Wʉ|§ËÕ«È•m[+æC>¬udåêuYS…ÁP6ÕjSÄhµŸs4B£âºÖ qVW§0Ô£I6> endobj 45 0 obj <> endobj 42 0 obj <> endobj 39 0 obj <> endobj 36 0 obj <> endobj 28 0 obj <> endobj 25 0 obj <> endobj 22 0 obj <> endobj 19 0 obj <> endobj 16 0 obj <> endobj 13 0 obj <> endobj 10 0 obj <> endobj 89 0 obj <> endobj 58 0 obj <> endobj 51 0 obj <> endobj 2 0 obj <>endobj xref 0 106 0000000000 65535 f 0000032429 00000 n 0000081528 00000 n 0000032306 00000 n 0000032477 00000 n 0000030802 00000 n 0000000015 00000 n 0000002939 00000 n 0000033729 00000 n 0000033487 00000 n 0000080104 00000 n 0000046366 00000 n 0000046091 00000 n 0000079654 00000 n 0000043824 00000 n 0000043550 00000 n 0000079229 00000 n 0000035953 00000 n 0000035437 00000 n 0000078394 00000 n 0000055990 00000 n 0000055441 00000 n 0000077887 00000 n 0000053246 00000 n 0000052976 00000 n 0000077448 00000 n 0000049194 00000 n 0000048910 00000 n 0000076657 00000 n 0000032532 00000 n 0000032562 00000 n 0000030962 00000 n 0000002959 00000 n 0000005564 00000 n 0000068356 00000 n 0000068130 00000 n 0000076518 00000 n 0000064483 00000 n 0000064188 00000 n 0000075671 00000 n 0000063577 00000 n 0000063364 00000 n 0000075528 00000 n 0000062546 00000 n 0000062289 00000 n 0000074994 00000 n 0000071331 00000 n 0000071085 00000 n 0000074568 00000 n 0000069710 00000 n 0000069465 00000 n 0000081086 00000 n 0000032660 00000 n 0000031106 00000 n 0000005585 00000 n 0000010038 00000 n 0000069035 00000 n 0000068822 00000 n 0000080950 00000 n 0000032780 00000 n 0000031258 00000 n 0000010059 00000 n 0000012465 00000 n 0000032889 00000 n 0000031410 00000 n 0000012486 00000 n 0000015578 00000 n 0000032954 00000 n 0000031562 00000 n 0000015599 00000 n 0000019857 00000 n 0000033041 00000 n 0000031714 00000 n 0000019878 00000 n 0000023163 00000 n 0000033128 00000 n 0000031858 00000 n 0000023184 00000 n 0000026945 00000 n 0000033248 00000 n 0000032010 00000 n 0000026966 00000 n 0000029397 00000 n 0000033313 00000 n 0000032154 00000 n 0000029418 00000 n 0000030781 00000 n 0000072532 00000 n 0000072282 00000 n 0000080526 00000 n 0000033422 00000 n 0000035416 00000 n 0000043529 00000 n 0000046070 00000 n 0000048889 00000 n 0000052955 00000 n 0000055420 00000 n 0000062268 00000 n 0000063344 00000 n 0000064168 00000 n 0000068108 00000 n 0000068801 00000 n 0000069444 00000 n 0000071063 00000 n 0000072261 00000 n 0000074546 00000 n trailer << /Size 106 /Root 1 0 R /Info 2 0 R >> startxref 81578 %%EOF Vol-1.5.4/Vol/doc/volDoc.tex0000644000175000017500000005523610611734424014605 0ustar sudipsudip\documentclass{article} \setlength{\evensidemargin}{.25in} \setlength{\oddsidemargin}{.25in} \setlength{\textwidth}{6.0in} %\setlength{\parindent}{0.25in} \setlength{\topmargin}{-0in} \setlength{\textheight}{8.0in} %\newtheorem{theorem}{Theorem} %\newtheorem{proposition}{Proposition} %\newtheorem{lemma}{Lemma} %\newtheorem{corollary}{Corollary} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} \bibliographystyle{siam} \title{\bf An implementation of the Volume Algorithm} \author{Francisco Barahona and Laszlo Ladanyi} \date{April 19, 2007} \maketitle %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Introduction} Here we describe an implementation of the Volume algorithm (VA) originally presented in \cite{BA1}. The following sub-directories of {\tt coin-Vol} contain the relevant pieces. The directory {\tt coin-Vol/Vol/src} contains the core of the algorithm. The directory {\tt coin-Vol/Vol/examples/VolUfl} contains the necessary files for solving uncapacitated facility location problems. The directory \break {\tt coin-Vol/Vol/examples/Volume-LP} contains code for dealing with combinatorial linear programs. The directory {\tt coin-Vol/Vol/examples/VolLp} also contains code for combinatorial linear programs, this implementation relies on other parts of {\tt COIN}, while the implementation in \break {\tt coin-Vol/Vol/examples/Volume-LP} is self-contained. In {\tt COIN/Osi/OsiVol} there is code to call the VA through {\tt OSI}. %The directory {\tt COIN/Clp/Samples} contains sample code for using %the VA followed by {\tt Clp}. %The directory {\tt COIN/Examples/MaxCut} %contains code for doing Branch-and-Cut based on the VA, this is %applied to the Max-Cut problem. Now we give the details of each directory. We hope to receive reports about bugs and/or successful experiences. \section{{\tt coin-Vol}} Most users should not need to modify any of the files here. The file {\tt INSTALL} contains information on how to compile and build the code. \section{{\tt coin-Vol/Vol/src}} The algorithm is in {\tt VolVolume.cpp} and the header file is {\tt VolVolume.hpp}. \section{{\tt coin-Vol/Vol/Examples/VolUfl}} We focus here on the {\it uncapacitated facility location problem} (UFLP) as an example of implementation, see \cite{BC} for some of the theoretical issues. The files here are {\tt INSTALL}, {\tt Makefile}, {\tt Makefile.in}, {\tt ufl.cpp}, {\tt ufl.hpp}, {\tt ufl.par} and {\tt data.gz}. The file {\tt INSTALL} contains information on how to compile and build. As a first step, a new user should be able to run the code ``as is''. This can also be used as a framework for Lagrangian relaxation. The user would have to modify the files {\tt ufl.hpp}, {\tt ufl.cpp}, {\tt ufl.par}, and {\tt data}, to produce an implementation for a different problem. Now we present the linear program used in \cite{BC}. This is \pagebreak[4] \begin{eqnarray} \min \sum c_{ij} x_{ij} & + & \sum f_i y_i \label{fp1} \\ \sum_i x_{ij} & = & 1, \hbox{ for all } j, \label{fp2} \\ x_{ij} & \leq & y_i, \hbox{ for all } i, j, \label{fp3} \\ x_{ij} & \ge & 0, \hbox{ for all } i, j, \label{fp4} \\ y_i & \le & 1, \hbox{ for all } i. \label{fp5} \end{eqnarray} Here the variables $y$ correspond to the locations, and the variables $x$ represent connections between customers and locations. Let $u_j$ be a set of Lagrange multipliers for equations (\ref{fp2}). When we dualize equations (\ref{fp2}), we obtain the {\it lagrangian problem} \begin{eqnarray*} L(u) & = & \min \sum \bar c_{ij} x_{ij} + \sum \bar f_i y_i + \sum u_j, \\ x_{ij} & \le & y_i, \hbox{ for all } i, j, \\ x_{ij} & \ge & 0, \hbox{ for all } i, j, \\ y_i & \le & 1, \hbox{ for all } i. \end{eqnarray*} \noindent Where the {\it reduced costs} $\bar c_{ij}=c_{ij}-u_j$, and $\bar f_i = f_i$. We apply the VA to maximize $L(\cdot)$ and to produce a primal vector $(\bar x, \bar y)$ that is an approximate solution of (\ref{fp1})-(\ref{fp5}). Using this primal information we run a heuristic that gives an integer solution. In what follows we describe the different files in this directory. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{{\tt ufl.par}} This file contains a set of parameters that control the algorithm and contain some information about the data. Each line has the format {\tt keyword=value} \noindent where {\tt keyword} should start in the first column. If we add any other character in the first column, the line is ignored or considered as a comment. The file looks as below \bigskip \begin{verbatim} fdata=data *dualfile=dual.txt dual_savefile=dual.txt int_savefile=int_sol.txt h_iter=100 printflag=3 printinvl=5 heurinvl=10 greentestinvl=1 yellowtestinvl=4 redtestinvl=10 lambdainit=0.1 alphainit=0.1 alphamin=0.0001 alphafactor=0.5 alphaint=50 maxsgriters=2000 primal_abs_precision=0.02 gap_abs_precision=0. gap_rel_precision=0.01 granularity=0. \end{verbatim} The first group of parameters are specific to the UFLP and the user should define them. {\tt fdata} is the name of the file containing the data. {\tt dualfile} is the name of a file containing an initial dual vector. If we add an extra character at the beginning ({\tt *dualfile}) this line is ignored, this means that no initial dual vector is given. {\tt dual\_savefile} is the name of a file where we save the final dual vector. If this line is missing, then the dual vector is not saved. {\tt int\_savefile} is the name of a file to save the best integer solution found by the heuristic procedure, if this line is missing, then this vector is not saved. {\tt h\_iter} is the number of times that the heuristic is run after the VA has finished. The remaining parameters are specific to the VA. {\tt printflag} controls the level of output, it should be an integer between 0 and 5. {\tt printinvl=k} means that we print algorithm information every {\tt k} iterations. {\tt heurinvl=k} means that the primal heuristic is run every {\tt k} iterations. {\tt greentestinvl=k} means that after {\tt k} consecutive green iterations the value of $\lambda$ is multiplied by 2. {\tt yellowtestinvl=k} means that after {\tt k} consecutive yellow iterations the value of $\lambda$ is multiplied by 1.1. {\tt redtestinvl=k} means that after {\tt k} consecutive red iterations the value of $\lambda$ is multiplied by 0.67. {\tt lambdainit} is the initial value of $\lambda$. {\tt alphainit} is the initial value of $\alpha$. {\tt alphafactor=f} and {\tt alphaint=k} mean that every {\tt k} iterations we check if the objective function has increased by at least 1\%, if not we multiply $\alpha$ by {\tt f}. There are three termination criteria. First {\tt maxsgriter} is the maximum number of iterations. The second terminating criterion is as follows. {\tt primal\_abs\_precision} is the maximum primal violation to consider a primal vector ``near-feasible''. Let {\tt gap\_rel\_precision=$g$}, let $z$ be the value of the current dual solution, and $p$ be the value of a current near-feasible primal solution. If $|z| > 0.0001$ and $$ { | z - p | \over | z | } < g, $$ then the algorithms stops. Let {\tt gap\_abs\_precision=$f$}, if $|z| \le 0.0001$ and $| z - p | < f$ then we stop. Finally, let {\tt granularity=$k$}, and let $U$ be the value of the best heuristic integer solution found. Then if $ U - z < k$ we stop. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{{\tt data}} The file {\tt data} has the following format. On the first line we have the number of possible locations and the number of customers. On the next lines, the cost of opening each location appears, one cost per line. Then each of the remaining lines is like $ i \quad j \quad d_{ij}, $ \noindent where $i$ refers to a location, $j$ refers to a customer, and $d_{ij}$ is the cost of serving customer $j$ from location $i$. The indices $i$ and $j$ start from 1. If a pair $i,j$ is missing then the cost $d_{ij}$ is set to $10^7$. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{{\tt ufl.hpp}} This file contains C++ classes specific to the UFLP. First we have a class of parameters specific to the UFLP. The description of these parameters appears in the preceding section. \begin{verbatim} class UFL_parms { public: string fdata; // file with the data string dualfile; // file with an initial dual solution string dual_savefile; // file to save final dual solution string int_savefile; // file to save primal integer solution int h_iter; // number of times that the primal heuristic will be // run after termination of the volume algorithm UFL_parms(const char* filename); ~UFL_parms() {} }; \end{verbatim} Before the next class we should mention the classes {\tt VOL\_dvector} and {\tt VOL\_ivector} defined in {\tt VolVolume.hpp}. The pseudo-code below illustrates their use. \begin{verbatim} int n=100; VOL_dvector x(n); // a double vector with n entries x=0.; // sets to 0. all entries of x VOL_dvector y; // a double vector, it size remains to be set y.allocate(n); // size is set y=x; // copy each entry of x into y VOL_dvector z(y); // a double vector of the same size as y, // all entries of y are copied into z x[0]=-1; // first entry of x is set to -1 y[0]=x[0]; // copy first entry of x into first entry of y \end{verbatim} The class {\tt VOL\_ivector} is used for vectors of {\tt int}. One can do the same operations as for {\tt VOL\_dvector}. Then we have a class containing the data for the UFLP. \begin{verbatim} class UFL_data { // original data for uncapacitated facility location public: VOL_dvector fcost; // cost for opening facilities VOL_dvector dist; // cost for connecting a customer to a facility VOL_dvector fix; // vector saying if some variables should be fixed // if fix=-1 nothing is fixed int ncust, nloc; // number of customers, number of locations VOL_ivector ix; // best integer feasible solution so far double icost; // value of best integer feasible solution public: UFL_data() : icost(DBL_MAX) {} ~UFL\_data() {} }; \end{verbatim} Then we have \begin{verbatim} class UFL_hook : public VOL_user_hooks { public: // for all hooks: return value of -1 means that volume should quit // compute reduced costs int compute_rc(void * user_data, const VOL_dvector& u, VOL_dvector& rc); // solve lagrangian problem int solve_subproblem(void * user_data, const VOL_dvector& u, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector&v, double& pcost); // primal heuristic // return DBL_MAX in heur_val if feas sol wasn't/was found int heuristics(void * user_data, const VOL_problem& p, const VOL_dvector& x, double& heur_val); }; \end{verbatim} Here the function {\tt compute\_rc} is used to compute reduced costs. In the function {\tt solve\_subproblem} we solve the lagrangian problem. In {\tt heuristics} we run a heuristic to produce a primal integer solution. Finally in this file we have {\tt UFL\_parms::UFL\_parms(const char *filename)}, where we read the values for the members of {\tt UFL\_parms}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{{\tt ufl.cpp}} This file contains several functions that we describe below. First we have {\tt int main(int argc, char* argv[])}. In here we initialize the classes described in {\tt ufl.hpp}, and read the data. Then {\tt volp.psize()} is set to the number of primal variables, and {\tt volp.dsize()} is set to the number of dual variables. Then we check if a dual solution is provided and if so we read it. For the UFLP all relaxed constraints are equations, so the dual variables are unrestricted. In this case we do not have to set bounds for the dual variables. If we have inequalities of the type $ax \ge b$, then we have to set the lower bounds of their dual variables equal to 0. If we had constraints of the type type $ax \le b$, then we have to set the upper bounds of their variables equal to 0. This would be done as in the pseudo-code below. \begin{verbatim} // first the lower bounds to -inf, upper bounds to inf volp.dual_lb.allocate(volp.dsize); volp.dual_lb = -1e31; volp.dual_ub.allocate(volp.dsize); volp.dual_ub = 1e31; // now go through the relaxed constraints and change the lb of the ax >= b // constrains to 0, and change the ub of the ax <= b constrains to 0. for (i = 0; i < volp.dsize; ++i) { if ("constraint i is '<=' ") { volp.dual_ub[i] = 0; } if ("constraint i is '>=' ") { volp.dual_lb[i] = 0; } } \end{verbatim} The function {\tt volp.solve} invokes the VA. After completion we compute the violation of the fractional primal solution obtained. This vector is {\tt psol}. Then we check if the user provided the name of a file to save the dual solution. If so, we save it. Then we run the primal heuristic using {\tt psol} as an input. Notice that this heuristic has also been run periodically during the execution of the VA. Then if the user has provided the name of a file to save the integer heuristic solution, we do it. Finally the values of the solutions and some statistics are printed. The next function is {\tt void UFL\_read\_data(const char* fname, UFL\_data\& data)}, where we read the data. {\tt data.nloc} is the number of locations, {\tt data.ncust} is the number of customers. {\tt data.fcost} is a vector containing the cost of opening each location. {\tt data.dist} is a vector containing the cost of serving customers from facilities. All entries are initialized to $10^7$ and then particular entries are being set with the statement {\tt dist[(i-1)*ncust + j-1]=cost;} \noindent where {\tt i} is the index of a location and {\tt j} is the index of a customer. Here the indices start from 1. Finally we have a vector {\tt data.fix} associated with the locations. A particular entry is set to 0 if the location should be closed, it is set to 1 if it should be open, and it is set to -1 if this variable is free. Initially all entries are set to -1. In the function {\tt double solve\_it(void * user\_data, const double* rdist, VOL\_ivector\& sol)} \noindent we solve the lagrangian problem. We receive the data and reduced costs as input and return a primal vector. The solution is in the vector {\tt sol}. Its first {\tt n} entries correspond to the locations, then all remaining entries correspond to connections between locations and customers. In the function {\tt int UFL\_hook::compute\_rc(void * user\_data, const VOL\_dvector\& u, VOL\_dvector\& rc)} \noindent we compute the reduced costs. They will be used to solve the lagrangian problem. In the function \begin{verbatim} int UFL_hook::solve_subproblem(void *user_data, const VOL_dvector& u, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost) \end{verbatim} \noindent we compute the lagrangian value, we call {\tt solve\_it}, we compute the objective value and the vector $v$ defined as follows. If $\hat x$ is the primal solution given by {\tt solve\_it}, and $Ax \sim b$ is the set of relaxed constraints, then the difference $v$ is $$v = b - A \hat x.$$ The last function in this file is \begin{verbatim} int UFL_hook::heuristics(void * user_data, const VOL_problem& p, const VOL_dvector& x, double& icost) \end{verbatim} \noindent where we run the following simple heuristic. Given a fractional solution $(\bar x, \bar y)$, let $\bar y_i$ be the variable associated with location $i$. We pick a random number $r \in [ 0, 1 ]$ and if $r < \bar y_i$ facility $i$ is open, and closed otherwise. We repeat this for every facility, then given the set of open facilities we find a minimum cost assignment of customers. This function is invoked periodically in the VA and by the main program after the VA has finished. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{{\tt coin-Vol/Vol/examples/Volume-LP}} Here we focus on {\it Combinatorial Linear Programs}, these are linear programs where the matrix has 0, 1, -1 coefficients and the variables are bounded between 0 and 1. The VA has been very effective at producing fast approximate solutions to these LPs, see \cite{BA2}. As a first step, a new user should be able to run our code ``as is''. The input should be an MPS file. Initially this directory contains the files: {\tt README, Makefile, Makefile.in lp.hpp, lp.cpp, lp.par,} %\goodbreak {\tt data.mps.gz, lpc.h, lpc.cpp, reader.h, reader.cpp}. On a Unix system one should type ``{\tt make}'' and ``{\tt volume-lp}'' to run the code. Then the code will run and produce the files {\tt primal.txt} and {\tt dual.txt} that contain approximate solutions to both the primal and the dual problem. \smallskip We assume that we have an LP like \begin{eqnarray} &\min c x \label{fp1x} \\ &Ax \sim b \label{fp2x} \\ &l \leq x \le u. \label{fp3x} \end{eqnarray} Let $\pi$ be a set of Lagrange multipliers for constraints (\ref{fp2x}). When we dualize them we obtain the {\it lagrangian problem} \begin{eqnarray*} L(u) & = & \min (c-\pi A) x + \pi b, \\ &&l \leq x \le u. \end{eqnarray*} We apply the VA to maximize $L(\cdot)$ and to produce a dual vector $\bar \pi$, and primal vector $\bar x$ that is an approximate solution of (\ref{fp1x})-(\ref{fp3x}). In what follows we describe the files {\tt lp.par} and {\tt data.mps}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{{\tt lp.par}} This file contains a set of parameters that control the algorithm and contain information about the data. Each line has the format {\tt keyword=value} \noindent where {\tt keyword} should start in the first column. If we add any other character in the first column, the line is ignored or considered as a comment. The file looks as below \bigskip \begin{verbatim} fdata=data.mps *dualfile=dual.txt dual_savefile=dual.txt primal_savefile=primal.txt h_iter=0 var_ub=1.0 printflag=3 printinvl=20 heurinvl=100000000 greentestinvl=2 yellowtestinvl=2 redtestinvl=10 lambdainit=0.1 alphainit=0.01 alphamin=0.0001 alphafactor=0.5 alphaint=80 maxsgriters=2000 primal_abs_precision=0.02 gap_abs_precision=0. gap_rel_precision=0.01 granularity=0. \end{verbatim} The first group of parameters are specific to LP and the user should define them. {\tt fdata} is the name of the file containing the data. {\tt dualfile} is the name of a file containing an initial dual vector. If we add an extra character at the beginning ({\tt *dualfile}) this line is ignored, this means that no initial dual vector is given. {\tt dual\_savefile} is the name of a file where we save the final dual vector. If this line is missing, then the dual vector is not saved. {\tt primal\_savefile} is the name of a file to save the primal solution, if this line is missing, then this vector is not saved. {\tt h\_iter} is the number of times that the heuristic is run after the VA has finished. We did not include a heuristic in this implementation. {\tt var\_ub} is an upper bound for all primal variables, for 0-1 problems we set {\tt var\_ub=1}. The remaining parameters are specific to the VA. {\tt printflag} controls the level of output, it should be an integer between 0 and 5. {\tt printinvl=k} means that we print algorithm information every {\tt k} iterations. {\tt heurinvl=k} means that the primal heuristic is run every {\tt k} iterations. {\tt greentestinvl=k} means that after {\tt k} consecutive green iterations the value of $\lambda$ is multiplied by 2. {\tt yellowtestinvl=k} means that after {\tt k} consecutive yellow iterations the value of $\lambda$ is multiplied by 1.1. {\tt redtestinvl=k} means that after {\tt k} consecutive red iterations the value of $\lambda$ is multiplied by 0.67. {\tt lambdainit} is the initial value of $\lambda$. {\tt alphainit} is the initial value of $\alpha$. {\tt alphafactor=f} and {\tt alphaint=k} mean that every {\tt k} iterations we check if the objective function has increased by at least 1\%, if not we multiply $\alpha$ by {\tt f}. There are three termination criteria. First {\tt maxsgriter} is the maximum number of iterations. The second terminating criterion is as follows. {\tt primal\_abs\_precision} is the maximum primal violation to consider a primal vector ``near-feasible''. Let {\tt gap\_rel\_precision=$g$}, let $z$ be the value of the current dual solution, and $p$ be the value of a current near-feasible primal solution. If $|z| > 0.0001$ and $$ { | z - p | \over | z | } < g, $$ then the algorithms stops. Let {\tt gap\_abs\_precision=$f$}, if $|z| \le 0.0001$ and $| z - p | < f$ then we stop. Finally, let {\tt granularity=$k$}, and let $U$ be the value of the best heuristic integer solution found. Then if $ U - z < k$ we stop. We did not include any heuristic in this implementation. \subsection{{\tt data.mps}} This is an MPS file that is read with code in {\tt reader.cpp}. If a different type of input has to be used, one should change the code in {\tt reader.cpp}. \section{{\tt coin-Vol/Vol/examples/VolLp}} This code treats linear programs in a similar way as it is done in {\tt coin-Vol/Vol/examples/Volume-LP}, the main difference is that this code uses other components of {\tt COIN-OR} while the code in \goodbreak {\tt coin-Vol/Vol/examples/Volume-LP} is self contained. The files here are {\tt INSTALL, Makefile, Makefile.in %\goodbreak Makefile.vollp, vollp.cpp}. The {\tt INSTALL} contains instructions on how to compile and build the code. The input should be an MPS file. \section{{\tt COIN/Osi/OsiVol}} In this directory there is the file {\tt OsiVolSolverInterface.cpp} that allows the user to call the VA through {\tt OSI}. This is also intended to deal with combinatorial linear programs. The code below reads an MPS file and calls the VA through OSI. \begin{verbatim} #include "OsiVolSolverInterface.hpp" #include int main(int argc, char *argv[]) { OsiVolSolverInterface osilp; osilp.readMps("file","mps"); osilp.initialSolve(); const int numCols=osilp.getNumCols(); const double *x=osilp.getColSolution(); for (int j=0; j Debug Win32 Debug x64 Release Win32 Release x64 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9} StaticLibrary StaticLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true EnableFastChecks EditAndContinue _DEBUG;%(PreprocessorDefinitions) 0x0409 true ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true true NDEBUG;%(PreprocessorDefinitions) 0x0409 true X64 ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true EnableFastChecks ProgramDatabase _DEBUG;%(PreprocessorDefinitions) 0x0409 true X64 Default ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS NDEBUG;%(PreprocessorDefinitions) 0x0409 true Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Vol-1.5.4/Vol/MSVisualStudio/v10/OsiVolUnitTest/0000755000175000017500000000000013434204224020265 5ustar sudipsudipVol-1.5.4/Vol/MSVisualStudio/v10/OsiVolUnitTest/OsiVolUnitTest.vcxproj0000644000175000017500000003260712101652442024624 0ustar sudipsudip Debug Win32 Debug x64 Release Win32 Release x64 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC} OsiVolUnitTest Win32Proj Application Unicode false Application Unicode Application Unicode false Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;..\..\..\src;..\..\..\src\OsiVol;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE; COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue libVol.lib;libOsiVol.lib;libOsi.lib;libOsiCommonTest.lib;libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true Console MachineX86 false MaxSpeed true ..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;..\..\..\src;..\..\..\src\OsiVol;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE; COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS MultiThreadedDLL true Level3 ProgramDatabase libVol.lib;libOsiVol.lib;libOsi.lib;libOsiCommonTest.lib;libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true Console true true MachineX86 false X64 Disabled ..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;..\..\..\src;..\..\..\src\OsiVol;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE; COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase libVol.lib;libOsiVol.lib;libOsi.lib;libOsiCommonTest.lib;libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true Console MachineX64 false X64 MaxSpeed true ..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;..\..\..\src;..\..\..\src\OsiVol;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE; COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS MultiThreadedDLL true Level3 ProgramDatabase libVol.lib;libOsiVol.lib;libOsi.lib;libOsiCommonTest.lib;libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true Console true true MachineX64 false {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {109d6e6f-6d91-460f-86ae-df27400e09a9} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false {320f1794-907c-4dfc-9c99-31338c658050} false {da559014-23bb-4fd9-b0fb-562ccf38c6b9} false Vol-1.5.4/Vol/MSVisualStudio/v10/Vol.sln0000644000175000017500000001212711537767777016670 0ustar sudipsudip Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libVol", "libVol\libVol.vcxproj", "{DA559014-23BB-4FD9-B0FB-562CCF38C6B9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiVol", "libOsiVol\libOsiVol.vcxproj", "{320F1794-907C-4DFC-9C99-31338C658050}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiVolUnitTest", "OsiVolUnitTest\OsiVolUnitTest.vcxproj", "{23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsi", "..\..\..\Osi\MSVisualStudio\v10\libOsi\libOsi.vcxproj", "{7D98E2CB-876E-4F75-9F71-77D3FE87E149}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiCommonTest", "..\..\..\Osi\MSVisualStudio\v10\libOsiCommonTest\libOsiCommonTest.vcxproj", "{109D6E6F-6D91-460F-86AE-DF27400E09A9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "..\..\..\CoinUtils\MSVisualStudio\v10\libCoinUtils\libCoinUtils.vcxproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Debug|Win32.ActiveCfg = Debug|Win32 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Debug|Win32.Build.0 = Debug|Win32 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Debug|x64.ActiveCfg = Debug|x64 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Debug|x64.Build.0 = Debug|x64 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Release|Win32.ActiveCfg = Release|Win32 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Release|Win32.Build.0 = Release|Win32 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Release|x64.ActiveCfg = Release|x64 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Release|x64.Build.0 = Release|x64 {320F1794-907C-4DFC-9C99-31338C658050}.Debug|Win32.ActiveCfg = Debug|Win32 {320F1794-907C-4DFC-9C99-31338C658050}.Debug|Win32.Build.0 = Debug|Win32 {320F1794-907C-4DFC-9C99-31338C658050}.Debug|x64.ActiveCfg = Debug|x64 {320F1794-907C-4DFC-9C99-31338C658050}.Debug|x64.Build.0 = Debug|x64 {320F1794-907C-4DFC-9C99-31338C658050}.Release|Win32.ActiveCfg = Release|Win32 {320F1794-907C-4DFC-9C99-31338C658050}.Release|Win32.Build.0 = Release|Win32 {320F1794-907C-4DFC-9C99-31338C658050}.Release|x64.ActiveCfg = Release|x64 {320F1794-907C-4DFC-9C99-31338C658050}.Release|x64.Build.0 = Release|x64 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Debug|Win32.ActiveCfg = Debug|Win32 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Debug|Win32.Build.0 = Debug|Win32 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Debug|x64.ActiveCfg = Debug|x64 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Debug|x64.Build.0 = Debug|x64 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Release|Win32.ActiveCfg = Release|Win32 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Release|Win32.Build.0 = Release|Win32 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Release|x64.ActiveCfg = Release|x64 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Release|x64.Build.0 = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.ActiveCfg = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.Build.0 = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.ActiveCfg = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.Build.0 = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.ActiveCfg = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.Build.0 = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.ActiveCfg = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.Build.0 = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.ActiveCfg = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.Build.0 = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.ActiveCfg = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.Build.0 = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.Build.0 = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.ActiveCfg = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.Build.0 = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal Vol-1.5.4/Vol/MSVisualStudio/v10/libOsiVol/0000755000175000017500000000000013434204224017254 5ustar sudipsudipVol-1.5.4/Vol/MSVisualStudio/v10/libOsiVol/libOsiVol.vcxproj0000644000175000017500000002050712102314472022575 0ustar sudipsudip Debug Win32 Debug x64 Release Win32 Release x64 {320F1794-907C-4DFC-9C99-31338C658050} libOsiVol ManagedCProj StaticLibrary StaticLibrary false v90 StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi;..\..\..\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS ..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi;..\..\..\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS X64 ..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi;..\..\..\src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS X64 ..\..\..\..\BuildTools\headers;..\..\..\..\CoinUtils\src;..\..\..\..\Osi\src\Osi;..\..\..\src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS Default true true true true true true Vol-1.5.4/Vol/MSVisualStudio/v9/0000755000175000017500000000000013434204224015302 5ustar sudipsudipVol-1.5.4/Vol/MSVisualStudio/v9/libVol/0000755000175000017500000000000013434204224016531 5ustar sudipsudipVol-1.5.4/Vol/MSVisualStudio/v9/libVol/libVol.vcproj0000644000175000017500000002032211500004701021172 0ustar sudipsudip Vol-1.5.4/Vol/MSVisualStudio/v9/OsiVolUnitTest/0000755000175000017500000000000013434204224020215 5ustar sudipsudipVol-1.5.4/Vol/MSVisualStudio/v9/OsiVolUnitTest/OsiVolUnitTest.vcproj0000644000175000017500000002022711500004701024346 0ustar sudipsudip Vol-1.5.4/Vol/MSVisualStudio/v9/Vol.sln0000644000175000017500000001306511500004701016553 0ustar sudipsudip Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libVol", "libVol\libVol.vcproj", "{DA559014-23BB-4FD9-B0FB-562CCF38C6B9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiVol", "libOsiVol\libOsiVol.vcproj", "{320F1794-907C-4DFC-9C99-31338C658050}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiVolUnitTest", "OsiVolUnitTest\OsiVolUnitTest.vcproj", "{23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}" ProjectSection(ProjectDependencies) = postProject {DA559014-23BB-4FD9-B0FB-562CCF38C6B9} = {DA559014-23BB-4FD9-B0FB-562CCF38C6B9} {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {109D6E6F-6D91-460F-86AE-DF27400E09A9} = {109D6E6F-6D91-460F-86AE-DF27400E09A9} {320F1794-907C-4DFC-9C99-31338C658050} = {320F1794-907C-4DFC-9C99-31338C658050} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsi", "..\..\..\Osi\MSVisualStudio\v9\libOsi\libOsi.vcproj", "{7D98E2CB-876E-4F75-9F71-77D3FE87E149}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiCommonTest", "..\..\..\Osi\MSVisualStudio\v9\libOsiCommonTest\libOsiCommonTest.vcproj", "{109D6E6F-6D91-460F-86AE-DF27400E09A9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "..\..\..\CoinUtils\MSVisualStudio\v9\libCoinUtils\libCoinUtils.vcproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Debug|Win32.ActiveCfg = Debug|Win32 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Debug|Win32.Build.0 = Debug|Win32 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Debug|x64.ActiveCfg = Debug|x64 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Debug|x64.Build.0 = Debug|x64 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Release|Win32.ActiveCfg = Release|Win32 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Release|Win32.Build.0 = Release|Win32 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Release|x64.ActiveCfg = Release|x64 {DA559014-23BB-4FD9-B0FB-562CCF38C6B9}.Release|x64.Build.0 = Release|x64 {320F1794-907C-4DFC-9C99-31338C658050}.Debug|Win32.ActiveCfg = Debug|Win32 {320F1794-907C-4DFC-9C99-31338C658050}.Debug|Win32.Build.0 = Debug|Win32 {320F1794-907C-4DFC-9C99-31338C658050}.Debug|x64.ActiveCfg = Debug|x64 {320F1794-907C-4DFC-9C99-31338C658050}.Debug|x64.Build.0 = Debug|x64 {320F1794-907C-4DFC-9C99-31338C658050}.Release|Win32.ActiveCfg = Release|Win32 {320F1794-907C-4DFC-9C99-31338C658050}.Release|Win32.Build.0 = Release|Win32 {320F1794-907C-4DFC-9C99-31338C658050}.Release|x64.ActiveCfg = Release|x64 {320F1794-907C-4DFC-9C99-31338C658050}.Release|x64.Build.0 = Release|x64 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Debug|Win32.ActiveCfg = Debug|Win32 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Debug|Win32.Build.0 = Debug|Win32 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Debug|x64.ActiveCfg = Debug|x64 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Debug|x64.Build.0 = Debug|x64 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Release|Win32.ActiveCfg = Release|Win32 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Release|Win32.Build.0 = Release|Win32 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Release|x64.ActiveCfg = Release|x64 {23D4D61A-6B4C-4BBE-B3B7-0F041EB1EAEC}.Release|x64.Build.0 = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.ActiveCfg = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.Build.0 = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.ActiveCfg = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.Build.0 = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.ActiveCfg = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.Build.0 = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.ActiveCfg = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.Build.0 = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.ActiveCfg = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.Build.0 = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.ActiveCfg = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.Build.0 = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.Build.0 = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.ActiveCfg = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.Build.0 = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal Vol-1.5.4/Vol/MSVisualStudio/v9/libOsiVol/0000755000175000017500000000000013434204224017204 5ustar sudipsudipVol-1.5.4/Vol/MSVisualStudio/v9/libOsiVol/libOsiVol.vcproj0000644000175000017500000001606511577422763022363 0ustar sudipsudip Vol-1.5.4/Vol/Makefile.am0000644000175000017500000000701212462104016014103 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 387 2015-01-28 06:56:14Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories # ######################################################################## SUBDIRS = src # Don't do src/OsiVol recursively, since src/OsiVol/libOsiVol depends on src/libVol if COIN_HAS_OSI SUBDIRS += src/OsiVol endif ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = \ doc/ufldoc.bib \ doc/ufldoc.ps \ doc/ufldoc.tex \ examples/Volume-LP/lpc.cpp \ examples/Volume-LP/lp.h \ examples/Volume-LP/Makefile.in \ examples/Volume-LP/reader.cpp \ examples/Volume-LP/lpc.h \ examples/Volume-LP/Doc \ examples/Volume-LP/Doc/doc.bib \ examples/Volume-LP/Doc/doc_latex.tex \ examples/Volume-LP/Doc/doc_latex.ps \ examples/Volume-LP/Doc/doc_latex.dvi \ examples/Volume-LP/data.mps.gz \ examples/Volume-LP/reader.h \ examples/Volume-LP/lp.cpp \ examples/Volume-LP/lp.par \ examples/Volume-LP/README \ examples/VolUfl/Makefile.in \ examples/VolUfl/doc \ examples/VolUfl/doc/ufldoc.bib \ examples/VolUfl/doc/ufldoc.tex \ examples/VolUfl/doc/ufldoc.ps \ examples/VolUfl/INSTALL \ examples/VolUfl/ufl.cpp \ examples/VolUfl/ufl.par \ examples/VolUfl/data.gz \ examples/VolUfl/ufl.hpp \ examples/VolLp/Makefile.in \ examples/VolLp/INSTALL \ examples/VolLp/vollp.cpp ######################################################################## # Extra Targets # ######################################################################## test: all cd test; $(MAKE) test unitTest: test # Doxygen documentation doxydoc: doxygen doxydoc/doxygen.conf clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) clean-local: clean-doxydoc .PHONY: doxydoc ######################################################################## # Installation of the addlibs file # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = vol.pc if COIN_HAS_OSI pkgconfiglib_DATA += osi-vol.pc endif addlibsdir = $(DESTDIR)$(datadir)/coin/doc/Vol install-data-hook: @$(mkdir_p) "$(addlibsdir)" if COIN_HAS_PKGCONFIG PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \ $(PKG_CONFIG) --libs vol > $(addlibsdir)/vol_addlibs.txt else if COIN_CXX_IS_CL echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libVol.lib @VOLLIB_LIBS_INSTALLED@" > $(addlibsdir)/vol_addlibs.txt else echo -L@abs_lib_dir@ -lVol @VOLLIB_LIBS_INSTALLED@ > $(addlibsdir)/vol_addlibs.txt endif endif uninstall-hook: rm -f $(addlibsdir)/vol_addlibs.txt install-exec-local: install-doc uninstall-local: uninstall-doc ######################################################################## # Maintainer Stuff # ######################################################################## # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = include BuildTools/Makemain.inc Vol-1.5.4/Vol/AUTHORS0000644000175000017500000000004410740705662013130 0ustar sudipsudipBarahona, Francisco Ladanyi, Laszlo Vol-1.5.4/Vol/README0000644000175000017500000000572213434065343012746 0ustar sudipsudip# Welcome to the COIN Vol Project ## Introduction Vol (Volume Algorithm) is an open-source implementation of a subgradient method that produces primal as well as dual solutions. The primal solution comes from estimating the volumes below the faces of the dual problem. This is an approximate method so the primal vector might have small infeasiblities that are negligible in many practical settings. The original subgradient algorithm produces only dual solutions. ## Background/Download Vol is written in C++ and is released as open source code under the [Eclipse Public License](http://www.opensource.org/licenses/eclipse-1.0)(EPL). To get all of the dependencies and build the `Vol` package, do ``` git clone https://github.com/coin-or/Vol Vol git clone https://github.com/coin-or-tools/BuildTools BuildTools/get.dependencies fetch BuildTools/get.dependencies build ``` To test by building an application, do ``` cd build/Vol/examples/VolUfl make ./ufl ``` ## Included Projects If you download the Vol package, you get [these](https://github.com/coin-or/Vol/blob/master/Dependencies) additional projects. ## Doxygen Documentation If you have `Doxygen` available, you can build the html documentation by typing ``` make doxydoc ``` in the `Vol` directory. Then open the file `coin-Vol/doxydoc/html/index.html` with a browser. Note that this creates the documentation for the `Vol` package as a whole. If you prefer to generate the documentation only for a subset of these projects, you can edit the file `Vol/doxydoc/doxygen.conf` to exclude directories (using the `EXCLUDE` variable, for example). If `Doxygen` is not available, you can use the link to the {{{Vol}}} html documentation listed below. ## Documentation * [Overview of different directories](https://projects.coin-or.org/Vol/attachment/wiki/WikiStart/volDoc.pdf?format=raw) * [The Volume Algorithm: Producing Primal Solutions With a Subgradient Method](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/7a1b25774639540a852565be0070cfb5?OpenDocument) * [On Some Difficult Linear Programs Coming from Set Partitioning](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/53731ca97769f3838525672f0070dc2b?OpenDocument) * [Solving Large Scale Uncapacitated Facility Location Problems](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/08e1ac62bb877f9a852567b500500996?OpenDocument) * [Near-Optimal Solutions to Large Scale Facility Location Problems](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/215bca4e7e2406ec852568430076860c?OpenDocument) * [Solving Steiner Tree Problems in Graphs with Lagrangian Relaxation](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/4a61544906b57a6d8525696c0057f955?OpenDocument&Highlight=0,barahona) * [Vol html documentation](http://www.coin-or.org/Doxygen/Vol/hierarchy.html) * [COIN-OR Initiative](http://www.coin-or.org/) Vol-1.5.4/Vol/config.guess0000755000175000017500000012706311420636474014413 0ustar sudipsudip#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Vol-1.5.4/Vol/test/0000755000175000017500000000000013434204224013030 5ustar sudipsudipVol-1.5.4/Vol/test/Makefile.in0000644000175000017500000004561713434066267015127 0ustar sudipsudip# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @COIN_HAS_OSITESTS_TRUE@noinst_PROGRAMS = osiUnitTest$(EXEEXT) @COIN_HAS_OSITESTS_TRUE@@COIN_HAS_SAMPLE_TRUE@am__append_1 = -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` subdir = test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/inc/config_vol.h CONFIG_CLEAN_FILES = PROGRAMS = $(noinst_PROGRAMS) am__osiUnitTest_SOURCES_DIST = osiUnitTest.cpp \ OsiVolSolverInterfaceTest.cpp @COIN_HAS_OSITESTS_TRUE@am_osiUnitTest_OBJECTS = \ @COIN_HAS_OSITESTS_TRUE@ osiUnitTest.$(OBJEXT) \ @COIN_HAS_OSITESTS_TRUE@ OsiVolSolverInterfaceTest.$(OBJEXT) osiUnitTest_OBJECTS = $(am_osiUnitTest_OBJECTS) am__DEPENDENCIES_1 = DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/inc depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(osiUnitTest_SOURCES) DIST_SOURCES = $(am__osiUnitTest_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSIVOLLIB_CFLAGS = @OSIVOLLIB_CFLAGS@ OSIVOLLIB_CFLAGS_INSTALLED = @OSIVOLLIB_CFLAGS_INSTALLED@ OSIVOLLIB_DEPENDENCIES = @OSIVOLLIB_DEPENDENCIES@ OSIVOLLIB_LIBS = @OSIVOLLIB_LIBS@ OSIVOLLIB_LIBS_INSTALLED = @OSIVOLLIB_LIBS_INSTALLED@ OSIVOLLIB_PCLIBS = @OSIVOLLIB_PCLIBS@ OSIVOLLIB_PCREQUIRES = @OSIVOLLIB_PCREQUIRES@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VOLLIB_CFLAGS = @VOLLIB_CFLAGS@ VOLLIB_CFLAGS_INSTALLED = @VOLLIB_CFLAGS_INSTALLED@ VOLLIB_DEPENDENCIES = @VOLLIB_DEPENDENCIES@ VOLLIB_LIBS = @VOLLIB_LIBS@ VOLLIB_LIBS_INSTALLED = @VOLLIB_LIBS_INSTALLED@ VOLLIB_PCLIBS = @VOLLIB_PCLIBS@ VOLLIB_PCREQUIRES = @VOLLIB_PCREQUIRES@ VOL_SVN_REV = @VOL_SVN_REV@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign @COIN_HAS_OSITESTS_TRUE@osiUnitTest_SOURCES = osiUnitTest.cpp OsiVolSolverInterfaceTest.cpp @COIN_HAS_OSITESTS_TRUE@osiUnitTest_LDADD = ../src/OsiVol/libOsiVol.la ../src/libVol.la \ @COIN_HAS_OSITESTS_TRUE@ $(OSITESTS_LIBS) $(OSIVOLLIB_LIBS) $(VOLLIB_LIBS) @COIN_HAS_OSITESTS_TRUE@osiUnitTest_DEPENDENCIES = ../src/OsiVol/libOsiVol.la ../src/libVol.la \ @COIN_HAS_OSITESTS_TRUE@ $(OSITESTS_DEPENDENCIES) $(OSIVOLLIB_DEPENDENCIES) $(VOLLIB_DEPENDENCIES) @COIN_HAS_OSITESTS_TRUE@AM_CPPFLAGS = \ @COIN_HAS_OSITESTS_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src` \ @COIN_HAS_OSITESTS_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiVol` \ @COIN_HAS_OSITESTS_TRUE@ $(COINUTILS_CFLAGS) $(OSI_CFLAGS) $(OSITESTS_CFLAGS) @COIN_HAS_OSITESTS_TRUE@osiunittestflags = $(am__append_1) ######################################################################## # Cleaning stuff # ######################################################################## # Here we list everything that is not generated by the compiler, e.g., # output files of a program DISTCLEANFILES = yy.mps xx.mps all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done osiUnitTest$(EXEEXT): $(osiUnitTest_OBJECTS) $(osiUnitTest_DEPENDENCIES) @rm -f osiUnitTest$(EXEEXT) $(CXXLINK) $(osiUnitTest_LDFLAGS) $(osiUnitTest_OBJECTS) $(osiUnitTest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiVolSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osiUnitTest.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-info-am @COIN_HAS_OSITESTS_TRUE@test: osiUnitTest$(EXEEXT) @COIN_HAS_OSITESTS_TRUE@ ./osiUnitTest$(EXEEXT) $(osiunittestflags) @COIN_HAS_OSITESTS_FALSE@test: @COIN_HAS_OSITESTS_FALSE@ @echo "********************* No test for Vol implemented *************************" .PHONY: test # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Vol-1.5.4/Vol/test/OsiVolSolverInterfaceTest.cpp0000644000175000017500000000103411575424216020632 0ustar sudipsudip// $Id$ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "OsiVolSolverInterface.hpp" //-------------------------------------------------------------------------- void OsiVolSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir) { // Do common solverInterface testing { OsiVolSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir,netlibDir); } } Vol-1.5.4/Vol/test/Makefile.am0000644000175000017500000000324311621723701015070 0ustar sudipsudip# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1559 2010-06-05 19:42:36Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # unitTest for OsiVol # ######################################################################## if COIN_HAS_OSITESTS noinst_PROGRAMS = osiUnitTest osiUnitTest_SOURCES = osiUnitTest.cpp OsiVolSolverInterfaceTest.cpp osiUnitTest_LDADD = ../src/OsiVol/libOsiVol.la ../src/libVol.la \ $(OSITESTS_LIBS) $(OSIVOLLIB_LIBS) $(VOLLIB_LIBS) osiUnitTest_DEPENDENCIES = ../src/OsiVol/libOsiVol.la ../src/libVol.la \ $(OSITESTS_DEPENDENCIES) $(OSIVOLLIB_DEPENDENCIES) $(VOLLIB_DEPENDENCIES) AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../src` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiVol` \ $(COINUTILS_CFLAGS) $(OSI_CFLAGS) $(OSITESTS_CFLAGS) osiunittestflags = if COIN_HAS_SAMPLE osiunittestflags += -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` endif test: osiUnitTest$(EXEEXT) ./osiUnitTest$(EXEEXT) $(osiunittestflags) else test: @echo "********************* No test for Vol implemented *************************" endif .PHONY: test ######################################################################## # Cleaning stuff # ######################################################################## # Here we list everything that is not generated by the compiler, e.g., # output files of a program DISTCLEANFILES = yy.mps xx.mps Vol-1.5.4/Vol/test/osiUnitTest.cpp0000644000175000017500000000463411575424216016046 0ustar sudipsudip// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). // $Id$ #include "CoinPragma.hpp" #include #include "OsiUnitTests.hpp" #include "OsiVolSolverInterface.hpp" using namespace OsiUnitTest; //---------------------------------------------------------------- // to see parameter list, call unitTest -usage //---------------------------------------------------------------- int main (int argc, const char *argv[]) { /* Start off with various bits of initialisation that don't really belong anywhere else. First off, synchronise C++ stream i/o with C stdio. This makes debugging output a bit more comprehensible. It still suffers from interleave of cout (stdout) and cerr (stderr), but -nobuf deals with that. */ std::ios::sync_with_stdio() ; /* Suppress an popup window that Windows shows in response to a crash. See note at head of file. */ WindowsErrorPopupBlocker(); /* Process command line parameters. */ std::map parms ; if (processParameters(argc,argv,parms) == false) return (1); std::string mpsDir = parms["-mpsDir"] ; std::string netlibDir = parms["-netlibDir"] ; /* Test Osi{Row,Col}Cut routines. */ { OsiVolSolverInterface volSi; testingMessage( "Testing OsiRowCut with OsiVolSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&volSi,mpsDir), {}, "vol", "rowcut unittest"); } { OsiVolSolverInterface volSi; testingMessage( "Testing OsiColCut with OsiVolSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&volSi,mpsDir), {}, "vol", "colcut unittest"); } /* Run the OsiVol class test, which calls the OsiSolverInterfaceCommonUnitTest. */ testingMessage( "Testing OsiVolSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiVolSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "vol", "osivol unittest"); /* We're done. Report on the results. */ std::cout.flush(); outcomes.print(); int nerrors; int nerrors_expected; outcomes.getCountBySeverity(TestOutcome::ERROR, nerrors, nerrors_expected); if (nerrors > nerrors_expected) std::cerr << "Tests completed with " << nerrors - nerrors_expected << " unexpected errors." << std::endl ; else std::cerr << "All tests completed successfully\n"; return (nerrors - nerrors_expected); } Vol-1.5.4/Vol/depcomp0000755000175000017500000003710011420636474013440 0ustar sudipsudip#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/Vol/vol.pc.in0000644000175000017500000000043711510106500013575 0ustar sudipsudipprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: Vol Description: Volume Algorithm URL: https://projects.coin-or.org/Vol Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lVol @VOLLIB_PCLIBS@ Cflags: -I${includedir} Requires: @VOLLIB_PCREQUIRES@ Vol-1.5.4/Vol/missing0000755000175000017500000002540611420636474013470 0ustar sudipsudip#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/Vol/install-sh0000755000175000017500000002202111420636474014063 0ustar sudipsudip#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # 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 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/BuildTools/0000755000175000017500000000000013434204224013371 5ustar sudipsudipVol-1.5.4/BuildTools/set_externals0000755000175000017500000001173411504414745016214 0ustar sudipsudip#!/bin/sh # Copyright (C) 2007 International Business Machines and # Copyright (c) 2009 Lehigh University # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # # $Id$ # # Adapted from prepare_new_release by Ted Ralphs, Lehigh Univ., 2009-07-07 # Modified: Lou Hafer SFU 2010-06-02 #set -x -v set -e # Know thy self. If there are no '/' chars in the command name, we're running # in the currrent directory. Otherwise, strip the command name, leaving the # prefix. Coin-functions is expected to live in the same directory. if expr "$0" : '.*/.*' >/dev/null 2>&1 ; then cmdDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else cmdDir='.' fi if test -r $cmdDir/coin-functions ; then . $cmdDir/coin-functions else echo "Cannot find utility functions file coin-functions; exiting." fi printHelp=0 exitValue=0 depFile= # stableExternals specifies externals which we do not want to convert to # releases, for whatever reason. stableExternals= if test "$#" -eq 0; then printHelp=1 else # Process the parameters. A parameter without an opening `-' is assumed to be # the dependency file. while test $# -gt 0 && test $exitValue = 0 && test $printHelp = 0 ; do case "$1" in -h* | --h*) printHelp=1 ;; -s* | --s*) if expr "$1" : '.*-s.*=.*' 2>&1 >/dev/null ; then stableExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift stableExternals=$1 fi ;; -*) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 exitValue=1 ;; *) depFile=$1 ;; esac shift done fi # Find the most recent release for each stable external. Allow for the # possibility that a stable branch has no associated release, or that the # user has asked to keep the stable external. if test $printHelp = 0 && test $exitValue = 0; then if test -r $depFile; then rm -f Externals.releases echo '' echo '===> Converting stable externals to releases ...' echo '' ext_name= ext_url= for i in `cat $depFile`; do if test "$ext_name" = ""; then ext_name="$i" else ext_url=$i if expr "$ext_name" : '#.*' >/dev/null 2>&1 ; then echo "Skipping $ext_name." ext_name= continue fi if expr "$stableExternals" : '.*'"$ext_name"'.*' 2>&1 >/dev/null ; then echo " $ext_name $ext_url unchanged" else extType=`extractTypeFromURL $ext_url` if test "$extType" = invalid ; then echo '' echo "The external URL $ext_url appears to be invalid. Exiting." echo '' exit 3 fi if test "$extType" = stable ; then ext_majVer=`extractMajorFromURL $ext_url` ext_minVer=`extractMinorFromURL $ext_url` ext_rel_url=`bestRelease $ext_url $ext_majVer $ext_minVer` if test -z "$ext_rel_url" ; then echo "There is no release for $ext_url" echo "Keeping $ext_url" else # Normal (not BuildTools/ThirdParty/Data) need a directory name, # and it may differ from the project name. Carefully preserve it. # ThirdParty URLs include BuildTools ; both named for emphasis case $ext_rel_url in */BuildTools/* | */ThirdParty/* | */Data/* ) ;; *) ext_tail=`extractTailFromExt $ext_url` ext_rel_url=${ext_rel_url}${ext_tail} ;; esac echo "Replacing $ext_url with $ext_rel_url" ext_url=$ext_rel_url fi else echo "Keeping $ext_url" fi fi echo "$ext_name $ext_url" >>Externals.releases ext_name= fi done echo '' echo '===> Updating svn:externals property...' echo '' svn propset svn:externals -F Externals.releases . svn propget svn:externals . rm Externals.releases else # if test -r depFile echo "" echo "Dependency file does not exist or is unspecified..." echo "" printHelp=1 exitvalue=2 fi fi if test $printHelp = 1 ; then cat < Options: -s Suppress conversion from stable to release for the listed externals (comma-separated list of project names, e.g., -s Osi,Cbc). This script takes as input a dependency file containing a list of stable versions of COIN projects on separate lines in the form Recommended practice is to keep the set of stable externals in a file called "Dependencies" in the project's root directory. A temporary file called "Externals.releases" in the same form, but with the URL of each stable version replaced by the URL of the latest associated release is produced. From this file, the script will set the svn:externals variable. It does not do an update or commit the change. After the script runs, do an update and test build, then commit the change if you are happy. EOF else cat </Data/Projname/. Macros below # will cope, but really you should be using pre-1.1 Data anyway. # Extract the COIN base from the URL, up to svn. Just in case it ever changes. # usage: baseURL=`extractBaseURL $svnURL` extractBaseURL () { exbu_baseURL=`echo $1 | sed -n -e 's|\(.*/svn\)/.*$|\1|p'` echo "$exbu_baseURL" } # Extract branch type (trunk/stable/release) from the URL. # usage: branchType=`extractTypeFromURL $svnURL` extractTypeFromURL () { etfu_type="invalid" case "$1" in */trunk* ) etfu_type=trunk ;; */stable/* ) etfu_type=stable ;; */releases/* ) etfu_type=release ;; esac echo $etfu_type } # Determine if this is a `normal' URL, defined as not Data, ThirdParty, or # BuildTools itself. ThirdParty lives in BuildTools as of 100628, so the # condition is redundant. Returns yes or no. # 101105 Exclude CoinBazaar, which follows the Data pattern. May not be the # correct choice if any CoinBazaar projects use BuildTools # usage: isNormal=`isNormalURL $svnURL` isNormalURL () { case $1 in */BuildTools/* | */ThirdParty/* | */Data/* | */CoinBazaar/* ) echo "no" ;; *) echo "yes" ;; esac } # Extract the project from a svn URL. The trick, for `normal' projects, is to # handle CHiPPS, which has CHiPPS/Alps, Bcps, Blis. We can't assume the # project name does not contain '/'. The heuristic is to look for everything # between svn and one of trunk, stable, releases, or end of line. # usage: projName=`extractProjFromURL $svnURL` extractProjFromURL () { epfu_URL="$1" epfu_projPat='\([^/][^/]*\)' epfu_sfxPat='.*$' case "$epfu_URL" in */Data/trunk/* ) epfu_pfxPat=svn/Data/trunk/ ;; */Data/stable/* | */Data/releases/* ) epfu_pfxPat='svn/Data/[^/][^/]*/[0-9][0-9.]*/' ;; */Data/* ) epfu_pfxPat='svn/Data/' ;; */ThirdParty/* ) epfu_pfxPat=svn/BuildTools/ThirdParty/ ;; *) epfu_type=`extractTypeFromURL $epfu_URL` epfu_pfxPat='svn/' epfu_projPat='\(.*\)' case $epfu_type in trunk | stable | release ) epfu_sfxPat=$epfu_type'.*$' ;; * ) epfu_sfxPat='$' ;; esac ;; esac epfu_projName=`echo $epfu_URL | sed -n -e 's|.*/'$epfu_pfxPat$epfu_projPat$epfu_sfxPat'|\1|p'` epfu_projName=`echo $epfu_projName | sed -e 's|/$||'` echo "$epfu_projName" } # Extract the tail (directory) from a URL that specifies an external. Relevant # only for normal projects, where the external will be a subdirectory # of the project. Returns null for Data / ThirdParty / BuildTools. # usage: projName=`extractTailFromExt $extURL` extractTailFromExt () { etfe_tail= case "$1" in */Data/* ) ;; */BuildTools/ThirdParty/* ) ;; */BuildTools/* ) ;; */CoinBazaar/* ) ;; *) etfe_pfxPat= case "$1" in */trunk/* ) etfe_pfxPat='.*/trunk/' ;; */stable/* ) etfe_pfxPat='.*/stable/[0-9][0-9.]*/' ;; */releases/* ) etfe_pfxPat='.*/releases/[0-9][0-9.]*/' ;; esac etfe_tail=`echo $1 | sed -n -e 's|'$etfe_pfxPat'\(.*\)|\1|p'` ;; esac echo "$etfe_tail" } # CppAD uses a version string of the form YYYMMDD.rr. What a pain in the ass. # Hence the scattered exceptions below. # Extract the entire version string from a stable or release URL. Returns a # null string if handed a trunk URL or if there's no version in the URL. The # version number must have at least major.minor to match. # usage: version=`extractVersionFromURL $svnURL` extractVersionFromURL () { evfu_URL="$1" if expr "$evfu_URL" : '.*/stable/.*' >/dev/null 2>&1 || expr "$evfu_URL" : '.*/releases/.*' >/dev/null 2>&1 ; then if expr "$evfu_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then evfu_verPat='\([0-9][0-9.]*\)' else evfu_verPat='\([0-9][0-9]*\.[0-9][0-9.]*\)' fi evfu_sfxPat='.*$' evfu_proj=`extractProjFromURL $evfu_URL` case "$evfu_URL" in */Data/stable/* | */Data/releases/* ) evfu_pfxPat='svn/Data/[^/][^/]*/' ;; */ThirdParty/* ) evfu_pfxPat='svn/BuildTools/ThirdParty/[^/][^/]*/[^/][^/]*/' ;; */Data/* ) evfu_pfxPat='svn/Data/'$evfu_proj'/[^/][^/]*/' ;; *) evfu_pfxPat='svn/'$evfu_proj'/[^/][^/]*/' ;; esac evfu_verVer=`echo $1 | sed -n -e 's|.*/'$evfu_pfxPat$evfu_verPat$evfu_sfxPat'|\1|p'` echo "$evfu_verVer" else echo "" fi } # Replace the entire version string from a stable or release URL. A trunk # URL will be unmodified. newRev will not be accessed unless the URL is a # release. The version must have at least major.minor to match. # usage: newURL=`replaceVersionInURL $oldURL $newMajor $newMinor $newRev` # and just for CppAD, # usage: newURL=`replaceVersionInURL $oldURL $newMajor $newRev` replaceVersionInURL () { if expr "$1" : '.*/CppAD/.*' >/dev/null 2>&1 ; then isCppAD=yes else isCppAD=no fi if test $isCppAD = no ; then rviu_verPat='[0-9][0-9]*\.[0-9][0-9.]*' else rviu_verPat='[0-9][0-9.]*' fi if expr "$1" : '.*/stable/.*' >/dev/null 2>&1 ; then if test $isCppAD = no ; then rviu_newVersion=$2.$3 else rviu_newVersion=$2 fi elif expr "$1" : '.*/releases/.*' >/dev/null 2>&1 ; then if test $isCppAD = no ; then rviu_newVersion=$2.$3.$4 else rviu_newVersion=$2.$3 fi else rviu_newVersion= rviu_newURL=$1 fi if test -n "$rviu_newVersion" ; then rviu_newURL=`echo $1 | sed -n -e 's|^\(.*\)/'$rviu_verPat'\(.*\)$|\1/'$rviu_newVersion'\2|p'` fi echo $rviu_newURL } # Extract the major version number from a stable or release URL. Returns -1 if # handed a trunk URL or if there's no version in the URL # usage: majVer=`extractMajorFromURL $svnURL` extractMajorFromURL () { ejfu_URL="$1" if expr "$ejfu_URL" : '.*/stable/.*' >/dev/null 2>&1 || expr "$ejfu_URL" : '.*/releases/.*' >/dev/null 2>&1 ; then ejfu_majPat='\([0-9][0-9]*\)' if expr "$ejfu_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then ejfu_sfxPat='.*$' else ejfu_sfxPat='\.[0-9][0-9]*.*$' fi ejfu_proj=`extractProjFromURL $ejfu_URL` case "$ejfu_URL" in */Data/stable/* | */Data/releases/* ) ejfu_pfxPat='svn/Data/[^/][^/]*/' ;; */ThirdParty/* ) ejfu_pfxPat='svn/BuildTools/ThirdParty/[^/][^/]*/[^/][^/]*/' ;; */Data/* ) ejfu_pfxPat='svn/Data/'$ejfu_proj'/[^/][^/]*/' ;; *) ejfu_pfxPat='svn/'$ejfu_proj'/[^/][^/]*/' ;; esac ejfu_majVer=`echo $ejfu_URL | sed -n -e 's|.*/'$ejfu_pfxPat$ejfu_majPat$ejfu_sfxPat'|\1|p'` echo "$ejfu_majVer" else echo "-1" fi } # Extract the minor version number from a stable or release URL. Returns -1 if # handed a trunk URL or if there's no version in the URL. # The CppAD form (YYYYMMDD.rr) doesn't have a minor version number. # usage: minVer=`extractMinorFromURL $svnURL` extractMinorFromURL () { emfu_URL="$1" if expr "$emfu_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then echo "-1" elif expr "$emfu_URL" : '.*/stable/.*' >/dev/null 2>&1 || expr "$emfu_URL" : '.*/releases/.*' >/dev/null 2>&1 ; then emfu_minPat='[0-9][0-9]*\.\([0-9][0-9]*\)' emfu_sfxPat='.*$' emfu_proj=`extractProjFromURL $emfu_URL` case "$emfu_URL" in */Data/stable/* | */Data/releases/* ) emfu_pfxPat='svn/Data/[^/][^/]*/' ;; */ThirdParty/* ) emfu_pfxPat='svn/BuildTools/ThirdParty/[^/][^/]*/[^/][^/]*/' ;; */Data/* ) emfu_pfxPat='svn/Data/'$emfu_proj'/[^/][^/]*/' ;; *) emfu_pfxPat='svn/'$emfu_proj'/[^/][^/]*/' ;; esac emfu_minVer=`echo $emfu_URL | sed -n -e 's|.*/'$emfu_pfxPat$emfu_minPat$emfu_sfxPat'|\1|p'` echo "$emfu_minVer" else echo "-1" fi } # Extract the release (revision) number from a release URL. Returns -1 if # handed a trunk or stable URL # usage: minVer=`extractReleaseFromURL $svnURL` extractReleaseFromURL () { erfu_URL="$1" if expr "$erfu_URL" : '.*/releases/.*' >/dev/null 2>&1 ; then if expr "$erfu_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then erfu_relPat='[0-9][0-9]*\.\([0-9][0-9]*\)' else erfu_relPat='[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\)' fi erfu_sfxPat='.*$' erfu_proj=`extractProjFromURL $erfu_URL` case "$erfu_URL" in */Data/releases/* ) erfu_pfxPat='svn/Data/[^/][^/]*/' ;; */ThirdParty/* ) erfu_pfxPat='svn/BuildTools/ThirdParty/[^/][^/]*/[^/][^/]*/' ;; */Data/*) erfu_pfxPat='svn/Data/'$erfu_proj'/[^/][^/]*/' ;; *) erfu_pfxPat='svn/'$erfu_proj'/[^/][^/]*/' ;; esac erfu_relVer=`echo $erfu_URL | sed -n -e 's|.*/'$erfu_pfxPat$erfu_relPat$erfu_sfxPat'|\1|p'` echo "$erfu_relVer" else echo "-1" fi } # Now some functions to locate the highest-numbered stable or release. # Return the URL of the most recent stable branch matching the parameters. # A value of -1 for major version is interpreted as `highest number' # Returns an empty string if no suitable stable branch exists. # usage: stableURL=`bestStable ` bestStable () { bstb_URL=$1 bstb_majVer=$2 # Construct a URL to send to the repository to list the stable branches. bstb_baseURL=`extractBaseURL $bstb_URL` bstb_proj=`extractProjFromURL $bstb_URL` case "$bstb_URL" in */Data/trunk/* ) bstb_listURL=$bstb_baseURL/Data/stable ;; */Data/* ) bstb_listURL=$bstb_baseURL/Data/$bstb_proj/stable ;; */ThirdParty/* ) bstb_listURL=$bstb_baseURL/BuildTools/ThirdParty/$bstb_proj/stable ;; * ) bstb_listURL=$bstb_baseURL/$bstb_proj/stable ;; esac bstb_rawls=`svn list $bstb_listURL | sort -nr -t. -k1,1 -k2,2` # echo "Raw ls: $bstb_rawls" # Filter the list of stable branches to remove any that do not match the # requested major version. Note that there's a / at the end of each URL. if test "$bstb_majVer" = "-1" ; then bstb_verPat='[0-9][0-9.]*/' elif expr "$bstb_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then bstb_verPat=$bstb_majVer'/' else bstb_verPat=$bstb_majVer'\.[0-9][0-9]*' fi bstb_filter= for bstb_ver in $bstb_rawls ; do if expr "$bstb_ver" : "$bstb_verPat" >/dev/null 2>&1 ; then bstb_filter="$bstb_filter $bstb_ver" fi done # echo "Filtered ls: $bstb_filter" # If there are any candidates left ... bstb_bestURL= if test -n "$bstb_filter" ; then # If we're dealing with old-style Data, we have to work a bit harder # to find our project. See if any of the filtered candidates contain # the correct project. case "$bstb_URL" in */Data/trunk/* | */Data/stable/* | */Data/releases/* ) bstb_projPat='.*'$bstb_proj'/.*' # echo "Pattern: $bstb_projPat" for bstb_ver in $bstb_filter ; do if expr "$bstb_ver" : "$bstb_verPat" >/dev/null 2>&1 ; then # echo " url: $bstb_listURL/$bstb_ver" bstb_svnls2="`svn list $bstb_listURL/$bstb_ver`" # echo " result: $bstb_svnls2" if expr "$bstb_svnls2" : "$bstb_projPat" >/dev/null 2>&1 ; then bstb_best=$bstb_ver # echo " best: $bstb_best" break fi fi done bstb_bestURL=$bstb_listURL/$bstb_best$bstb_proj ;; *) bstb_bestURL=`echo $bstb_filter | sed -n -e 's|\([^/]*/\).*$|\1|p'` bstb_bestURL=$bstb_listURL/$bstb_bestURL ;; esac fi echo $bstb_bestURL } # Return the URL of the most recent release matching the parameters. Returns # null if no suitable release exists. # A value of -1 for major or minor version is interpreted as `highest number' # A value of -1 for major version means that minor version is ignored. # usage: releaseURL=`bestRelease ` bestRelease () { bstb_URL=$1 bstb_majVer=$2 bstb_minVer=$3 # Construct a URL to send to the repository to list the releases. bstb_baseURL=`extractBaseURL $bstb_URL` bstb_proj=`extractProjFromURL $bstb_URL` case "$bstb_URL" in */Data/* ) bstb_listURL=$bstb_baseURL/Data/$bstb_proj/releases ;; */ThirdParty/* ) bstb_listURL=$bstb_baseURL/BuildTools/ThirdParty/$bstb_proj/releases ;; * ) bstb_listURL=$bstb_baseURL/$bstb_proj/releases ;; esac bstb_rawls=`svn list $bstb_listURL | sort -nr -t. -k1,1 -k2,2 -k3,3` # echo "Raw ls: $bstb_rawls" # Filter the list of releases to remove any that do not match the # requested major and minor version. if expr "$bstb_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then isCppAD=yes else isCppAD=no fi if test "$bstb_majVer" = "-1" ; then bstb_verPat='[0-9][0-9.]*/' else bstb_verPat=$bstb_majVer if test $isCppAD = no && test "$bstb_minVer" != "-1" ; then bstb_verPat="${bstb_verPat}\.$bstb_minVer" fi bstb_verPat="${bstb_verPat}"'\.[0-9][0-9]*/' fi # echo "Version pattern: $bstb_verPat" bstb_filter= for bstb_ver in $bstb_rawls ; do if expr "$bstb_ver" : "$bstb_verPat" >/dev/null 2>&1 ; then bstb_filter="$bstb_filter $bstb_ver" fi done # echo "Filtered ls: $bstb_filter" # If there are any candidates left ... bstb_bestURL= if test -n "$bstb_filter" ; then # If we're dealing with old-style Data, we have to work a bit harder to find our # project. See if any of the filtered candidates contain the correct # project. case "$bstb_URL" in */Data/trunk/* | */Data/stable/* | */Data/releases/* ) bstb_projPat='.*'$bstb_proj'/.*' # echo "Pattern: $bstb_projPat" for bstb_ver in $bstb_filter ; do if expr "$bstb_ver" : "$bstb_verPat" >/dev/null 2>&1 ; then # echo " url: $bstb_listURL/$bstb_ver" bstb_svnls2="`svn list $bstb_listURL/$bstb_ver`" # echo " result: $bstb_svnls2" if expr "$bstb_svnls2" : "$bstb_projPat" >/dev/null 2>&1 ; then bstb_best=$bstb_ver # echo " best: $bstb_best" break fi fi done bstb_bestURL=$bstb_listURL/$bstb_best$bstb_proj ;; *) bstb_bestURL=`echo $bstb_filter | sed -n -e 's|\([^/]*/\).*$|\1|p'` bstb_bestURL=$bstb_listURL/$bstb_bestURL ;; esac fi echo $bstb_bestURL } # Count the total number of stable branches for the project for the specified # major version number, up to the specified minor version number (libtool age). # Returns 0 if handed a trunk url, or if the url is BuildTools itself. # usage: calcLibtoolAge calcLibtoolAge () { cltc_URL=$1 cltc_majVer=$2 cltc_minVer=$3 # Construct a URL to send to the repository to list the stable branches. cltc_baseURL=`extractBaseURL $cltc_URL` cltc_proj=`extractProjFromURL $cltc_URL` case "$cltc_URL" in */Data/* ) cltc_listURL=$cltc_baseURL/Data/$cltc_proj/stable ;; */ThirdParty/* ) cltc_listURL=$cltc_baseURL/BuildTools/ThirdParty/$cltc_proj/stable ;; */BuildTools/* ) cltc_listURL= ;; * ) cltc_listURL=$cltc_baseURL/$cltc_proj/stable ;; esac # Run an ls and filter for standard stable branches (M.m or YYYYMMDD) if test -n "$cltc_listURL" ; then cltc_rawls=`svn list $cltc_listURL | sed -n -e '/[0-9][0-9.]/p'` # echo "Raw ls: $cltc_rawls" # Filter the list of stable branches to remove any that do not match the # requested major version. if expr "$cltc_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then cltc_verPat=$cltc_majVer else cltc_verPat=$cltc_majVer'\.[0-9][0-9]*/' fi cltc_majfilter= for cltc_ver in $cltc_rawls ; do if expr "$cltc_ver" : "$cltc_verPat" >/dev/null 2>&1 ; then cltc_majfilter="$cltc_majfilter $cltc_ver" fi done # echo "Filtered ls (major version): $cltc_majfilter" # For the specific major version, filter the list that matched on major # version to remove any that exceed the minor version. cltc_minfilter= for cltc_ver in $cltc_majfilter ; do cltc_min=`echo $cltc_ver | sed -e 's/[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/'` if expr $cltc_min '<=' $cltc_minVer >/dev/null 2>&1 ; then cltc_minfilter="$cltc_minfilter $cltc_ver" fi done # echo "Filtered ls (minor version): $cltc_minfilter" cltc_cnt=`echo $cltc_minfilter | wc -w | sed -e 's/ //g'` else cltc_cnt=0 fi echo $cltc_cnt } # Count the total number of stable branches for the project up to the # specified major.minor version number (libtool current). Returns 0 if # handed a trunk url, or if the url is BuildTools itself. # usage: calcLibtoolCurrent calcLibtoolCurrent () { cltc_URL=$1 cltc_majVer=$2 cltc_minVer=$3 # Construct a URL to send to the repository to list the stable branches. cltc_baseURL=`extractBaseURL $cltc_URL` cltc_proj=`extractProjFromURL $cltc_URL` case "$cltc_URL" in */Data/* ) cltc_listURL=$cltc_baseURL/Data/$cltc_proj/stable ;; */ThirdParty/* ) cltc_listURL=$cltc_baseURL/BuildTools/ThirdParty/$cltc_proj/stable ;; */BuildTools/* ) cltc_listURL= ;; * ) cltc_listURL=$cltc_baseURL/$cltc_proj/stable ;; esac # Run an ls and filter for standard stable branches (M.m or YYYYMMDD) if test -n "$cltc_listURL" ; then cltc_rawls=`svn list $cltc_listURL | sed -n -e '/[0-9][0-9.]/p'` # echo "Raw ls: $cltc_rawls" # Filter the list of stable branches to find those with standard version # numbers. cltc_verPat='[0-9][0-9.]*/' cltc_stdfilter= for cltc_ver in $cltc_rawls ; do if expr "$cltc_ver" : "$cltc_verPat" >/dev/null 2>&1 ; then cltc_stdfilter="$cltc_stdfilter $cltc_ver" fi done # echo "Filtered ls (standard): $cltc_stdfilter" # Filter to remove major versions that exceed the specified version. cltc_majfilter= for cltc_ver in $cltc_stdfilter ; do cltc_maj=`echo $cltc_ver | sed -e 's/\([0-9][0-9]*\)\.[0-9].*/\1/'` if expr $cltc_maj '<=' $cltc_majVer >/dev/null 2>&1 ; then cltc_majfilter="$cltc_majfilter $cltc_ver" fi done # echo "Filtered ls (major version): $cltc_majfilter" # For the specific major version, filter the list that matched on major # version to remove any that exceed the minor version. cltc_minfilter= cltc_verPat='s/'$cltc_majVer'\.\([0-9][0-9]*\).*/\1/' for cltc_ver in $cltc_majfilter ; do cltc_min=`echo $cltc_ver | sed -e $cltc_verPat` if test $cltc_min = $cltc_ver || \ expr $cltc_min '<=' $cltc_minVer >/dev/null 2>&1 ; then cltc_minfilter="$cltc_minfilter $cltc_ver" fi done # echo "Filtered ls (minor version): $cltc_minfilter" cltc_cnt=`echo $cltc_minfilter | wc -w | sed -e 's/ //g'` else cltc_cnt=0 fi echo $cltc_cnt } # Function to compare the versions in a pair of URLs for equality. The criteria # is that the major and minor versions match. In theory, the release should # not matter. Probably should be a parameter. # usage: compareURLVersions compareURLVersions () { url1_major=`extractMajorFromURL $1` url1_minor=`extractMinorFromURL $1` url2_major=`extractMajorFromURL $2` url2_minor=`extractMinorFromURL $2` if test $url1_major = $url2_major && test $url1_minor = $url2_minor ; then echo "yes" else echo "no" fi } Vol-1.5.4/BuildTools/ltmain.sh0000755000175000017500000057753010430173037015235 0ustar sudipsudip# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $mkdir "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` if eval $echo \"$deplib\" 2>/dev/null \ | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $absdir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes ; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then $show "${rm}r $gentop" $run ${rm}r "$gentop" fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ char * find_executable (const char* wrapper) { int has_slash = 0; const char* p; const char* p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char* concat_name; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char* path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char* q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR(*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); return NULL; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: Vol-1.5.4/BuildTools/compile_f2c/0000755000175000017500000000000013434204224015553 5ustar sudipsudipVol-1.5.4/BuildTools/compile_f2c/compile_f2c0000755000175000017500000000530211504414745017672 0ustar sudipsudip#!/bin/sh # Copyright (C) 2007 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # ## $Id: compile_f2c 1950 2010-12-22 15:31:49Z andreasw $ # # Author: Andreas Waechter IBM 2007-06-09 ######################################################################## # Replace the following to the location of your vcf2c.lib library # Note that there must be no space before and after "=" f2clibdir=/usr/local/lib/libf2c #You should not have to change anything below this line ######################################################################## #Find out what the if test `which cygpath | wc -l` -eq 0; then CYGPATH_W=echo else CYGPATH_W='cygpath -w' fi if test "$F2C_CC" = ""; then F2C_CC=cl fi f2clib=`$CYGPATH_W $f2clibdir/vcf2c.lib` mainobj=`$CYGPATH_W $f2clibdir/main.obj` # Get rid of the \ f2clib=`echo $f2clib | sed -e s'!\\\\!/!g'` mainobj=`echo $mainobj | sed -e s'!\\\\!/!g'` if test "$#" -eq 1 && test "$1" = "-FLIBS"; then echo $f2clibdir/vcf2c.lib exit 0 fi cincs="-I`$CYGPATH_W $f2clibdir`" options= makedll= linkflags= incs= fsrc= objs= outfile= while test "$#" -gt 0 do arg="$1" shift if test "$outfile" = next; then outfile="$arg" else case "$arg" in -I*) incs="$incs $arg" ;; -o) if test "$outfile" != ""; then echo "There are more than two -o options" exit 1 fi outfile=next ;; -c) options="$options $arg" f2clib= mainobj= ;; -shared) makedll=yes linkflags="$linkflags -dll" ;; -def:*) linkflags="$linkflags $arg" ;; -*) options="$options $arg" ;; *.[fF]) fsrc="$fsrc $arg" ;; *) objs="$objs $arg" ;; esac fi done if test "$fsrc" = "" && test "$objs" = "" ; then echo "No source or object files given" exit 1 fi csrc= if test "$fsrc" != ""; then for f in $fsrc; do cf=`echo $f | sed -e 's|.[fF]$|.c|' -e 's|.*/||'` csrc="$csrc $cf" done echo f2c $incs $fsrc f2c $incs $fsrc f2c_status=$? if test $f2c_status != 0; then rm -f $csrc exit $f2c_status fi fi if test "$outfile"; then cout="-o `$CYGPATH_W $outfile`" fi if test x$makedll = xyes; then echo $F2C_CC $options $cincs $csrc $objs $cout $f2clib -link $linkflags $F2C_CC $options $cincs $csrc $objs $cout $f2clib -link $linkflags else echo $F2C_CC $options $cincs $csrc $objs $cout $mainobj $f2clib $F2C_CC $options $cincs $csrc $objs $cout $mainobj $f2clib fi cl_status=$? rm -f $csrc exit $cl_status Vol-1.5.4/BuildTools/compile_f2c/INSTALL0000644000175000017500000000411411053565746016622 0ustar sudipsudipThe following instructions assume that you already set up Cygwin/Msys to know about the Microsoft 'cl' compiler and 'nmake'. 1. Download the f2c.exe Fortran to C compiler from netlib from http://www.netlib.org/f2c/mswin/f2c.exe.gz uncompress it, and put it somewhere in your PATH (e.g. into /usr/local/bin). Make sure it is executable. 2. Download the source code for the f2c runtime library from http://www.netlib.org/f2c/libf2c.zip and put it into a directory in which you want to have a subdirectory where you want to have the subdirectory "libf2c" containing the runtime library, e.g., into /usr/local/lib. Uncompress this file, for example by "unzip libf2c.zip" in a Cygwin or MSys window. 3. Compile the Fortran runtime library: In the source directory (libf2c), type 'nmake -f makefile.vc all' If you encounter an error during the compilation of "err.c" due to a missing unistd.h, edit the makefile.vc file and add -DNO_ISATTY to the CFLAGS (line 9). If you encounter an error during the compilation of "arithchk.c" (involving the "comptry.bat" file), edit the makefile.vc file and delete the word "comptry.bat" in the 4th from last line. NOTE: If you want to generate debug code (using --enable-debug with configure), you need to change the makefile.vc file: Change the definition of CFLAGS so that it no longer contains '-Ot1' but '-MTd' instead. 4. Edit the script "compile_f2c" in this directory so that the variable "f2clibdir" at the beginning is set to the directory containing the libf2c runtime library. (If you installed it in /usr/local/lib as suggested above, it is already defined correctly.) 5. Put the compile_f2c script somewhere into your path, e.g., into /usr/local/bin - make sure it is executable. 6. To test it, copy the lines at the end of this file into a Fortran source file (say, bla.f), and type compile_f2c -o f2ctest bla.f Running the executable f2ctest.exe hopefully makes you happy. ---------------------- 8< ---------------- program test write (*,*) "It works!" end Vol-1.5.4/BuildTools/compile_f2c/README0000644000175000017500000000132711504414745016445 0ustar sudipsudipThe files in this directory are intended to allow the compilation of Fortran 77 source files by combining the Fortran to C translator f2c (from netlib) and the Microsoft 'cl' C compiler under Cygwin and MSys. Please read the INSTALL file for instructions how to use this tool. After you installed this tool, you can use the script "compile_f2c" to compile Fortran 77 code. If you specify the flag "--enable-doscompile=msvc" for the configure script in COIN projects, it will automatically be used (unless a native Fortran compiler is found). The files in this directory are part of the BuildTools project of COIN-OR, https://projects.coin-or.org/BuildTools. The files are made available under the Eclipse Public License. Vol-1.5.4/BuildTools/get.dependencies.sh0000755000175000017500000004213112746133102017136 0ustar sudipsudip#!/bin/bash # Author: Ted Ralphs (ted@lehigh.edu) # Copyright 2016, Ted Ralphs # Released Under the Eclipse Public License #Exit when command fails set -e #Set defaults root_dir=$PWD declare -i num_actions num_actions=0 sparse=false prefix=$PWD dest_dir= svn=true fetch=false build=false run_test=false run_all_tests=false configure_options= monolithic=false threads=1 build_dir=$PWD/build reconfigure=false get_third_party=true quiet=false MAKE=make #If this is an already checked out project, which one? echo "Welcome to the COIN-OR fetch and build utility" echo echo "For help, run script without arguments." echo echo "$@" > .get.dependencies.config #Parse arguments for arg in "$@" do case $arg in *=*) option=`expr "x$arg" : 'x\(.*\)=[^=]*'` option_arg=`expr "x$arg" : 'x[^=]*=\(.*\)'` case $option in --prefix) if [ "x$option_arg" != x ]; then case $option_arg in [\\/$]* | ?:[\\/]* | NONE | '' ) prefix=$option_arg ;; *) echo "Prefix path must be absolute." exit 3 ;; esac else echo "No path provided for --prefix" exit 3 fi ;; --build-dir) if [ "x$option_arg" != x ]; then case $option_arg in [\\/$]* | ?:[\\/]* | NONE | '' ) build_dir=$option_arg ;; *) build_dir=`pwd`/$option_arg ;; esac else echo "No path provided for --build-dir" exit 3 fi ;; --threads) if [ "x$option_arg" != x ]; then threads=$option_arg else echo "No thread number specified for --threads" exit 3 fi ;; DESTDIR) if [ "x$option_arg" != x ]; then case $option_arg in [\\/$]* | ?:[\\/]* | NONE | '' ) dest_dir=$option_arg ;; *) echo "DESTDIR path must be absolute." exit 3 ;; esac else echo "No path provided for DESTDIR" exit 3 fi ;; *) configure_options+="$arg " ;; esac ;; --sparse) sparse=true ;; --svn) svn=true ;; --git) svn=false ;; --debug) set -x ;; --monolithic) monolithic=true ;; --reconfigure) reconfigure=true ;; --test) run_test=true ;; --test-all) run_all_tests=true ;; --no-third-party) get_third_party=false ;; --quiet) quiet=true ;; --*) configure_options+="$arg " ;; fetch) num_actions+=1 fetch=true ;; build) num_actions+=1 build=true ;; esac done #Help if [ $num_actions == 0 ]; then echo "Usage: get.dependencies.sh --option1 --option2" echo echo "Commands:" echo echo " fetch: Checkout source code for all dependencies" echo " options: --svn (checkout from SVN)" echo " --git (checkout from git)" echo " --no-third-party don't download third party source (getter-scripts)" echo echo " build: Checkout source code for all dependencies" echo " options: --prefix=\dir\to\install (where to install, default: $PWD)" echo " --xxx=yyy (will be passed through to configure)" echo " --monlithic do 'old style' monlithic build" echo " --threads=n build in parallel with 'n' threads" echo " --build-dir=\dir\to\build\in do a VPATH build" echo " --test run unit test of main project before install" echo " --test-all run unit tests of all projects before install" echo " --quiet suppress build output to stdout" echo " --reconfigure run configure also for already configured projects" echo echo "General options:" echo " --debug: Turn on debugging output" echo fi if [ -e configure.ac ]; then main_proj=`fgrep AC_INIT configure.ac | cut -d '[' -f 2 | cut -d ']' -f 1` else echo "Unable to find root configure script." echo "Please run script in root directory of checkout." exit 2 fi #Build list of sources for dependencies deps=`cat Dependencies | tr '\t' ' ' | tr -s ' '| cut -d ' ' -f 2-` #Keep track of the subdirectories in which we need to build later. subdirs= # This changes the default separator used in for loops to carriage return. # We need this later. IFS=$'\n' #Get sources if [ $fetch = "true" ]; then for url in $deps do if [ `echo $url | cut -d '/' -f 3` != "projects.coin-or.org" ]; then # If this is a URL of something other than a COIN-OR project on SVN, # then we assume it's a git project git_url=`echo $url | tr '\t' ' ' | tr -s ' '| cut -d ' ' -f 1` branch=`echo $url | tr '\t' ' ' | tr -s ' '| cut -d ' ' -f 2` dir=`echo $git_url | cut -d '/' -f 5` echo "Clone $git_url branch $branch" if [ ! -e $dir ]; then git clone --branch=$branch $git_url else cd $dir git pull origin $branch cd - fi subdirs+="$dir " elif [ $svn = "true" ]; then # Here, we are supposed to check out from SVN svn_repo=`echo $url | cut -d '/' -f 5` if [ $svn_repo = "BuildTools" ]; then if [ `echo $url | cut -d '/' -f 6` = 'ThirdParty' ]; then tp_proj=`echo $url | cut -d '/' -f 7` if [ `echo $url | cut -d '/' -f 8` = trunk ]; then version=trunk else version=`echo $url | cut -d '/' -f 9` fi mkdir -p ThirdParty echo "Checkout ThirdParty/$tp_proj" svn co --non-interactive --trust-server-cert $url \ ThirdParty/$tp_proj if [ $get_third_party = "true" ] && [ -e ThirdParty/$tp_proj/get.$tp_proj ]; then cd ThirdParty/$tp_proj ./get.$tp_proj cd - subdirs+="ThirdParty/$tp_proj " fi fi else if [ $svn_repo = "CHiPPS" ]; then proj=`echo $url | cut -d '/' -f 6` if [ `echo $url | cut -d '/' -f 7` = trunk ]; then version=trunk else version=`echo $url | cut -d '/' -f 8` fi elif [ $svn_repo = "Data" ]; then proj=`echo $url | cut -d '/' -f 5-6` if [ `echo $url | cut -d '/' -f 7` = trunk ]; then version=trunk else version=`echo $url | cut -d '/' -f 8` fi else proj=`echo $url | cut -d '/' -f 5` if [ `echo $url | cut -d '/' -f 6` = trunk ]; then version=trunk else version=`echo $url | cut -d '/' -f 7` fi fi echo "Checkout $url" svn co --non-interactive --trust-server-cert $url $proj subdirs+="$proj " fi else # Otherwise, convert SVN URL to a Github one and check out with git svn_repo=`echo $url | cut -d '/' -f 5` if [ $svn_repo = 'Data' ]; then data_proj=`echo $url | cut -d '/' -f 6` echo "Checkout Data/$data_proj" svn co $url Data/$data_proj subdirs+="Data/$data_proj " elif [ $svn_repo = 'BuildTools' ]; then if [ `echo $url | cut -d '/' -f 6` = "ThirdParty" ]; then tp_proj=`echo $url | cut -d '/' -f 7` proj=ThirdParty-$tp_proj mkdir -p ThirdParty if [ `echo $url | cut -d '/' -f 8` = "trunk" ]; then branch=master version=trunk else branch=`echo $url | cut -d '/' -f 8-9` version=`echo $url | cut -d '/' -f 9` fi echo "Clone $proj branch $branch" if [ ! -e ThirdParty/$tp_proj ]; then git clone --branch=$branch \ https://github.com/coin-or-tools/$proj \ ThirdParty/$tp_proj if [ $get_third_party = "true" ] && \ [ -e ThirdParty/$tp_proj/get.$tp_proj ]; then cd ThirdParty/$tp_proj ./get.$tp_proj cd - subdirs+="ThirdParty/$tp_proj " fi else cd ThirdParty/$tp_proj git pull origin $branch if [ $get_third_party = "true" ] && \ [ -e get.$tp_proj ]; then ./get.$tp_proj subdirs+="ThirdParty/$tp_proj " fi cd - fi fi else if [ $svn_repo = "CHiPPS" ]; then git_repo=CHiPPS-`echo $url | cut -d '/' -f 6` proj=`echo $url | cut -d '/' -f 6` if [ `echo $url | cut -d '/' -f 7` = 'trunk' ]; then branch=master version=trunk else branch=`echo $url | cut -d '/' -f 7-8` version=`echo $url | cut -d '/' -f 8` fi else git_repo=`echo $url | cut -d '/' -f 5` proj=`echo $url | cut -d '/' -f 5` if [ `echo $url | cut -d '/' -f 6` = 'trunk' ]; then branch=master version=trunk else branch=`echo $url | cut -d '/' -f 6-7` version=`echo $url | cut -d '/' -f 7` fi fi if [ sparse = "true" ]; then echo "Clone (sparse-checkout) $git_repo branch $branch" mkdir $proj cd $proj git init git remote add origin \ https://github.com/coin-or/$git_repo git config core.sparsecheckout true echo $proj/ >> .git/info/sparse-checkout git fetch git checkout $branch cd .. else echo "Clone $git_repo branch $branch" if [ ! -e $proj ]; then git clone --branch=$branch \ https://github.com/coin-or/$git_repo $proj else cd $proj git pull origin $branch cd - fi fi subdirs+="$proj/$proj " fi fi done echo $subdirs > .subdirs fi unset IFS #Build (and possibly test) the code if [ $build = "true" ]; then if [ $monolithic = "false" ]; then if [ ! -e ".subdirs" ]; then echo "No .subdirs file. Please fetch first" fi for dir in `cat .subdirs` do if [ build_dir != "./" ]; then proj_dir=`echo $dir | cut -d '/' -f 1` if [ $proj_dir = "Data" ] || [ $proj_dir = "ThirdParty" ]; then proj_dir=$dir fi mkdir -p $build_dir/$proj_dir cd $build_dir/$proj_dir else cd $dir fi if [ ! -e config.status ] || [ $reconfigure = true ]; then if [ $quiet = "false" ]; then $root_dir/$dir/configure --disable-dependency-tracking \ --prefix=$prefix $configure_options else $root_dir/$dir/configure --disable-dependency-tracking \ --prefix=$prefix $configure_options > /dev/null fi fi if [ $run_all_tests = "true" ]; then if [ $quiet = "true" ]; then $MAKE -j $threads > /dev/null fi $MAKE -j $threads test fi if [ "x$dest_dir" != x ]; then if [ $quiet = "true" ]; then $MAKE -j $threads DESTDIR="$dest_dir" install > /dev/null else $MAKE -j $threads DESTDIR="$dest_dir" install fi else if [ $quiet = "true" ]; then $MAKE -j $threads install > /dev/null else $MAKE -j $threads install fi fi cd $root_dir done if [ -e $main_proj ]; then if [ build_dir != "./" ]; then mkdir -p $build_dir/$main_proj cd $build_dir/$main_proj else cd $main_proj fi fi if [ ! -e config.status ] || [ $reconfigure = true ]; then #First, check whether this is a "rootless" project if [ -e $root_dir/$main_proj/configure ]; then root_config=$root_dir/$main_proj/configure else root_config=$root_dir/configure fi #Now, do the actual configuration if [ $quiet = "false" ]; then $root_config --disable-dependency-tracking \ --prefix=$prefix $configure_options else $root_config --disable-dependency-tracking \ --prefix=$prefix $configure_options > /dev/null fi fi if [ $run_test = "true" ]; then if [ $quiet = "true" ]; then $MAKE -j $threads > /dev/null fi $MAKE -j $threads test fi if [ "x$dest_dir" != x ]; then if [ $quiet = "true" ]; then $MAKE -j $threads DESTDIR="$dest_dir" install > /dev/null else $MAKE -j $threads DESTDIR="$dest_dir" install fi else if [ $quiet = "true" ]; then $MAKE -j $threads install > /dev/null else $MAKE -j $threads install fi fi cd $root_dir else if [ build_dir != "./" ]; then mkdir -p $build_dir cd $build_dir fi if [ ! -e config.status ] || [ $reconfigure = true ]; then if [ $quiet = "false" ]; then $root_dir/configure --disable-dependency-tracking \ --prefix=$prefix $configure_options else $root_dir/configure --disable-dependency-tracking \ --prefix=$prefix $configure_options > /dev/null fi fi if [ $quiet = "true" ]; then $MAKE -j $threads > /dev/null fi if [ $run_test = "true" ]; then $MAKE -j $threads test fi if [ "x$dest_dir" != x ]; then if [ $quiet = "true" ]; then $MAKE -j $threads DESTDIR="$dest_dir" install > /dev/null else $MAKE -j $threads DESTDIR="$dest_dir" install fi else if [ $quiet = "true" ]; then $MAKE -j $threads install > /dev/null else $MAKE -j $threads install fi fi cd $root_dir fi fi Vol-1.5.4/BuildTools/commit_new_release0000755000175000017500000001675212743714612017204 0ustar sudipsudip#!/bin/sh # Copyright (C) 2010 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # # $Id: commit_new_release 3599 2016-07-20 15:32:26Z stefan $ # # Author: Andreas Waechter IBM 2007-06-21 # Modified by: Lou Hafer SFU 2008-04-17 # Lou Hafer SFU 2010-06-29 major rewrite #set -x -v set -e # Know thy self. If there are no '/' chars in the command name, we're running # in the current directory. Otherwise, strip the command name, leaving the # prefix. Coin-functions is expected to live in the same directory. As of # the original version (100602), this script doesn't need coin-functions, # but this still has some value as a consistency check. if expr "$0" : '.*/.*' >/dev/null 2>&1 ; then cmdDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else cmdDir='.' fi cmdDir=`cd $cmdDir ; pwd` if test -r $cmdDir/coin-functions ; then . $cmdDir/coin-functions else echo "Cannot find utility functions file coin-functions; exiting." fi # We need at least one parameter. The default is a dry run (dryRun = 1). printHelp=0 dryRun=1 dirToCommit= if test "$#" -eq 0; then printHelp=1 else # Process the parameters. A parameter without an opening `-' is assumed to be # the spec for the directory to be committed. (Strip any trailing '/'. Some # people add it, but the script doesn't expect it.) while test $# -gt 0 && test $printHelp = 0 ; do case "$1" in -h* | --h*) printHelp=1 ;; -c* | --c*) dryRun=0 ;; -*) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 ;; *) dirToCommit=`echo $1 | sed -e 's,/$,,'` ;; esac shift done fi # What are we committing? if test -z "$dirToCommit" ; then printHelp=1 fi if test $printHelp = 1 ; then cat < By default, commit_new_release is a dry run, printing the commands that will be executed. When you're confident that everything looks right, use the -c (--commit) flag to commit the release. EOF exit 1 fi # Remember what was done during generation of the new release. if test -r $dirToCommit/.new_release_data; then . $dirToCommit/.new_release_data else echo '' echo "Error: the file .new_release_data is not present in $dirToCommit." echo 'Are you running commit_new_release in the same directory where you' echo 'ran prepare_new_release?' echo '' exit 1 fi # Confirm that we're in the proper directory. currDir=`pwd` if test "$currDir/$dirToCommit" != "$topBuildDir" ; then echo "According to $dirToCommit/.new_release_data, the release candidate was assembled" echo "in $topBuildDir." echo "You have asked to commit $currDir/$dirToCommit." echo "There is some confusion. Repository is unchanged." exit 1 fi if test $dryRun = 1 ; then echo "Dry run; testing commit of $dirToCommit." else echo "Committing $dirToCommit." fi # Change to the checkout directory. cd $coDir # If there are externals set on this directory, confirm that # .Externals.original is present so that we can restore them later. releaseExternals=`svn propget svn:externals . || true` if test -n "$releaseExternals" ; then if test -r .Externals.original ; then : else echo "This project has externals, but no .Externals.original file" echo "is present to restore them. Repository is unchanged." exit 1 fi fi # Make some short-form URLs by stripping the COIN URL base. stableURLshort=`echo $stableURL | sed -e "s,$coinURL/\(.*\),\1,"` releaseURLshort=`echo $releaseURL | sed -e "s,$coinURL/\(.*\),\1,"` # Do we have to svn add Dependencies? If this query comes up with a leading # `?', the answer is yes. If Dependencies is entirely absent or unchanged, # we'll get a null string. If it's modified, we'll have a leading `M'. dependStatus=`svn status Dependencies` if expr "$dependStatus" : '?.*Dependencies.*' >/dev/null 2>&1 ; then cmd='svn add Dependencies' echo $cmd if test $dryRun = 0 ; then eval $cmd fi fi # Now, do we really need to to a temporary commit? BuildTools is the poster # child, there are no changes at time of writing (100629). Do an svn status # on the checkout directory and see if anything comes up as modified. if svn status $coDir | egrep '^M' 2>&1 >/dev/null ; then doCommit=yes else doCommit=no fi if test $doCommit = yes ; then # Commit the release to stable so we can do a repository-side copy to create # the release. echo '' echo "===> Temporarily committing release candidate to $stableURLshort ..." echo '' rev_num_before=`svn info . | grep -E '^Revision:' | sed -e 's|Revision: ||'` echo "Revision number before commit: $rev_num_before" cmd="svn ci -m \"temporarily committing release candidate\"" echo $cmd if test $dryRun = 0 ; then eval $cmd fi # Update to confirm the commit. Avoid pulling in externals --- if we're doing # multiple commits of new releases, they may not exist. As it stands, the # main purpose of this call is to allow us to easily obtain the current # revision. # It might be useful to strengthen this and check that the value # is what we're expecting --- one greater than the revision before # commit. `--ignore-externals' could be made provisional on the existence # of all externals by passing a boolean through .new_release_data. This # would strengthen the update, in that the update would confirm existence # of the externals. cmd='svn update --ignore-externals' echo $cmd if test $dryRun = 0 ; then eval $cmd fi rev_num=`svn info . | grep -E '^Revision:' | sed -e 's|Revision: ||'` echo "Current revision number is: $rev_num" fi # End preparatory commit. # Create the release with a repository-side copy. echo '' echo "===> Creating new release $releaseURLshort from $stableURLshort (rev $rev_num) ..." echo '' cmd="svn copy -m \"creating $releaseURLshort from $stableURLshort (rev $rev_num)\" $stableURL $releaseURL" echo $cmd if test $dryRun = 0 ; then eval $cmd fi # Restore the original stable branch. if test $doCommit = yes ; then # And restore the stable branch to its original condition. Start by reverting # to the original externals. if test -r .Externals.original ; then echo '' echo '===> Restoring original externals ...' echo '' cmd="svn propset -F .Externals.original svn:externals ." echo $cmd if test $dryRun = 0 ; then eval $cmd rm .Externals.original fi fi # For every .bak file that we created, revert it. if test -n "$bak_files" ; then echo '' echo '===> Restoring modified files ...' echo '' for i in $bak_files; do cmd="cp $i.bak $i ; rm $i.bak" if test $dryRun = 1 ; then echo "$cmd" else eval $cmd fi done fi # Rebuild configure and Makefile.in files. echo '' echo '===> Executing run_autotools to restore configuration files ...' echo '' curdir=`pwd` cd $topBuildDir cmd="./BuildTools/run_autotools" echo $cmd if test $dryRun = 0 ; then eval $cmd fi cd "$curdir" # Commit the restored stable branch. echo '' echo "===> Committing restored $stableURLshort ..." echo '' cmd="svn ci -m \"restoring $stableURLshort\"" echo $cmd if test $dryRun = 0 ; then eval $cmd fi fi # End restorative commit. cd $topBuildDir cmd="rm .new_release_data" if test $dryRun = 0 ; then eval $cmd fi cd $startDir echo '' echo "Done, new release $releaseURLshort created." echo '' echo "You can now delete the directory $topBuildDir including subdirectories" Vol-1.5.4/BuildTools/prepare_new_stable0000755000175000017500000005276512214547251017204 0ustar sudipsudip#!/bin/sh # Copyright (C) 2007 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # # $Id: prepare_new_stable 2947 2013-09-13 08:36:57Z stefan $ # # Adapted from prepare_new_release by Lou Hafer, SFU, 100507. #set -x -v set -e # Know thy self. If there are no '/' chars in the command name, we're running # in the current directory. Otherwise, strip the command name, leaving the # prefix. Coin-functions is expected to live in the same directory. if expr "$0" : '.*/.*' >/dev/null 2>&1 ; then cmdDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else cmdDir='.' fi cmdDir=`cd $cmdDir ; pwd` if test -r $cmdDir/coin-functions ; then . $cmdDir/coin-functions else echo "Cannot find utility functions file coin-functions; exiting." fi #################### end of function definitions ########################## # Note that plain sh does not accept negative exit values exitValue=0 # Specify the COIN URL base for convenience. coinURL="https://projects.coin-or.org/svn" # Begin parameter processing. printHelp=0 ignoreBuildToolsMismatch=no mismatchBTExternals= bumpMajor=0 suppressCheckout=0 # srcURL will be the parent for the stable we are building. We'll need to be # able to distinguish ThirdParty and Data builds, and BuildTools itself; they # require special handling. cmdBTURL points to a BuildTools source and is # required when srcURL specifies a ThirdParty or Data project --- we'll need to # assemble a temporary package while creating the stable candidate. srcURL= isThirdParty=no isData=no isBuildTools=no cmdBTURL= # trunkExternals specifies externals for which we want to do simultaneous # creation of stable branches. We will use the trunk as the external while # preparing and testing the stable candidate, changing the Dependencies file # to specify a (nonexistent) stable branch of the external at the last moment. trunkExternals= # exciseExternals specifies externals that should be removed when creating the # new stable branch. exciseExternals= # We need at least one parameter. if test "$#" -eq 0; then printHelp=1 else # Process the parameters. A parameter without an opening `-' is assumed to be # the spec for the source branch. while test $# -gt 0 && test $exitValue = 0 && test $printHelp = 0 ; do case "$1" in -h* | --h*) printHelp=1 ;; -i* | --i*) if expr "$1" : '.*-i.*=.*' 2>&1 >/dev/null ; then mismatchBTExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift mismatchBTExternals=$1 fi if test "x$mismatchBTExternals" = "xall" ; then ignoreBuildToolsMismatch=all else ignoreBuildToolsMismatch=partial fi ;; -m* | --m*) bumpMajor=1 ;; -p* | --p*) suppressCheckout=1 ;; -t* | --t*) if expr "$1" : '.*-t.*=.*' 2>&1 >/dev/null ; then trunkExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift trunkExternals=$1 fi ;; -x* | --x*) if expr "$1" : '.*-x.*=.*' 2>&1 >/dev/null ; then exciseExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift exciseExternals=$1 fi ;; -b* | --b*) if expr "$1" : '.*-b.*=.*' 2>&1 >/dev/null ; then cmdBTURL=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift cmdBTURL=$1 fi if expr "$cmdBTURL" : '.*BuildTools.*' 2>&1 >/dev/null ; then case $cmdBTURL in http*) ;; *) cmdBTURL=${coinURL}/$cmdBTURL ;; esac else echo '' echo "URL $cmdBTURL does not point to BuildTools." echo '' printHelp=1 exitValue=3 fi ;; -*) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 exitValue=1 ;; *) srcURL=$1 case $srcURL in http* ) ;; BuildTools/ThirdParty/* ) srcURL=${coinURL}/$srcURL ;; ThirdParty/* ) srcURL=${coinURL}/BuildTools/$srcURL ;; * ) srcURL=${coinURL}/$srcURL ;; esac ;; esac shift done # Consistency check: Make sure that the source URL exists. Note that it's not # possible to specify a Data URL without including trunk/stable/release in the # URL. For others, helpfully append `trunk'. srcURL=`echo $srcURL | sed -e 's/\/$//'` urlType=`extractTypeFromURL "$srcURL"` if test $printHelp = 0 && test $exitValue = 0 ; then if svn list $srcURL 2>&1 >/dev/null ; then : else echo "Source URL $srcURL does not seem to exist." printHelp=1 exitValue=5 fi if test "$urlType" = invalid ; then srcURL=$srcURL/trunk urlType=trunk fi fi # Just what are we building? Order is important; BuildTools without ThirdParty # means we're actually doing a BuildTools stable. if test $printHelp = 0 && test $exitValue = 0 ; then case $srcURL in *ThirdParty* ) isThirdParty=yes ;; *BuildTools* ) isBuildTools=yes ;; *Data* ) isData=yes ;; *) ;; esac # If we're building a ThirdParty or Data release, we need a BuildTools URL. if test $isThirdParty = yes || test $isData = yes ; then if test -z "$cmdBTURL" ; then cmdBTURL=`bestRelease $coinURL/BuildTools -1 -1` echo "A BuildTools URL is required for Data or ThirdParty projects." echo "Using $cmdBTURL; override with -b" else if svn list $cmdBTURL 2>&1 >/dev/null ; then : else echo "BuildTools URL $cmdBTURL does not seem to exist." printHelp=1 exitValue=6 fi fi fi fi fi # if "$#" .eq 0 if test $printHelp = 1 ; then cat < This script will create a new stable branch from the head of the specified URL. Typically this will be the trunk, but it can be an existing stable branch. You can specify the entire URL, or just enter what comes after "https://projects.coin-or.org/svn". A typical example is prepare_new_stable Ipopt/trunk Options: -b URL for BuildTools; required to generate a release for a ThirdParty or Data project. -i Ignore BuildTools version mismatches for the listed externals (comma-separated list of project names, e.g., -i Osi,Cbc). '-i all' ignores all mismatches. -p Suppress checkout (useful for testing) -m Bump the major version number. -t Suppress conversion from trunk to stable for the listed externals (comma-separated list of project names). -x Remove the listed projects from the list of externals (comma-separated list of project names). This script will do the following: - Set the new stable version number as the next minor version number in the current major version number. Use the -m flag to bump the major version number. - Convert externals from trunk to the top stable branch. Externals which are currently stable or release are left untouched. Use -t to suppress the change from trunk to stable. Set_externals is then invoked to set release externals where available. - Check out externals. The BuildTools version used by externals (if any) is checked, and the script issues a warning if it doesn't match the version used by the source URL. - Run the scripts to download any ThirdParty code. - Run run_autotools to rebuild configure and make files. - Run configure, make, and make test - Tweak the externals to upgrade trunk (-t) dependencies to stable (you won't get to release in this case). If there is any error during these tasks the script will stop and you should examine the output. If the script completes without error, examine the output, particularly the output of the unit test ('make test') and the set of externals specified in the Dependencies file. Whether you start with Externals or Dependencies, the stable will have a proper Dependencies. Externals will be unmodified. This script does not make any changes to the repository. If you want to commit the new stable branch, run the "commit_new_stable" script, as described at the end of the output. EOF fi if test $exitValue != 0 || test $printHelp = 1 ; then exit $exitValue fi # End of parameter parsing. We have a source URL to work with. Tell the # user what we've seen. srcURL=`echo $srcURL | sed -e 's|/$||'` srcProj=`extractProjFromURL $srcURL` echo "Source URL..........: $srcURL" echo "Base project........: $srcProj" if test $isThirdParty = yes || test $isData = yes ; then echo "BuildTools URL......: $cmdBTURL" fi # Figure out the URL of the new stable branch. Consider that there may not be # any existing stable branches. topStableURL=`bestStable $srcURL -1` echo "Top stable URL......: ${topStableURL:-none}" if test -z "$topStableURL" ; then majVer=0 minVer=1 case "$srcURL" in */Data/* ) newStableURL=$coinURL/Data/stable/$majVer.$minVer/$srcProj ;; */ThirdParty/* ) newStableURL=$coinURL/BuildTools/ThirdParty/$srcProj/stable/$majVer.$minVer ;; * ) newStableURL=$coinURL/$srcProj/stable/$majVer.$minVer ;; esac else majVer=`extractMajorFromURL $topStableURL` if test $bumpMajor = 1 ; then majVer=`expr $majVer + 1` minVer=0 else minVer=`extractMinorFromURL $topStableURL` minVer=`expr $minVer + 1` fi newStableURL=`replaceVersionInURL $topStableURL $majVer $minVer` fi echo "New stable URL......: $newStableURL" newVersion=${majVer}.${minVer} # Construct a build directory name. topProjName=`echo $srcProj | sed -e 's|.*/\([^/]*\)$|\1|'` topBuildDir=${topProjName}-${newVersion} echo "Build directory.....: $topBuildDir" # Now decide where to check out code. if test $isThirdParty = yes; then coDir=$topBuildDir/Thirdparty/$srcProj elif test $isData = yes; then coDir=$topBuildDir/Data/$srcProj else coDir=$topBuildDir fi echo "Checkout directory..: $coDir" echo '' echo "===> Checking out source $srcURL without externals ..." echo '' cmd="svn co --ignore-externals $srcURL $coDir" if test $suppressCheckout = 1 ; then echo "Pretending to do: $cmd" else rm -rf $topBuildDir echo $cmd eval $cmd fi if test $isThirdParty = yes || test $isData = yes; then echo '' echo '===> Checking out BuildTools (Data or ThirdParty) ...' echo '' cmd="svn co $cmdBTURL $topBuildDir/BuildTools" if test $suppressCheckout = 1 ; then echo "Pretending to do: $cmd" else echo $cmd eval $cmd fi fi startDir=`pwd` coDir=`cd $coDir; pwd` topBuildDir=`cd $topBuildDir; pwd` cd $coDir # Find configure.ac files for the package and project and update the version. # We have no externals at this point, and no third-party code, so there will # be two files for a standard project, one for a ThirdParty or Data project. echo '' if test -d $topProjName ; then bak_files=`find $topProjName -name 'configure.ac'` fi if test -e configure.ac ; then bak_files="$bak_files configure.ac" fi echo "===> Creating backup (.bak) for configure.ac files..." for i in $bak_files; do cp $i $i.bak done # Take the attitude that [] around parameters in AC_INIT is optional, # it's the commas that count. This does make for a surpassing ugly regular # expression. A comma in the version string will cause a spectacular failure. # In AC_COIN_PROJECTDIR_INIT, take the attitude that the existing parameters # don't matter, we know what the release parameters should be. echo '' echo "===> Updating version numbers in configure.ac files" for i in $bak_files; do sed -e "s|AC_INIT\(.*\),\(\[*\)[^],]*\(\]*\),\(.*\)|AC_INIT\1,\2$newVersion\3,\4|" $i > bla mv bla $i svn diff $i done # Find config_proj_default.h. If there's a definition for PROJ_VERSION, adjust it and # add config_proj_default.h.bak to the list of files to be restored. topProjNameUC=`echo $topProjName | tr '[a-z]' '[A-Z]'` if test -d $topProjName ; then configFileLoc=`find $topProjName -name .svn -prune -o -name 'config_*_default.h' -print` fi echo "config File Loc: $configFileLoc" if test -n "$configFileLoc" ; then versionSym=${topProjNameUC}_VERSION echo '' echo "===> Updating $versionSym in $configFileLoc (if present)" echo '' mv $configFileLoc $configFileLoc.bak bak_files="$bak_files $configFileLoc" sed -e "s/# *define $versionSym .*\$/#define $versionSym \"$newVersion\"/" \ -e "s/# *define ${versionSym}_MAJOR .*\$/#define ${versionSym}_MAJOR $majVer/" \ -e "s/# *define ${versionSym}_MINOR .*\$/#define ${versionSym}_MINOR $minVer/" \ -e "s/# *define ${versionSym}_RELEASE .*\$/#define ${versionSym}_RELEASE 9999/" \ <$configFileLoc.bak >$configFileLoc svn diff $configFileLoc fi # Now generate a proper Dependencies file for the stable branch. References to # trunk will be converted to references to stable branches unless the reference # is to a project in the trunkExternals list (in which case it'll be converted # at the very end). References to releases are not changed. Each line in a # Dependencies file has the format . Normally, each entry # should be a stable branch. srcDepFile= for file in Dependencies Externals ; do if test -r $file ; then srcDepFile=$file break fi done if test -n "$srcDepFile" ; then # Save the externals property of the source, so we can just restore it after # the commit. Also save srcDepFile, because we may well modify it for the # stable branch, converting trunk externals to stable externals. svn propget svn:externals . > .Externals.original bak_files="$bak_files $srcDepFile" cp $srcDepFile $srcDepFile.bak echo '' echo "===> Checking externals in $srcDepFile ..." echo '' # We've just checked this out, no sense going back to the server for the # BuildTools version. Because of the intermediate variable, newline has # become space. srcExternals=`svn propget svn:externals .` srcBTURL=`echo $srcExternals | \ sed -n -e 's/.*BuildTools *https:\([^ ]*\) .*/https:\1/p'` if test -z "$srcBTURL" ; then srcBTURL="none" fi echo "Source BuildTools...: $srcBTURL" rm -f Dependencies ext_name= ext_url= buildtoolsMismatch=0 for i in `cat $srcDepFile.bak` ; do if test "$ext_name" = "" ; then ext_name=$i else ext_url=$i if expr "$ext_name" : '#.*' 2>&1 >/dev/null ; then echo " $ext_name $ext_url ==> skipped" ext_name= continue fi ext_urltype=`extractTypeFromURL $ext_url` ext_proj=`extractProjFromURL $ext_url` # See if this external should be dropped. if expr "$exciseExternals" : '.*'$ext_proj'.*' 2>&1 > /dev/null ; then echo " $ext_name $ext_url ==> excised" ext_name= continue fi ext_isNormalURL=`isNormalURL $ext_url` # Convert a trunk URL to stable unless it's listed in trunkExternals. if test $ext_urltype = trunk ; then if expr "$trunkExternals" : '.*'$ext_proj'.*' 2>&1 >/dev/null ; then echo " $ext_name $ext_url ==> unchanged" else ext_oldurl=$ext_url ext_url=`bestStable $ext_url -1` # Normal (not BuildTools/ThirdParty/Data) need a directory name, # and it may differ from the project name. Carefully preserve it. if test $ext_isNormalURL = yes ; then ext_tail=`extractTailFromExt $ext_oldurl` ext_url=${ext_url}${ext_tail} fi echo " $ext_name $ext_oldurl ==> $ext_url" fi else echo " $ext_name $ext_url ==> unchanged" fi # Get the BuildTools URL for the external and compare to the BuildTools URL # for the source, assuming we have one and the external has one. if test $ext_isNormalURL = yes && test $ext_proj != BuildTools && test $srcBTURL != none ; then ext_url_notail=`echo $ext_url | sed -e 's,/[^/]*$,,'` extBTURL=`svn propget svn:externals $ext_url_notail` extBTURL=`echo $extBTURL | \ sed -n -e 's/^BuildTools *https:\([^ ]*\) *$/https:\1/p'` if test -n "$extBTURL" ; then testResult=`compareURLVersions "$srcBTURL" "$extBTURL"` if test $testResult = no ; then if test $ignoreBuildToolsMismatch = all || \ expr "$mismatchBTExternals" : '.*'$ext_proj'.*' 2>&1 >/dev/null ; then echo " WARNING: BuildTools mismatch: $ext_url_notail uses $extBTURL" else buildtoolsMismatch=1 echo " ERROR: BuildTools mismatch: $ext_url_notail uses $extBTURL" fi fi fi fi echo "$ext_name $ext_url" >>Dependencies ext_name= echo '' fi done # If we have a BuildTools mismatch, exit. if test $buildtoolsMismatch = 1 ; then echo "Exiting due to BuildTools mismatches; use -i to ignore." exit 2 fi $cmdDir/set_externals Dependencies # Try three times to check out externals before conceding defeat. echo '' echo '===> Checking out externals ...' echo '' svn update || { echo "Retry 1 ... " ; svn update ; } || { echo "Retry 2 ... " ; svn update ; } || { echo "Checkout of externals failed. Aborting." ; exit 3 ; } # Run any scripts to acquire ThirdParty code. if test -d ThirdParty ; then echo '' echo '===> Downloading ThirdParty code ...' echo '' ext_name= ext_url= for i in `svn propget svn:externals .` ; do if test -z "$ext_name" ; then ext_name=$i else ext_url=$i if expr "$ext_name" : 'ThirdParty/.*' 2>&1 >/dev/null ; then cd $ext_name ext_proj=`extractProjFromURL $ext_url` getScript=get.$ext_proj if test -x "$getScript" ; then ./$getScript -y fi cd $coDir fi ext_name= fi done fi fi # Done processing externals. If this is a ThirdParty project, we still have # to run the get script. if test $isThirdParty = yes; then if test -x get.$srcProj ; then echo '' echo '===> Downloading third party code...' echo '' ./get.$srcProj -y fi fi # Run the autotools to update configure and make files echo '' echo '===> Running BuildTools/run_autotools ...' echo '' if test $isThirdParty = yes || test $isData = yes ; then cd ../.. ./BuildTools/run_autotools cd "$coDir" else ./BuildTools/run_autotools fi # Let's see if it works. We only run tests for non-ThirdParty, non-Data. DO NOT # turn on --enable-maintainer-mode in the initial configure command. At the # least, it's not needed. At the worst, as of 100526, it'll undo all the # careful work above to set externals. if test $isThirdParty != yes && test $isData != yes; then ( set -e echo '' echo '===> Creating build directory and running the configuration script...' echo '' mkdir build cd build cmd="$coDir/configure -C" echo $cmd eval $cmd echo '' echo '===> Compiling code...' echo '' cmd='make install' echo $cmd eval $cmd echo '' echo '===> Running the unit test...' echo '' echo '*******************************************************************************' echo '*** ***' echo '*** BEGIN OUTPUT OF MAKE TEST ***' echo '*** ***' echo '*******************************************************************************' echo '' cmd='make test' echo $cmd eval $cmd echo '' echo '*******************************************************************************' echo '*** ***' echo '*** END OUTPUT OF MAKE TEST ***' echo '*** ***' echo '*******************************************************************************' ) if test $? != 0; then echo '' echo 'Error during build or test' echo '' exit 3 fi fi # No fatal errors. Declare victory. echo '' echo '===> ALL TESTS PASSED' if test $isThirdParty != yes && test $isData != yes && test $isBuildTools != yes ; then echo '' echo 'Please review the output above, particularly the one of make test' fi echo '' # Do we need to plug in nonexistent stable branches for circular dependencies # tested with the trunk? If so, generate a new Dependencies. This is the only # reason trunk references should appear in the externals for a stable branch, # so we don't need to check further before removing them. if test -n "$trunkExternals" ; then echo '' echo "===> Grooming externals to remove trunk references used for testing." echo '' mv Dependencies Dependencies.temp.$$ ext_name= ext_url= for i in `cat Dependencies.temp.$$`; do if test "$ext_name" = ""; then ext_name="$i" else ext_url=$i ext_urltype=`extractTypeFromURL $ext_url` ext_proj=`extractProjFromURL $ext_url` if test $ext_urltype = trunk ; then ext_oldurl=$ext_url ext_url=`bestStable $ext_url -1` ext_majVer=`extractMajorFromURL $ext_url` ext_minVer=`extractMinorFromURL $ext_url` ext_minVer=`expr $ext_minVer + 1` ext_url=`replaceVersionInURL $ext_url $ext_majVer $ext_minVer` ext_isNormal=`isNormalURL $ext_url` if test $ext_isNormal = yes ; then ext_url="${ext_url}${ext_proj}" fi echo " $ext_name $ext_oldurl ==> $ext_url" fi echo "$ext_name $ext_url" >>Dependencies ext_name= fi done rm -f Dependencies.temp.$$ $cmdDir/set_externals Dependencies fi if test -r Dependencies ; then echo '' echo 'Also, please confirm the Externals are correct:' svn propget svn:externals fi echo '' echo 'After reviewing the output above, you can create a new stable by going into' echo 'the directory' echo '' echo " $startDir" echo '' echo "and run the commit_new_stable script" cd $topBuildDir # Record information for the commit_new_stable script. cat >.new_stable_data </dev/null 2>&1 ; then cmdDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else cmdDir='.' fi cmdDir=`cd $cmdDir ; pwd` if test -r $cmdDir/coin-functions ; then . $cmdDir/coin-functions else echo "Cannot find utility functions file coin-functions; exiting." fi # We need at least one parameter. The default is a dry run (dryRun = 1). printHelp=0 dryRun=1 dirToCommit= if test "$#" -eq 0; then printHelp=1 else # Process the parameters. A parameter without an opening `-' is assumed to be # the spec for the directory to be committed. (Strip any trailing '/'. Some # people add it, but the script doesn't expect it.) while test $# -gt 0 && test $printHelp = 0 ; do case "$1" in -h* | --h*) printHelp=1 ;; -c* | --c*) dryRun=0 ;; -*) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 ;; *) dirToCommit=`echo $1 | sed -e 's,/$,,'` ;; esac shift done fi # What are we committing? if test -z "$dirToCommit" ; then printHelp=1 fi if test $printHelp = 1 ; then cat < By default, commit_new_stable is a dry run, printing the commands that will be executed. When you're confident that everything looks right, use the -c (--commit) flag to commit the new stable branch. EOF exit 1 fi # Remember what was done during generation of the new stable. if test -r $dirToCommit/.new_stable_data; then . $dirToCommit/.new_stable_data else echo '' echo "Error: the file .new_stable_data is not present in $dirToCommit." echo 'Are you running commit_new_stable in the same directory where you' echo 'ran prepare_new_stable?' echo '' exit 1 fi # Confirm that we're in the proper directory. currDir=`pwd` if test "$currDir/$dirToCommit" != "$topBuildDir" ; then echo "According to $dirToCommit/.new_stable_data, the stable candidate was assembled" echo "in $topBuildDir." echo "You have asked to commit $currDir/$dirToCommit." echo "There is some confusion. Repository is unchanged." exit 1 fi # Change to the checkout directory. cd $coDir # If there are externals set on this directory, confirm that # .Externals.original is present so that we can restore them later. newStableExternals=`svn propget svn:externals . || true` if test -n "$newStableExternals" ; then if test -r .Externals.original ; then : else echo "This project has externals, but no .Externals.original file" echo "is present to restore them. Repository is unchanged." exit 1 fi fi # Make some short-form URLs by stripping the COIN URL base. srcURLshort=`echo $srcURL | sed -e "s,$coinURL/\(.*\),\1,"` newStableURLshort=`echo $newStableURL | sed -e "s,$coinURL/\(.*\),\1,"` # Do we have to svn add Dependencies? If this query comes up with a leading # `?', the answer is yes. If Dependencies is entirely absent or unchanged, # we'll get a null string. If it's modified, we'll have a leading `M'. dependStatus=`svn status Dependencies` if expr "$dependStatus" : '?.*Dependencies.*' >/dev/null 2>&1 ; then cmd='svn add Dependencies' echo $cmd if test $dryRun = 0 ; then eval $cmd fi fi # Now, do we really need to to a temporary commit? BuildTools is the poster # child, there are no changes at time of writing (100629). Do an svn status # on the checkout directory and see if anything comes up as modified. if svn status $coDir | egrep '^M' 2>&1 >/dev/null ; then doCommit=yes else doCommit=no fi if test $doCommit = yes ; then # Commit the stable back to its source URL so we can do a repository-side copy # to create the release. echo '' echo "===> Temporarily committing stable candidate to $srcURLshort ..." echo '' rev_num_before=`svn info . | grep -E '^Revision:' | sed -e 's|Revision: ||'` echo "Revision number before commit: $rev_num_before" cmd="svn ci -m \"temporarily committing stable candidate\"" echo $cmd if test $dryRun = 0 ; then eval $cmd fi # Update to confirm the commit. Avoid pulling in externals --- if we're # doing multiple commits of new stable branches, they may not exist. As it # stands, the main purpose of this call is to allow us to easily obtain the # current revision. # It might be useful to strengthen this and check that the value # is what we're expecting --- one greater than the revision before # commit. `--ignore-externals' could be made provisional on the existence # of all externals by passing a boolean through .new_release_data. This # would strengthen the update, in that the update would confirm existence # of the externals. cmd='svn update --ignore-externals' echo $cmd if test $dryRun = 0 ; then eval $cmd fi rev_num=`svn info . | grep -E '^Revision:' | sed -e 's|Revision: ||'` echo "Current revision number is: $rev_num" fi # End of preparatory commit. # Create the new stable branch with a repository-side copy. echo '' echo "===> Creating new stable branch $newStableURLshort from $srcURLshort (r$rev_num) ..." echo '' cmd="svn copy -m \"creating $newStableURLshort from $srcURLshort (r$rev_num).\" $srcURL $newStableURL" echo $cmd if test $dryRun = 0 ; then eval $cmd fi # Now restore the original stable branch. if test $doCommit = yes ; then # And restore the source to its original condition. Start by reverting # to the original externals. if test -r .Externals.original ; then echo '' echo '===> Restoring original externals ...' echo '' cmd="svn propset -F .Externals.original svn:externals ." echo $cmd if test $dryRun = 0 ; then eval $cmd rm .Externals.original fi fi # For every .bak file that we created, revert it. if test -n "$bak_files" ; then echo '' echo '===> Restoring modified files ...' echo '' for i in $bak_files; do cmd="cp $i.bak $i ; rm $i.bak" if test $dryRun = 1 ; then echo "$cmd" else eval $cmd fi done fi # Rebuild configure and Makefile.in files echo '' echo '===> Executing run_autotools to restore configuration files ...' echo '' curdir=`pwd` cd $topBuildDir cmd="./BuildTools/run_autotools" echo $cmd if test $dryRun = 0 ; then eval $cmd fi cd "$curdir" # Commit the restored source URL. echo '' echo "===> Committing restored $srcURLshort ..." echo '' cmd="svn ci -m \"restoring $srcURLshort\"" echo $cmd if test $dryRun = 0 ; then eval $cmd fi fi # End of restorative commit. cd $topBuildDir cmd="rm .new_stable_data" echo $cmd if test $dryRun = 0 ; then eval $cmd fi cd $startDir echo '' echo "Done, new stable $newStableURLshort created." echo '' echo "You can now delete the directory $topBuildDir including subdirectories" Vol-1.5.4/BuildTools/coin.m40000644000175000017500000045711713003663644014611 0ustar sudipsudip# Copyright (C) 2006, 2009 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # ## $Id: coin.m4 3701 2016-10-25 14:09:40Z stefan $ # # Author: Andreas Wachter IBM 2006-04-14 # This file defines the common autoconf macros for COIN # # Check requirements AC_PREREQ(2.59) ########################################################################### # coin_foreach_w # ########################################################################### # the autoconf version used by COIN-OR is so old that it does not have the M4 macro foreach_w. # thus, we define our own one which applies the foreach macro to the same arguments but with # all spaces replaced by ',' in the second argument. # further, we run the loop only if the second argument is not empty AC_DEFUN([coin_foreach_w], [m4_ifval([$2], [m4_foreach([$1], [m4_bpatsubsts([$2],[[ ]+],[, ])], [$3])])]) ########################################################################### # COIN_CHECK_FILE # ########################################################################### # A simple replacement for AC_CHECK_FILE that works for cross compilation AC_DEFUN([AC_COIN_CHECK_FILE], [if test -r $1; then $2 : else $3 : fi ]) ########################################################################### # COIN_CHECK_VPATH # ########################################################################### # This macro sets the variable coin_vpath_config to true if this is a # VPATH configuration, otherwise it sets it to false. AC_DEFUN([AC_COIN_CHECK_VPATH], [ AC_MSG_CHECKING(whether this is a VPATH configuration) if test `cd $srcdir; pwd` != `pwd`; then coin_vpath_config=yes; else coin_vpath_config=no; fi AC_MSG_RESULT($coin_vpath_config) ]) # AC_COIN_CHECK_VPATH ########################################################################### # COIN_PROJECTVERSION # ########################################################################### # This macro is used by COIN_PROJECTDIR_INIT and sets up variables related # to versioning numbers of the project. AC_DEFUN([AC_COIN_PROJECTVERSION], [m4_ifvaln([$1],[ AC_DEFINE_UNQUOTED(m4_toupper($1_VERSION), ["$PACKAGE_VERSION"],[Version number of project]) [coin_majorver=`echo $PACKAGE_VERSION | sed -n -e 's/^\([0-9]*\).*/\1/gp'`] [coin_minorver=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.\([0-9]*\).*/\1/gp'`] [coin_releasever=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/gp'`] if test "x$coin_majorver" = x ; then coin_majorver=9999 ; fi if test "x$coin_minorver" = x ; then coin_minorver=9999 ; fi if test "x$coin_releasever" = x ; then coin_releasever=9999 ; fi AC_DEFINE_UNQUOTED(m4_toupper($1_VERSION_MAJOR), [$coin_majorver], [Major Version number of project]) AC_DEFINE_UNQUOTED(m4_toupper($1_VERSION_MINOR), [$coin_minorver], [Minor Version number of project]) AC_DEFINE_UNQUOTED(m4_toupper($1_VERSION_RELEASE), [$coin_releasever], [Release Version number of project]) # We use the following variable to have a string with the upper case # version of the project name COIN_PRJCT=m4_toupper($1) # Set the project's SVN revision number. The complicated sed expression # (made worse by quadrigraphs) ensures that things like 4123:4168MS end up # as a single number. AC_CHECK_PROG([have_svnversion],[svnversion],[yes],[no]) if test "x$have_svnversion" = xyes; then AC_SUBST(m4_toupper($1_SVN_REV)) svn_rev_tmp=`LANG=en_EN svnversion $srcdir 2>/dev/null` if test "x$svn_rev_tmp" != xexported -a "x$svn_rev_tmp" != x -a "x$svn_rev_tmp" != "xUnversioned directory"; then m4_toupper($1_SVN_REV)=`echo $svn_rev_tmp | sed -n -e 's/^@<:@0-9@:>@*://' -e 's/\(@<:@0-9@:>@\)@<:@^0-9@:>@*$/\1/p'` AC_DEFINE_UNQUOTED(m4_toupper($1_SVN_REV), $m4_toupper($1_SVN_REV), [SVN revision number of project]) fi fi ]) # Capture libtool library version, if given. m4_ifvaln([$2],[coin_libversion=$2],[]) ]) ########################################################################### # COIN_PROJECTDIR_INIT # ########################################################################### # This macro does everything that is required in the early part in the # configure script, such as defining a few variables. This should only be used # in the main directory of a project directory (the one which holds the src # directory for the project). The first parameter is the project name. The # second (optional) is the libtool library version (important for releases, # less so for stable or trunk). AC_DEFUN([AC_COIN_PROJECTDIR_INIT], [ # As backup, we make sure we don't loose an FLIBS if it has been set # by the user save_FLIBS="$FLIBS" # A useful makefile conditional that is always false AM_CONDITIONAL(ALWAYS_FALSE, false) # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes # Set the project's version numbers AC_COIN_PROJECTVERSION($1, $2) ]) # AC_COIN_PROJECTDIR_INIT ########################################################################### # COIN_DEBUG_COMPILE # ########################################################################### # enable the configure flags --enable-debug and --enable-debug-prjct # (where prcjt is the name of the project in lower case) and set the # variable coin_debug_compile to true or false This is used by # COIN_PROG_CXX, COIN_PROG_CC and COIN_PROG_F77 to determine the # compilation flags. This macro also makes the switches # --with-prjct-verbosity and --with-prjct-checklevel available, which # define the preprocessor macros COIN_PRJCT_VERBOSITY and # COIN_PRJCT_CHECKLEVEL to the specified value (default is 0). # # The project specific flags are only made available, if one gives the # name of the project as first argument to this macro. AC_DEFUN([AC_COIN_DEBUG_COMPILE], [AC_BEFORE([$0],[AC_COIN_PROG_CXX])dnl AC_BEFORE([$0],[AC_COIN_PROG_CC])dnl AC_BEFORE([$0],[AC_COIN_PROG_F77])dnl AC_MSG_CHECKING([whether we want to compile in debug mode]) AC_ARG_ENABLE([debug], [AC_HELP_STRING([--enable-debug], [compile all projects with debug options tests (implies --disable-shared)])], [case "${enableval}" in yes) coin_debug_compile=true if test "${enable_shared+set}" = set; then :; else enable_shared=no fi ;; no) coin_debug_compile=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; esac], [coin_debug_compile=false]) m4_ifvaln([$1], [AC_ARG_ENABLE(debug-m4_tolower($1), [AC_HELP_STRING([--enable-debug-m4_tolower($1)], [compile project $1 with debug compiler flags])], [case "${enableval}" in yes) coin_debug_compile=true ;; no) coin_debug_compile=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug-m4_tolower($1)) ;; esac],[:]) ]) # m4_ifvaln([$1], if test $coin_debug_compile = true; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi m4_ifvaln([$1], [AC_ARG_WITH(m4_tolower($1)-verbosity, AC_HELP_STRING([--with-m4_tolower($1)-verbosity], [specify the debug verbosity level for project $1]), [if test "$withval" = yes; then withval=1 fi m4_tolower(coin_$1_verbosity)=$withval], [m4_tolower(coin_$1_verbosity)=0]) AC_DEFINE_UNQUOTED(m4_toupper(COIN_$1_VERBOSITY), m4_tolower($coin_$1_verbosity), [Define to the debug verbosity level (0 is no output)]) AC_ARG_WITH(m4_tolower($1)-checklevel, AC_HELP_STRING([--with-m4_tolower($1)-checklevel], [specify the sanity check level for project $1]), [if test "$withval" = yes; then withval=1 fi m4_tolower(coin_$1_checklevel)=$withval], [m4_tolower(coin_$1_checklevel)=0]) AC_DEFINE_UNQUOTED(m4_toupper(COIN_$1_CHECKLEVEL), m4_tolower($coin_$1_checklevel), [Define to the debug sanity check level (0 is no test)]) ]) # m4_ifvaln([$1], ]) # AC_COIN_DEBUG_COMPILE ########################################################################### # COIN_ENABLE_MSVC # ########################################################################### # This macro is invoked by any PROG_compiler macro to establish the # --enable-msvc option. # The job of this macro is to make sure the option is correct and # to set enable_msvc. Legal values are yes and no (disabled). # If set, assume the presence of cl/link. It's the user's responsibility to # make sure their PATH is correct. In particular, that MSVC link is found # and not cygwin link (we want to do code linking, not file linking). # It's the responsibility of individual PROG_compiler macros to ensure that # they correctly set the compiler search list and preprocess, compile, and # link flags. This is tied to compiler setup because in practice invocations # of the preprocessor and linker are made through the compiler. # For backward compatibility, we also check for --enable-doscompile=msvc. AC_DEFUN([AC_COIN_ENABLE_MSVC], [AC_REQUIRE([AC_CANONICAL_BUILD]) # for backward compatibility AC_ARG_ENABLE([doscompile],,[enable_doscompile=$enableval],[enable_doscompile=no]) AC_ARG_ENABLE([msvc], [AC_HELP_STRING([--enable-msvc], [Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin.])], [enable_msvc=$enableval], [enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then AC_MSG_ERROR([--enable-doscompile=$enable_doscompile not supported anymore.]) fi ]) if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) AC_MSG_ERROR([--enable-msvc option makes sense only under Cygwin or MinGW]) ;; esac fi ]) ########################################################################### # COIN_PROG_CXX # ########################################################################### # Find the compile command by running AC_PROG_CXX (with compiler names for # different operating systems) and put it into CXX (unless it was given by the # user). Then find an appropriate value for CXXFLAGS. If either of CXXFLAGS or # PRJCT_CXXFLAGS is defined, that value is used (replace PRJCT with the upper # case name of this project). It is possible to provide additional -D flags # in the variable CXXDEFS, and additional compilation flags with ADD_CXXFLAGS. AC_DEFUN([AC_COIN_PROG_CXX], [AC_REQUIRE([AC_COIN_PROG_CC]) #Let's try if that overcomes configuration problem with VC++ 6.0 AC_REQUIRE([AC_COIN_ENABLE_MSVC]) AC_LANG_PUSH(C++) AC_ARG_VAR(CXXDEFS,[Additional -D flags to be used when compiling C++ code.]) AC_ARG_VAR(ADD_CXXFLAGS,[Additional C++ compiler options]) AC_ARG_VAR(DBG_CXXFLAGS,[Debug C++ compiler options]) AC_ARG_VAR(OPT_CXXFLAGS,[Optimize C++ compiler options]) coin_has_cxx=yes save_cxxflags="$CXXFLAGS" # For *-*-solaris*, promote Studio/Workshop compiler to front of list. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl g++" else comps="g++ icl cl" fi ;; *-*-solaris*) comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; *-darwin*) comps="clang++ g++ c++ CC" ;; *-linux-gnu*) comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;; *) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CXX || test "${ac_cv_prog_CXX+set}" != set || { ac_cv_prog_CXX=; export ac_cv_prog_CXX; } # AC_MSG_NOTICE([C++ compiler candidates: $comps]) AC_PROG_CXX([$comps]) #AC_PROG_CXX sets CXX to g++ if it cannot find a working C++ compiler #thus, we test here whether $CXX is actually working AC_LANG_PUSH(C++) AC_MSG_CHECKING([whether C++ compiler $CXX works]); AC_COMPILE_IFELSE( [AC_LANG_PROGRAM(, [int i=0;])], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) AC_MSG_ERROR(failed to find a C++ compiler or C++ compiler $CXX does not work)] ) AC_LANG_POP(C++) coin_cxx_is_cl=false # It seems that we need to cleanup something here for the Windows case "$CXX" in clang* | */clang*) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh mv confdefs.hh confdefs.h coin_cxx_is_cl=true ;; esac # add automake conditional so we can recognize cl compiler in makefile AM_CONDITIONAL(COIN_CXX_IS_CL, [test $coin_cxx_is_cl = true]) # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cxx_g" = yes ; then ac_cv_prog_cxx_g=no AC_MSG_NOTICE([Overruling autoconf; cl does not recognise -g.]) fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CXXFLAGS="$save_cxxflags" # Check if a project specific CXXFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CXXFLAGS+set} if test x$coin_tmp = xset; then eval CXXFLAGS=\${${COIN_PRJCT}_CXXFLAGS} fi fi if test x"$CXXFLAGS" = x; then # ToDo decide whether we want -DNDEBUG for optimization coin_add_cxxflags= coin_opt_cxxflags= coin_dbg_cxxflags= coin_warn_cxxflags= if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) ;; *) # ToDo decide about unroll-loops coin_opt_cxxflags="-O3" coin_add_cxxflags="-pipe" coin_dbg_cxxflags="-g -O0" coin_warn_cxxflags="-Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long" esac fi # Note that we do not need to cover GCC in the following tests. if test -z "$coin_opt_cxxflags"; then case $build in *-cygwin* | *-mingw*) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -O2' coin_dbg_cxxflags='-MDd' else coin_opt_cxxflags='-MT -O2' coin_dbg_cxxflags='-MTd' fi coin_add_cxxflags='-nologo -EHsc -GR -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -Ox' coin_dbg_cxxflags='-MDd -debug' else coin_opt_cxxflags='-MT -Ox' coin_dbg_cxxflags='-MTd -debug' fi coin_add_cxxflags='-nologo -EHsc -GR -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CXX" in icpc* | */icpc*) coin_opt_cxxflags="-O3 -ip -mp1" coin_add_cxxflags="" coin_dbg_cxxflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CXXFLAGS= AC_TRY_LINK(,[int i=0; i++;],[], [coin_add_cxxflags="-i_dynamic $coin_add_cxxflags"]) ;; pgCC* | */pgCC*) coin_opt_cxxflags="-fast" coin_add_cxxflags="-Kieee -pc 64" coin_dbg_cxxflags="-g" ;; esac ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) coin_opt_cxxflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cxxflags="-bmaxdata:0x80000000 -qrtti=dyna -qsuppress=1500-036 -qsuppress=1500-029 -qsourcetype=c++" coin_dbg_cxxflags="-g" ;; esac ;; *-hp-*) case "$CXX" in aCC* | */aCC* ) coin_opt_cxxflags="-O" coin_add_cxxflags="-AA" coin_dbg_cxxflags="-g" ;; esac ;; *-*-solaris*) coin_opt_cxxflags="-O4" coin_dbg_cxxflags="-g" ;; esac fi # Generic flag settings. If these don't work, add a case above. if test "$ac_cv_prog_cxx_g" = yes && test -z "$coin_dbg_cxxflags" ; then coin_dbg_cxxflags="-g" fi if test -z "$coin_opt_cxxflags"; then # Try if -O option works if nothing else is set CXXFLAGS=-O AC_TRY_LINK([],[int i=0; i++;],[coin_opt_cxxflags="-O"]) fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cxxflags" = xyes; then coin_warn_cxxflags= fi # Do final setup of flags based on values determined above. if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$coin_dbg_cxxflags $coin_add_cxxflags $coin_warn_cxxflags" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$coin_opt_cxxflags $coin_add_cxxflags -DNDEBUG $coin_warn_cxxflags" fi DBG_CXXFLAGS="$DBG_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" OPT_CXXFLAGS="$OPT_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test "$coin_debug_compile" = "true"; then CXXFLAGS="$DBG_CXXFLAGS" else CXXFLAGS="$OPT_CXXFLAGS" fi # Handle the case where CXXFLAGS was set externally. else CXXFLAGS="$CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$CXXFLAGS" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$CXXFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CXXFLAGS="$CXXFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CXXFLAGS works save_CXXFLAGS="$CXXFLAGS" AC_TRY_LINK([],[int i=0; i++;],[],[CXXFLAGS=]) if test -z "$CXXFLAGS"; then AC_MSG_WARN([The flags CXXFLAGS="$save_CXXFLAGS" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually.]) CXXFLAGS='-O' AC_TRY_LINK([],[int i=0; i++;],[],[CXXFLAGS=]) if test -z "$CXXFLAGS"; then AC_MSG_WARN([This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually.]) fi fi AC_MSG_NOTICE([C++ compiler options are: $CXXFLAGS]) AC_ARG_VAR(MPICXX,[C++ MPI Compiler]) if test x"$MPICXX" = x; then :; else AC_MSG_NOTICE([Will use MPI C++ compiler $MPICXX]) CXX="$MPICXX" fi # correct the LD variable in a build with MS or Intel-windows compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac AC_LANG_POP(C++) ]) # AC_COIN_PROG_CXX ########################################################################### # COIN_CXXLIBS # ########################################################################### # Determine the C++ runtime libraries required for linking a C++ library # with a Fortran or C compiler. The result is available in CXXLIBS. AC_DEFUN([AC_COIN_CXXLIBS], [AC_REQUIRE([AC_PROG_CXX])dnl AC_LANG_PUSH(C++) AC_ARG_VAR(CXXLIBS,[Libraries necessary for linking C++ code with Fortran compiler]) if test -z "$CXXLIBS"; then if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) CXXLIBS="-lstdc++" ;; *) # clang uses libc++ as the default standard C++ library, not libstdc++ # this test is supposed to recognize whether the compiler is clang # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ #ifndef _LIBCPP_VERSION choke me #endif ]])], [CXXLIBS="-lc++"], [CXXLIBS="-lstdc++ -lm"]) ;; esac else case $build in *-mingw32 | *-cygwin* ) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) CXXLIBS=nothing;; esac;; *-linux-*) case "$CXX" in icpc* | */icpc*) CXXLIBS="-lstdc++" ;; pgCC* | */pgCC*) CXXLIBS="-lstd -lC -lc" ;; esac;; *-ibm-*) CXXLIBS="-lC -lc" ;; *-hp-*) CXXLIBS="-L/opt/aCC/lib -l++ -lstd_v2 -lCsup_v2 -lm -lcl -lc" ;; *-*-solaris*) CXXLIBS="-lCstd -lCrun" esac fi fi if test -z "$CXXLIBS"; then AC_MSG_WARN([Could not automatically determine CXXLIBS (C++ link libraries; necessary if main program is in Fortran or C).]) else AC_MSG_NOTICE([Assuming that CXXLIBS is \"$CXXLIBS\".]) fi if test x"$CXXLIBS" = xnothing; then CXXLIBS= fi AC_LANG_POP(C++) ]) # AC_COIN_CXXLIBS ########################################################################### # COIN_CHECK_HEADER # ########################################################################### # This macro checks for a header file, but it does so without the # standard header. This avoids warning messages like: # # configure: WARNING: dlfcn.h: present but cannot be compiled # configure: WARNING: dlfcn.h: check for missing prerequisite headers? # configure: WARNING: dlfcn.h: see the Autoconf documentation # configure: WARNING: dlfcn.h: section "Present But Cannot Be Compiled" # configure: WARNING: dlfcn.h: proceeding with the preprocessor's result # configure: WARNING: dlfcn.h: in the future, the compiler will take precedence # My guess that the problem lay with CPPFLAGS seems to be correct. With this # macro reduced to a direct call to AC_CHECK_HEADERS, there are no warnings # now that CPPFLAGS contains -mno-cygwin when it needs it. -- lh, 061214 -- # AW 070609: I restored the previous version, since otherwise the warnings # still pop up for the cl compiler AC_DEFUN([AC_COIN_CHECK_HEADER], [#if test x"$4" = x; then # hdr="#include <$1>" #else # hdr="$4" #fi #AC_CHECK_HEADERS([$1],[$2],[$3],[$hdr]) AC_CHECK_HEADERS([$1],[$2],[$3],[$4]) ]) # AC_COIN_CHECK_HEADER ########################################################################### # COIN_CHECK_CXX_CHEADER # ########################################################################### # This macro checks for C header files that are used from C++. For a give # stub (e.g., math), it first checks if the C++ library (cmath) is available. # If it is, it defines HAVE_CMATH (or whatever the stub is). If it is not # available, it checks for the old C head (math.h) and defines HAVE_MATH_H # if that one exists. AC_DEFUN([AC_COIN_CHECK_CXX_CHEADER], [AC_LANG_PUSH(C++) AC_COIN_CHECK_HEADER([c$1],[$2],[$3],[$4]) if test "$ac_cv_header_c$1" != "yes"; then AC_COIN_CHECK_HEADER([$1.h],[$2],[$3],[$4]) fi AC_LANG_POP(C++) ]) # AC_COIN_CHECK_CXX_CHEADER ########################################################################### # COIN_PROG_CC # ########################################################################### # Find the compile command by running AC_PROG_CC (with compiler names # for different operating systems) and put it into CC (unless it was # given my the user), and find an appropriate value for CFLAGS. It is # possible to provide additional -D flags in the variable CDEFS. AC_DEFUN([AC_COIN_PROG_CC], [AC_REQUIRE([AC_COIN_ENABLE_MSVC]) AC_LANG_PUSH(C) # For consistency, we set the C compiler to the same value of the C++ # compiler, if the C++ is set, but the C compiler isn't (only for CXX=cl) if test x"$CXX" != x; then case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) if test x"$CC" = x; then CC="$CXX" AC_MSG_WARN([C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX]) fi ;; esac fi AC_ARG_VAR(CDEFS,[Additional -D flags to be used when compiling C code.]) AC_ARG_VAR(ADD_CFLAGS,[Additional C compiler options]) AC_ARG_VAR(DBG_CFLAGS,[Debug C compiler options]) AC_ARG_VAR(OPT_CFLAGS,[Optimize C compiler options]) coin_has_cc=yes save_cflags="$CFLAGS" # For *-*-solaris*, promote Studio/Workshop cc compiler to front of list. # Depending on the user's PATH, when Studio/Workshop cc is not present we may # find /usr/ucb/cc, which is almost certainly not a good choice for the C # compiler. In this case, put cc after gcc. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl gcc" else comps="gcc icl cl" fi ;; *-*-solaris*) AC_CHECK_PROG(sol_cc_compiler,cc,cc,[],[],/usr/ucb/cc) if test "$sol_cc_compiler" = "cc" ; then comps="cc xlc gcc pgcc icc" else comps="xlc gcc pgcc icc cc" fi ;; *-*-darwin*) comps="clang gcc cc" ;; *-linux-gnu*) comps="gcc cc pgcc icc xlc" ;; *-linux-*) comps="xlc gcc cc pgcc icc" ;; *) comps="xlc_r xlc cc gcc pgcc icc" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CC || test "${ac_cv_prog_CC+set}" != set || { ac_cv_prog_CC=; export ac_cv_prog_CC; } # AC_MSG_NOTICE([C compiler candidates: $comps]) AC_PROG_CC([$comps]) if test -z "$CC" ; then AC_MSG_ERROR([Failed to find a C compiler!]) fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cc_g" = yes ; then ac_cv_prog_cc_g=no AC_MSG_NOTICE([Overruling autoconf; cl does not recognise -g.]) fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CFLAGS="$save_cflags" # add automake conditional so we can recognize cl compiler in makefile coin_cc_is_cl=false case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_cc_is_cl=true ;; esac AM_CONDITIONAL(COIN_CC_IS_CL, [test $coin_cc_is_cl = true]) # Check if a project specific CFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CFLAGS+set} if test x$coin_tmp = xset; then eval CFLAGS=\${${COIN_PRJCT}_CFLAGS} fi fi if test x"$CFLAGS" = x; then coin_add_cflags= coin_opt_cflags= coin_dbg_cflags= coin_warn_cflags= if test "$GCC" = "yes"; then case "$CC" in icc* | */icc*) ;; *) coin_opt_cflags="-O3" coin_add_cflags="-pipe" coin_dbg_cflags="-g -O0" coin_warn_cflags="-Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall -Wno-unknown-pragmas -Wno-long-long" esac fi if test -z "$coin_opt_cflags"; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -O2' coin_dbg_cflags='-MDd' else coin_opt_cflags='-MT -O2' coin_dbg_cflags='-MTd' fi coin_add_cflags='-nologo -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -Ox' coin_dbg_cflags='-MDd -debug' else coin_opt_cflags='-MT -Ox' coin_dbg_cflags='-MTd -debug' fi coin_add_cflags='-nologo -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CC" in icc* | */icc*) coin_opt_cflags="-O3 -ip -mp1" coin_add_cflags="" coin_dbg_cflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CFLAGS= AC_TRY_LINK([],[int i=0; i++;],[], [coin_add_cflags="-i_dynamic $coin_add_cflags"]) ;; pgcc* | */pgcc*) coin_opt_cflags="-fast" coin_add_cflags="-Kieee -pc 64" coin_dbg_cflags="-g" ;; esac ;; *-ibm-*) case "$CC" in xlc* | */xlc* | mpxlc* | */mpxlc*) coin_opt_cflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_cflags="-g" ;; esac ;; *-hp-*) coin_opt_cflags="-O" coin_add_cflags="-Ae" coin_dbg_cflags="-g" ;; *-*-solaris*) coin_opt_cflags="-xO4" coin_dbg_cflags="-g" ;; *-sgi-*) coin_opt_cflags="-O -OPT:Olimit=0" coin_dbg_cflags="-g" ;; esac fi if test "$ac_cv_prog_cc_g" = yes && test -z "$coin_dbg_cflags" ; then coin_dbg_cflags="-g" fi if test -z "$coin_opt_cflags"; then # Try if -O option works if nothing else is set CFLAGS="-O" AC_TRY_LINK([],[int i=0; i++;],[coin_opt_cflags="-O"]) fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cflags" = xyes; then coin_warn_cflags= fi if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$coin_dbg_cflags $coin_add_cflags $coin_warn_cflags" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$coin_opt_cflags $coin_add_cflags -DNDEBUG $coin_warn_cflags" fi DBG_CFLAGS="$DBG_CFLAGS $ADD_CFLAGS $CDEFS" OPT_CFLAGS="$OPT_CFLAGS $ADD_CFLAGS $CDEFS" if test "$coin_debug_compile" = "true"; then CFLAGS="$DBG_CFLAGS" else CFLAGS="$OPT_CFLAGS" fi else CFLAGS="$CFLAGS $ADD_CFLAGS $CDEFS" if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$CFLAGS" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$CFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CFLAGS="$CFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CFLAGS works save_CFLAGS="$CFLAGS" AC_TRY_LINK([],[int i=0; i++;],[],[CFLAGS=]) if test -z "$CFLAGS"; then AC_MSG_WARN([The value CFLAGS="$save_CFLAGS" do not work. I will now just try '-O', but you might want to set CFLAGS manually.]) CFLAGS='-O' AC_TRY_LINK([],[int i=0; i++;],[],[CFLAGS=]) if test -z "$CFLAGS"; then AC_MSG_WARN([This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually.]) fi fi AC_MSG_NOTICE([C compiler options are: $CFLAGS]) AC_ARG_VAR(MPICC,[C MPI Compiler]) if test x"$MPICC" = x; then :; else AC_MSG_NOTICE([Will use MPI C compiler $MPICC]) CC="$MPICC" fi # Correct the LD variable if we are using the MS or Intel-windows compiler case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac AC_LANG_POP(C) ]) # AC_COIN_PROG_CC ########################################################################### # COIN_PROG_F77 # ########################################################################### # Find the compile command by running AC_PROG_F77 (with compiler names # for different operating systems) and put it into F77 (unless it was # given by the user), and find an appropriate value for FFLAGS AC_DEFUN([AC_COIN_PROG_F77], [AC_REQUIRE([AC_COIN_ENABLE_MSVC]) AC_REQUIRE([AC_COIN_PROG_CC]) AC_REQUIRE([AC_COIN_F77_COMPS]) AC_LANG_PUSH([Fortran 77]) AC_ARG_VAR(ADD_FFLAGS,[Additional Fortran compiler options]) AC_ARG_VAR(DBG_FFLAGS,[Debug Fortran compiler options]) AC_ARG_VAR(OPT_FFLAGS,[Optimize Fortran compiler options]) coin_has_f77=yes save_fflags="$FFLAGS" # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_F77 || test "${ac_cv_prog_F77+set}" != set || { ac_cv_prog_F77=; export ac_cv_prog_F77; } # This is a real belt-and-suspenders approach. AC_COIN_FIND_F77 will use # coin_f77_comps to see if there's a program that matches one of the names. # If there's no such program, F77 = unavailable. If we match the name, # feed AC_PROG_F77 the same search list, just to be sure it's a functioning # compiler. # AC_MSG_NOTICE([Fortran compiler candidates: $coin_f77_comps]) AC_COIN_FIND_F77 if test "$F77" != "unavailable" ; then AC_PROG_F77($coin_f77_comps) else AC_MSG_WARN([Failed to find a Fortran compiler!]) fi FFLAGS="$save_fflags" # Check if a project specific FFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_FFLAGS+set} if test x$coin_tmp = xset; then eval FFLAGS=\${${COIN_PRJCT}_FFLAGS} fi fi if test "$F77" != "unavailable" && test x"$FFLAGS" = x ; then coin_add_fflags= coin_opt_fflags= coin_dbg_fflags= coin_warn_fflags= if test "$G77" = "yes"; then coin_opt_fflags="-O3" coin_add_fflags="-pipe" coin_dbg_fflags="-g -O0" else case $build in *-cygwin* | *-mingw*) case $F77 in ifort* | */ifort* | IFORT* | */IFORT* ) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_fflags='-MD -O3' coin_dbg_fflags='-MDd -debug' else coin_opt_fflags='-MT -O3' coin_dbg_fflags='-MTd -debug' fi coin_add_fflags='-fpp -nologo' ;; compile_f2c*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_fflags='-MD -O2' coin_dbg_fflags='-MDd' else coin_opt_fflags='-MT -O2' coin_dbg_fflags='-MTd' fi coin_add_fflags='-nologo -wd4996' ;; esac ;; *-linux-*) case $F77 in ifc* | */ifc* | ifort* | */ifort*) coin_opt_fflags="-O3 -ip" coin_add_fflags="-cm -w90 -w95" coin_dbg_fflags="-g -CA -CB -CS" # Check if -i_dynamic is necessary (for new glibc library) FFLAGS= AC_TRY_LINK(,[ write(*,*) 'Hello world'],[], [coin_add_fflags="-i_dynamic $coin_add_fflags"]) ;; pgf77* | */pgf77* | pgf90* | */pgf90*) coin_opt_fflags="-fast" coin_add_fflags="-Kieee -pc 64" coin_dbg_fflags="-g" ;; esac ;; *-ibm-*) case "$F77" in xlf* | */xlf* | mpxlf* | */mpxlf* ) coin_opt_fflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_fflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_fflags="-g -C" ;; esac ;; *-hp-*) coin_opt_fflags="+O3" coin_add_fflags="+U77" coin_dbg_fflags="-C -g" ;; *-*-solaris*) coin_opt_fflags="-O4" coin_dbg_fflags="-g" ;; *-sgi-*) coin_opt_fflags="-O5 -OPT:Olimit=0" coin_dbg_fflags="-g" ;; esac fi if test "$ac_cv_prog_f77_g" = yes && test -z "$coin_dbg_fflags" ; then coin_dbg_fflags="-g" fi if test -z "$coin_opt_fflags"; then # Try if -O option works if nothing else is set FFLAGS=-O AC_TRY_LINK(,[ integer i], [coin_opt_fflags="-O"]) fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_fflags" = xyes; then coin_warn_fflags= fi if test x${DBG_FFLAGS+set} != xset; then DBG_FFLAGS="$coin_dbg_fflags $coin_add_fflags $coin_warn_fflags" fi if test x${OPT_FFLAGS+set} != xset; then OPT_FFLAGS="$coin_opt_fflags $coin_add_fflags $coin_warn_fflags" fi DBG_FFLAGS="$DBG_FFLAGS $ADD_FFLAGS" OPT_FFLAGS="$OPT_FFLAGS $ADD_FFLAGS" if test "$coin_debug_compile" = "true"; then FFLAGS="$DBG_FFLAGS" else FFLAGS="$OPT_FFLAGS" fi else FFLAGS="$FFLAGS $ADD_FFLAGS" if test x${DBG_FFLAGS+set} != xset; then DBG_FFLAGS="$FFLAGS" fi if test x${OPT_FFLAGS+set} != xset; then OPT_FFLAGS="$FFLAGS" fi fi # Try if FFLAGS works if test "$F77" != "unavailable" ; then AC_TRY_LINK(,[ integer i],[],[FFLAGS=]) if test -z "$FFLAGS"; then AC_MSG_WARN([The flags FFLAGS="$FFLAGS" do not work. I will now just try '-O', but you might want to set FFLAGS manually.]) FFLAGS='-O' AC_TRY_LINK(,[ integer i],[],[FFLAGS=]) if test -z "$FFLAGS"; then AC_MSG_WARN([This value for FFLAGS does not work. I will continue with empty FFLAGS, but you might want to set FFLAGS manually.]) fi fi fi AC_MSG_NOTICE([Fortran compiler options are: $FFLAGS]) AC_ARG_VAR(MPIF77,[Fortran MPI Compiler]) if test x"$MPIF77" = x; then :; else AC_MSG_NOTICE([Will use MPI Fortran compiler $MPIF77]) F77="$MPIF77" fi # correct the LD variable if we use the intel fortran compiler in windows case $build in *-cygwin* | *-mingw*) case "$F77" in ifort* | */ifort* | IFORT* | */IFORT*) LD=link ;; esac ;; esac AC_LANG_POP([Fortran 77]) ]) # AC_COIN_PROG_F77 ########################################################################### # COIN_F77_WRAPPERS # ########################################################################### # Calls autoconfs AC_F77_LIBRARY_LDFLAGS and does additional corrections to FLIBS. # Then calls AC_F77_WRAPPERS to get Fortran namemangling scheme. # # To ensure that the FLIBS are determined and corrected before linking against # Fortran compilers is attempted by other macros, we put it into an extra macro # and call it via AC_REQUIRE. This way it seems to be called before the macros # required by AC_F77_WRAPPERS. AC_DEFUN([_AC_COIN_F77_LIBRARY_LDFLAGS], [AC_BEFORE([AC_PROG_F77],[$0])dnl # get FLIBS AC_F77_LIBRARY_LDFLAGS orig_FLIBS="$FLIBS" # If FLIBS has been set by the user, we just restore its value here if test x"$save_FLIBS" != x; then FLIBS="$save_FLIBS" else # This is to correct a missing exclusion in autoconf 2.59 if test x"$FLIBS" != x; then my_flibs= for flag in $FLIBS; do case $flag in -lcrt*.o) ;; -lcygwin) ;; -lgcc*) ;; *) my_flibs="$my_flibs $flag" ;; esac done FLIBS="$my_flibs" fi case $build in # The following is a fix to define FLIBS for ifort on Windows # In its original version, it linked in libifcorert.lib or libifcorertd.lib on Windows/ifort explicitly. # However, this seem to create a dependency on libifcorert.dll (or libifcorertd.dll) in the executables. # This is seem to be unnecessary, libifcorert(d).lib has been removed from the link line. # Further, excluding libc.lib from the default libs seemed to be necessary only for VS < 8. # Since the corresponding flag seems to make more trouble than it avoids, it has been removed now. *-cygwin* | *-mingw*) case "$F77" in # ifort* | */ifort* | IFORT* | */IFORT*) # FLIBS="-link $LIBS /NODEFAULTLIB:libc.lib" # if "$coin_debug_compile" = true ; then # FLIBS="-link $LIBS /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib" # else # FLIBS="-link $LIBS /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmtd.lib" # fi # ;; compile_f2c*) FLIBS=`$F77 -FLIBS` ;; esac;; *-hp-*) FLIBS="$FLIBS -lm";; *-ibm-*) FLIBS=`echo $FLIBS | sed 's/-lc)/-lc/g'` ;; *-linux-*) case "$F77" in pgf77* | */pgf77* | pgf90* | */pgf90*) # ask linker to go through the archives multiple times # (the Fortran compiler seems to do that automatically...) FLIBS="-Wl,--start-group $FLIBS -Wl,--end-group" ;; esac esac ac_cv_f77_libs="$FLIBS" fi if test "x$orig_FLIBS" != "x$FLIBS" ; then AC_MSG_NOTICE([Corrected Fortran libraries: $FLIBS]) fi ]) # _AC_COIN_F77_LIBRARY_LDFLAGS AC_DEFUN([AC_COIN_F77_WRAPPERS], [AC_BEFORE([AC_COIN_PROG_F77],[$0])dnl AC_REQUIRE([_AC_COIN_F77_LIBRARY_LDFLAGS])dnl AC_LANG_PUSH([Fortran 77]) AC_F77_WRAPPERS AC_LANG_POP([Fortran 77]) ]) # AC_COIN_F77_WRAPPERS ########################################################################### # COIN_FIND_F77 # ########################################################################### # Attempt to preempt autoconf by locating an appropriate F77 program. This # macro will not trigger a fatal error if a suitable compiler cannot be # found. It should be called before COIN_PROG_F77 or COIN_TRY_FLINK. AC_DEFUN([AC_COIN_FIND_F77], [AC_REQUIRE([AC_COIN_ENABLE_MSVC]) AC_REQUIRE([AC_COIN_F77_COMPS]) AC_MSG_NOTICE([Trying to determine Fortran compiler name]) AC_CHECK_TOOLS([F77],[$coin_f77_comps],[unavailable]) ]) # Auxilliary macro to make sure both COIN_PROG_F77 and COIN_FIND_F77 use # the same search lists for compiler names. # For *-*-solaris*, promote Studio/Workshop compilers to front of list. AC_DEFUN([AC_COIN_F77_COMPS], [case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then coin_f77_comps="ifort fl32 compile_f2c" else coin_f77_comps="gfortran ifort g95 g77 fl32 compile_f2c" fi ;; *-*-solaris*) coin_f77_comps="f95 f90 g95 f77 xlf_r fort77 gfortran g77 pgf90 pgf77 ifort ifc frt af77" ;; *-linux-gnu*) coin_f77_comps="gfortran ifort g95 fort77 f77 g77 pgf90 pgf77 ifc frt af77 xlf_r" ;; *) coin_f77_comps="xlf_r fort77 gfortran ifort g95 f77 g77 pgf90 pgf77 ifc frt af77" ;; esac ]) ########################################################################### # COIN_INIT_AUTOMAKE # ########################################################################### # This macro calls the regular INIT_AUTOMAKE and MAINTAINER_MODE # macros, and defines additional variables and makefile conditionals, # that are used in the maintainer parts of the makfile. It also # checks if the correct versions of the autotools are used. # # This also defines the AC_SUBST variables: # abs_source_dir absolute path to source code for this package # abs_bin_dir absolute path to the directory where binaries are # going to be installed (prefix/bin) # abs_lib_dir absolute path to the directory where libraries are # going to be installed (prefix/lib) # abs_include_dir absolute path to the directory where the header files # are installed (prefix/include) AC_DEFUN([AC_COIN_INIT_AUTOMAKE], [AC_REQUIRE([AC_PROG_EGREP]) AC_REQUIRE([AC_PROG_LN_S]) # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake AM_INIT_AUTOMAKE AM_MAINTAINER_MODE coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) AC_SUBST(LIBTOOLM4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME AC_CACHE_CHECK([whether we are using the correct autotools], [ac_cv_use_correct_autotools], [ac_cv_use_correct_autotools=check]) if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf AC_CHECK_PROG([have_autoconf],[autoconf],[yes],[no]) if test $have_autoconf = no; then AC_MSG_ERROR([You specified you want to use maintainer mode, but I cannot find autoconf in your path.]) fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` AC_MSG_CHECKING([whether we are using the correct version ($correct_version) of autoconf]) autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then AC_MSG_RESULT([yes]) else rm -f confauto.out AC_MSG_RESULT([no]) AC_MSG_ERROR([You don't have the correct version of autoconf as the first one in your path.]) fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location AC_MSG_CHECKING([whether autoconf is coming from the correct location]) autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then AC_MSG_RESULT([yes]) else rm -f confauto.out AC_MSG_RESULT([no]) AC_MSG_ERROR([The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin.]) fi # Check if we have automake AC_CHECK_PROG([have_automake],[automake],[yes],[no]) if test $have_automake = no; then AC_MSG_ERROR([You specified you want to use maintainer mode, but I cannot find automake in your path.]) fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` AC_MSG_CHECKING([whether we are using the correct version ($correct_version) of automake]) automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then AC_MSG_RESULT([yes]) else rm -f confauto.out AC_MSG_RESULT([no]) AC_MSG_ERROR([You don't have the correct version of automake as the first one in your path.]) fi rm -f confauto.out # Check if the executable automake is picked up from the correct location AC_MSG_CHECKING([whether automake is coming from the correct location]) automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then AC_MSG_RESULT([yes]) else rm -f confauto.out AC_MSG_RESULT([no]) AC_MSG_ERROR([The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin.]) fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` AC_COIN_CHECK_FILE([$want_dir/libtool/ltmain.sh], [have_ltmain=yes], [have_ltmain=no]) AC_MSG_CHECKING([whether we are using the correct version ($correct_version) of libtool.]) if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([You don't have the correct version of libtool.]) fi else AC_MSG_RESULT([no]) AC_MSG_ERROR([I cannot find the ltmain.sh file.]) fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi AC_COIN_CHECK_FILE([$want_dir/aclocal/libtool.m4], [LIBTOOLM4="$want_dir/aclocal/libtool.m4"], [AC_MSG_ERROR([I cannot find the libtool.m4 file.])]) # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https AC_CHECK_PROG([have_svn],[svn],[yes],[no]) if test x$have_svn = xyes; then AC_CACHE_CHECK([whether svn understands https], [ac_cv_svn_understands_https], [svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out]) fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else AC_MSG_ERROR(Cannot find the BuildTools directory, better disable maintainer mode.) fi fi fi AC_SUBST(BUILDTOOLSDIR) # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AC_SUBST(AUX_DIR) AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` AC_SUBST(abs_source_dir) # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` AC_SUBST(abs_lib_dir) abs_lib_dir=$full_prefix/lib AC_SUBST(abs_include_dir) abs_include_dir=$full_prefix/include AC_SUBST(abs_bin_dir) abs_bin_dir=$full_prefix/bin AM_CONDITIONAL(HAVE_EXTERNALS, test $coin_have_externals = yes && test x$have_svn = xyes) # AC_MSG_NOTICE([End automake initialisation.]) ]) # AC_COIN_INIT_AUTOMAKE ########################################################################### # COIN_CREATE_LIBTOOL # ########################################################################### # This does all the tests necessary to create the libtool script in the # package base directory. If this is used, then the COIN_INIT_AUTO_TOOLS # test in the subdirectories will be able to skip the libtool tests and # just use the one in the package base directory. m4_define([AC_COIN_CREATE_LIBTOOL], [AC_CANONICAL_BUILD # Check if user wants to produce debugging code AC_COIN_DEBUG_COMPILE # Get the name of the C compiler and appropriate compiler options AC_COIN_PROG_CC # Get the name of the C++ compiler and appropriate compiler options AC_COIN_PROG_CXX # Get the name of the Fortran compiler and appropriate compiler options AC_COIN_PROG_F77 # Initialize automake and libtool # AC_MSG_NOTICE([Calling INIT_AUTO_TOOLS from CREATE_LIBTOOL.]) AC_COIN_INIT_AUTO_TOOLS # AC_MSG_NOTICE([Finished INIT_AUTO_TOOLS from CREATE_LIBTOOL.]) ]) ########################################################################### # COIN_INIT_AUTO_TOOLS # ########################################################################### # Initialize the auto tools automake and libtool, with all # modifications we want for COIN packages. # # RPATH_FLAGS link flags for hardcoding path to shared objects # This is a trick to have this code before AC_COIN_PROG_LIBTOOL AC_DEFUN([AC_COIN_DISABLE_STATIC], [ coin_disable_shared=no # Test if force_shared has been set if test "x$1" = xforce_shared; then if test x$enable_shared = xno; then AC_MSG_ERROR([Shared libraries are disabled by user, but this is not feasible with the given options]) fi enable_shared=yes; else case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CC" in clang* ) AC_MSG_WARN([Building of DLLs not supported in this configuration.]) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) AC_MSG_NOTICE([Building of DLLs not supported in this configuration.]) ;; *gcc*) if test x"$enable_dependency_linking" = xyes; then coin_disable_shared=no else AC_MSG_WARN([Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built]) fi ;; *) AC_MSG_WARN([Building of DLLs not supported in this configuration.]) ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then AC_MSG_WARN([Shared objects are not supported.]) fi ;; esac fi if test x"$coin_disable_shared" = xyes; then if test x"$enable_shared" = xyes; then : else # we don't disable shared, because it was not selected anyway coin_disable_shared=no fi enable_shared=no fi # By default, we only want the shared objects to be compiled AC_DISABLE_STATIC ]) m4_define([AC_COIN_INIT_AUTO_TOOLS], [{AC_BEFORE([AC_COIN_PROG_CXX],[$0]) AC_BEFORE([AC_COIN_PROG_CC],[$0]) AC_BEFORE([AC_COIN_PROG_F77],[$0]) # START AC_COIN_DISABLE_STATIC([$1]) # Initialize automake AC_COIN_INIT_AUTOMAKE LIBTOOL= if test -f ../libtool; then coin_config_dir=.. LIBTOOL='$(SHELL) $(top_builddir)/../libtool' fi if test "x$LIBTOOL" = x; then if test -f ../../libtool; then coin_config_dir=../.. LIBTOOL='$(SHELL) $(top_builddir)/../../libtool' fi fi if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Creating libtool script (calling COIN_PROG_LIBTOOL).]) # Stuff for libtool AC_COIN_PROG_LIBTOOL # AC_MSG_NOTICE([Finished COIN_PROG_LIBTOOL.]) # set RPATH_FLAGS to the compiler link flags required to hardcode location # of the shared objects AC_COIN_RPATH_FLAGS([$abs_lib_dir]) else AC_MSG_NOTICE([Using libtool script in directory $coin_config_dir]) # get all missing information from the config.log file # output variables and defines as_save_IFS=$IFS IFS=' ' for oneline in `cat $coin_config_dir/config.status`; do case "$oneline" in # First some automake conditionals s,@am__fastdep* | s,@AR@* | s,@CPP@* | s,@CPPFLAGS@* | s,@CXXCPP@* | \ s,@RANLIB@* | s,@STRIP@* | s,@ac_ct_AR@* | s,@ac_ct_RANLIB@* | \ s,@ac_ct_STRIP@* | s,@host* | s,@LN_S@* | s,@RPATH_FLAGS@* | \ s,@ac_c_preproc_warn_flag@* | s,@ac_cxx_preproc_warn_flag@* ) command=`echo $oneline | sed -e 's/^s,@//' -e 's/@,/="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; s,@DEFS@* ) command=`echo $oneline | sed -e 's/^s,@DEFS@,/defsline="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; esac done IFS=$as_save_IFS # And some defines (assuming here that the packages base dir # doesn't have a config.h file for word in $defsline; do # echo word $word case $word in -DHAVE_@<:@A-Z_@:>@*_H=1 | -DSTDC_HEADERS=1 ) i=`echo $word | sed -e 's/-D/#define /' -e 's/=/ /'` # echo dd $i echo $i >>confdefs.h ;; esac done fi # AC_MSG_NOTICE([End of INIT_AUTO_TOOLS.]) AC_ARG_ENABLE([dependency-linking], [AC_HELP_STRING([--disable-dependency-linking], [disable linking library dependencies into shared libraries])], [dependency_linking="$enableval"], [dependency_linking=auto]) if test "$dependency_linking" = auto; then # On Cygwin and AIX, building DLLs doesn't work dependency_linking=no if test x"$coin_disable_shared" = xno; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) dependency_linking=yes ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) dependency_linking=no ;; *gcc*) dependency_linking=yes ;; *) dependency_linking=yes ;; esac ;; *) dependency_linking=yes ;; esac fi fi if test "$dependency_linking" = yes ; then LT_LDFLAGS="-no-undefined" else LT_LDFLAGS= fi AM_CONDITIONAL(DEPENDENCY_LINKING, [test "$dependency_linking" = yes]) # Check if we want to set the library version AC_MSG_CHECKING([if library version is set]) if test x"$coin_libversion" != x; then LT_LDFLAGS="$LT_LDFLAGS -version-info $coin_libversion" AC_MSG_RESULT([$coin_libversion]) else AC_MSG_RESULT([no]) fi AC_SUBST(LT_LDFLAGS) #END }]) ########################################################################### # COIN_PATCH_LIBTOOL_CYGWIN # ########################################################################### # Patches to libtool for cygwin. Lots for cl, a few for GCC. # For cl: # - cygpath is not correctly quoted in fix_srcfile_path # - paths generated for .lib files is not run through cygpath -w AC_DEFUN([AC_COIN_PATCH_LIBTOOL_CYGWIN], [ case "$CXX" in clang* ) # we assume that libtool patches for CLANG are the same as for GNU compiler - correct??? AC_MSG_NOTICE(Applying patches to libtool for CLANG compiler) sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) AC_MSG_NOTICE(Applying patches to libtool for cl compiler) sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|fix_srcfile_path=\"\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's%compile_deplibs=\"\$dir/\$old_library \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$old_library | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%compile_deplibs=\"\$dir/\$linklib \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$linklib | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%lib /OUT:%lib -OUT:%' \ -e "s%cygpath -w%$CYGPATH_W%" \ -e 's%$AR x \\$f_ex_an_ar_oldlib%bla=\\$(lib -nologo -list \\$('"$CYGPATH_W \$[]1"') '"$mydos2unix"' | xargs echo); echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$('"$CYGPATH_W \$[]1"'); done%' \ -e 's%$AR t "$f_ex_an_ar_oldlib"%lib -nologo -list \$('"$CYGPATH_W \$[]1"') '"$mydos2unix"'%' \ -e 's%f_ex_an_ar_oldlib="\($?*1*\)"%f_ex_an_ar_oldlib='\`"$CYGPATH_W"' \1`%' \ -e 's%^archive_cmds=.*%archive_cmds="\\$CC -o \\$lib \\$libobjs \\$compiler_flags \\\\\\`echo \\\\\\"\\$deplibs\\\\\\" | \\$SED -e '"\'"'s/ -lc\\$//'"\'"'\\\\\\` -link -dll~linknames="%' \ -e 's%old_archive_cmds="lib -OUT:\\$oldlib\\$oldobjs\\$old_deplibs"%old_archive_cmds="if test -r \\$oldlib; then bla=\\"\\$oldlib\\"; else bla=; fi; lib -OUT:\\$oldlib \\\\\\$bla\\$oldobjs\\$old_deplibs"%' \ libtool > conftest.bla ;; *) AC_MSG_NOTICE(Applying patches to libtool for GNU compiler) sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla ;; esac mv conftest.bla libtool chmod 755 libtool ]) # COIN_PATCH_LIBTOOL_CYGWIN ########################################################################### # COIN_PATCH_LIBTOOL_SOLARIS # ########################################################################### # If we want to do a 64-bit build with GCC on Solaris, the system search # libraries need to point to 64-bit subdirectories. If they do not already do # that, fix them. This patch is evolving, as are GCC compilers. GCC 4.2.1 # reports the correct search list, given the correct call. GCC 4.1.1 does not. # `Correct call' means -m64 is specified. `Correct search list' seems to amount # to prepending the list of 64-bit subdirectories to the 32-bit directories. # Both SPARC and x86 have this issue, but a different hardware id string is # required depending on the underlying CPU. The macro executes isainfo to get # the string. This will fail, of course, if we're cross-compiling. The # alternative is to fail on a regular basis each time a new CPU identifier is # needed. This macro will also fail if the search list reported with # -print-search-dirs differs between the C, C++, and Fortran compilers; each # have their own setting in libtool. If GCC reports the correct search list # given the -m64 flag, the best solution is to define CC='gcc -m64', and # similarly for CXX, F77, so that libtool will make the correct call. ########################################################################### AC_DEFUN([AC_COIN_PATCH_LIBTOOL_SOLARIS], [ if test "$GCC" = yes && \ (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm64' >/dev/null 2>&1) ; then hdwisa=`isainfo | sed -e 's/\(@<:@^ @:>@*\) .*$/\1/'` if `$EGREP 'sys_lib_search_path_spec=' libtool | $EGREP -v $hdwisa >/dev/null 2>&1` ; then AC_MSG_NOTICE([Applying patches to libtool for 64-bit GCC compilation]) fixlibtmp=`$CC -m64 -print-search-dirs | $EGREP '^libraries:'` fixlibtmp=`echo $fixlibtmp | sed -e 's/libraries: =//' -e 's/:/ /g'` if `echo "$fixlibtmp" | $EGREP -v $hdwisa >/dev/null 2>&1` ; then # AC_MSG_NOTICE(Compensating for broken gcc) for lib in $fixlibtmp ; do if test -d "${lib}${hdwisa}" ; then syslibpath64="$syslibpath64 ${lib}${hdwisa}/" fi done syslibpath64="${syslibpath64} ${fixlibtmp}" else syslibpath64="$fixlibtmp" fi sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="'"$syslibpath64"'"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi # AC_MSG_NOTICE(Result is ) # $EGREP 'sys_lib_search_path_spec=' libtool fi ]) # COIN_PATCH_LIBTOOL_SOLARIS ########################################################################### # COIN_PROG_LIBTOOL # ########################################################################### # Setup the libtool stuff together with any modifications to make it # work on additional platforms AC_DEFUN([AC_COIN_PROG_LIBTOOL], [# No longer needed now that CPPFLAGS is correctly set -- lh, 061214 -- # AC_REQUIRE([AC_COIN_DLFCN_H]) # NEW: If libtool exists in the directory higher up, we use that one # instead of creating a new one # It turns out that the code for AC_PROG_LIBTOOL is somehow AC_REQUIRED # out in front of this macro body. You'll notice that LIBTOOL is already # defined here. We'll have to count on this macro not being called if libtool # already exists, or at least move the libtool fixes outside the conditional. # AC_MSG_NOTICE([Entering coin_prog_libtool, LIBTOOL = "$LIBTOOL".]) # This test is therefore removed. -- lh, 061214 -- # if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Calling PROG_LIBTOOL.]) AC_PROG_LIBTOOL # AC_MSG_NOTICE([Finished PROG_LIBTOOL.]) AC_SUBST(ac_c_preproc_warn_flag) AC_SUBST(ac_cxx_preproc_warn_flag) AC_MSG_NOTICE([Build is "$build".]) mydos2unix='| dos2unix' case $build in *-mingw*) CYGPATH_W=echo ;; esac case $build in # Here we need to check if -m32 is specified. If so, we need to correct # sys_lib_search_path_spec *-cygwin* | *-mingw*) AC_COIN_PATCH_LIBTOOL_CYGWIN ;; *x86_64-*) if test "$GCC" = yes && (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm32' >& /dev/null); then AC_MSG_NOTICE(Applying patches to libtool for 32bit compilation) sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="/lib /usr/lib"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi ;; *-solaris*) AC_COIN_PATCH_LIBTOOL_SOLARIS ;; # Cygwin. Ah, cygwin. Too big and ugly to inline; see the macro. *-darwin*) AC_MSG_NOTICE(Applying patches to libtool for Darwin) sed -e 's/verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"/verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"/' \ -e 's/ -dynamiclib / -dynamiclib -single_module /g' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac # This fi matches the commented `if test "x$LIBTOOL" = x;' up at the head of # the macro. -- lh, 061214 -- # fi # AC_MSG_NOTICE([End libtool initialisation.]) ]) # AC_COIN_PROG_LIBTOOL # This is a trick to force the check for the dlfcn header to be done before # the checks for libtool # No longer needed now that CPPFLAGS is correctly set. -- lh, 061214 -- # ACDEFUN([AC_COIN_DLFCN_H], # [AC_LANG_PUSH(C) # AC_COIN_CHECK_HEADER([dlfcn.h]) # AC_LANG_POP(C) # ]) # AC_COIN_DLFCN_H ########################################################################### # COIN_RPATH_FLAGS # ########################################################################### # This macro, in case shared objects are used, defines a variable # RPATH_FLAGS that can be used by the linker to hardwire the library # search path for the given directories. This is useful for example # Makefiles AC_DEFUN([AC_COIN_RPATH_FLAGS], [RPATH_FLAGS= if test $enable_shared = yes; then case $build in *-linux-*) if test "$GXX" = "yes"; then RPATH_FLAGS= for dir in $1; do RPATH_FLAGS="$RPATH_FLAGS -Wl,--rpath -Wl,$dir" done fi ;; *-darwin*) RPATH_FLAGS=nothing ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) RPATH_FLAGS=nothing ;; esac ;; *-hp-*) RPATH_FLAGS=nothing ;; *-mingw32) RPATH_FLAGS=nothing ;; *-*-solaris*) RPATH_FLAGS= for dir in $1; do RPATH_FLAGS="$RPATH_FLAGS -R$dir" done esac if test "$RPATH_FLAGS" = ""; then AC_MSG_WARN([Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually.]) fi if test "$RPATH_FLAGS" = "nothing"; then RPATH_FLAGS= fi fi AC_SUBST(RPATH_FLAGS) ]) # AC_COIN_RPATH_FLAGS ########################################################################### # COIN_LINK_INPUT_CMD # ########################################################################### # This macro determines which command should be used to "link" files # that are input to the generated executables. On Windows, the codes # using the native Windows system libraries, cannot understand symbolic # links, and a copy should be used instead of 'ln -s'. # The result is stored in coin_link_input_cmd AC_DEFUN([AC_COIN_LINK_INPUT_CMD], [AC_REQUIRE([AC_PROG_LN_S]) AC_BEFORE([AC_COIN_PROG_CC], [$0]) AC_BEFORE([AC_COIN_ENABLE_MSVC], [$0]) AC_MSG_CHECKING([which command should be used to link input files]) coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac AC_MSG_RESULT($coin_link_input_cmd) ]) ########################################################################### # COIN_FINALIZE # ########################################################################### # This macro should be called at the very end of the configure.ac file. # It creates the output files (by using AC_OUTPUT), and might do some other # things (such as generating links to data files in a VPATH configuration). # It also prints the "success" message. # Note: If the variable coin_skip_ac_output is set to yes, then no output # files are written. AC_DEFUN([AC_COIN_FINALIZE], [ AC_REQUIRE([AC_COIN_LINK_INPUT_CMD]) if test x$coin_skip_ac_output != xyes; then # library extension AC_SUBST(LIBEXT) case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration AC_SUBST(VPATH_DISTCLEANFILES) VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" AC_SUBST(ABSBUILDDIR) fi AC_OUTPUT if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then AC_MSG_NOTICE(Copying data files for VPATH configuration) else AC_MSG_NOTICE(Creating VPATH links for data files) fi for file in $coin_vpath_link_files; do dir=`AS_DIRNAME(["./$file"])` if test -d $dir; then : ; else AS_MKDIR_P($dir) fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi AC_MSG_NOTICE([In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting]) if test x$coin_projectdir = xyes; then AC_MSG_NOTICE([Configuration of $PACKAGE_NAME successful]) else AC_MSG_NOTICE([Main configuration of $PACKAGE_NAME successful]) fi else AC_MSG_NOTICE([No configuration of $PACKAGE_NAME necessary]) fi ]) #AC_COIN_FINALIZE ########################################################################### # COIN_VPATH_LINK # ########################################################################### # This macro queues source files that need to be available in the build # directory. In a VPATH configuration, the files will be made available by # symbolic link or copy (when the platform does not support links). The list # is processed by COIN_FINALIZE. The parameter is a whitespace-separated # list of files. AC_DEFUN([AC_COIN_VPATH_LINK], [ AC_REQUIRE([AC_COIN_CHECK_VPATH]) # Allow for newlines in the parameter if test $coin_vpath_config = yes; then cvl_tmp="$1" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi ]) #AC_COIN_VPATH_LINK ########################################################################### # COIN_ENABLE_GNU_PACKAGES # ########################################################################### # This macro defined the --enable-gnu-packages flag. This can be used # to check if a user wants to compile GNU packges (such as readline) # into the executable. By default, GNU packages are disabled. AC_DEFUN([AC_COIN_ENABLE_GNU_PACKAGES], [AC_ARG_ENABLE([gnu-packages], [AC_HELP_STRING([--enable-gnu-packages], [compile with GNU packages (disabled by default)])], [coin_enable_gnu=$enableval], [coin_enable_gnu=no]) ]) # AC_COIN_ENABLE_GNU_PACKAGES ####################################################################### # COIN_CHECK_LIBM # ####################################################################### # For a (space separated) list of arguments X, this macro adds the flags # for linking against the math library to a X_LIBS and X_PCLIBS. AC_DEFUN([AC_COIN_CHECK_LIBM], [AC_BEFORE([AC_COIN_PROG_CC],[$0]) if test $coin_cc_is_cl != true ; then coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_LIBS="-lm $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="-lm $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="-lm $m4_toupper(myvar)_LIBS_INSTALLED" ]) fi ]) # AC_COIN_CHECK_LIBM ########################################################################### # COIN_CHECK_GNU_ZLIB # ########################################################################### # This macro checks for the libz library. If found, it sets the automake # conditional COIN_HAS_ZLIB and defines the C preprocessor variable # COIN_HAS_ZLIB. Further, for a (space separated) list of arguments X, # it adds the linker flag to the variables X_LIBS, X_PCLIBS, and X_LIBS_INSTALLED. # TODO the macro name should be changed to AC_COIN_CHECK_ZLIB AC_DEFUN([AC_COIN_CHECK_GNU_ZLIB], [ AC_BEFORE([AC_COIN_PROG_CXX],[$0]) AC_BEFORE([AC_COIN_PROG_CC],[$0]) AC_BEFORE([AC_COIN_PROG_F77],[$0]) AC_BEFORE([$0],[AC_COIN_FINALIZE]) coin_has_zlib=no AC_ARG_ENABLE([zlib], [AC_HELP_STRING([--disable-zlib],[do not compile with compression library zlib])], [coin_enable_zlib=$enableval], [coin_enable_zlib=yes]) if test $coin_enable_zlib = yes; then AC_COIN_CHECK_HEADER([zlib.h],[coin_has_zlib=yes]) if test $coin_has_zlib = yes; then AC_CHECK_LIB([z],[gzopen],[:],[coin_has_zlib=no]) fi if test $coin_has_zlib = yes; then coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_LIBS="-lz $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="-lz $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="-lz $m4_toupper(myvar)_LIBS_INSTALLED" ]) AC_DEFINE([COIN_HAS_ZLIB],[1],[Define to 1 if zlib is available]) fi fi AM_CONDITIONAL(COIN_HAS_ZLIB,test x$coin_has_zlib = xyes) ]) # AC_COIN_CHECK_GNU_ZLIB ########################################################################### # COIN_CHECK_GNU_BZLIB # ########################################################################### # This macro checks for the libbz2 library. If found, it defines the C # preprocessor variable COIN_HAS_BZLIB. Further, for a (space separated) list # of arguments X, it adds the linker flag to the variables X_LIBS, X_PCLIBS, and X_LIBS_INSTALLED. # TODO the macro name should be changed to AC_COIN_CHECK_BZLIB AC_DEFUN([AC_COIN_CHECK_GNU_BZLIB], [ AC_BEFORE([AC_COIN_PROG_CXX],[$0]) AC_BEFORE([AC_COIN_PROG_CC],[$0]) AC_BEFORE([AC_COIN_PROG_F77],[$0]) AC_BEFORE([$0],[AC_COIN_FINALIZE]) AC_ARG_ENABLE([bzlib], [AC_HELP_STRING([--disable-bzlib],[do not compile with compression library bzlib])], [coin_enable_bzlib=$enableval], [coin_enable_bzlib=yes]) coin_has_bzlib=no if test $coin_enable_bzlib = yes; then AC_COIN_CHECK_HEADER([bzlib.h],[coin_has_bzlib=yes]) if test $coin_has_bzlib = yes; then AC_CHECK_LIB([bz2],[BZ2_bzReadOpen],[:],[coin_has_bzlib=no]) fi if test $coin_has_bzlib = yes; then coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_LIBS="-lbz2 $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="-lbz2 $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="-lbz2 $m4_toupper(myvar)_LIBS_INSTALLED" ]) AC_DEFINE([COIN_HAS_BZLIB],[1],[Define to 1 if bzlib is available]) fi fi ]) # AC_COIN_CHECK_GNU_BZLIB ########################################################################### # COIN_CHECK_GNU_READLINE # ########################################################################### # This macro checks for GNU's readline. It verifies that the header # readline/readline.h is available, and that the -lreadline library # contains "readline". It is assumed that #include is included # in the source file before the #include # If found, it defines the C preprocessor variable COIN_HAS_READLINE. # Further, for a (space separated) list of arguments X, it adds the # linker flag to the variable X_LIBS, X_PCLIBS, and X_LIBS_INSTALLED. AC_DEFUN([AC_COIN_CHECK_GNU_READLINE], [AC_REQUIRE([AC_COIN_ENABLE_GNU_PACKAGES]) AC_BEFORE([AC_COIN_PROG_CXX],[$0]) AC_BEFORE([AC_COIN_PROG_CC],[$0]) AC_BEFORE([AC_COIN_PROG_F77],[$0]) AC_BEFORE([$0],[AC_COIN_FINALIZE]) coin_has_readline=no if test $coin_enable_gnu = yes; then AC_COIN_CHECK_HEADER([readline/readline.h], [coin_has_readline=yes],[], [#include ]) coin_save_LIBS="$LIBS" LIBS= # First we check if tputs and friends are available if test $coin_has_readline = yes; then AC_SEARCH_LIBS([tputs],[ncurses termcap curses],[], [coin_has_readline=no]) fi # Now we check for readline if test $coin_has_readline = yes; then AC_CHECK_LIB([readline],[readline],[:],[coin_has_readline=no]) fi if test $coin_has_readline = yes; then coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_LIBS="-lreadline $LIBS $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="-lreadline $LIBS $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="-lreadline $LIBS $m4_toupper(myvar)_LIBS_INSTALLED" ]) AC_DEFINE([COIN_HAS_READLINE],[1],[Define to 1 if readline is available]) fi LIBS="$coin_save_LIBS" fi ]) # AC_COIN_CHECK_GNU_READLINE ########################################################################### # COIN_CHECK_GMP # ########################################################################### # This macro checks for the gmp library. If found, it defines the C # preprocessor variable COIN_HAS_GMP. Further, for a (space separated) list # of arguments X, it adds the linker flag to the variables X_LIBS, X_PCLIBS, and X_LIBS_INSTALLED. AC_DEFUN([AC_COIN_CHECK_GMP], [ AC_BEFORE([AC_COIN_PROG_CXX],[$0]) AC_BEFORE([AC_COIN_PROG_CC],[$0]) AC_BEFORE([AC_COIN_PROG_F77],[$0]) AC_BEFORE([$0],[AC_COIN_FINALIZE]) AC_ARG_ENABLE([gmp], [AC_HELP_STRING([--disable-gmp],[do not compile with GNU multiple precision library])], [coin_enable_gmp=$enableval], [coin_enable_gmp=yes]) coin_has_gmp=no if test $coin_enable_gmp = yes; then AC_COIN_CHECK_HEADER([gmp.h],[AC_CHECK_LIB([gmp],[__gmpz_init],[coin_has_gmp=yes])]) if test $coin_has_gmp = yes ; then coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_LIBS="-lgmp $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="-lgmp $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="-lgmp $m4_toupper(myvar)_LIBS_INSTALLED" ]) AC_DEFINE([COIN_HAS_GMP],[1],[Define to 1 if GMP is available]) fi fi ]) # AC_COIN_CHECK_GMP ########################################################################### # COIN_CHECK_ISFINITE # ########################################################################### # This macro checks for a usable implementation of a function to check # whether a given floating point number is finite. # If a function is found, then the macro defines the symbol # toupper($1)_C_FINITE to the name of this function. AC_DEFUN([AC_COIN_CHECK_ISFINITE],[ AC_LANG_PUSH(C++) AC_COIN_CHECK_CXX_CHEADER(math) AC_COIN_CHECK_CXX_CHEADER(float) AC_COIN_CHECK_CXX_CHEADER(ieeefp) COIN_C_FINITE= AC_CHECK_DECL([isfinite],[COIN_C_FINITE=isfinite],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) if test -z "$COIN_C_FINITE"; then AC_CHECK_DECL([finite],[COIN_C_FINITE=finite],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) if test -z "$COIN_C_FINITE"; then AC_CHECK_DECL([_finite],[COIN_C_FINITE=_finite],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) fi fi if test -z "$COIN_C_FINITE"; then AC_MSG_WARN(Cannot find C-function for checking Inf.) else AC_DEFINE_UNQUOTED(COIN_C_FINITE,[$COIN_C_FINITE], [Define to be the name of C-function for Inf check]) fi AC_LANG_POP(C++) ]) ########################################################################### # COIN_CHECK_ISNAN # ########################################################################### # This macro checks for a usable implementation of a function to check # whether a given floating point number represents NaN. # If a function is found, then the macro defines the symbol COIN_C_ISNAN # to the name of this function. AC_DEFUN([AC_COIN_CHECK_ISNAN],[ AC_LANG_PUSH(C++) AC_COIN_CHECK_CXX_CHEADER(math) AC_COIN_CHECK_CXX_CHEADER(float) AC_COIN_CHECK_CXX_CHEADER(ieeefp) COIN_C_ISNAN= AC_CHECK_DECL([isnan],[COIN_C_ISNAN=isnan],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) # It appears that for some systems (e.g., Mac OSX), cmath will provide only # std::isnan, and bare isnan will be unavailable. Typically we need a parameter # in the test to allow C++ to do overload resolution. if test -z "$COIN_C_ISNAN"; then AC_CHECK_DECL([std::isnan(42.42)],[COIN_C_ISNAN=std::isnan],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) fi if test -z "$COIN_C_ISNAN"; then AC_CHECK_DECL([_isnan],[COIN_C_ISNAN=_isnan],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) fi if test -z "$COIN_C_ISNAN"; then AC_CHECK_DECL([isnand],[COIN_C_ISNAN=isnand],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) fi if test -z "$COIN_C_ISNAN"; then AC_MSG_WARN(Cannot find C-function for checking NaN.) else AC_DEFINE_UNQUOTED(COIN_C_ISNAN,[$COIN_C_ISNAN], [Define to be the name of C-function for NaN check]) fi AC_LANG_POP(C++) ]) ########################################################################### # COIN_DATA_PATH # ########################################################################### # This macro defines a preprocessor macro with the absolute path to a # subdirectory of Data. The argument of this macro is the name of the # subdirectory (in correct case), and the name of the macro is # COIN_DATA_DIR_PATH, where dir is replaced by the capitalized name of # the directory. The path ends with a separator ("/" for linux and # '\\' for Windows). The default value for this path can be # overwritten with the input variable with the same name # (COIN_DATA_DIR_PATH). At this point we chech only for the # $srcdir/../Data subdirectory. AC_DEFUN([AC_COIN_DATA_PATH], [AC_MSG_CHECKING([absolute path to data directory $1]) AC_ARG_VAR(m4_toupper(COIN_DATA_$1_PATH),[Set to absolute path to Data/$1 subdirectory]) if test x"$m4_toupper(COIN_DATA_$1_PATH)" = x; then m4_toupper(COIN_DATA_$1_PATH)=`cd $srcdir/../Data/$1; pwd` fi # Under Cygwin, use Windows path. Add separator case $build in *-cygwin*) m4_toupper(COIN_DATA_$1_PATH)=`cygwin -w $m4_toupper(COIN_DATA_$1_PATH)`\\ ;; *) m4_toupper(COIN_DATA_$1_PATH)="$m4_toupper(COIN_DATA_$1_PATH)/" ;; esac if test -d $m4_toupper(COIN_DATA_$1_PATH); then AC_DEFINE_UNQUOTED(m4_toupper(COIN_DATA_$1_PATH),["$m4_toupper(COIN_DATA_$1_PATH)"], [Define to absolute path for Data subdirectory $1]) AC_MSG_RESULT($m4_toupper(COIN_DATA_$1_PATH)) else AC_MSG_ERROR(Directory $m4_toupper(COIN_DATA_$1_PATH) does not exist) fi ]) # AC_COIN_DATA_PATH ########################################################################### # COIN_LINK_FROM_FILELIST # ########################################################################### # This macro creates links (or copies, if necessary) to files listed # as content in a text file (second argument) into a target directory # (first argument), which is created if it doesn't exist yet. If s link # already exists, nothing happens. AC_DEFUN([AC_COIN_LINKCOPY_FROM_FILELIST], [cmd="$3" if test -r $srcdir/$2 ; then my_target_dir="$1" my_link_files=`cat $srcdir/$2` my_dirname=`AS_DIRNAME($2)` # if test -e $my_target_dir; then : ; else # AS_MKDIR_P($my_target_dir) # fi for i in $my_link_files; do #rm -rf $my_target_dir/$i if test -e $my_target_dir/$i; then : ; else dirn2=`AS_DIRNAME($my_target_dir/$i)` if test -d $dirn2; then : ; else AS_MKDIR_P($dirn2) fi $cmd $abs_source_dir/$my_dirname/$i $my_target_dir/$i fi done else AC_MSG_WARN([File list file $2 missing!]) fi ]) AC_DEFUN([AC_COIN_LINK_FROM_FILELIST], [ AC_REQUIRE([AC_COIN_LINK_INPUT_CMD]) echo Creating links in $1 ... AC_COIN_LINKCOPY_FROM_FILELIST($1, $2, $coin_link_input_cmd) ]) ########################################################################### # COIN_COPY_FROM_FILELIST # ########################################################################### # Like COIN_LINK_FROM_FILELIST, but copies the files. AC_DEFUN([AC_COIN_COPY_FROM_FILELIST], [ echo Creating copies in $1 ... AC_COIN_LINKCOPY_FROM_FILELIST($1, $2, [cp]) ]) ########################################################################### # COIN_EXAMPLE_FILES # ########################################################################### # This macro determines the names of the example files (using the # argument in an "ls" command) and sets up the variables EXAMPLE_FILES # and EXAMPLE_CLEAN_FILES. If this is a VPATH configuration, it also # creates soft links to the example files. AC_DEFUN([AC_COIN_EXAMPLE_FILES], [AC_REQUIRE([AC_COIN_CHECK_VPATH]) AC_REQUIRE([AC_COIN_ENABLE_MSVC]) AC_REQUIRE([AC_PROG_LN_S]) files=`cd $srcdir; ls $1` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then AC_MSG_NOTICE([Copying example files ($1)]) else AC_MSG_NOTICE([Creating links to the example files ($1)]) lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES $1" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done AC_SUBST(EXAMPLE_UNCOMPRESSED_FILES) AC_SUBST(EXAMPLE_FILES) AC_SUBST(EXAMPLE_CLEAN_FILES) ]) #AC_COIN_EXAMPLE_FILES ########################################################################### # COIN_CHECK_USER_LIBRARY # ########################################################################### # This macro sets up usage of a user library with header files. The assumption # is that the header file(s) and library do not reside in standard system # directories, hence both the include directory and link flags must be # specified. There are two mandatory arguments and two optional arguments. # # The first argument (mandatory) should be a name (LibraryName) for the # library. The second argument (mandatory) should be an abbreviation in # upper case letters (LBRY) for the library. Ultimately, the macro will # specify two variables, LBRYINCDIR and LBRYLIB, to be substituted in files # generated during configuration; a preprocessor symbol COIN_HAS_LBRY; and a # matching automake conditional COIN_HAS_LBRY. LBRYINCDIR should specify the # directory containing include files for the library. LBRYLIB should specify # the flags necessary to link to the library. A variable coin_has_lbry will # be set to true or false, as appropriate. A variable lbry_libcheck will be # be set to yes or no; no indicates link checks should not be attempted. # # The macro defines three configure arguments, --with-libraryname-incdir, # --with-libraryname-lib, and --disable-libraryname-libcheck, by converting # LibraryName to lower case. # # LBRYINCDIR and LBRYLIB can be specified as environment variables or as # part of the configure command using --with-libraryname-incdir and # --with-libraryname-lib, respectively. Command line arguments override # environment variables. # # If a third argument is given, it should specify a file in LBRYINCDIR. The # macro will check for the presence of the file. If a fourth argument is given, # it should specify a function name, `fname'. The macro will attempt to link a # trivial program containing a parameterless call to the function, `fname()', # using the LBRYLIB flags. The link check uses C as the language; this has been # adequate to date but has limitations. It is possible to disable the link # check by specifying --disable-libraryname-libcheck. This is a workaround for # instances where the link check does not work properly, for whatever reason. # If you're trying to link to a Fortran library, consider using F77_FUNC or # FC_FUNC to obtain a mangled fname appropriate for use from C code. For a C++ # library, you're on your own unless the library declares some function with # extern "C" linkage. Otherwise, you'll have to somehow find the mangled C++ # name. # A fifth argument can be specified to include linker flags that may be required # to sucessfully perform the linking check. # # An optional sixth argument can be given to specify a list of targets. # For each target X, the variables X_LIBS and X_PCLIBS will be extended by $LBRYLIB, # if the library has been found and seems to work. AC_DEFUN([AC_COIN_CHECK_USER_LIBRARY], [ AC_REQUIRE([AC_COIN_PROJECTDIR_INIT]) AC_MSG_CHECKING(if user provides library for $1) # Check for header file directory AC_ARG_WITH(m4_tolower($1)-incdir, AS_HELP_STRING([--with-m4_tolower($1)-incdir], [specify the header file directory for library $1]), [$2INCDIR=`cd $withval; pwd`]) # Check for library directory AC_ARG_WITH(m4_tolower($1)-lib, AS_HELP_STRING([--with-m4_tolower($1)-lib], [specify the flags used to link with the library $1]), [$2LIB=$withval]) # Switch to disable library check if requested AC_ARG_ENABLE(m4_tolower($1)-libcheck, AS_HELP_STRING([--disable-m4_tolower($1)-libcheck], [skip the link check at configuration time]), [m4_tolower($1)_libcheck=$enableval], [m4_tolower($1)_libcheck=yes]) # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$$2INCDIR" != x || test x"$$2LIB" != x; then if test x"$$2INCDIR" = x || test x"$$2LIB" = x; then AC_MSG_ERROR([You need to specify both an include directory and link flags to use library $1. Use --with-m4_tolower($1)-incdir of environment variable $$2INCDIR to specify the include directory. Use --with-m4_tolower($1)-lib or environment variable $$2LIB to specify link flags.]) fi m4_tolower(coin_has_$2)=true AC_MSG_RESULT(yes) else m4_tolower(coin_has_$2)=false AC_MSG_RESULT(no) fi # If we have instructions for use, consider header and link checks. if test $m4_tolower(coin_has_$2) = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. m4_ifval([$3], [AC_COIN_CHECK_FILE([$$2INCDIR/$3],[], [AC_MSG_ERROR([Cannot find file $3 in $$2INCDIR])])]) # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. m4_ifvaln([$4], [if test x"$m4_tolower($1)_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$$2LIB $5" coin_$2_link=no AC_LANG_PUSH(C) for fnm in $4 ; do AC_MSG_CHECKING([whether symbol $fnm is available with $2]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[$fnm()]])], [AC_MSG_RESULT(yes) coin_$2_link=yes break], [AC_MSG_RESULT(no)]) done AC_LANG_POP(C) LIBS="$coin_save_LIBS" if test x"$coin_$2_link" != xyes ; then AC_MSG_ERROR([Cannot find symbol(s) $4 with $2]) fi fi]) # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to $6_{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. coin_foreach_w([myvar], [$6], [ m4_toupper(myvar)_LIBS="$$2LIB $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="$$2LIB $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="$$2LIB $m4_toupper(myvar)_LIBS_INSTALLED" ]) AC_DEFINE(COIN_HAS_$2,[1],[Define to 1 if the $1 package is available]) fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. AC_SUBST($2INCDIR) AC_SUBST($2LIB) AM_CONDITIONAL(COIN_HAS_$2, test $m4_tolower(coin_has_$2) = true) ]) #AC_COIN_CHECK_USER_LIBRARY ########################################################################### # COIN_TRY_FLINK # ########################################################################### # Auxilliary macro to test if a Fortran function name can be linked, # given the current settings of LIBS. We determine from the context, what # the currently active programming language is, and cast the name accordingly. # The first argument is the name of the function/subroutine, in small letters, # the second argument are the actions taken when the test works, and the # third argument are the actions taken if the test fails. AC_DEFUN([AC_COIN_TRY_FLINK], [case $ac_ext in f) AC_TRY_LINK(,[ call $1],[$2],[$3]) ;; c) AC_F77_FUNC($1,cfunc$1) if test x"$coin_need_flibs" = xyes; then flink_try=no; else AC_TRY_LINK([void $cfunc$1();],[$cfunc$1()], [flink_try=yes],[flink_try=no]) fi if test $flink_try = yes; then $2 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" AC_TRY_LINK([void $cfunc$1();],[$cfunc$1()], [LIBS="$flink_save_libs" coin_need_flibs=yes $2 ], [LIBS="$flink_save_libs" $3]) else $3 fi fi ;; cc|cpp) AC_F77_FUNC($1,cfunc$1) if test x"$coin_need_flibs" = xyes; then flink_try=no; else AC_TRY_LINK([extern "C" {void $cfunc$1();}],[$cfunc$1()], [flink_try=yes],[flink_try=no]) fi if test $flink_try = yes; then $2 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" AC_TRY_LINK([extern "C" {void $cfunc$1();}],[$cfunc$1()], [LIBS="$flink_save_libs" coin_need_flibs=yes $2 ], [LIBS="$flink_save_libs" $3]) else $3 fi fi ;; esac ]) # AC_COIN_TRY_FLINK ########################################################################### # COIN_DOXYGEN # ########################################################################### # # This macro determines the configuration information for doxygen, the tool # used to generate online documentation of COIN code. It takes one parameter, # a list of projects (mixed-case, to match the directory names) that should # be processed as external tag files. E.g., COIN_DOXYGEN([Clp Osi]). # # This macro will define the following variables: # coin_have_doxygen Yes if doxygen is found, no otherwise # coin_doxy_usedot Defaults to `yes'; --with-dot will still check to see # if dot is available # coin_doxy_tagname Name of doxygen tag file (placed in doxydoc directory) # coin_doxy_logname Name of doxygen log file (placed in doxydoc directory) # coin_doxy_tagfiles List of doxygen tag files used to reference other # doxygen documentation # coin_doxy_excludes Directories to exclude from doxygen processing AC_DEFUN([AC_COIN_DOXYGEN], [ AC_MSG_NOTICE([configuring doxygen documentation options]) # Check to see if doxygen is available. AC_CHECK_PROG([coin_have_doxygen],[doxygen],[yes],[no]) AC_CHECK_PROG([coin_have_latex],[latex],[yes],[no]) # Look for the dot tool from the graphviz package, unless the user has # disabled it. AC_ARG_WITH([dot], AS_HELP_STRING([--with-dot], [use dot (from graphviz) when creating documentation with doxygen if available; --without-dot to disable]), [],[withval=yes]) if test x"$withval" = xno ; then coin_doxy_usedot=NO AC_MSG_CHECKING([for dot ]) AC_MSG_RESULT([disabled]) else AC_CHECK_PROG([coin_doxy_usedot],[dot],[YES],[NO]) fi # Generate a tag file name and a log file name AC_SUBST([coin_doxy_tagname],[doxydoc/${PACKAGE}_doxy.tag]) AC_SUBST([coin_doxy_logname],[doxydoc/${PACKAGE}_doxy.log]) AM_CONDITIONAL(COIN_HAS_DOXYGEN, [test $coin_have_doxygen = yes]) AM_CONDITIONAL(COIN_HAS_LATEX, [test $coin_have_latex = yes]) # Process the list of project names and massage them into possible doxygen # doc'n directories. Prefer 1) classic external, source processed using # a project-specific doxygen.conf, we use the tag file; 2) classic # external, source processed using package doxygen.conf; 3) installed # doxydoc. Alternatives 1) and 2) are only possible if the directory will be # configured, which we can't know unless this is the package base configure, # since coin_subdirs is only set there. Hence it's sufficient to check for # membership. If we use a tag file from a classic external, exclude the # source from doxygen processing when doxygen runs in the base directory. coin_doxy_tagfiles= coin_doxy_excludes= tmp="$1" for proj in $tmp ; do lc_proj=`echo $proj | [tr [A-Z] [a-z]]` AC_MSG_CHECKING([for doxygen doc'n for $proj ]) doxytag=${lc_proj}_doxy.tag doxyfound=no # proj will be configured, hence doxydoc present in build tree doxysrcdir="${srcdir}/../${proj}" # AC_MSG_NOTICE([Considering $doxysrcdir (base)]) if test -d "$doxysrcdir" ; then # with a doxydoc directory? doxydir="$doxysrcdir/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (base)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) if test -d "$doxydir" ; then # use tag file; don't process source doxydir="../${proj}/doxydoc" coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html" AC_MSG_RESULT([$doxydir (tag)]) coin_doxy_excludes="$coin_doxy_excludes */${proj}" else # will process the source -- nothing further to be done here AC_MSG_RESULT([$doxysrcdir (src)]) fi doxyfound=yes fi # Not built, fall back to installed tag file if test $doxyfound = no ; then eval doxydir="${datadir}/coin/doc/${proj}/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (install)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html" AC_MSG_RESULT([$doxydir (tag)]) fi done AC_SUBST([coin_doxy_tagfiles]) AC_SUBST([coin_doxy_excludes]) ]) # AC_COIN_DOXYGEN ########################################################################### # COIN_HAS_PKGCONFIG # ########################################################################### # This macro checks whether a pkg-config tool with a minimal version number # is available. If so, then the variable PKGCONFIG is set to its path. # If not, PKGCONFIG is set to "". The minimal version number can be given # as first parameter, by default it is 0.16.0, since COIN-OR .pc files now # include an URL field, which breaks pkg-config version <= 0.15. # This macro is a modified version of PKG_PROG_PKG_CONFIG in pkg.m4. # Further, the AM_CONDITIONAL COIN_HAS_PKGCONFIG is set and PKGCONFIG is # AC_SUBST'ed. Finally, if this setup belongs to a project directory, then # the search path for .pc files is assembled from the value of # $PKG_CONFIG_PATH, the values of --prefix, --coin-instdir, and the directories # named in a file ../coin_subdirs.txt or ../../coin_subdirs.txt in a variable # COIN_PKG_CONFIG_PATH, which is also AC_SUBST'ed. For a path xxx given in the # coin-subdirs.txt, also the directory xxx/pkgconfig is added, if existing. AC_DEFUN([AC_COIN_HAS_PKGCONFIG], [AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_ENABLE([pkg-config], [AC_HELP_STRING([--disable-pkg-config],[disable use of pkg-config (if available)])], [use_pkgconfig="$enableval"], [if test x$coin_cc_is_cl = xtrue; then use_pkgconfig=no else use_pkgconfig=yes fi]) if test $use_pkgconfig = yes ; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_CHECK_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.16.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi # check if pkg-config supports the short-errors flag if test -n "$PKG_CONFIG" && \ $PKG_CONFIG --atleast-pkgconfig-version 0.20; then pkg_short_errors=" --short-errors " else pkg_short_errors="" fi fi AM_CONDITIONAL([COIN_HAS_PKGCONFIG], [test -n "$PKG_CONFIG"]) AC_SUBST(PKG_CONFIG) # assemble pkg-config search path for installed projects COIN_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" # let's assume that when installing into $prefix, then the user may have installed some other coin projects there before, so it's worth to have a look into there # best would actually to use ${libdir}, since .pc files get installed into ${libdir}/pkgconfig, # unfortunately, ${libdir} expands to ${exec_prefix}/lib and ${exec_prefix} to ${prefix}... if test "x${prefix}" = xNONE ; then COIN_PKG_CONFIG_PATH="${ac_default_prefix}/lib64/pkgconfig:${ac_default_prefix}/lib/pkgconfig:${ac_default_prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" else COIN_PKG_CONFIG_PATH="${prefix}/lib64/pkgconfig:${prefix}/lib/pkgconfig:${prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi AC_ARG_WITH([coin-instdir], AC_HELP_STRING([--with-coin-instdir], [prefix of installation directory for precompiled COIN packages]), [if test -d "$withval"; then : ; else AC_MSG_ERROR([argument for --with-coin-instdir not a directory]) fi COIN_PKG_CONFIG_PATH="$withval/lib/pkgconfig:$withval/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" ],[]) AC_SUBST(COIN_PKG_CONFIG_PATH) # assemble additional pkg-config search paths for uninstalled projects if test x$coin_projectdir = xyes ; then # if we are in a project setup, then in a classic setup, we want to find uninstalled projects # their (relative) location is written to coin_subdirs.txt by the configure in the project base directory # unfortunately, if the user set prefix, then we do not know where the project base directory is located # but it is likely to be either .. (if we are a usual coin project) or ../.. (if we are a unusual coin project like ThirdParty or Data) COIN_PKG_CONFIG_PATH_UNINSTALLED= if test -f ../coin_subdirs.txt ; then for i in `cat ../coin_subdirs.txt` ; do if test -d ../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi if test -f ../../coin_subdirs.txt ; then for i in `cat ../../coin_subdirs.txt` ; do if test -d ../../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi AC_SUBST(COIN_PKG_CONFIG_PATH_UNINSTALLED) fi if test -n "$PKG_CONFIG" && test x$coin_cc_is_cl = xtrue; then AC_MSG_WARN([Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config.]) fi ]) ########################################################################### # COIN_PKG_CHECK_PROJECT_EXISTS # ########################################################################### # COIN_PKG_CHECK_PROJECT_EXISTS(PROJECT, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular project exists. Similar # to PKG_CHECK_MODULES(), but set only the variables $1_VERSION and $1_PKG_ERRORS variables # AC_DEFUN([AC_COIN_PKG_CHECK_PROJECT_EXISTS], [AC_REQUIRE([AC_COIN_HAS_PKGCONFIG]) if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "m4_tolower($1)"; then m4_toupper($1)[]_VERSION=`$PKG_CONFIG --modversion "m4_tolower($1)" 2>/dev/null` m4_ifval([$2], [$2], [:]) else m4_toupper($1)_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "m4_tolower($1)"` $3 fi else AC_MSG_ERROR("Cannot check for existance of module $1 without pkg-config") fi ]) ########################################################################### # COIN_PKG_CHECK_MODULE_EXISTS # ########################################################################### # COIN_PKG_CHECK_MODULES_EXISTS(MODULE, PACKAGES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of packages exists. # Similar to PKG_CHECK_MODULES(), but set only the variable $1_VERSIONS and $1_PKG_ERRORS # AC_DEFUN([AC_COIN_PKG_CHECK_MODULE_EXISTS], [AC_REQUIRE([AC_COIN_HAS_PKGCONFIG]) if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "$2"; then m4_toupper($1)[]_VERSIONS=`$PKG_CONFIG --modversion "$2" 2>/dev/null | tr '\n' ' '` $3 else m4_toupper($1)_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "$2"` $4 fi else AC_MSG_ERROR("Cannot check for existance of module $1 without pkg-config") fi ]) ########################################################################### # COIN_PKG_HAS_MODULE # ########################################################################### # COIN_PKG_HAS_MODULE(MODULE, PACKAGES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Checks whether pkg-config files for a given set of packages is available. # If so, sets MODULE_CFLAGS, MODULE_LIBS, and MODULES_DATA and executes ACTION-IF-FOUND. # If not, then ACTION-IF-NOT-FOUND is executed. # A reason for not finding a package is stored in MODULE_PKG_ERRORS # # -------------------------------------------------------------- AC_DEFUN([AC_COIN_PKG_HAS_MODULE], [AC_REQUIRE([AC_COIN_HAS_PKGCONFIG]) AC_COIN_PKG_CHECK_MODULE_EXISTS([$1],[$2], [ cflags=`$PKG_CONFIG --cflags "$2" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command [cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'`] fi m4_toupper($1)[]_CFLAGS="$cflags" m4_toupper($1)[]_LIBS=`$PKG_CONFIG --libs "$2" 2>/dev/null` m4_toupper($1)[]_DATA=`$PKG_CONFIG --variable=datadir "$2" 2>/dev/null` $3 ], [ $4 ]) ])# PKG_CHECK_MODULES ########################################################################### # COIN_MAIN_PACKAGEDIR # ########################################################################### # This macro substitutes COIN_MAIN_SUBDIR. # If $2/$1 or $1 is in COIN_SKIP_PROJECTS, do nothing. # If --with-$1-lib, --with-$1-incdir, or --with-$1-datadir is given, then assume that the package is installed. # Otherwise, if the directory $2/$1 and the file $2/$1/$3 exist, check whether $2/$1/configure exists. # If so, include this directory into the list of directories where configure and make recourse into. # tolower(coin_has_$1) is set to "no" if the project source is not available or will not be compiled. # Otherwise, it will be set to "yes". AC_DEFUN([AC_COIN_MAIN_PACKAGEDIR],[ AC_MSG_CHECKING([whether source of project $1 is available and should be compiled]) m4_tolower(coin_has_$1)=notGiven coin_reason= # check if user wants to skip project in any case AC_ARG_VAR([COIN_SKIP_PROJECTS],[Set to the subdirectories of projects that should be skipped in the configuration]) if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "$1"; then m4_tolower(coin_has_$1)="no" coin_reason="$1 has been specified in COIN_SKIP_PROJECTS" fi m4_ifval($2,[ if test $dir = "$2/$1"; then m4_tolower(coin_has_$1)="no" coin_reason="$2/$1 has been specified in COIN_SKIP_PROJECTS" fi]) done fi if test "$m4_tolower(coin_has_$1)" != no; then AC_ARG_WITH([m4_tolower($1)],, [if test "$withval" = no ; then m4_tolower(coin_has_$1)="no" coin_reason="--without-m4_tolower($1) has been specified" fi ]) fi if test "$m4_tolower(coin_has_$1)" != no; then AC_ARG_WITH([m4_tolower($1)-lib], AC_HELP_STRING([--with-m4_tolower($1)-lib], [linker flags for using project $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)="no" coin_reason="--without-m4_tolower($1)-lib has been specified" else m4_tolower(coin_has_$1)="no" coin_reason="--with-m4_tolower($1)-lib has been specified" fi], []) fi if test "$m4_tolower(coin_has_$1)" != no; then AC_ARG_WITH([m4_tolower($1)-incdir], AC_HELP_STRING([--with-m4_tolower($1)-incdir], [directory with header files for using project $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)="no" coin_reason="--without-m4_tolower($1)-incdir has been specified" else m4_tolower(coin_has_$1)="no" coin_reason="--with-m4_tolower($1)-incdir has been specified" fi], []) fi if test "$m4_tolower(coin_has_$1)" != no; then AC_ARG_WITH([m4_tolower($1)-datadir], AC_HELP_STRING([--with-m4_tolower($1)-datadir], [directory with data files for using project $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)="no" coin_reason="--without-m4_tolower($1)-datadir has been specified" else m4_tolower(coin_has_$1)="no" coin_reason="--with-m4_tolower($1)-datadir has been specified" fi], []) fi m4_if(m4_tolower($1), blas, [ if test $m4_tolower(coin_has_$1) != no; then #--with-blas can overwrite --with-blas-lib, and can be set to BUILD to enforce building blas AC_ARG_WITH([blas], AC_HELP_STRING([--with-blas], [specify BLAS library (or BUILD to enforce use of ThirdParty/Blas)]), [if test x"$withval" = "xno" ; then coin_has_blas="no" coin_reason="--without-blas has been specified" elif test x"$withval" != "xBUILD" ; then coin_has_blas="no" coin_reason="--with-blas has been specified" fi], []) fi ]) m4_if(m4_tolower($1), lapack, [ if test $m4_tolower(coin_has_$1) != no; then #--with-lapack can overwrite --with-lapack-lib, and can be set to BUILD to enforce building lapack AC_ARG_WITH([lapack], AC_HELP_STRING([--with-lapack], [specify LAPACK library (or BUILD to enforce use of ThirdParty/Lapack)]), [if test x"$withval" = "xno" ; then coin_has_lapack="no" coin_reason="--without-lapack has been specified" elif test x"$withval" != "xBUILD" ; then coin_has_lapack="no" coin_reason="--with-lapack has been specified" fi], []) fi ]) # check if project is available in present directory if test "$m4_tolower(coin_has_$1)" = notGiven; then m4_tolower(coin_has_$1)=no if test -d $srcdir/m4_ifval($2,[$2/],)$1; then coin_reason="source in m4_ifval($2,[$2/],)$1" # If a third argument is given, then we have to check if one one the files given in that third argument is present. # If none of the files in the third argument is available, then we consider the project directory as non-existing. # However, if no third argument is given, then this means that there should be no check, and existence of the directory is sufficient. m4_ifvaln([$3], [for i in $srcdir/m4_ifval($2,[$2/],)$1/$3; do if test -r $i; then m4_tolower(coin_has_$1)="yes" else m4_tolower(coin_has_$1)="no" coin_reason="source file $i not available" break fi done], [ m4_tolower(coin_has_$1)="yes" ]) fi fi if test -z "$coin_reason" ; then AC_MSG_RESULT([$m4_tolower(coin_has_$1)]) else AC_MSG_RESULT([$m4_tolower(coin_has_$1), $coin_reason]) fi if test "$m4_tolower(coin_has_$1)" = yes ; then if test -r $srcdir/m4_ifval($2,[$2/],)$1/configure; then coin_subdirs="$coin_subdirs m4_ifval($2,[$2/],)$1" AC_CONFIG_SUBDIRS(m4_ifval($2,[$2/],)$1) fi fi ]) ########################################################################### # COIN_CHECK_PACKAGE # ########################################################################### # This macro checks for the existance of a COIN-OR package and provides compiler and linker flags to compile against this package. # A package can consists of one or more COIN-OR or other projects. # It defines the PACKAGE_CFLAGS, PACKAGE_LIBS, PACKAGE_DEPENDENCIES, and PACKAGE_DATA variables, referring to the compiler and linker # flags to use when linking against this module, the libraries the package depends on, and the directories where the module data resists. # The difference between PACKAGE_LIBS and PACKAGE_DEPENDENCIES is that PACKAGE_DEPENDENCIES does not contain arguments starting with '-', # so it can be used to setup the _DEPENDENCIES variable in a Makefile.am. # It also defines a COIN_HAS_PACKAGE preprocessor macro and makefile conditional. # Further, tolower(coin_has_$1) is set to "yes". # If a list of build targets using this projects is given in the third argument, # then the compiler and linker variables and .pc file setup variable corresponding to this build target # are extended with the values for this package. # That is, for each build target X, the variables X_CFLAGS, X_LIBS, X_DEPENDENCIES, X_PCLIBS, X_PCREQUIRES are setup, # whereas the last two specify the values to put into the "Libs:" and "Requires:" fields of the .pc file, resp. # # The first argument should be the name (PACKAGE) of the package (in correct lower # and upper case). # The second argument should be a (space separated) list of projects which this # package consists of. Optionally, required version numbers can be added. # The optional third argument should be a (space separated) list of build targets # which use this package, if available. # # It is also possible to specify a preinstalled version of this package # or to specify only the linker and compiler flags and data directory. # # If the user did not specify --with-$1-... flags and pkg-config is not available, # COIN_CHECK_PACKAGE_FALLBACK($1, $2, $3) is called. AC_DEFUN([AC_COIN_CHECK_PACKAGE], [AC_REQUIRE([AC_COIN_HAS_PKGCONFIG]) AC_MSG_CHECKING([for COIN-OR package $1]) m4_tolower(coin_has_$1)=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "$1"; then m4_tolower(coin_has_$1)=skipping fi done fi if test "$m4_tolower(coin_has_$1)" != skipping; then AC_ARG_WITH([m4_tolower($1)],, [if test "$withval" = no ; then m4_tolower(coin_has_$1)=skipping fi ]) fi m4_toupper($1_LIBS)= m4_toupper($1_CFLAGS)= m4_toupper($1_DATA)= m4_toupper($1_DEPENDENCIES)= m4_toupper($1_PCLIBS)= m4_toupper($1_PCREQUIRES)= AC_SUBST(m4_toupper($1_LIBS)) AC_SUBST(m4_toupper($1_CFLAGS)) AC_SUBST(m4_toupper($1_DATA)) AC_SUBST(m4_toupper($1_DEPENDENCIES)) AC_SUBST(m4_toupper($1_LIBS_INSTALLED)) AC_SUBST(m4_toupper($1_CFLAGS_INSTALLED)) AC_SUBST(m4_toupper($1_DATA_INSTALLED)) coin_foreach_w([myvar], [$3], [ AC_SUBST(m4_toupper(myvar)_CFLAGS) AC_SUBST(m4_toupper(myvar)_LIBS) AC_SUBST(m4_toupper(myvar)_PCLIBS) AC_SUBST(m4_toupper(myvar)_PCREQUIRES) AC_SUBST(m4_toupper(myvar)_DEPENDENCIES) AC_SUBST(m4_toupper(myvar)_CFLAGS_INSTALLED) AC_SUBST(m4_toupper(myvar)_LIBS_INSTALLED) ]) #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $m4_tolower(coin_has_$1) != skipping; then AC_ARG_WITH([m4_tolower($1)-lib], AC_HELP_STRING([--with-m4_tolower($1)-lib], [linker flags for using package $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)=skipping else m4_tolower(coin_has_$1)=yes m4_toupper($1_LIBS)="$withval" m4_toupper($1_PCLIBS)="$withval" coin_foreach_w([myvar], [$3], [ m4_toupper(myvar)_PCLIBS="$withval $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS="$withval $m4_toupper(myvar)_LIBS" ]) # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then m4_toupper($1_LIBS_INSTALLED)="$withval" coin_foreach_w([myvar], [$3], [m4_toupper(myvar)_LIBS_INSTALLED="$withval $m4_toupper(myvar)_LIBS_INSTALLED"]) fi fi ], []) fi if test $m4_tolower(coin_has_$1) != skipping; then AC_ARG_WITH([m4_tolower($1)-incdir], AC_HELP_STRING([--with-m4_tolower($1)-incdir], [directory with header files for using package $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)=skipping else m4_tolower(coin_has_$1)=yes m4_toupper($1_CFLAGS)="-I`${CYGPATH_W} $withval`" coin_foreach_w([myvar], [$3], [m4_toupper(myvar)_CFLAGS="-I`${CYGPATH_W} $withval` $m4_toupper(myvar)_CFLAGS"]) # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then m4_toupper($1_CFLAGS_INSTALLED)="$m4_toupper($1_CFLAGS)" coin_foreach_w([myvar], [$3], [m4_toupper(myvar)_CFLAGS_INSTALLED="$m4_toupper($1_CFLAGS) $m4_toupper(myvar)_CFLAGS_INSTALLED"]) fi fi ], []) fi if test $m4_tolower(coin_has_$1) != skipping; then AC_ARG_WITH([m4_tolower($1)-datadir], AC_HELP_STRING([--with-m4_tolower($1)-datadir], [directory with data files for using package $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)=skipping else m4_tolower(coin_has_$1)=yes m4_toupper($1_DATA)="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then m4_toupper($1_DATA_INSTALLED)="$withval" fi fi ], []) fi if test $m4_tolower(coin_has_$1) = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic AC_COIN_PKG_HAS_MODULE([$1],[$2], [ m4_tolower(coin_has_$1)=yes AC_MSG_RESULT([yes: $m4_toupper($1)_VERSIONS]) # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then m4_toupper($1_LIBS)=`echo " $m4_toupper($1_LIBS) " | [sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g']` fi m4_toupper($1_PCREQUIRES)="$2" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in $3 coin_foreach_w([myvar], [$3], [ m4_toupper(myvar)_PCREQUIRES="$2 $m4_toupper(myvar)_PCREQUIRES" m4_toupper(myvar)_CFLAGS="$m4_toupper($1)_CFLAGS $m4_toupper(myvar)_CFLAGS" m4_toupper(myvar)_LIBS="$m4_toupper($1)_LIBS $m4_toupper(myvar)_LIBS" ]) ], [ m4_tolower(coin_has_$1)=notGiven AC_MSG_RESULT([not given: $m4_toupper($1)_PKG_ERRORS]) ]) # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else AC_MSG_RESULT([skipped check via pkg-config, redirect to fallback]) AC_COIN_CHECK_PACKAGE_FALLBACK([$1], [$2], [$3]) fi else AC_MSG_RESULT([$m4_tolower(coin_has_$1)]) fi if test $m4_tolower(coin_has_$1) != skipping && test $m4_tolower(coin_has_$1) != notGiven ; then AC_DEFINE(m4_toupper(COIN_HAS_$1),[1],[Define to 1 if the $1 package is available]) AC_ARG_ENABLE([interpackage-dependencies], AC_HELP_STRING([--disable-interpackage-dependencies], [disables deduction of Makefile dependencies from package linker flags]), [], [enable_interpackage_dependencies=yes]) if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) m4_toupper($1)_DEPENDENCIES=`echo " $m4_toupper($1)_LIBS" | [sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g']` coin_foreach_w([myvar], [$3], [ m4_toupper(myvar)_DEPENDENCIES=`echo " $m4_toupper(myvar)_LIBS " | [sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g']` ]) fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$m4_toupper($1)_CFLAGS" ; then AC_MSG_NOTICE([$1 CFLAGS are $m4_toupper($1)_CFLAGS]) fi if test -n "$m4_toupper($1)_LIBS" ; then AC_MSG_NOTICE([$1 LIBS are $m4_toupper($1)_LIBS]) fi if test -n "$m4_toupper($1)_DEPENDENCIES" ; then AC_MSG_NOTICE([$1 DEPENDENCIES are $m4_toupper($1)_DEPENDENCIES]) fi if test -n "$m4_toupper($1)_DATA" ; then AC_MSG_NOTICE([$1 DATA is $m4_toupper($1)_DATA]) fi if test -n "$m4_toupper($1)_PCLIBS" ; then AC_MSG_NOTICE([$1 PCLIBS are $m4_toupper($1)_PCLIBS]) fi if test -n "$m4_toupper($1)_PCREQUIRES" ; then AC_MSG_NOTICE([$1 PCREQUIRES are $m4_toupper($1)_PCREQUIRES]) fi coin_foreach_w([myvar], [$3], [ AC_MSG_NOTICE([myvar CFLAGS are $m4_toupper(myvar)_CFLAGS]) AC_MSG_NOTICE([myvar LIBS are $m4_toupper(myvar)_LIBS]) AC_MSG_NOTICE([myvar DEPENDENCIES are $m4_toupper(myvar)_DEPENDENCIES]) ]) fi fi # Define the Makefile conditional AM_CONDITIONAL(m4_toupper(COIN_HAS_$1), [test $m4_tolower(coin_has_$1) != notGiven && test $m4_tolower(coin_has_$1) != skipping]) ]) # AC_COIN_CHECK_PACKAGE ########################################################################### # COIN_CHECK_PACKAGE_FALLBACK # ########################################################################### # This macro is used by COIN_CHECK_PACKAGE, if it fails to find a package # because pkg-config was disabled or is not available. # # For each project xxx specified in $2, it searches for a xxx-uninstalled.pc # file in the directories specified in $COIN_PKG_CONFIG_PATH_UNINSTALLED. The # latter variable is setup by COIN_HAS_PKGCONFIG and consists of the content # of the coin_subdirs.txt file which has been created by configure in the # base directory. The content of xxx-uninstalled.pc is parsed in order # to defines the variables PACKAGE_CFLAGS, PACKAGE_LIBS, and PACKAGE_DATA, # referring to the compiler and linker flags to use when linking against this # package and the directory where the package data resists. Further, for each # build target X specified in the third argument, the variables X_CFLAGS and # X_LIBS are extended with the compiler and linker flags of this package and # the variables X_PCLIBS and X_PCREQUIRES are extended by the list of linker # flags and dependent projects as needed to setup a .pc file. The macros # checks also dependencies of $2. Note that the PACKAGE_DATA variable is # set to the content of datadir of the first .pc file that is parsed. # Finally, for each X in the third argument, also variables # X_CFLAGS_INSTALLED and X_LIBS_INSTALLED are setup. They contain the compiler # and linker flags for X when all projects have been installed. Their content # is assembled from the .pc files that correspond to installed projects. I.e., # whenever a file proj-uninstalled.pc is parsed, then also a corresponding # proj.pc file is parsed for compiler and linker flags, if available in the # same directory. # Similar, a variable PACKAGE_DATA_INSTALLED is setup to the content of datadir # of the first .pc file that is parsed. # # If .pc files for all projects in $2 and their dependencies is found, # tolower(coin_has_$1) is set to "yes". Otherwise, if some dependency # is not found, tolower(coin_has_$1) is set to "notGiven". Further, a # COIN_HAS_PACKAGE preprocessor macro and a makefile conditional are defined. # # The first argument should be the name (PACKAGE) of the package (in correct # lower and upper case). The second argument should be the base names of the # projects .pc file which define this package. The optional third argument # should be a (space separated) list of build targets which use this package, # if available. # # $1 is not checked for $COIN_SKIP_PROJECTS, since we only look into # $COIN_PKG_CONFIG_PATH_UNINSTALLED. When the content of this variable was # setup in the base directory, $COIN_SKIP_PROJECTS has already been considered. AC_DEFUN([AC_COIN_CHECK_PACKAGE_FALLBACK], [AC_REQUIRE([AC_COIN_HAS_PKGCONFIG]) AC_MSG_CHECKING([for COIN-OR package $1 (fallback)]) m4_tolower(coin_has_$1)=notGiven m4_toupper($1_LIBS)= m4_toupper($1_LIBS_INSTALLED)= m4_toupper($1_CFLAGS)= m4_toupper($1_CFLAGS_INSTALLED)= m4_toupper($1_DATA)= m4_toupper($1_DATA_INSTALLED)= m4_toupper($1_PCLIBS)= m4_toupper($1_PCREQUIRES)= # initial list of dependencies is "$2", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="m4_bpatsubsts([$2], [?!?=[ ]*[^ ]+])" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else AC_MSG_WARN([Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples.]) pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=[`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'`] # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=[`echo $projtoprocess | sed -e "s/$proj/$projrequires/"`] # read DATA from $pcfile, if _DATA is still empty if test "x$m4_toupper($1_DATA)" = x ; then projdatadir= [pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile`] eval `sh -c "$pcfilemod"` m4_toupper($1_DATA)="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else AC_MSG_RESULT([no, dependency $proj not available]) allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$m4_toupper($1_DATA_INSTALLED)" = x ; then projdatadir= [pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile`] eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi m4_toupper($1_DATA_INSTALLED)="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^[ ]*//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : [pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile`] # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=[`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'`] fi m4_toupper($1_CFLAGS)="$projcflags $m4_toupper($1_CFLAGS)" # set LIBS variable m4_toupper($1_LIBS)="$projlibs $m4_toupper($1_LIBS)" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : [pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile`] # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=[`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'`] fi m4_toupper($1_CFLAGS_INSTALLED)="$projcflags $m4_toupper($1_CFLAGS_INSTALLED)" # set LIBS variable m4_toupper($1_LIBS_INSTALLED)="$projlibs $m4_toupper($1_LIBS_INSTALLED)" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up m4_tolower(coin_has_$1)=yes AC_MSG_RESULT([yes]) AC_DEFINE(m4_toupper(COIN_HAS_$1),[1],[Define to 1 if the $1 package is available]) # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then m4_toupper($1_LIBS)=`echo " $m4_toupper($1_LIBS) " | [sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g']` m4_toupper($1_LIBS_INSTALLED)=`echo " $m4_toupper($1_LIBS_INSTALLED)" | [sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g']` fi m4_toupper($1_PCREQUIRES)="$2" coin_foreach_w([myvar], [$3], [ m4_toupper(myvar)_PCREQUIRES="$2 $m4_toupper(myvar)_PCREQUIRES" m4_toupper(myvar)_CFLAGS="$m4_toupper($1)_CFLAGS $m4_toupper(myvar)_CFLAGS" m4_toupper(myvar)_LIBS="$m4_toupper($1)_LIBS $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_CFLAGS_INSTALLED="$m4_toupper($1)_CFLAGS_INSTALLED $m4_toupper(myvar)_CFLAGS_INSTALLED" m4_toupper(myvar)_LIBS_INSTALLED="$m4_toupper($1)_LIBS_INSTALLED $m4_toupper(myvar)_LIBS_INSTALLED" ]) fi AM_CONDITIONAL(m4_toupper(COIN_HAS_$1), [test $m4_tolower(coin_has_$1) != notGiven && test $m4_tolower(coin_has_$1) != skipping]) ]) # AC_COIN_CHECK_PACKAGE_FALLBACK ########################################################################### # COIN_CHECK_PACKAGE_BLAS # ########################################################################### # This macro checks for a library containing the BLAS library. It # 1. checks the --with-blas argument # 2. if --with-blas=BUILD has been specified goes to point 5 # 3. if --with-blas has been specified to a working library, sets BLAS_LIBS # to its value # 4. tries standard libraries # 5. calls COIN_CHECK_PACKAGE(Blas, [coinblas], [$1]) to check for # ThirdParty/Blas # The makefile conditional and preprocessor macro COIN_HAS_BLAS is defined. # BLAS_LIBS is set to the flags required to link with a Blas library. # For each build target X in $1, X_LIBS is extended with $BLAS_LIBS. # In case 3 and 4, the flags to link to Blas are added to X_PCLIBS too. # In case 5, Blas is added to X_PCREQUIRES. AC_DEFUN([AC_COIN_CHECK_PACKAGE_BLAS], [ AC_ARG_WITH([blas], AC_HELP_STRING([--with-blas], [specify BLAS library (or BUILD to enforce use of ThirdParty/Blas)]), [use_blas="$withval"], [use_blas=]) # if user specified --with-blas-lib, then we should give COIN_CHECK_PACKAGE # preference AC_ARG_WITH([blas-lib],,[use_blas=BUILD]) # Check if user supplied option makes sense if test x"$use_blas" != x; then if test "$use_blas" = "BUILD"; then # we come to this later : elif test "$use_blas" != "no"; then coin_save_LIBS="$LIBS" LIBS="$use_blas $LIBS" if test "$F77" != unavailable ; then coin_need_flibs=no AC_MSG_CHECKING([whether user supplied BLASLIB=\"$use_blas\" works]) AC_COIN_TRY_FLINK([daxpy], [if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi AC_MSG_RESULT([yes: $use_blas])], [AC_MSG_RESULT([no]) AC_MSG_ERROR([user supplied BLAS library \"$use_blas\" does not work])]) use_blas="$use_blas $FLIBS" else AC_MSG_NOTICE([checking whether user supplied BLASLIB=\"$use_blas\" works with C linkage]) AC_LANG_PUSH(C) AC_CHECK_FUNC([daxpy],[],[AC_MSG_ERROR([user supplied BLAS library \"$use_blas\" does not work])]) AC_LANG_POP(C) fi LIBS="$coin_save_LIBS" fi else # Try to autodetect the library for blas based on build system #AC_MSG_CHECKING([default locations for BLAS]) case $build in *-sgi-*) AC_MSG_CHECKING([whether -lcomplib.sgimath has BLAS]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lcomplib.sgimath $LIBS" AC_COIN_TRY_FLINK([daxpy], [use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" ;; # Ideally, we'd use -library=sunperf, but it's an imperfect world. Studio # cc doesn't recognise -library, it wants -xlic_lib. Studio 12 CC doesn't # recognise -xlic_lib. Libtool doesn't like -xlic_lib anyway. Sun claims # that CC and cc will understand -library in Studio 13. The main extra # function of -xlic_lib and -library is to arrange for the Fortran run-time # libraries to be linked for C++ and C. We can arrange that explicitly. *-*-solaris*) AC_MSG_CHECKING([for BLAS in libsunperf]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lsunperf $FLIBS $LIBS" AC_COIN_TRY_FLINK([daxpy], [use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" ;; *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_save_LIBS="$LIBS" LIBS="mkl_intel_c.lib mkl_sequential.lib mkl_core.lib $LIBS" if test "$F77" != unavailable ; then AC_MSG_CHECKING([for BLAS in MKL (32bit)]) AC_COIN_TRY_FLINK([daxpy], [use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) else AC_MSG_NOTICE([for BLAS in MKL (32bit) using C linkage]) AC_LANG_PUSH(C) AC_CHECK_FUNC([daxpy],[use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib']) AC_LANG_POP(C) fi LIBS="$coin_save_LIBS" if test "x$use_blas" = x ; then LIBS="mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib $LIBS" if test "$F77" != unavailable ; then AC_MSG_CHECKING([for BLAS in MKL (64bit)]) AC_COIN_TRY_FLINK([daxpy], [use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) else AC_MSG_NOTICE([for BLAS in MKL (64bit) using C linkage]) # unset cached outcome of test with 32bit MKL unset ac_cv_func_daxpy AC_LANG_PUSH(C) AC_CHECK_FUNC([daxpy],[use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib']) AC_LANG_POP(C) fi LIBS="$coin_save_LIBS" fi ;; esac ;; *-darwin*) AC_MSG_CHECKING([for BLAS in Veclib]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-framework Accelerate $LIBS" AC_COIN_TRY_FLINK([daxpy], [use_blas='-framework Accelerate' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" ;; esac if test -z "$use_blas" ; then AC_MSG_CHECKING([whether -lblas has BLAS]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lblas $LIBS" AC_COIN_TRY_FLINK([daxpy], [use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" fi # If we have no other ideas, consider building BLAS. if test -z "$use_blas" ; then use_blas=BUILD fi fi if test "x$use_blas" = xBUILD ; then AC_COIN_CHECK_PACKAGE(Blas, [coinblas], [$1]) elif test "x$use_blas" != x && test "$use_blas" != no; then coin_has_blas=yes AM_CONDITIONAL([COIN_HAS_BLAS],[test 0 = 0]) AC_DEFINE([COIN_HAS_BLAS],[1], [If defined, the BLAS Library is available.]) BLAS_LIBS="$use_blas" BLAS_CFLAGS= BLAS_DATA= AC_SUBST(BLAS_LIBS) AC_SUBST(BLAS_CFLAGS) AC_SUBST(BLAS_DATA) coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_PCLIBS="$BLAS_LIBS $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS="$BLAS_LIBS $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_LIBS_INSTALLED="$BLAS_LIBS $m4_toupper(myvar)_LIBS_INSTALLED" ]) else coin_has_blas=no AM_CONDITIONAL([COIN_HAS_BLAS],[test 0 = 1]) fi coin_foreach_w([myvar], [$1], [ AC_SUBST(m4_toupper(myvar)_PCLIBS) AC_SUBST(m4_toupper(myvar)_LIBS) AC_SUBST(m4_toupper(myvar)_LIBS_INSTALLED) ]) ]) # AC_COIN_CHECK_PACKAGE_BLAS ########################################################################### # COIN_CHECK_PACKAGE_LAPACK # ########################################################################### # This macro checks for a library containing the LAPACK library. It # 1. checks the --with-lapack argument # 2. if --with-lapack=BUILD has been specified goes to point 5 # 3. if --with-lapack has been specified to a working library, sets # LAPACK_LIBS to its value # 4. tries standard libraries # 5. calls COIN_CHECK_PACKAGE(Lapack, [coinlapack], [$1]) to check for # ThirdParty/Lapack # The makefile conditional and preprocessor macro COIN_HAS_LAPACK is defined. # LAPACK_LIBS is set to the flags required to link with a Lapack library. # For each build target X in $1, X_LIBS is extended with $LAPACK_LIBS. # In case 3 and 4, the flags to link to Lapack are added to X_PCLIBS too. # In case 5, Lapack is added to X_PCREQUIRES. # # TODO: Lapack usually depends on Blas, so if we check for a system lapack library, # shouldn't we include AC_COIN_CHECK_PACKAGE_BLAS first? # However, if we look for coinlapack via AC_COIN_CHECK_PACKAGE(Lapack, [coinlapack], [$1]), # then we will get Blas as dependency of coinlapack. AC_DEFUN([AC_COIN_CHECK_PACKAGE_LAPACK], [ AC_ARG_WITH([lapack], AC_HELP_STRING([--with-lapack], [specify LAPACK library (or BUILD to enforce use of ThirdParty/Lapack)]), [use_lapack=$withval], [use_lapack=]) #if user specified --with-lapack-lib, then we should give COIN_HAS_PACKAGE preference AC_ARG_WITH([lapack-lib],,[use_lapack=BUILD]) # Check if user supplied option makes sense if test x"$use_lapack" != x; then if test "$use_lapack" = "BUILD"; then # we come to this later : elif test "$use_lapack" != no; then use_lapack="$use_lapack $BLAS_LIBS" coin_save_LIBS="$LIBS" LIBS="$use_lapack $LIBS" if test "$F77" != unavailable; then AC_MSG_CHECKING([whether user supplied LAPACKLIB=\"$use_lapack\" works]) coin_need_flibs=no AC_COIN_TRY_FLINK([dsyev], [if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi AC_MSG_RESULT([yes: $use_lapack]) ], [AC_MSG_RESULT([no]) AC_MSG_ERROR([user supplied LAPACK library \"$use_lapack\" does not work])]) else AC_MSG_NOTICE([whether user supplied LAPACKLIB=\"$use_lapack\" works with C linkage]) AC_LANG_PUSH(C) AC_CHECK_FUNC([dsyev],[],[AC_MSG_ERROR([user supplied LAPACK library \"$use_lapack\" does not work])]) AC_LANG_POP(C) fi LIBS="$coin_save_LIBS" fi else if test x$coin_has_blas = xyes; then # First try to see if LAPACK is already available with BLAS library coin_save_LIBS="$LIBS" LIBS="$BLAS_LIBS $LIBS" if test "$F77" != unavailable; then coin_need_flibs=no AC_MSG_CHECKING([whether LAPACK is already available with BLAS library]) AC_COIN_TRY_FLINK([dsyev], [use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi AC_MSG_RESULT([yes: $use_lapack]) ], [AC_MSG_RESULT([no])]) else AC_MSG_NOTICE([checking whether LAPACK is already available with BLAS library]) AC_LANG_PUSH(C) AC_CHECK_FUNC([dsyev],[use_lapack="$BLAS_LIBS"]) AC_LANG_POP(C) fi LIBS="$coin_save_LIBS" fi if test -z "$use_lapack"; then # Try to autodetect the library for lapack based on build system case $build in # TODO: Is this check actually needed here, since -lcomplib.sigmath should have been recognized as Blas library, # and above it is checked whether the Blas library already contains Lapack *-sgi-*) AC_MSG_CHECKING([whether -lcomplib.sgimath has LAPACK]) coin_save_LIBS="$LIBS" coin_need_flibs=no LIBS="-lcomplib.sgimath $BLAS_LIBS $LIBS" AC_COIN_TRY_FLINK([dsyev], [use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi AC_MSG_RESULT([yes: $use_lapack]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" ;; # See comments in COIN_CHECK_PACKAGE_BLAS. # TODO: Is this check actually needed here, since -lsunperf should have been recognized as Blas library, # and above it is checked whether the Blas library already contains Lapack *-*-solaris*) AC_MSG_CHECKING([for LAPACK in libsunperf]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lsunperf $BLAS_LIBS $FLIBS $LIBS" AC_COIN_TRY_FLINK([dsyev], [use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi AC_MSG_RESULT([yes: $use_lapack]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" ;; # On cygwin, do this check only if doscompile is disabled. The prebuilt library # will want to link with cygwin, hence won't run standalone in DOS. esac fi if test -z "$use_lapack" ; then AC_MSG_CHECKING([whether -llapack has LAPACK]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-llapack $BLAS_LIBS $LIBS" AC_COIN_TRY_FLINK([dsyev], [use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi AC_MSG_RESULT([yes: $use_lapack]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" fi # If we have no other ideas, consider building LAPACK. if test -z "$use_lapack" ; then use_lapack=BUILD fi fi if test "x$use_lapack" = xBUILD ; then AC_COIN_CHECK_PACKAGE(Lapack, [coinlapack], [$1]) elif test "x$use_lapack" != x && test "$use_lapack" != no; then coin_has_lapack=yes AM_CONDITIONAL([COIN_HAS_LAPACK],[test 0 = 0]) AC_DEFINE([COIN_HAS_LAPACK],[1], [If defined, the LAPACK Library is available.]) LAPACK_LIBS="$use_lapack" LAPACK_CFLAGS= LAPACK_DATA= AC_SUBST(LAPACK_LIBS) AC_SUBST(LAPACK_CFLAGS) AC_SUBST(LAPACK_DATA) coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_PCLIBS="$LAPACK_LIBS $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS="$LAPACK_LIBS $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_LIBS_INSTALLED="$LAPACK_LIBS $m4_toupper(myvar)_LIBS_INSTALLED" ]) else coin_has_lapack=no AM_CONDITIONAL([COIN_HAS_LAPACK],[test 0 = 1]) fi coin_foreach_w([myvar], [$1], [ AC_SUBST(m4_toupper(myvar)_PCLIBS) AC_SUBST(m4_toupper(myvar)_LIBS) AC_SUBST(m4_toupper(myvar)_LIBS_INSTALLED) ]) ]) # AC_COIN_CHECK_PACKAGE_LAPACK Vol-1.5.4/BuildTools/run_autotools0000755000175000017500000003253612752402346016254 0ustar sudipsudip#!/bin/sh # Copyright (C) 2006, 2007, 2008, 2009, 2010 International Business Machines # and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # ## $Id: run_autotools 3632 2016-08-09 16:29:26Z stefan $ # # Author: Andreas Waechter IBM 2006-04-14 # Modified: Lou Hafer SFU 2010-06-11 # Mods to allow variations from standard package structure. Decision to # process a configure.ac file is based on presence of COIN macros. # Directories specified on the command line are recursively searched # for configure.ac files. Install-sh signals an independent unit. # Modified: Lou Hafer SFU 2010-07-08 # More mods to maintain flexibility but be a bit less aggressive about # forcing installation of autotools auxilliary scripts. Also add some # command line options and restore ability to specify individual # directories on the command line. # run_autotools takes care of running the autotools (automake, autoconf, # and helpers) and also makes a few arrangements for when configure and # libtool execute at configuration, build, and installation. # Run_autotools can be given a set of directories on the command line; if none # are specified, it assumes the current directory (`,'). Subdirectories are # searched for configure.ac files unless suppressed with the -nr option. # Autotools will consider a directory for processing if any AC_COIN_ macro is # present in the configure.ac file. Should it be necessary to fool this script # into processing a file that otherwise contains no COIN macros, just add a # line with AC_COIN_. The resulting list is winnowed to remove directories # specified in COIN_SKIP_PROJECTS. # Each directory processed gets a temporary link to BuildTools, unless a # BuildTools subdirectory is already present. Mostly this is a convenience, but # one thing makes it mandatory: Many Makefile.am files in COIN use an include # directive to pull in BuildTools/Makemain.inc. There's no way I (lh) can see # to alter the path that's hardcoded in the include directive. Just to make it # more interesting, COIN projects are generally constructed with the assumption # that BuildTools will be one or two directories up, so you'll see things like # `include ../BuildTools/Makemain.inc'. run_autotools doesn't understand this # hierarchy, so it keeps all those temporary BuildTools links until the very # end. That way, it works with the old-style COIN organisation where a # BuildTools directory is pulled in as an external in the top directory of a # package, and with the new-style independent organisation, where there may be # only a single copy of BuildTools out there somewhere. # If any subdirectory queued for processing is found to contain an install-sh # script, it is treated as an independent unit (i.e., you can run `make # install' from this directory) and the set of auxilliary scripts is refreshed # from BuildTools. You can force installation of install-sh and associated # scripts with the -i option. It's good to read the autoconf documentation for # AC_CONFIG_AUX_DIR if this doesn't make sense to you. # Make sure we bail out if there is an error set -e # Define a cleanup function. We'll set a trap below, just before we start to # do actual work. cleanupOnErrorExit () { for link in $buildtoolsLinks; do echo Trap: removing $link rm -f $link done cd $startDir } # Note that vanilla sh doesn't like negative exit values. # Determine the location of run_autotools. If there are no '/' chars in # the command name, we're running in the current directory (almost certainly # not what's wanted). Otherwise, strip the command name, leaving the prefix. # Convert the prefix to an absolute path, if needed, and clean it up, removing # `XXX/..', '/./', '//' sequences. startDir=`pwd` if expr "$0" : '.*/.*' >/dev/null 2>&1 ; then runautotoolDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else runautotoolDir='.' fi if expr "$runautotoolDir" : '/.*' >/dev/null 2>&1 ; then : else runautotoolDir=$startDir/$runautotoolDir fi while expr "$runautotoolDir" : '.*/\.\./.*' >/dev/null 2>&1 ; do runautotoolDir=`echo $runautotoolDir | sed -e 's,/[^/][^/]*/\.\./,/,'` done runautotoolDir=`echo $runautotoolDir | sed -e 's,/\./,/,g' -e 's,//,/,g'` # Make sure we're using the correct versions of the autotools. Failure to # satisfy this requirement is a fatal error. ver_autoconf='2.59' ver_automake='1.9.6' ver_libtool='1.5.22' EGREP='grep -E' # Check if the correct version of the autotools is used if test x$AUTOTOOLS_DIR = x; then AUTOTOOLS_DIR=$HOME fi grep_version=`echo $ver_autoconf | sed -e 's/\\./\\\\\\./g'` if autoconf --version > confauto.out 2>&1 ; then : ; else echo "autoconf $ver_autoconf not available" rm -f confauto.out exit 2 fi if $EGREP $grep_version confauto.out >/dev/null 2>&1; then :; else echo You are not using the correct version of autoconf rm -f confauto.out exit 2 fi rm -f confauto.out autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test $autoconf_dir = `cd $AUTOTOOLS_DIR/bin; pwd`; then :; else echo autoconf is not picked up from the correct location exit 2 fi grep_version=`echo $ver_automake | sed -e 's/\\./\\\\\\./g'` if automake --version > confauto.out 2>&1 ; then : ; else echo "automake $ver_automake not available" rm -f confauto.out exit 2 fi if $EGREP $grep_version confauto.out >/dev/null 2>&1; then :; else echo You are not using the correct version of automake rm -f confauto.out exit 2 fi rm -f confauto.out autoconf_dir=`which automake | sed -e 's=/automake=='` autoconf_dir=`cd $autoconf_dir; pwd` if test $autoconf_dir = `cd $AUTOTOOLS_DIR/bin; pwd`; then :; else echo automake is not picked up from the correct location exit 2 fi # Failure to find the correct version of libtool isn't fatal here, but # the user should be warned. grep_version=`echo $ver_libtool | sed -e 's/\\./\\\\\\./g'` ltfile=$AUTOTOOLS_DIR/share/libtool/ltmain.sh if test -r $ltfile; then :; else echo WARNING: Cannot find libtool shell $ltfile fi if $EGREP $grep_version $ltfile >/dev/null 2>&1; then :; else echo WARNING: You are not using the correct version of libtool fi # Set up to process parameters. No parameters is the default. printHelp=0 doRecurse=1 forceScripts=0 userSpecifiedDirs=0 dirsToProcess= # Process the parameters. A parameter without an opening `-' is assumed to be # a spec for a directory to be processed. while test $# -gt 0 && test $printHelp = 0 ; do case "$1" in -h* | --h* ) printHelp=1 ;; -nr* | --no-recursion ) doRecurse=0 ;; -i | --independent ) forceScripts=1 doRecurse=0 ;; -* ) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 ;; * ) dirsToProcess="$dirsToProcess $1" userSpecifiedDirs=1 ;; esac shift done # Help? if test $printHelp = 1 ; then cat </dev/null 2>&1 ; then dirs="$dirs $dir" else echo " Skipping foreign configure.ac in $dir." fi done # Now compare against the skip entries in COIN_SKIP_PROJECTS. To match the # entries we just collected, add `./' to the front of each skip entry. candDirs=$dirs if test x${COIN_SKIP_PROJECTS+set} = xset ; then dirs= for dir in $COIN_SKIP_PROJECTS ; do skip_dirs="$skip_dirs ./$dir" done for dir in $candDirs ; do skip=0 for skipdir in $skip_dirs ; do if test $dir = $skipdir ; then skip=1 break fi done if test $skip = 0 ; then dirs="$dirs $dir" else echo " Skipping $dir listed in COIN_SKIP_PROJECTS." fi done fi fi # Set a trap so that we'll clean up any links on exit, for whatever reason. # Note that this executes on normal exit, too, so don't do anything rash. topLink= subLink= trap 'exit_status=$? cleanupOnErrorExit exit $exit_status' 0 # And now the main event. Process each directory. echo "Running autotools in $dirs" autotoolsFiles="config.guess config.sub depcomp install-sh ltmain.sh missing" m4Files="$AUTOTOOLS_DIR/share/aclocal/libtool.m4" buildtoolsLinks= for dir in $dirs; do if test -r $dir/configure.ac; then cd $dir echo "Processing $dir ..." # Do we need a BuildTools subdirectory here? The criteria is that install-sh # already exists, or Makefile.am (which may include Makemain.inc), or we're # forcing installation of the configure scripts. Assuming we need BuildTools, # what BuildTools should we use? If a BuildTools is already present, that's # it. Otherwise, assume that runautotooldDir is BuildTools. Allow that the # user may have linked to a BuildTools. needScripts=0 if test -f install-sh || test $forceScripts = 1 ; then needScripts=1 fi if test -f Makefile.am || test $needScripts = 1 ; then if test -d BuildTools || test -L BuildTools ; then createLink=0 toolsDir=`pwd`/BuildTools else createLink=1 toolsDir=$runautotoolDir fi echo " BuildTools directory: $toolsDir" # Test to be sure that run_autotools is coming from the BuildTools directory. if test $createLink = 0 && test "$toolsDir" != "$runautotoolDir" ; then echo "WARNING: using run_autotools from $runautotoolDir" echo " but BuildTools is $toolsDir." echo " Consider carefully if this is what you wanted to do." fi # coin.m4 should live in the same directory; failure is fatal. if test ! -r $toolsDir/coin.m4 ; then echo "Cannot find Coin autotools macro file $toolsDir/coin.m4." echo "It should be in the BuildTools directory." exit 1 fi # Install a link, if needed. if test $createLink = 1 ; then ln -s $toolsDir BuildTools buildtoolsLinks="$buildtoolsLinks `pwd`/BuildTools" echo " creating temporary link for ./BuildTools -> $toolsDir" fi # And refresh the autotools scripts, if needed. if test $needScripts = 1 ; then echo " refreshing autotools scripts in this directory." for file in $autotoolsFiles ; do cp BuildTools/$file . done fi fi # Get on with running the autotools. echo " creating acinclude.m4 in $dir" cat $m4Files $toolsDir/coin.m4 > acinclude.m4 echo " running aclocal in $dir" if test -d m4; then aclocal -I m4 || exit 1 else aclocal || exit 1 fi if grep AC_CONFIG_HEADER configure.ac >/dev/null 2>&1; then echo " running autoheader in $dir" autoheader || exit 1 fi echo " running automake in $dir" automake || exit 1 echo " running autoconf in $dir" autoconf || exit 1 cd $startDir else # Serious confusion! Should not reach here. echo "*** No configure.ac file in $dir - SKIPPING! ***" fi done # Remove the links. Yeah, the trap will do this, but it never hurts to clean # up properly. if test -n "$buildtoolsLinks" ; then echo "Removing temporary links to BuildTools." for link in $buildtoolsLinks ; do # echo " removing temporary link for BuildTools: $link" rm $link done buildtoolsLinks= fi exit Vol-1.5.4/BuildTools/prepare_new_release0000755000175000017500000006217212214547251017343 0ustar sudipsudip#!/bin/sh # Copyright (C) 2007 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # # $Id: prepare_new_release 2947 2013-09-13 08:36:57Z stefan $ # # Author: Andreas Waechter IBM 2007-06-21 # Modified: Lou Hafer SFU 2008-01-20 # Accommodate simultaneous creation of releases with circular # dependencies. # Modified: Ted Ralphs Lehigh University 2009-07-10 # Set libtool version info automatically # Modified: Lou Hafer SFU 2010-06-02 # Adapt to new script architecture pioneered in *_new_stable; major # rewrite. # Modified: Lou Hafer SFU 2011-03-14 # Change handling of externals so the svn:externals is left pointing to # releases but Dependencies is left pointing to stable branches. # Modified: Stefan Vigerske HU 2011-07-16 # Do not attempt to configure/make/make test ThirdParty projects that # do not have a get-script, since this fails in most cases (which is # the expected behaviour). #set -x -v set -e # You can think of this script as having two sections: parameter parsing and # validation, followed by generation of the release candidate. See the help # message for a good description of the actions taken to generate the release # candidate. # Know thy self. If there are no '/' chars in the command name, we're running # in the currrent directory. Otherwise, strip the command name, leaving the # prefix. Coin-functions is expected to live in the same directory. if expr "$0" : '.*/.*' >/dev/null 2>&1 ; then cmdDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else cmdDir='.' fi cmdDir=`cd $cmdDir ; pwd` if test -r $cmdDir/coin-functions ; then . $cmdDir/coin-functions else echo "Cannot find utility functions file coin-functions; exiting." fi # Note that plain sh does not accept negative exit values exitValue=0 # Specify the COIN URL base for convenience. coinURL="https://projects.coin-or.org/svn" # Begin parameter processing. printHelp=0 ignoreBuildToolsMismatch=no mismatchBTExternals= suppressCheckout=0 # stableURL will be the stable branch that is the parent for the release we # are building. We'll need to be able to distinguish ThirdParty and Data # builds, and BuildTools itself; they require special handling. If a project # is not BuildTools, ThirdParty, or Data, it's `normal'. # SV: I think also ThirdParty projects should be treated as 'normal', so I changed that. stableURL= isThirdParty=no isData=no isBuildTools=no isNormal=yes # cmdBTURL is required when stableURL specifies a ThirdParty or Data # project --- we'll need to assemble a temporary package while creating the # release candidate. cmdBTURL= # stableExternals specifies externals for which we are doing simultaneous # releases. We will use the stable branch of the external while preparing # and testing this release candidate, changing svn:externals to specify a # (nonexistent) release of the external at the last moment. stableExternals= # exciseExternals specifies externals that should be removed when creating the # new release. exciseExternals= # We need at least one parameter. if test "$#" -eq 0; then printHelp=1 else # Process the parameters. A parameter without an opening `-' is assumed to be # the spec for the stable branch. while test $# -gt 0 && test $exitValue = 0 && test $printHelp = 0 ; do case "$1" in -h* | --h*) printHelp=1 ;; -i* | --i*) if expr "$1" : '.*-i.*=.*' 2>&1 >/dev/null ; then mismatchBTExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift mismatchBTExternals=$1 fi if test "x$mismatchBTExternals" = "xall" ; then ignoreBuildToolsMismatch=all else ignoreBuildToolsMismatch=partial fi ;; -p* | --p*) suppressCheckout=1 ;; -s* | --s*) if expr "$1" : '.*-s.*=.*' 2>&1 >/dev/null ; then stableExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift stableExternals=$1 fi ;; -x* | --x*) if expr "$1" : '.*-x.*=.*' 2>&1 >/dev/null ; then exciseExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift exciseExternals=$1 fi ;; -b* | --b*) if expr "$1" : '.*-b.*=.*' 2>&1 >/dev/null ; then cmdBTURL=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift cmdBTURL=$1 fi if expr "$cmdBTURL" : '.*BuildTools.*' 2>&1 >/dev/null ; then case $cmdBTURL in http*) ;; *) cmdBTURL=${coinURL}/$cmdBTURL ;; esac else echo '' echo "URL $cmdBTURL does not point to BuildTools." echo '' printHelp=1 exitValue=3 fi ;; -*) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 exitValue=1 ;; *) stableURL=$1 if expr "$stableURL" : '.*/stable/.*' 2>&1 >/dev/null ; then case $stableURL in http*) ;; BuildTools/ThirdParty/* ) stableURL=${coinURL}/$stableURL ;; ThirdParty/* ) stableURL=${coinURL}/BuildTools/$stableURL ;; CoinAll/* ) stableURL=${coinURL}/CoinBinary/$stableURL ;; *) stableURL=${coinURL}/$stableURL ;; esac else echo '' echo "URL $stableURL does not specify a stable release." echo '' printHelp=1 exitValue=2 fi ;; esac shift done # Consistency checks: Make sure that the stable URL exists. If we're building # a ThirdParty or Data release, we need a BuildTools URL. if test $printHelp = 0 && test $exitValue = 0 ; then if svn list $stableURL 2>&1 >/dev/null ; then : else echo "Stable URL $stableURL does not seem to exist." printHelp=1 exitValue=5 fi fi if test $printHelp = 0 && test $exitValue = 0 ; then case $stableURL in *ThirdParty/* ) isThirdParty=yes ;; *Data/* ) isData=yes ;; *BuildTools/* ) isBuildTools=yes isNormal=no ;; *) ;; esac if test $isThirdParty = yes || test $isData = yes ; then if test -z $cmdBTURL ; then echo "You must provide a BuildTools URL to build a ThirdParty or Data project." printHelp=1 exitValue=4 else if svn list $cmdBTURL 2>&1 >/dev/null ; then : else echo "BuildTools URL $cmdBTURL does not seem to exist." printHelp=1 exitValue=6 fi fi fi fi fi # if "$#" .eq 0 if test $printHelp = 1 ; then cat < [options] COIN standard practice is to generate periodic releases by taking a snapshot of the stable branch of the project. You can use this script to prepare a new release based on the specified stable branch. specifies the stable branch of your project to be used to create the new release. You can specify the entire URL, or you just enter what comes after "https://projects.coin-or.org/svn". A typical example is prepare_new_release Ipopt/stable/3.3 Options: -b URL for BuildTools; required to generate a release for a ThirdParty or Data project. -i Ignore BuildTools version mismatches for the listed externals (comma-separated list of project names, e.g., -i Osi,Cbc). '-i all' ignores all mismatches. -p Suppress checkout (useful for testing) -s Suppress conversion from stable to release for the listed externals (comma-separated list of project names). -x Remove the listed projects from the list of externals (comma-separated list of project names). This script will do the following: - Automatically determine the next release number (X.Y.0 if this is the first release for stable/X.Y, otherwise one greater than any existing release) - Check out a clean copy of the specified stable branch, without externals - Make sure that the svn:externals property points to releases, with the exception of projects in the list specified with -s. - Create a new package configure.ac file with the release version number specified in the AC_INIT macro. - Use the "get.*" scripts to download any ThirdParty code. - Execute run_autotools to update configure, Makefile.in, etc., to reflect the most recent release of BuildTools. - Run the configure script, compile the code, and run the unit test. - Replace stable externals for projects specified with -s with the appropriate (yet to be committed) release. If there is any error during these tasks the script will stop and you should examine the output. If the script completes without error, examine the output, particularly the output of the unit test ('make test') and the set of externals specified in the Dependencies file. This script does not make any changes to the repository. If you want to commit the new release, run the "commit_new_release" script, as described at the end of the output. EOF fi if test $exitValue != 0 || test $printHelp = 1 ; then exit $exitValue fi # End of parameter parsing. We have a stable URL to work with. Tell the # user what we've seen. stableURL=`echo $stableURL | sed -e 's|/$||'` stableProj=`extractProjFromURL $stableURL` majVer=`extractMajorFromURL $stableURL` minVer=`extractMinorFromURL $stableURL` stableVer=$majVer.$minVer echo "Stable URL..........: $stableURL" echo "Stable project......: $stableProj" echo "Stable branch.......: $stableVer" if test -n "$stableExternals" ; then echo "Stable externals....: $stableExternals." fi # Find out the most recent release (if any) for the stable branch, then # construct the revision number of the new release. If there are existing # releases, it's a matter of bumping the revision number and inserting the # new revision in the URL. Otherwise, we know the new revision is 0 and we # can simply tweak the stable URL. releaseURL=`bestRelease $stableURL $majVer $minVer | sed -e 's|/$||'` if test -n "$releaseURL" ; then curRel=`extractReleaseFromURL $releaseURL` existingURL=$releaseURL newRel=`expr $curRel + 1` else curRel=-1 releaseURL=`echo $stableURL | sed -e s/stable/releases/` existingURL="none" newRel=0 fi newVer=$majVer.$minVer.$newRel releaseURL=`replaceVersionInURL $releaseURL $majVer $minVer $newRel` echo "Top release URL.....: $existingURL" echo "New release URL.....: $releaseURL" # Relevant only if we're building ThirdParty or Data if test $isThirdParty = yes || test $isData = yes ; then echo "BuildTools URL......: $cmdBTURL" fi # We need a libtool version number only for normal projects if test $isNormal = yes ; then newLTCurrent=`calcLibtoolCurrent $stableURL $majVer $minVer` newLTRevision=$newRel newLTAge=`calcLibtoolAge $stableURL $majVer $minVer` # expr returns with status 1 if the result of the calculation is 0 # this leads to exiting this script, which is somewhat unexpected if test "$newLTAge" = 1 ; then newLTAge=0 else newLTAge=`expr $newLTAge - 1` fi newLTVer=${newLTCurrent}:${newLTRevision}:${newLTAge} echo "Libtool version.....: $newLTVer" fi # Now decide where to build and check out code. If the stable project name # contains a '/', strip it out to make the build and checkout directories. topProjName=`echo $stableProj | sed -e 's|.*/\([^/]*\)$|\1|'` topBuildDir="${topProjName}-${newVer}" if test $isThirdParty = yes; then coDir=$topBuildDir/Thirdparty/$stableProj elif test $isData = yes; then coDir=$topBuildDir/Data/$stableProj else coDir=$topBuildDir fi echo "Build directory.....: $topBuildDir" echo "Checkout directory..: $coDir" # Check out the stable branch that'll be the base of the new release. No # externals at this point. Creating a release of a ThirdParty or Data project # requires a bit of work, as we need to assemble a temporary package with a # BuildTools external. echo '' echo "===> Checking out stable release $stableVer without externals..." echo '' rm -rf $topBuildDir cmd="svn co --ignore-externals $stableURL $coDir" if test $suppressCheckout = 1 ; then echo "Pretending to do: $cmd" else rm -rf $topBuildDir echo $cmd eval $cmd fi if test $isThirdParty = yes || test $isData = yes; then echo '' echo '===> Checking out BuildTools (Data or ThirdParty) ...' echo '' cmd="svn co $cmdBTURL $topBuildDir/BuildTools" if test $suppressCheckout = 1 ; then echo "Pretending to do: $cmd" else echo $cmd eval $cmd fi fi startDir=`pwd` coDir=`cd $coDir; pwd` topBuildDir=`cd $topBuildDir; pwd` cd $coDir # Find configure.ac files for the package and project and update the version. # We have no externals or third-party code at this point, so there will be # two files for a normal project, one for a ThirdParty or Data project, and # none for BuildTools. echo '' echo "===> Checking for configure.ac files ..." if test -d $topProjName ; then bak_files=`find $topProjName -name 'configure.ac'` fi if test -e configure.ac ; then bak_files="$bak_files configure.ac" fi if test -n "$bak_files" ; then for i in $bak_files; do cp $i $i.bak done # Take the attitude that [] around parameters in AC_INIT is optional, # it's the commas that count. This does make for a surpassing ugly regular # expression. A comma in the version string will cause a spectacular failure. # In AC_COIN_PROJECTDIR_INIT, take the attitude that there is one parameter # with the PMs choosen project name which is preserved and we only add a # libtool version number afterwards. echo '' echo "===> Updating version numbers in configure.ac files ..." for i in $bak_files; do sed -e "s|AC_INIT\(.*\),\(\[*\)[^],]*\(\]*\),\(.*\)|AC_INIT\1,\2$newVer\3,\4|" $i > bla mv bla $i sed -e "s|AC_COIN_PROJECTDIR_INIT(\(.*\))|AC_COIN_PROJECTDIR_INIT\(\1,$newLTCurrent:$newLTRevision:$newLTAge\)|" $i > bla mv bla $i svn diff $i done else echo " ... none to process." fi # Find config_proj_default.h. If there's a definition for PROJ_VERSION, adjust it and # add config_proj_default.h.bak to the list of files to be restored. topProjNameUC=`echo $topProjName | tr '[a-z]' '[A-Z]'` if test -d $topProjName ; then configFileLoc=`find $topProjName -name .svn -prune -o -name 'config_*_default.h' -print` fi if test -n "$configFileLoc" ; then versionSym=${topProjNameUC}_VERSION echo '' echo "===> Updating $versionSym in $configFileLoc (if present)" echo '' mv $configFileLoc $configFileLoc.bak bak_files="$bak_files $configFileLoc" sed -e "s/# *define $versionSym .*\$/#define $versionSym \"$newVer\"/" \ -e "s/# *define ${versionSym}_MAJOR .*\$/#define ${versionSym}_MAJOR $majVer/" \ -e "s/# *define ${versionSym}_MINOR .*\$/#define ${versionSym}_MINOR $minVer/" \ -e "s/# *define ${versionSym}_RELEASE .*\$/#define ${versionSym}_RELEASE $newRel/" \ <$configFileLoc.bak >$configFileLoc svn diff $configFileLoc fi # The Dependencies file in a stable branch should contain only stable # and release references (trunk is flagged as an error below). The overall # algorithm is to convert svn:externals to use releases but leave Dependencies # with stables. In practice, this is accomplished by backing up Dependencies, # using Dependencies to assemble and set svn:externals, and finally restoring # Dependencies from the backup after all else is done. # Look for a file specifying externals. Preferably Dependencies, but check for # Externals just in case this is an unconverted project. srcDepFile= for file in Dependencies Externals ; do if test -r $file ; then srcDepFile=$file break fi done # Now generate the proper externals for the release. Each line in a # Dependencies file has the format . Normally, each # should be a stable branch. References to stable branches will be # converted to references to releases unless the reference is to a project # in the stableExternals list (in which case it'll be converted at the very # end). References to releases are not changed. References to trunk are an # error. Failure to find a release for an external not in the stableExternals # list is an error. Save the existing externals and srcDepFile, as we'll # probably change both. if test -n "$srcDepFile" ; then svn propget svn:externals . > .Externals.original bak_files="$bak_files $srcDepFile" cp $srcDepFile $srcDepFile.bak echo '' echo "===> Checking externals in $srcDepFile ..." echo '' # Because we're working directly from command output, the regular expression # must check for lines. ourBTURL=`svn propget svn:externals . | \ sed -n -e 's/^BuildTools *https:\([^ ]*\)$/https:\1/p'` if test -z "$ourBTURL" ; then ourBTURL=none fi echo "Our BuildTools...: $ourBTURL" rm -f Dependencies ext_name= ext_url= buildtoolsMismatch=0 for i in `cat $srcDepFile.bak`; do if test "$ext_name" = ""; then ext_name="$i" else ext_url=$i if expr "$ext_name" : '#.*' 2>&1 >/dev/null ; then echo " $ext_name $ext_url ==> skipped" ext_name= continue fi ext_urltype=`extractTypeFromURL $ext_url` ext_proj=`extractProjFromURL $ext_url` # See if this external should be dropped. if expr "$exciseExternals" : '.*'$ext_proj'.*' 2>&1 > /dev/null ; then echo " $ext_name $ext_url ==> excised" ext_name= continue fi # External must be a stable or a release. if test $ext_urltype != stable && test $ext_urltype != release ; then echo '' echo "===> The external URL $ext_url is not a stable branch or release. Exiting." echo '' exit 2 fi ext_isNormal=`isNormalURL $ext_url` # Convert stable branches to releases unless listed in stableExternals. # Existing releases are unchanged. if test $ext_urltype = stable ; then if expr "$stableExternals" : '.*'"$ext_proj"'.*' 2>&1 >/dev/null ; then echo " $ext_name $ext_url unchanged" ext_rel_url=$ext_url else ext_majVer=`extractMajorFromURL $ext_url` ext_minVer=`extractMinorFromURL $ext_url` ext_rel_url=`bestRelease $ext_url $ext_majVer $ext_minVer` if test -z "$ext_rel_url" ; then echo '' echo "===> No release for $ext_url. Exiting." echo '' exit 2 fi # Normal (not BuildTools/ThirdParty/Data) need a directory name, # and it may differ from the project name. Carefully preserve it. if test $ext_isNormal = yes ; then ext_tail=`extractTailFromExt $ext_url` ext_rel_url=${ext_rel_url}${ext_tail} fi echo " $ext_name $ext_url ==> $ext_rel_url" fi else ext_rel_url=$ext_url echo " $ext_name $ext_url ==> unchanged" fi # Get the BuildTools URL for the external and compare to the BuildTools URL # for the source, assuming we have one and the external has one. We only need # to do this for normal URLs, and we need to strip the tail. if test $ext_isNormal = yes && test $ext_proj != BuildTools && test $ourBTURL != none ; then ext_rel_url_notail=`echo $ext_rel_url | sed -e 's,/[^/]*$,,'` extBTURL=`svn propget svn:externals $ext_rel_url_notail` extBTURL=`echo $extBTURL | \ sed -n -e 's/^BuildTools *https:\([^ ]*\) *$/https:\1/p'` if test -n "$extBTURL" ; then testResult=`compareURLVersions "$ourBTURL" "$extBTURL"` if test $testResult = no ; then if test $ignoreBuildToolsMismatch = all || \ expr "$mismatchBTExternals" : '.*'$ext_proj'.*' 2>&1 >/dev/null ; then echo " WARNING: BuildTools mismatch: $ext_url_notail uses $extBTURL" else buildtoolsMismatch=1 echo " ERROR: BuildTools mismatch: $ext_url_notail uses $extBTURL" fi fi fi fi echo "$ext_name $ext_rel_url" >>Dependencies ext_name= echo '' fi done # If we have a BuildTools mismatch, exit. if test $buildtoolsMismatch = 1 ; then echo "Exiting due to BuildTools mismatches; use -i to ignore." exit 2 fi # Try to check out the externals. Try three times before failing. echo '' echo '===> Updating svn:externals property and checking out externals ...' echo '' svn propset svn:externals -F Dependencies . svn update || { echo "Retry 1 ... " ; svn update ; } || { echo "Retry 2 ... " ; svn update ; } || { echo "Checkout of externals failed. Aborting." ; exit 3 ; } if test -d ThirdParty ; then echo '' echo '===> Downloading ThirdParty code ...' echo '' ext_name= ext_url= for i in `svn propget svn:externals .` ; do if test -z "$ext_name" ; then ext_name="$i" else ext_url=$i if expr "$ext_name" : 'ThirdParty/.*' 2>&1 >/dev/null ; then cd $ext_name ext_proj=`extractProjFromURL $ext_url` getScript=get.$ext_proj if test -x "$getScript" ; then ./$getScript -y fi cd $coDir fi ext_name= fi done fi fi # Finally! Done processing externals. If this is a ThirdParty project, we # still have to run the get script, if there is one. isThirdPartyWithoutGet=no if test $isThirdParty = yes ; then if test -x get.$stableProj ; then echo '' echo '===> Downloading third party code ...' echo '' ./get.$stableProj -y else isThirdPartyWithoutGet=yes fi fi # Don't run run_autotools for BuildTools! if test $isBuildTools = no ; then echo '' echo '===> Running BuildTools/run_autotools ...' echo '' if test $isThirdParty = yes || test $isData = yes ; then cd ../.. ./BuildTools/run_autotools cd "$coDir" elif test $isNormal = yes ; then ./BuildTools/run_autotools fi fi # Let's see if it works. We only run tests for normal projects. DO NOT turn # on --enable-maintainer-mode in the initial configure command. At the least, # it's not needed. At the worst, as of 100526, it'll undo all the careful # work above to set externals. if test $isNormal = yes && test $isThirdPartyWithoutGet = no; then (set -e echo '' echo '===> Creating build directory and running the configuration script...' echo '' mkdir build cd build cmd="$coDir/configure -C" echo $cmd eval $cmd echo '' echo '===> Compiling code...' echo '' cmd='make install' echo $cmd eval $cmd echo '' echo '===> Running the unit test...' echo '' echo '*******************************************************************************' echo '*** ***' echo '*** BEGIN OUTPUT OF MAKE TEST ***' echo '*** ***' echo '*******************************************************************************' echo '' cmd='make test' echo $cmd eval $cmd echo '' echo '*******************************************************************************' echo '*** ***' echo '*** END OUTPUT OF MAKE TEST ***' echo '*** ***' echo '*******************************************************************************' ) if test $? != 0; then echo '' echo 'Error during build or test' echo '' exit 3 fi echo '' echo '===> ALL TESTS PASSED' fi echo '' if test $isNormal = yes && test $isThirdPartyWithoutGet = no; then echo 'Please review the output above, particularly the one of make test.' else echo 'Please review the output above.' fi echo '' # Do we need to plug in nonexistent releases for circular dependencies tested # with the stable versions? If so, generate a new Dependencies. This is the # only reason stable references should appear in the externals for a release, # so we don't need to check further before removing them. if test -n "$stableExternals" ; then echo "===> Grooming externals to remove stable externals used for testing ..." mv Dependencies Dependencies.temp.$$ ext_name= ext_url= for i in `cat Dependencies.temp.$$`; do if test "$ext_name" = ""; then ext_name="$i" else ext_url=$i ext_urltype=`extractTypeFromURL $ext_url` ext_proj=`extractProjFromURL $ext_url` if test $ext_urltype = stable ; then ext_rel_url=$ext_url ext_majVer=`extractMajorFromURL $ext_url` ext_minVer=`extractMinorFromURL $ext_url` ext_rel_url=`echo $ext_url | sed -e 's,/stable/,/releases/,'` ext_rel_url=`replaceVersionInURL $ext_rel_url $ext_majVer $ext_minVer 0` echo " $ext_name $ext_url ==> $ext_rel_url" else ext_rel_url=$ext_url fi echo "$ext_name $ext_rel_url" >>Dependencies ext_name= fi done rm -f Dependencies.temp.$$ svn propset -F Dependencies svn:externals . echo '' fi # If we had a Dependencies file to begin with, it contained references to # stable branches, and perhaps releases. This is the set of dependencies that # we want to commit in Dependencies, so reload $srcDepFile.bak into # Dependencies, now that we have svn:externals set to releases. if test -n "$srcDepFile" ; then cp $srcDepFile.bak Dependencies fi if test -r Dependencies ; then echo 'Also, please confirm the externals are correct:' svn propget svn:externals fi echo '' echo 'After reviewing the output above, you can create a new release by going into' echo 'the directory' echo '' echo " $startDir" echo '' echo "and run the commit_new_release script" cd $topBuildDir cat >.new_release_data <. Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Vol-1.5.4/BuildTools/MSVisualStudio/0000755000175000017500000000000013434204224016264 5ustar sudipsudipVol-1.5.4/BuildTools/MSVisualStudio/v10/0000755000175000017500000000000013434204224016672 5ustar sudipsudipVol-1.5.4/BuildTools/MSVisualStudio/v10/Common.props0000755000175000017500000000135412204424023021210 0ustar sudipsudip $(SolutionDir)$(Platform)-$(PlatformToolset)-$(Configuration)\ $(Platform)-$(PlatformToolset)-$(Configuration)\ Level3 true $(OutDir);%(AdditionalLibraryDirectories) Vol-1.5.4/BuildTools/MSVisualStudio/v10/Debug.props0000755000175000017500000000122012154626433021013 0ustar sudipsudip MultiThreadedDebugDLL true EnableFastChecks Disabled true Vol-1.5.4/BuildTools/MSVisualStudio/v10/Release.props0000755000175000017500000000061012052443620021337 0ustar sudipsudip true Vol-1.5.4/BuildTools/MSVisualStudio/v9/0000755000175000017500000000000013434204224016622 5ustar sudipsudipVol-1.5.4/BuildTools/MSVisualStudio/v9/BuildTools.vcproj0000644000175000017500000000534111572120430022127 0ustar sudipsudip Vol-1.5.4/BuildTools/headers/0000755000175000017500000000000013434204224015004 5ustar sudipsudipVol-1.5.4/BuildTools/headers/configall_system.h0000644000175000017500000000072411063737131020526 0ustar sudipsudip/* * This header file is included by the *Config.h in the individual * COIN packages when the code is compiled in a setting that doesn't * use the configure script (i.e., HAVE_CONFIG_H is not defined). * This header file includes the system and compile dependent header * file defining macros that depend on what compiler is used. */ #ifdef _MSC_VER # include "configall_system_msc.h" #else # error "Trying to use configall_system for unknown compiler." #endif Vol-1.5.4/BuildTools/headers/configall_system_msc.h0000644000175000017500000001017311654311600021362 0ustar sudipsudip/* This is the header file for the Microsoft compiler, defining all * system and compiler dependent configuration macros */ /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ /* #undef F77_DUMMY_MAIN */ #ifndef COIN_USE_F2C /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ # define F77_FUNC(name,NAME) NAME /* As F77_FUNC, but for C identifiers containing underscores. */ # define F77_FUNC_(name,NAME) NAME #else /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ # define F77_FUNC(name,NAME) name ## _ /* As F77_FUNC, but for C identifiers containing underscores. */ # define F77_FUNC_(name,NAME) name ## __ #endif /* Define if F77 and FC dummy `main' functions are identical. */ /* #undef FC_DUMMY_MAIN_EQ_F77 */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ASSERT_H */ /* Define to 1 if you have the header file. */ #define HAVE_CASSERT 1 /* Define to 1 if you have the header file. */ #define HAVE_CCTYPE 1 /* Define to 1 if you have the header file. */ #define HAVE_CFLOAT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_CIEEEFP */ /* Define to 1 if you have the header file. */ #define HAVE_CMATH 1 /* Define to 1 if you have the header file. */ #define HAVE_CSTDARG 1 /* Define to 1 if you have the header file. */ #define HAVE_CSTDIO 1 /* Define to 1 if you have the header file. */ #define HAVE_CSTDLIB 1 /* Define to 1 if you have the header file. */ #define HAVE_CSTRING 1 /* Define to 1 if you have the header file. */ #define HAVE_CTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_CSTDDEF 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_CTYPE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_DLFCN_H */ /* Define to 1 if function drand48 is available */ /* #undef HAVE_DRAND48 */ /* Define to 1 if you have the header file. */ /* #undef HAVE_FLOAT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_IEEEFP_H */ /* Define to 1 if you have the header file. */ /* #define HAVE_INTTYPES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MATH_H */ /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if function rand is available */ #define HAVE_RAND 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_STDARG_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_STDINT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_STDIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if function std::rand is available */ #define HAVE_STD__RAND 1 /* Define to 1 if you have the header file. */ /* #define HAVE_STRINGS_H */ /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_TIME_H */ /* Define to 1 if you have the header file. */ /* #define HAVE_UNISTD_H */ /* Define to 1 if va_copy is avaliable */ /* #undef HAVE_VA_COPY */ /* Define to 1 if you have the header file. */ /* #undef HAVE_WINDOWS_H */ /* Define to 1 if you have the `_snprintf' function. */ #define HAVE__SNPRINTF 1 /* The size of a `double', as computed by sizeof. */ #define SIZEOF_DOUBLE 8 /* The size of a `int', as computed by sizeof. */ #define SIZEOF_INT 4 /* The size of a `int *', as computed by sizeof. */ #define SIZEOF_INT_P 4 /* The size of a `long', as computed by sizeof. */ #define SIZEOF_LONG 4 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 Vol-1.5.4/BuildTools/Makemain.inc0000644000175000017500000001150512504673677015633 0ustar sudipsudip# Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makemain.inc 3482 2015-03-26 03:06:39Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## if MAINTAINER_MODE # Make sure acinclude is using most recent coin.m4 $(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date $(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh cp $< $@ $(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing cp $< $@ $(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess cp $< $@ $(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub cp $< $@ $(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp cp $< $@ $(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh cp $< $@ # Take care of updating externals (if Dependencies file exists) if HAVE_EXTERNALS $(top_builddir)/Makefile: .Dependencies-stamp .Dependencies-stamp: $(srcdir)/Dependencies cd $(srcdir); BuildTools/set_externals Dependencies touch .Dependencies-stamp update-externals: .Dependencies-stamp cd $(srcdir); svn update endif endif if HAVE_EXTERNALS EXTRA_DIST += Dependencies DISTCLEANFILES += .Dependencies-stamp endif DISTCLEANFILES += $(VPATH_DISTCLEANFILES) .PHONY: install-doc uninstall-doc update-externals Vol-1.5.4/BuildTools/config.guess0000755000175000017500000012706310637360060015725 0ustar sudipsudip#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Vol-1.5.4/BuildTools/depcomp0000755000175000017500000003710010430173037014747 0ustar sudipsudip#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/BuildTools/missing0000755000175000017500000002540610430173037014777 0ustar sudipsudip#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/BuildTools/install-sh0000755000175000017500000002202110430173037015372 0ustar sudipsudip#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # 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 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/AUTHORS0000644000175000017500000000004413434065343012366 0ustar sudipsudipBarahona, Francisco Ladanyi, Laszlo Vol-1.5.4/README0000644000175000017500000000572213434065343012206 0ustar sudipsudip# Welcome to the COIN Vol Project ## Introduction Vol (Volume Algorithm) is an open-source implementation of a subgradient method that produces primal as well as dual solutions. The primal solution comes from estimating the volumes below the faces of the dual problem. This is an approximate method so the primal vector might have small infeasiblities that are negligible in many practical settings. The original subgradient algorithm produces only dual solutions. ## Background/Download Vol is written in C++ and is released as open source code under the [Eclipse Public License](http://www.opensource.org/licenses/eclipse-1.0)(EPL). To get all of the dependencies and build the `Vol` package, do ``` git clone https://github.com/coin-or/Vol Vol git clone https://github.com/coin-or-tools/BuildTools BuildTools/get.dependencies fetch BuildTools/get.dependencies build ``` To test by building an application, do ``` cd build/Vol/examples/VolUfl make ./ufl ``` ## Included Projects If you download the Vol package, you get [these](https://github.com/coin-or/Vol/blob/master/Dependencies) additional projects. ## Doxygen Documentation If you have `Doxygen` available, you can build the html documentation by typing ``` make doxydoc ``` in the `Vol` directory. Then open the file `coin-Vol/doxydoc/html/index.html` with a browser. Note that this creates the documentation for the `Vol` package as a whole. If you prefer to generate the documentation only for a subset of these projects, you can edit the file `Vol/doxydoc/doxygen.conf` to exclude directories (using the `EXCLUDE` variable, for example). If `Doxygen` is not available, you can use the link to the {{{Vol}}} html documentation listed below. ## Documentation * [Overview of different directories](https://projects.coin-or.org/Vol/attachment/wiki/WikiStart/volDoc.pdf?format=raw) * [The Volume Algorithm: Producing Primal Solutions With a Subgradient Method](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/7a1b25774639540a852565be0070cfb5?OpenDocument) * [On Some Difficult Linear Programs Coming from Set Partitioning](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/53731ca97769f3838525672f0070dc2b?OpenDocument) * [Solving Large Scale Uncapacitated Facility Location Problems](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/08e1ac62bb877f9a852567b500500996?OpenDocument) * [Near-Optimal Solutions to Large Scale Facility Location Problems](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/215bca4e7e2406ec852568430076860c?OpenDocument) * [Solving Steiner Tree Problems in Graphs with Lagrangian Relaxation](http://domino.watson.ibm.com/library/cyberdig.nsf/a3807c5b4823c53f85256561006324be/4a61544906b57a6d8525696c0057f955?OpenDocument&Highlight=0,barahona) * [Vol html documentation](http://www.coin-or.org/Doxygen/Vol/hierarchy.html) * [COIN-OR Initiative](http://www.coin-or.org/) Vol-1.5.4/config.guess0000755000175000017500000012706310642477222013652 0ustar sudipsudip#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Vol-1.5.4/depcomp0000755000175000017500000003710010430664070012671 0ustar sudipsudip#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/missing0000755000175000017500000002540610430664070012721 0ustar sudipsudip#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: Vol-1.5.4/install-sh0000755000175000017500000002202110430664070013314 0ustar sudipsudip#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # 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 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: